MySQL安全部署指南/安装后设置

第五章安装后设置

安装后的设置包括创建一个用于导入和导出操作的安全目录、配置服务器启动选项、初始化数据目录、使用systemd启动MySQL、重置MySQL的密码root@localhost用户帐户,并运行一些测试以确保服务器正在工作。

创建安全的导入导出目录

的MySQL用户文件特权具有对服务器主机使用的文件进行读写的权限数据加载INFILE而且选择……到输出文件语句,LOAD_FILE ()函数。默认情况下,具有文件特权可以读取服务器主机上任何世界可读或MySQL服务器可读的文件。(这意味着用户可以读取任何数据库目录中的任何文件,因为服务器可以访问这些文件中的任何一个。)的文件特权还允许用户在MySQL服务器具有写访问权限的任何目录中创建新文件。这包括服务器数据目录,其中包含实现特权表的文件。

限制的范围文件权限,创建一个用户具有文件权限可安全地用于导入和导出操作。在这个部署中,创建的目录是命名的mysql-files并且位于数据目录下。在后面的步骤中,当配置服务器启动选项时,将使用secure_file_priv选项设置为mysql-files目录中。

Shell > CD /usr/local/mysql Shell > mkdir mysql-files Shell > chown mysql:mysql mysql-files Shell > chmod 750 mysql-files

配置服务器启动选项

指定MySQL服务器在启动时应该使用的选项,将它们放在MySQL配置文件中。如果不这样做,服务器将从默认设置启动(参见服务器配置默认值).

请注意

某些InnoDB选项只能在初始化数据目录之前配置。这些选项包括innodb_data_home_dirinnodb_data_file_pathinnodb_log_file_sizeinnodb_log_group_home_dirinnodb_page_size,innodb_undo_tablespaces.如果不希望为这些选项使用默认值,请在初始化数据目录之前在MySQL配置文件中设置自己的值。此部署使用defaultInnoDB配置设置。有关更多信息,请参见InnoDB启动配置

  1. 要创建一个MySQL配置文件,以root用户发出以下命令:

    Shell > CD /etc Shell > touch my.cnf Shell > chown root:root my.cnf Shell > chmod 644 my.cnf . chown root:root my.cnf Shell > chmod
    请注意

    如果存在my.cnf配置文件在属于另一个MySQL实例的相同位置,使用不同的名称为您的配置文件。

  2. 在一个(mysqld)组条目,设置datadir套接字港口日志错误实例的选项。如果主机上有其他MySQL安装,请确保这些选项的值对该实例是惟一的。此部署使用默认值。

    (mysqld) datadir = / usr /地方/ mysql /数据套接字= / tmp / mysql。袜子端口= 3306日志错误= / usr /地方/ mysql /数据/ localhost.localdomain.err
    重要的

    MySQL数据目录的位置对于MySQL安装的安全性至关重要。除了用户数据之外,data目录还包含数据字典和系统表,它们存储有关数据库对象、用户、特权等的敏感信息。根据最小权限原则,系统用户对数据目录的访问应尽可能地限制。还应该考虑数据目录所在的文件系统的大小。确保文件系统能够容纳预期的数据大小。本指南中描述的部署将数据目录放在默认位置(/usr/local/mysql/data),对该目录的访问仅限于mysql操作系统用户帐号。

  3. 设置用户选项以确保服务器以非特权启动mysql用户帐户。出于安全原因,重要的是要避免将服务器作为操作系统运行用户。

    用户= mysql
  4. 如果您希望允许导入和导出操作,请设置secure_file_priv系统变量的路径mysql-files您以前创建的目录。此选项限制文件导入和导出操作,例如由加载数据而且选择……到输出文件语句和LOAD_FILE ()函数设置为指定的目录。如果不打算允许导入或导出操作,请设置secure_file_priv,它完全禁止导入和导出操作。是默认设置。

    secure_file_priv = / usr /地方/ mysql / mysql-files
  5. 以避免潜在的安全问题当地的版本的加载数据,确保local_infile默认启用。

    local_infile =了

    有关更多信息,请参见本地加载数据的安全考虑

在完成上述步骤后,配置文件应该包含这些设置,假设您没有添加其他设置:

