我不太清楚别人对于这个mysql_secgure_installation脚本到底应该何时运行以及怎么运行有过疑惑,我反正是很困惑这些事情,因此,阅读了许多关于此程序的介绍,力求做到准确,详细的讲解该程序的运行机制。
首先,这个程序是位于mysql 的安装目录的bin目录下,执行file命令和stat 命令以及ls 命令我们可以观察到如下输出:
[root@centos1 ~]# file !$
file /usr/local/mysql/bin/mysql_secure_installation
/usr/local/mysql/bin/mysql_secure_installation: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped
[root@centos1 ~]# stat !$
stat /usr/local/mysql/bin/mysql_secure_installation
File: ‘/usr/local/mysql/bin/mysql_secure_installation’
Size: 14975880 Blocks: 29256 IO Block: 4096 regular file
Device: 802h/2050d Inode: 102017749 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 1001/ mysql) Gid: ( 1001/ mysql)
Access: 2021-07-14 05:39:48.544992214 +0800
Modify: 2019-06-27 05:56:49.000000000 +0800
Change: 2021-07-14 05:32:52.260994996 +0800
Birth: -
[root@centos1 ~]# ls -al !$
ls -al /usr/local/mysql/bin/mysql_secure_installation
-rwxr-xr-x 1 mysql mysql 14975880 Jun 27 2019 /usr/local/mysql/bin/mysql_secure_installation
[root@centos1 ~]# ldd !$
ldd /usr/local/mysql/bin/mysql_secure_installation
linux-vdso.so.1 => (0x00007fff6f6bf000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fc84eed3000)
librt.so.1 => /lib64/librt.so.1 (0x00007fc84ecca000)
libssl.so.1.0.0 => /usr/local/mysql/bin/libssl.so.1.0.0 (0x00007fc84ea5a000)
libcrypto.so.1.0.0 => /usr/local/mysql/bin/libcrypto.so.1.0.0 (0x00007fc84e61f000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fc84e41a000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007fc84e112000)
libm.so.6 => /lib64/libm.so.6 (0x00007fc84de10000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fc84dbf9000)
libc.so.6 => /lib64/libc.so.6 (0x00007fc84d836000)
/lib64/ld-linux-x86-64.so.2 (0x000055b822613000)
该文件是ELF 64-bit LSB executable格式,简单理解就是类似于Windows的exe文件,但,该文件必须拥有可执行权限,否则不能运行,该文件的修改日期是2019年6月27日,也就是该MySQL的发行时间,该文件的动态链接库使用的比较多,其中libgcc表示需要gcc编译器的支持,libssl表示需要安装OpenSSL和openssl-devel,libcrypto表示需安装libcrypto,等等各种依赖。 我们可以得出很多有用的信息。
[root@centos1 ~]# strings /usr/local/mysql/bin/mysql_secure_installation |grep root
root
Normally, root should only be allowed to connect from
the root password from the network.
Disallow root login remotely? (Press y|Y for Yes, any other key for No) :
SELECT USER, HOST FROM mysql.user WHERE USER='root' AND HOST NOT IN ('localhost', '127.0.0.1', '::1')
User for login if not root.
root
/opt/rh/devtoolset-8/root/usr/lib/gcc/x86_64-redhat-linux/8/include
/opt/rh/devtoolset-8/root/usr/include/c++/8
/opt/rh/devtoolset-8/root/usr/include/c++/8/bits
/opt/rh/devtoolset-8/root/usr/include/c++/8/debug
/opt/rh/devtoolset-8/root/usr/include/c++/8/x86_64-redhat-linux/bits
/opt/rh/devtoolset-8/root/usr/include/c++/8/ext
/opt/rh/devtoolset-8/root/usr/include/c++/8
。。。。。后面的省略了
反编译该文件,可以看到使用了临时的gcc-8版本,更多解析请自行在运行该命令,查看后续内容。
那么,我们应该是在何时运行这个可以增强MySQL安全性的程序呢??
很显然,我们的MySQL安装完毕后,就应该执行该程序了,因为该程序是MySQL的第一道可设置的安全屏障,而MySQL5.7以及后续版本包括MySQL8版本在初始化数据库后,都会给一个随机的密码,这点和之前的版本是有所不同的,同样的,mysql_secure_installion也是有所不同,运行该程序后会要求输入所生成的初始随机密码,然后会要求输入一个你自定义的密码,。
第二步,设置初始安全密码策略上下文,这里一定要选择n,除非你要设置一个超级强壮的密码。
第三步,问你是否再次修改密码,因为密码安全策略已经变更了(它假设你变更了),这里仍然是否,
第四步,是否禁止远程登录,这里仍然是否
第五步,剩下的都是yes
高版本MySQL的密码策略是比较让人头疼的,如果不设置,会对安全性有所降低,但会给使用方面带来一定的便利。