Skip to content

Commit c4b99bf

Browse files
WL#6782 : Limit the scope of the FILE privilege in the default installation
- Added platform specific default values for --secure-file-priv - Added checks and warnings for value of --secure-file-priv - Added new install layouts - Added test cases - Packaging script changes to create default directory for --secure-file-priv - From RE team. Reviewed-by: Georgi Kodinov <Georgi.Kodinov@Oracle.com> Reviewed-by: Marek Szymczak <marek.szymczak@oracle.com>
1 parent f33be94 commit c4b99bf

File tree

57 files changed

+754
-57
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+754
-57
lines changed

cmake/install_layout.cmake

+228-6
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
1+
# Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved.
22
#
33
# This program is free software; you can redistribute it and/or modify
44
# it under the terms of the GNU General Public License as published by
@@ -22,7 +22,7 @@
2222
# and relative links. Windows zip uses the same tarball layout but without
2323
# the build prefix.
2424
#
25-
# RPM
25+
# RPM, SLES
2626
# Build as per default RPM layout, with prefix=/usr
2727
# Note: The layout for ULN RPMs differs, see the "RPM" section.
2828
#
@@ -32,10 +32,22 @@
3232
# SVR4
3333
# Solaris package layout suitable for pkg* tools, prefix=/opt/mysql/mysql
3434
#
35+
# FREEBSD, GLIBC, OSX, TARGZ
36+
# Build with prefix=/usr/local/mysql, create tarball with install prefix="."
37+
# and relative links.
38+
#
39+
# WIN
40+
# Windows zip : same as tarball layout but without the build prefix
41+
#
3542
# To force a directory layout, use -DINSTALL_LAYOUT=<layout>.
3643
#
3744
# The default is STANDALONE.
3845
#
46+
# Note : At present, RPM and SLES layouts are similar. This is also true
47+
# for layouts like FREEBSD, GLIBC, OSX, TARGZ. However, they provide
48+
# opportunity to fine-tune deployment for each platform without
49+
# affecting all other types of deployment.
50+
#
3951
# There is the possibility to further fine-tune installation directories.
4052
# Several variables can be overwritten:
4153
#
@@ -60,6 +72,7 @@
6072
# - INSTALL_SUPPORTFILESDIR (various extra support files)
6173
#
6274
# - INSTALL_MYSQLDATADIR (data directory)
75+
# - INSTALL_SECURE_FILE_PRIVDIR (--secure-file-priv directory)
6376
#
6477
# When changing this page, _please_ do not forget to update public Wiki
6578
# http://forge.mysql.com/wiki/CMake#Fine-tuning_installation_paths
@@ -72,7 +85,8 @@ SET(INSTALL_LAYOUT "${DEFAULT_INSTALL_LAYOUT}"
7285
CACHE STRING "Installation directory layout. Options are: STANDALONE (as in zip or tar.gz installer), RPM, DEB, SVR4")
7386