(mysqld) datadir = / usr /地方/ mysql /数据套接字= / tmp / mysql。袜子端口= 3306日志错误= / usr /地方/ mysql /数据/ localhost.localdomain.err用户= mysqlsecure_file_priv = / usr /地方/ mysql / mysql-fileslocal_infile =了

初始化数据目录

安装MySQL后,必须初始化data目录,其中包括mysql系统数据库及其表,包括授权表、服务器端帮助表和时区表。初始化还会创建root@localhost超级用户帐户和InnoDB需要管理的系统表空间和相关数据结构InnoDB表。

初始化数据目录。

  1. 将位置更改为MySQL安装的顶级目录,创建data目录,并将所有权授予mysql用户。

    Shell > CD /usr/local/mysql Shell > mkdir data Shell > chmod 750 data Shell > chown mysql:mysql数据
    请注意

    数据目录的所有权分配给mysql用户,但MySQL安装的大部分仍然属于.其他例外是错误日志文件mysql-files目录、pid文件和套接字文件mysql用户必须具有写权限。的文件和资源mysql用户需要读取访问权限以包含配置文件(例如,/etc/my.cnf)和MySQL二进制文件(/usr/local/mysql/bin).

  2. 初始化数据目录。

    Shell > CD /usr/local/mysql Shell > bin/mysqld——defaults-file=/etc/my.cnf——初始化

    初始化输出被打印到错误日志(/usr/local/mysql/data/localhost.localdomain.err),与下面的输出类似。的随机初始密码root@localhost帐户。重新设置时需要输入初始密码root@localhost密码。

    [警告]带有隐式默认值的TIMESTAMP不支持。请使用——explicit_defaults_for_timestamp服务器选项(更多细节请参阅文档)。10bet官方网站[Warning] InnoDB: New log files created, LSN=45790 [Warning] InnoDB:正在创建外键约束系统表。[警告]没有找到现有的UUID,所以我们假设这是该服务器第一次启动。生成新的UUID: ee40ce3b-367c-11e7-adf9-080027b8b5f8。[警告]Gtid表尚未准备好使用。表的mysql。Gtid_executed '无法打开。[警告]CA证书CA .pem是自签名的。[注]“root@localhost: jh;kgEza*9&t”生成临时密码
请注意

中创建的时区表mysql数据库,但不填充它们。要做到这一点,请参考MySQL服务器时区支持

有关数据目录初始化的详细信息,请参见初始化数据目录

使用systemd启动服务器

介绍如何使用systemd启动服务器,以及如何使MySQL服务器在启动时自动重启。

方法提供手动服务器管理systemctl命令:

systemctl{开始| | |重新启动停止状态}mysqld

