-
MySQL安全配置之基本设置
1. 安装最新的安全补丁 安全说明 确保数据库版本为最新并修复已知的安全漏洞。攻击者可能会利用已知的漏洞对MySQL服务器进行攻击。 检查方法 mysql> show variables where variable_name like 'version'; +---------------+--------+ | Variable_name | Value | +---------------+--------+ | version | 8.0.16 | +---------------+--------+ 1 row in set (0.00 sec) 显示当前的数据库版本,查看MySQL官网,比较补丁修复情况。 配置方法 安装最新版本的补丁或升级到最新版本。 2. 删除默认安装数据库test 安全说明 MySQL安装时默认创建一个测试数据库test,完全的空数据库,没有任何表,可以删除。测试数据库可以被所有用户访问,并且可以用来消耗系统资源。删除测试数据库将减少MySQL服务器的攻击面。 检查方法 mysql> show databases like 'test'; Empty set (0.00 sec) 检查test数据库是否存在。 配置方法 mysql> drop database test; 3. 设置“allow-suspicious-udfs”为“FALSE” 安全说明 该选项控制是否可以载入主函数只有 xxx 符的用户定义函数。默认情况下,该选项被关闭,并且只能载入至少有辅助符的 UDF。关闭allow-suspicious-udfs,可以防止通过共享对象文件加载存在威胁的UDFs函数。 检查方法 查看MySQL配置文件allow-suspicious-udfs参数的设定:cat /etc/my.cnf 确认allow-suspicious-udfs不等于TRUE 配置方法 修改MySQL配置文件my.cnf,删除以下安全参数 allow-suspicious-udfs=TRUE (或者将TRUE改为FALSE,具体效果一样) 重启mysql服务。 4. 禁用“local_infile” 安全说明 local_infile参数决定是否可以通过LOAD DATA LOCAL INFILE来实现加载或或选择位于MySQL客户端计算机上的文件。禁用local_infile可以阻止黑客……
SE_Ning 2024-03-1243 0 0 -
MySQL安全配置之网络设置
1. 设置“have_ssl”为YES 安全说明 在不受信任的网络上传输时,所有网络流量都必须使用ssl/tls。受SSL/TLS协议保护的MySQL有助于防止窃听和中间人攻击。 检查方法 mysql> show variables where variable_name='have_ssl'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | have_ssl | YES | +---------------+-------+ 1 row in set (0.00 sec) 查看返回值是否为YES。 配置方法 可参考:https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html 2. 设置远程用户的“ssl_type” * 安全说明 在不受信任的网络上传输时,所有网络流量都必须使用ssl/tls。对于通过网络进入系统的用户,应该基于每个用户强制执行SSL/TLS。受SSL/TLS协议保护的MySQL有助于防止窃听和中间人攻击。 检查方法 mysql> select user,host,ssl_type from mysql.user where not host in('::1','127.0.0.1','localhost'); +---------+-------------+----------+ | user | host | ssl_type | +---------+-------------+----------+ | airflow | 10.0.121.% | | | hive | 10.0.121.% | | | root | 10.0.121.% | | | airflow | 10.17.141.% | | | hive | 10.17.141.% | | | root | 10.17.141.% | | +---------+-------------+----------+ 6 rows in set (0.01 sec) 验证返回的每个用户的ssl_type是否等于ANY,X509或SPECIFIED。 配置方法 grant usage on airflow.* to 'airflow'@'10.0.121.%' require ssl;
SE_Ning 2024-03-1113 0 0 -
MySQL安全配置之认证
1. 禁止在全局配置中存储密码 安全说明 MySQL配置文件的[client]部分允许设置要使用的用户和密码。在全局配置中使用密码参数可能会造成用户密码的泄漏。 检查方法 打开MySQL配置文件my.cnf,检查[client]部分,确保未使用密码。 配置方法 使用mysql_config_editor以加密形式在.mylogin.cnf中存储身份验证凭据。 2. 设置“sql_mode”包含“NO_AUTO_CREATE_USER” 安全说明 sql_mode模式有三种,STRICT_TRANS_TABLES是其中一种模式。当执行数据更新操作(如INSERT、UPDATE),MySQL依据是否启用严格的SQL_MODE处理非法与丢失的数据。NO_AUTO_CREATE_USER是sql_mode的一个选项,可以阻止grant语句在特定情况下自动创建用户,给数据库带来安全隐患。 检查方法 mysql> select @@global.sql_mode; +-----------------------------------------------------------------------------------------------------------------------+ | @@global.sql_mode | +-----------------------------------------------------------------------------------------------------------------------+ | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION | +-----------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> select @@session.sql_mode; +-----------------------------------------------------------------------------------------------------------------------+ | @@session.sql_mode ……
SE_Ning 2024-03-0816 0 0 -
MySQL安全配置之审计和记录安全
1. 启用错误日志“log_error” 安全说明 错误日志包含有关事件的信息,例如mysqld启动和停止,何时需要检查和修复表,以及mysqld失败时堆栈跟踪。启用错误日志可以提高检测针对mysql和其他关键消息的恶意尝试的能力,如果没有启用错误日志,那么连接错误可能会被忽略。 检查方法 mysql> show variables like 'log_error'; +---------------+-----------------------------+ | Variable_name | Value | +---------------+-----------------------------+ | log_error | /data/mysql/logs/mysqld.log | +---------------+-----------------------------+ 确保返回值不为空。 配置方法 打开MySQL配置文件my.cnf 将log-error选项设置为错误日志的路径。 2. 设置日志文件存储在非系统分区上 安全说明 MySQL日志文件可以在MySQL配置中设置,以存储在文件系统的任何位置。通常应将日志文件存放在非系统分区上。 检查方法 mysql> select @@global.log_bin_basename; +---------------------------+ | @@global.log_bin_basename | +---------------------------+ | /data/mysql/data/binlog | +---------------------------+ 确保返回的值不为root(‘/’)、/var或/usr。 配置方法 打开MySQL配置文件my.cnf 将log-bin选项设置为不在root(‘/’)、/var或/usr上的目录上。 3. 确保“log_error_verbosity”被设置为2或3 安全说明 log_error_verbosity系统变量决定MySQL日志中记录的内容。值为1表示仅记录错误消息,值为2表示记录错误和警告消息,值为3表示记录错误、警告和注释消息。随着级别的调整会记录更多信息,调整到2有助于通过日志追查安全问题。 检查方法 mysql> show global variables like 'log_error_verbosity'; +------------------……
SE_Ning 2024-03-0713 0 0 -
MySQL安全配置之MySQL权限安全
1. 设置仅管理员用户具有所有数据库的访问权限 安全说明 除了管理员账号,其他用户没必要有所有数据库的访问权限。过高的权限会导致安全问题。 检查方法 mysql> SELECT user, host FROM mysql.user WHERE (Select_priv = 'Y') OR (Insert_priv = 'Y') OR (Update_priv = 'Y') OR (Delete_priv = 'Y') OR (Create_priv = 'Y') OR (Drop_priv = 'Y'); +------------------+-----------+ | user | host | +------------------+-----------+ | root | % | | mysql.infoschema | localhost | | root | localhost | +------------------+-----------+ mysql> SELECT user, host FROM mysql.db WHERE db = 'mysql' AND ((Select_priv = 'Y') OR (Insert_priv = 'Y') OR (Update_priv = 'Y') OR (Delete_priv = 'Y') OR (Create_priv = 'Y') OR (Drop_priv = 'Y')); Empty set (0.00 sec) 如果返回的都是管理员账号说明安全,否则需要对用户清除权限 配置方法 清除非管理员账号的过高部分权限 2. 禁用非管理员用户的“File_priv” 安全说明 File_priv权限用于允许或禁止MySQL用户在服务器主机上读写文件。黑客很可能利用这一点盗取数据库中敏感数据。 检查方法 mysql> select user, host from mysql.user where File_priv = 'Y'; +------+-----------+ | user | host | +------+-----------+ | root | % | | root | localhost | +------+-----------+ 如果返回的都是管理员账号说明安全,否则需要对用户清除权限 配置方法 mysql> REVOKE FILE ON *.* FROM '<user>’; //<user>为需要撤销权限的用户 回退步骤 mysql> GRANT FILE ON *.* TO user@localhost; //<user>为需要增加权限的用户 ……
SE_Gao 2024-03-0668 0 0 -
MySQL安全配置之文件系统权限
1. 设置“datadir”的权限 安全说明 如果允许MySQL用户以外的其他用户从数据目录中读取文件,那么该用户可能能够从包含密码的mysql.user表中读取数据。 配置方法 使用如下命令 chmod 700 <datadir> chown mysql:mysql <datadir> 回退步骤 chmod 775 <datadir> 2. 设置“log-bin”二进制日志文件的权限 安全说明 log-bin就是binary log,即二进制日志文件,这个文件记录了mysql所有的dml操作。限制二进制日志文件的权限将有益于保护数据信息不泄漏,或被恶意修改。 检查方法 执行sql查看log-bin日志文件状态及相关配置 mysql> show variables like "log_bin%"; +---------------------------------+-------------------------------+ | Variable_name | Value | +---------------------------------+-------------------------------+ | log_bin | ON | | log_bin_basename | /data/mysql/data/binlog | | log_bin_index | /data/mysql/data/binlog.index | | log_bin_trust_function_creators | OFF | | log_bin_use_v1_row_events | OFF | +---------------------------------+-------------------------------+ 检查日志文件的权限是660并且属于mysql:mysql 配置方法 chmod 660 <file_name> chown mysql:mysql <file_name> 备注 8.0版本默认情况下已开启binlog,文件权限为640,所属mysql:mysql 3. 设置“log_error”错误日志文件的权限 安全说明 错误日志记录了MySQL Server每次启动和关闭的详细信息以……
SE_Gao 2024-03-0520 0 0 -
MySQL安全配置之操作系统级配置
1. 禁用MySQL命令历史记录 安全说明 在linux /UNIX上,mysql客户机将交互式执行的语句记录到一个历史文件中。默认情况下,该文件在用户的主目录中名为.mysql_history。大多数在mysql客户机应用程序中运行的交互式命令都保存到历史文件中。应该禁用mysql命令历史记录。 配置方法 如果存在.mysql_history,则删除它。 使用下面两种方法来防止它再次被创建: a. 将mysql_histfile环境变量设置为/dev/null.这将需要放在shell的启动脚本中。 配置环境变量 vi ~/.bashrc 添加如下配置: export MYSQL_HISTFILE=/dev/null 修改完后,保存退出,执行如下命令,使更改生效 source ~/.bashrc b. 创建$HOME/mysql_history作为/dev/null的链接。 ln -s /dev/null $HOME/.mysql_history 2. 禁用MYSQL_PWD环境变量 安全说明 MYSQL_PWD是一种用于存储mysql密码的环境变量,以明文形式存储mysql密码,存在安全隐患。 检查方法 检查MYSQL_PWD环境变量是否存在于某个进程中: grep MYSQL_PWD /proc/*/environ 如果有返回行说明那个进程使用了MYSQL_PWD环境变量。 配置方法 不设置环境变量或确保MYSQL_PWD环境变量未设置敏感信息,对使用MYSQL_PWD环境变量变量的脚本和进程,建议不再使用该环境变量。 3. 禁用MySQL操作系统账号登陆 安全说明 MySQL系统账号在安装完数据库后,不应该有其他用途。建议禁止该账号登陆操作系统。此举在防止黑客利用MySQL数据库漏洞反射shell有极佳效果。 检查方法 假设MySQL数据库操作系统账号就是mysql,执行下列命令: getent passwd mysql | egrep "^.*[ \ /bin\ / false| \ / sbin \ / nologin]$" 如果没有返回行则说明存在安全隐患。 配置方法 执行下列语句禁止mysql用户(如hadoop)登陆: usermod -s /sbin/nologin hadoop 回退步骤 usermod -s /bin/bash hadoop
SE_Gao 2024-03-049 0 0