7487
IF(UNIX)
75-
IF(INSTALL_LAYOUT MATCHES "RPM")
88+
IF(INSTALL_LAYOUT MATCHES "RPM" OR
89+
INSTALL_LAYOUT MATCHES "SLES")
7690
SET(default_prefix "/usr")
7791
ELSEIF(INSTALL_LAYOUT MATCHES "DEB")
7892
SET(default_prefix "/opt/mysql/server-${MYSQL_BASE_VERSION}")
@@ -87,7 +101,7 @@ IF(UNIX)
87101
SET(CMAKE_INSTALL_PREFIX ${default_prefix}
88102
CACHE PATH "install prefix" FORCE)
89103
ENDIF()
90-
SET(VALID_INSTALL_LAYOUTS "RPM" "STANDALONE" "DEB" "SVR4")
104+
SET(VALID_INSTALL_LAYOUTS "RPM" "DEB" "SVR4" "FREEBSD" "GLIBC" "OSX" "TARGZ" "SLES" "STANDALONE")
91105
LIST(FIND VALID_INSTALL_LAYOUTS "${INSTALL_LAYOUT}" ind)
92106
IF(ind EQUAL -1)
93107
MESSAGE(FATAL_ERROR "Invalid INSTALL_LAYOUT parameter:${INSTALL_LAYOUT}."
@@ -99,6 +113,15 @@ IF(UNIX)
99113
MARK_AS_ADVANCED(SYSCONFDIR)
100114
ENDIF()
101115

116+
IF(WIN32)
117+
SET(VALID_INSTALL_LAYOUTS "TARGZ" "STANDALONE" "WIN")
118+
LIST(FIND VALID_INSTALL_LAYOUTS "${INSTALL_LAYOUT}" ind)
119+
IF(ind EQUAL -1)
120+
MESSAGE(FATAL_ERROR "Invalid INSTALL_LAYOUT parameter:${INSTALL_LAYOUT}."
121+
" Choose between ${VALID_INSTALL_LAYOUTS}" )
122+
ENDIF()
123+
ENDIF()
124+
102125
#
103126
# plugin_tests's value should not be used by imported plugins,
104127
# just use if(INSTALL_PLUGINTESTDIR).
@@ -109,6 +132,21 @@ FILE(GLOB plugin_tests
109132
${CMAKE_SOURCE_DIR}/internal/plugin/*/tests
110133
)
111134

135+
#
136+
# DEFAULT_SECURE_FILE_PRIV_DIR
137+
#
138+
IF(INSTALL_LAYOUT MATCHES "STANDALONE" OR
139+
INSTALL_LAYOUT MATCHES "WIN")
140+
SET(secure_file_priv_path "")
141+
ELSEIF(INSTALL_LAYOUT MATCHES "RPM" OR
142+
INSTALL_LAYOUT MATCHES "SLES" OR
143+
INSTALL_LAYOUT MATCHES "SVR4" OR
144+
INSTALL_LAYOUT MATCHES "DEB")
145+
SET(secure_file_priv_path "/var/lib/mysql-files")
146+
ELSE()
147+
SET(secure_file_priv_path "${default_prefix}/mysql-files")
148+
ENDIF()
149+
112150
#
113151
# STANDALONE layout
114152
#
@@ -134,6 +172,142 @@ SET(INSTALL_SUPPORTFILESDIR_STANDALONE "support-files")
134172
#
135173
SET(INSTALL_MYSQLDATADIR_STANDALONE "data")
136174
SET(INSTALL_PLUGINTESTDIR_STANDALONE ${plugin_tests})
175+
SET(INSTALL_SECURE_FILE_PRIVDIR_STANDALONE ${secure_file_priv_path})
176+
177+
#
178+
# WIN layout
179+
#
180+
SET(INSTALL_BINDIR_WIN "bin")
181+
SET(INSTALL_SBINDIR_WIN "bin")
182+
SET(INSTALL_SCRIPTDIR_WIN "scripts")
183+
#
184+
SET(INSTALL_LIBDIR_WIN "lib")
185+
SET(INSTALL_PLUGINDIR_WIN "lib/plugin")
186+
#
187+
SET(INSTALL_INCLUDEDIR_WIN "include")
188+
#
189+
SET(INSTALL_DOCDIR_WIN "docs")
190+
SET(INSTALL_DOCREADMEDIR_WIN ".")
191+
SET(INSTALL_MANDIR_WIN "man")
192+
SET(INSTALL_INFODIR_WIN "docs")
193+
#
194+
SET(INSTALL_SHAREDIR_WIN "share")
195+
SET(INSTALL_MYSQLSHAREDIR_WIN "share")
196+
SET(INSTALL_MYSQLTESTDIR_WIN "mysql-test")
197+
SET(INSTALL_SQLBENCHDIR_WIN ".")
198+
SET(INSTALL_SUPPORTFILESDIR_WIN "support-files")
199+
#
200+
SET(INSTALL_MYSQLDATADIR_WIN "data")
201+
SET(INSTALL_PLUGINTESTDIR_WIN ${plugin_tests})
202+
SET(INSTALL_SECURE_FILE_PRIVDIR_WIN ${secure_file_priv_path})
203+
204+
#
205+
# FREEBSD layout
206+
#
207+
SET(INSTALL_BINDIR_FREEBSD "bin")
208+
SET(INSTALL_SBINDIR_FREEBSD "bin")
209+
SET(INSTALL_SCRIPTDIR_FREEBSD "scripts")
210+
#
211+
SET(INSTALL_LIBDIR_FREEBSD "lib")
212+
SET(INSTALL_PLUGINDIR_FREEBSD "lib/plugin")
213+
#
214+
SET(INSTALL_INCLUDEDIR_FREEBSD "include")
215+
#
216+
SET(INSTALL_DOCDIR_FREEBSD "docs")
217+
SET(INSTALL_DOCREADMEDIR_FREEBSD ".")
218+
SET(INSTALL_MANDIR_FREEBSD "man")
219+
SET(INSTALL_INFODIR_FREEBSD "docs")
220+
#
221+
SET(INSTALL_SHAREDIR_FREEBSD "share")
222+
SET(INSTALL_MYSQLSHAREDIR_FREEBSD "share")
223+
SET(INSTALL_MYSQLTESTDIR_FREEBSD "mysql-test")
224+
SET(INSTALL_SQLBENCHDIR_FREEBSD ".")
225+
SET(INSTALL_SUPPORTFILESDIR_FREEBSD "support-files")
226+
#
227+
SET(INSTALL_MYSQLDATADIR_FREEBSD "data")
228+
SET(INSTALL_PLUGINTESTDIR_FREEBSD ${plugin_tests})
229+
SET(INSTALL_SECURE_FILE_PRIVDIR_FREEBSD ${secure_file_priv_path})
230+
231+
#
232+
# GLIBC layout
233+
#
234+
SET(INSTALL_BINDIR_GLIBC "bin")
235+
SET(INSTALL_SBINDIR_GLIBC "bin")
236+
SET(INSTALL_SCRIPTDIR_GLIBC "scripts")
237+
#
238+
SET(INSTALL_LIBDIR_GLIBC "lib")
239+
SET(INSTALL_PLUGINDIR_GLIBC "lib/plugin")
240+
#
241+
SET(INSTALL_INCLUDEDIR_GLIBC "include")
242+
#
243+
SET(INSTALL_DOCDIR_GLIBC "docs")
244+
SET(INSTALL_DOCREADMEDIR_GLIBC ".")
245+
SET(INSTALL_MANDIR_GLIBC "man")
246+
SET(INSTALL_INFODIR_GLIBC "docs")
247+
#
248+
SET(INSTALL_SHAREDIR_GLIBC "share")
249+
SET(INSTALL_MYSQLSHAREDIR_GLIBC "share")
250+
SET(INSTALL_MYSQLTESTDIR_GLIBC "mysql-test")
251+
SET(INSTALL_SQLBENCHDIR_GLIBC ".")
252+
SET(INSTALL_SUPPORTFILESDIR_GLIBC "support-files")
253+
#
254+
SET(INSTALL_MYSQLDATADIR_GLIBC "data")
255+
SET(INSTALL_PLUGINTESTDIR_GLIBC ${plugin_tests})
256+
SET(INSTALL_SECURE_FILE_PRIVDIR_GLIBC ${secure_file_priv_path})
257+
258+
#
259+
# OSX layout
260+
#
261+
SET(INSTALL_BINDIR_OSX "bin")
262+
SET(INSTALL_SBINDIR_OSX "bin")
263+
SET(INSTALL_SCRIPTDIR_OSX "scripts")
264+
#
265+
SET(INSTALL_LIBDIR_OSX "lib")
266+
SET(INSTALL_PLUGINDIR_OSX "lib/plugin")
267+
#
268+
SET(INSTALL_INCLUDEDIR_OSX "include")
269+
#
270+
SET(INSTALL_DOCDIR_OSX "docs")
271+
SET(INSTALL_DOCREADMEDIR_OSX ".")
272+
SET(INSTALL_MANDIR_OSX "man")
273+
SET(INSTALL_INFODIR_OSX "docs")
274+
#
275+
SET(INSTALL_SHAREDIR_OSX "share")
276+
SET(INSTALL_MYSQLSHAREDIR_OSX "share")
277+
SET(INSTALL_MYSQLTESTDIR_OSX "mysql-test")
278+
SET(INSTALL_SQLBENCHDIR_OSX ".")
279+
SET(INSTALL_SUPPORTFILESDIR_OSX "support-files")
280+
#
281+
SET(INSTALL_MYSQLDATADIR_OSX "data")
282+
SET(INSTALL_PLUGINTESTDIR_OSX ${plugin_tests})
283+
SET(INSTALL_SECURE_FILE_PRIVDIR_OSX ${secure_file_priv_path})
284+
285+
#
286+
# TARGZ layout
287+
#
288+
SET(INSTALL_BINDIR_TARGZ "bin")
289+
SET(INSTALL_SBINDIR_TARGZ "bin")
290+
SET(INSTALL_SCRIPTDIR_TARGZ "scripts")
291+
#
292+
SET(INSTALL_LIBDIR_TARGZ "lib")
293+
SET(INSTALL_PLUGINDIR_TARGZ "lib/plugin")
294+
#
295+
SET(INSTALL_INCLUDEDIR_TARGZ "include")
296+
#
297+
SET(INSTALL_DOCDIR_TARGZ "docs")
298+
SET(INSTALL_DOCREADMEDIR_TARGZ ".")
299+
SET(INSTALL_MANDIR_TARGZ "man")
300+
SET(INSTALL_INFODIR_TARGZ "docs")
301+
#
302+
SET(INSTALL_SHAREDIR_TARGZ "share")
303+
SET(INSTALL_MYSQLSHAREDIR_TARGZ "share")
304+
SET(INSTALL_MYSQLTESTDIR_TARGZ "mysql-test")
305+
SET(INSTALL_SQLBENCHDIR_TARGZ ".")
306+
SET(INSTALL_SUPPORTFILESDIR_TARGZ "support-files")
307+
#
308+
SET(INSTALL_MYSQLDATADIR_TARGZ "data")
309+
SET(INSTALL_PLUGINTESTDIR_TARGZ ${plugin_tests})
310+
SET(INSTALL_SECURE_FILE_PRIVDIR_TARGZ ${secure_file_priv_path})
137311

138312
#
139313
# RPM layout
@@ -169,6 +343,39 @@ SET(INSTALL_SUPPORTFILESDIR_RPM "share/mysql")
169343
#
170344
SET(INSTALL_MYSQLDATADIR_RPM "/var/lib/mysql")
171345
SET(INSTALL_PLUGINTESTDIR_RPM ${plugin_tests})
346+
SET(INSTALL_SECURE_FILE_PRIVDIR_RPM ${secure_file_priv_path})
347+
348+
#
349+
# SLES layout
350+
#
351+
SET(INSTALL_BINDIR_SLES "bin")
352+
SET(INSTALL_SBINDIR_SLES "sbin")
353+
SET(INSTALL_SCRIPTDIR_SLES "bin")
354+
#
355+
IF(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
356+
SET(INSTALL_LIBDIR_SLES "lib64")
357+
SET(INSTALL_PLUGINDIR_SLES "lib64/mysql/plugin")
358+
ELSE()
359+
SET(INSTALL_LIBDIR_SLES "lib")
360+
SET(INSTALL_PLUGINDIR_SLES "lib/mysql/plugin")
361+
ENDIF()
362+
#
363+
SET(INSTALL_INCLUDEDIR_SLES "include/mysql")
364+
#
365+
#SET(INSTALL_DOCDIR_SLES unset - installed directly by SLES)
366+
#SET(INSTALL_DOCREADMEDIR_SLES unset - installed directly by SLES)
367+
SET(INSTALL_INFODIR_SLES "share/info")
368+
SET(INSTALL_MANDIR_SLES "share/man")
369+
#
370+
SET(INSTALL_SHAREDIR_SLES "share")
371+
SET(INSTALL_MYSQLSHAREDIR_SLES "share/mysql")
372+
SET(INSTALL_MYSQLTESTDIR_SLES "share/mysql-test")
373+
SET(INSTALL_SQLBENCHDIR_SLES "")
374+
SET(INSTALL_SUPPORTFILESDIR_SLES "share/mysql")
375+
#
376+
SET(INSTALL_MYSQLDATADIR_SLES "/var/lib/mysql")
377+
SET(INSTALL_PLUGINTESTDIR_SLES ${plugin_tests})
378+
SET(INSTALL_SECURE_FILE_PRIVDIR_SLES ${secure_file_priv_path})
172379

173380
#
174381
# DEB layout
@@ -193,8 +400,9 @@ SET(INSTALL_MYSQLTESTDIR_DEB "mysql-test")
193400
SET(INSTALL_SQLBENCHDIR_DEB ".")
194401
SET(INSTALL_SUPPORTFILESDIR_DEB "support-files")
195402
#
196-
SET(INSTALL_MYSQLDATADIR_DEB "data")
403+
SET(INSTALL_MYSQLDATADIR_DEB "/var/lib/mysql")
197404
SET(INSTALL_PLUGINTESTDIR_DEB ${plugin_tests})
405+
SET(INSTALL_SECURE_FILE_PRIVDIR_DEB ${secure_file_priv_path})
198406

199407
#
200408
# SVR4 layout
@@ -221,6 +429,7 @@ SET(INSTALL_SUPPORTFILESDIR_SVR4 "support-files")
221429
#
222430
SET(INSTALL_MYSQLDATADIR_SVR4 "/var/lib/mysql")
223431
SET(INSTALL_PLUGINTESTDIR_SVR4 ${plugin_tests})
432+
SET(INSTALL_SECURE_FILE_PRIVDIR_SVR4 ${secure_file_priv_path})
224433

225434

226435
# Clear cached variables if install layout was changed
@@ -235,8 +444,21 @@ SET(OLD_INSTALL_LAYOUT ${INSTALL_LAYOUT} CACHE INTERNAL "")
235444
# will be defined as ${INSTALL_BINDIR_STANDALONE} by default if STANDALONE
236445
# layout is chosen)
237446
FOREACH(var BIN SBIN LIB MYSQLSHARE SHARE PLUGIN INCLUDE SCRIPT DOC MAN
238-
INFO MYSQLTEST SQLBENCH DOCREADME SUPPORTFILES MYSQLDATA PLUGINTEST)
447+
INFO MYSQLTEST SQLBENCH DOCREADME SUPPORTFILES MYSQLDATA PLUGINTEST
448+
SECURE_FILE_PRIV)
239449
SET(INSTALL_${var}DIR ${INSTALL_${var}DIR_${INSTALL_LAYOUT}}
240450
CACHE STRING "${var} installation directory" ${FORCE})
241451
MARK_AS_ADVANCED(INSTALL_${var}DIR)
242452
ENDFOREACH()
453+
454+
#
455+
# Set DEFAULT_SECURE_FILE_PRIV_DIR
456+
# This is used as default value for --secure-file-priv
457+
#
458+
IF(INSTALL_SECURE_FILE_PRIVDIR)
459+
SET(DEFAULT_SECURE_FILE_PRIV_DIR "\"${INSTALL_SECURE_FILE_PRIVDIR}\""
460+
CACHE INTERNAL "default --secure-file-priv directory" FORCE)
461+
ELSE()
462+
SET(DEFAULT_SECURE_FILE_PRIV_DIR \"\"
463+
CACHE INTERNAL "default --secure-file-priv directory" FORCE)
464+
ENDIF()

config.h.cmake

+3
Original file line numberDiff line numberDiff line change
@@ -420,4 +420,7 @@
420420
#define HAVE_SYS_TYPES_H 1
421421
#define SIZEOF_CHAR 1
422422

423+
/* For --secure-file-priv */
424+
#cmakedefine DEFAULT_SECURE_FILE_PRIV_DIR @DEFAULT_SECURE_FILE_PRIV_DIR@
425+
423426
#endif

mysql-test/include/mtr_warnings.sql

+5
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,11 @@ INSERT INTO global_suppressions VALUES
246246
*/
247247
("CA certificate .* is self signed"),
248248

249+
/*
250+
Warnings related to --secure-file-priv
251+
*/
252+
("Insecure configuration for --secure-file-priv:*"),
253+
249254
("THE_LAST_SUPPRESSION")||
250255

251256

mysql-test/include/mysqld--help.inc

+2-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ perl;
1818
# their paths may vary:
1919
@skipvars=qw/basedir open-files-limit general-log-file plugin-dir
2020
pid-file slow-query-log-file
21-
datadir slave-load-tmpdir tmpdir socket table-definition-cache table-open-cache/;
21+
datadir slave-load-tmpdir tmpdir socket table-definition-cache table-open-cache
22+
secure-file-priv/;
2223

2324
# Variables which we don't want to display in result file since
2425
# they depend on type of build

mysql-test/mysql-test-run.pl

+2
Original file line numberDiff line numberDiff line change
@@ -1865,6 +1865,7 @@ sub collect_mysqld_features {
18651865
mtr_add_arg($args, "--no-defaults");
18661866
mtr_add_arg($args, "--log-syslog=0");
18671867
mtr_add_arg($args, "--datadir=%s", mixed_path($tmpdir));
1868+
mtr_add_arg($args, "--secure-file-priv=\"\"");
18681869
mtr_add_arg($args, "--lc-messages-dir=%s", $path_language);
18691870
mtr_add_arg($args, "--skip-grant-tables");
18701871
mtr_add_arg($args, "--verbose");
@@ -3581,6 +3582,7 @@ sub mysql_install_db {
35813582
mtr_add_arg($args, "--datadir=%s", $install_datadir);
35823583
mtr_add_arg($args, "--loose-skip-ndbcluster");
35833584
mtr_add_arg($args, "--tmpdir=%s", "$opt_vardir/tmp/");
3585+
mtr_add_arg($args, "--secure-file-priv=%s", "$opt_vardir");
35843586
mtr_add_arg($args, "--innodb-log-file-size=5M");
35853587
mtr_add_arg($args, "--core-file");
35863588
# overwrite innodb_autoextend_increment to 8 for reducing the ibdata1 file size

mysql-test/r/mysqld--help-notwin.result

-1
Original file line numberDiff line numberDiff line change
@@ -1394,7 +1394,6 @@ report-user (No default value)
13941394
rpl-stop-slave-timeout 31536000
13951395
safe-user-create FALSE
13961396
secure-auth TRUE
1397-
secure-file-priv (No default value)
13981397
server-id 0
13991398
server-id-bits 32
14001399
session-track-gtids OFF

mysql-test/r/mysqld--help-win.result

-1
Original file line numberDiff line numberDiff line change
@@ -1392,7 +1392,6 @@ report-user (No default value)
13921392
rpl-stop-slave-timeout 31536000
13931393
safe-user-create FALSE
13941394
secure-auth TRUE
1395-
secure-file-priv (No default value)
13961395
server-id 0
13971396
server-id-bits 32
13981397
session-track-gtids OFF

0 commit comments

Comments
 (0)