将MySQL安装配置为systemd。

  1. 添加一个systemd服务单元配置文件,其中包含关于MySQL服务的详细信息。文件命名为mysqld.service被放置在/usr/lib/systemd/system

    Shell > CD /usr/lib/systemd/system服务shell> chmod 644 mysqld.service

    将此配置信息添加到mysqld.service文件:

    [单位]Description=MySQL Server Doc10bet官方网站umentation=man:mysqld(7) Documentation=http:10bet靠谱//www.delbede.com/doc/refman/en/using-systemd.html After=network。目标= syslog之后。目标(安装)WantedBy =多用户。target [Service] User=mysql Group=mysql Type=fork PIDFile=/usr/local/mysql/data/mysqld. sh禁用mysqld的systemd服务启动和停止超时逻辑。TimeoutSec=0 #启动主服务ExecStart=/usr/local/mysql/bin/mysqld——defaults-file=/etc/my.cnf——daemonize——pid-file=/usr/local/mysql/data/mysqld. confpid $MYSQLD_OPTS #用来切换malloc实现EnvironmentFile=-/etc/sysconfig/mysql #设置open_files_limit LimitNOFILE = 5000 Restart=on-failure RestartPreventExitStatus=1 PrivateTmp=false
    重要的

    ExecStart上面的开始字符串被分成两行,以适应本文档的页宽。将配置信息复制到文件后,将字符串恢复为单行。此外,——pid文件设置在ExecStart开始字符串必须匹配PIDFile在它之前的设置。的——pid文件选项中指定的my.cnf配置文件被systemd忽略。

  2. 为systemd添加一个配置文件临时文件特性。文件命名为mysql.conf被放置在/usr/lib/tmpfiles.d

    壳> cd /usr/lib/tmpfiles.D shell> touch mysql.conf shell> chmod 644 mysql.conf

    将此配置信息添加到mysql.conf文件:

    D /usr/local/mysql/data 0750 mysql mysql -
  3. 启用mysqld服务在重新启动时自动启动。

    Shell > systemctl enable mysqld。service从/etc/systemd/system/multi-user.target.wants/mysqld创建符号链接。/usr/lib/systemd/system/mysqld.service服务。
  4. 为确保systemd配置工作正常,请启动mysqld服务手动使用systemctl

    Shell > systemctl start mysqld
  5. 的状态mysqld服务。输出应该类似于下面的内容,其中显示mysqld服务启动成功。

    Shell > systemctl status mysqldMySQL Server Loaded (/usr/lib/systemd/system/mysqld.service;启用;Active:活动(运行)自星期五2017-09-08 09:44:38 ADT;Docs: man:mysqld(7) //www.delbede.com/do10bet靠谱c/refman/en/using-systemd.html Main PID: 2345 (mysqld) CGroup: /system.slice/mysqld。Service├─2345 /usr/local/mysql/bin/mysqld——defaults-file=/etc/my.cnf——d…9月08日09:44:23 localhost。localdomain systemd[1]:启动MySQL Server…9月08日09:44:38 localhost。localdomain systemd[1]:启动MySQL服务器。
  6. 要验证systemd在系统重新启动时自动启动MySQL,请重新启动系统并检查mysqld服务一次。

    Shell > systemctl status mysqld
请注意

Systemd有自己的日志文件,可以使用journalctl.要查看mysql相关的日志消息,请使用journalctl - u mysqld.有些消息,例如MySQL启动消息,可能会打印到systemd日志中。

有关systemd的更多信息,请参见使用systemd管理MySQL服务器

重置MySQL root帐号密码

这个过程假设MySQL服务器正在运行。您可以通过发出以下命令检查服务器状态:

Shell > systemctl status mysqld

初始化数据目录时,MySQL会生成一个随机初始密码账户(root@localhost),并标明过期。请执行以下步骤设置新密码:

  1. 使用mysql客户端,以root@localhost使用初始化顺序时服务器生成的随机密码:

    shell> cd /usr/local/mysql shell> bin/mysql -u root -p Enter password:(此处输入随机root密码)
  2. 连接后,分配一个新的root@localhost密码。使用符合密码验证插件(在后面的步骤中启用)的默认密码策略的强密码。(见第六章,安装MySQL密码验证插件.)

    密码长度至少为8位字符,至少包含1个数字字符、1个小写字母字符、1个大写字母字符和1个特殊字符(非字母数字)。此外,密码不应与当前会话的有效用户帐户的用户名部分相匹配,无论是正向还是反向。

    mysql>修改用户名root @ localhost密码”;

测试服务器

现在MySQL已经安装和初始化,MySQL重置用户密码后,执行两个简单测试以验证服务器是否正常工作。

  1. 使用mysqlshow验证您可以从服务器检索信息。

    shell> cd /usr/local/mysql shell> bin/mysqlshow -u root -p Enter password:(此处输入root密码)+--------------------+ | 数据库  | +--------------------+ | mysql information_schema | | | | performance_schema | |系统  | +--------------------+
  2. 使用mysqladmin,查看MySQL服务器版本信息。

    shell> cd /usr/local/mysql shell> bin/mysqladmin -u root -p version Enter password:(此处输入root密码)

    输出应该类似于下图所示:

    /mysqladmin Ver 8.42 Distrib 5.7.19, for linux-glibc2.12 on x86_64Oracle是Oracle公司和/或其关联公司的注册商标。其他名称可能是其各自所有者的商标。服务器版本5.7.19-enterprise-commercial-advanced协议版本10通过UNIX socket连接本地主机UNIX socket /tmp/mysql。sock运行时间:3分钟21秒线程:2问题:6慢查询:0打开:105刷新表:1打开表:98查询每秒平均:0.029

有关其他测试,请参见测试服务器