数据库服务器的安全不仅依赖数据库自身的权限配置,CentOS系统层面的加固同样至关重要,合理的系统配置能从根源上减少数据库被攻击的可能性。

账户与权限管理配置
首先需要对系统账户进行规范化管理,避免不必要的账户拥有过高权限,减少数据库被越权访问的风险。
禁用不必要的系统账户
除了数据库运行所需的专用账户,其他无关账户应设置为不可登录状态,防止账户被暴力破解后直接访问数据库文件。
# 查看当前系统账户 cat /etc/passwd # 锁定不需要的系统账户,比如games、ftp等 sudo passwd -l games sudo passwd -l ftp # 禁止root账户直接远程登录 sudo sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config sudo systemctl restart sshd
创建专用数据库运行账户
不要使用root账户运行数据库服务,应创建独立的低权限账户,仅赋予该账户访问数据库相关目录和文件的权限。
# 创建mysql专用运行账户 sudo useradd -r -s /sbin/nologin mysql # 修改数据库数据目录的所属用户和组 sudo chown -R mysql:mysql /var/lib/mysql # 修改数据库配置目录权限,仅允许mysql账户和root访问 sudo chmod 750 /etc/mysql
防火墙规则配置
CentOS默认的firewalld防火墙可以有效限制外部对数据库端口的访问,仅开放必要的访问来源。
限制数据库端口访问来源
数据库默认端口如3306(MySQL)、5432(PostgreSQL)不应对所有公网IP开放,仅允许业务服务器和指定管理IP访问。
# 启动firewalld服务 sudo systemctl start firewalld sudo systemctl enable firewalld # 开放SSH端口,避免配置后无法远程管理 sudo firewall-cmd --permanent --add-service=ssh # 仅允许指定IP段访问MySQL的3306端口 sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.0/24" port protocol="tcp" port="3306" accept' # 拒绝其他所有对3306端口的访问 sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port protocol="tcp" port="3306" drop' # 重新加载防火墙规则 sudo firewall-cmd --reload # 查看当前生效的规则 sudo firewall-cmd --list-all
SELinux安全策略配置
SELinux是CentOS自带的内核级安全模块,合理配置可以限制进程对文件、端口的访问权限,即使数据库服务被入侵,也能限制攻击者的操作范围。
调整数据库相关SELinux上下文
如果数据库数据目录不是默认路径,需要手动修改目录的SELinux上下文,避免SELinux阻止数据库进程访问文件。
# 查看数据库数据目录当前的SELinux上下文 ls -Z /var/lib/mysql # 如果自定义了数据目录,比如/data/mysql,修改其上下文为mysqld_db_t sudo semanage fcontext -a -t mysqld_db_t "/data/mysql(/.*)?" # 应用上下文修改 sudo restorecon -Rv /data/mysql # 允许数据库监听非默认端口(如果需要) sudo semanage port -a -t mysqld_port_t -p tcp 3307
设置SELinux为强制模式
不要将SELinux设置为禁用模式,强制模式可以有效拦截异常的进程访问行为。
# 查看当前SELinux状态 getenforce # 临时设置为强制模式 sudo setenforce 1 # 永久设置SELinux为强制模式,修改配置文件 sudo sed -i 's/SELINUX=disabled/SELINUX=enforcing/' /etc/selinux/config
系统服务与文件权限配置
除了上述配置,还需要对系统服务和关键文件权限做进一步限制,减少攻击面。
关闭不必要的系统服务
关闭系统中不需要的服务,避免这些服务存在漏洞被攻击者利用,进而渗透到数据库服务器。
# 查看当前运行的服务 systemctl list-units --type=service --state=running # 关闭不需要的服务,比如cups打印服务、telnet服务等 sudo systemctl stop cups sudo systemctl disable cups sudo systemctl stop telnet sudo systemctl disable telnet
限制数据库配置文件的访问权限
数据库配置文件通常包含连接密码等敏感信息,需要严格限制访问权限,仅允许root和数据库运行账户读取。
# 修改MySQL配置文件权限 sudo chmod 600 /etc/mysql/my.cnf sudo chown root:mysql /etc/mysql/my.cnf # 禁止普通用户查看数据库日志文件 sudo chmod 640 /var/log/mysql/error.log sudo chown mysql:mysql /var/log/mysql/error.log
定期安全审计配置
配置系统审计规则,记录对数据库相关文件和进程的异常访问行为,便于后续安全排查。
# 安装审计工具 sudo yum install -y audit # 启动审计服务 sudo systemctl start auditd sudo systemctl enable auditd # 添加审计规则,监控对mysql数据目录的写操作 sudo auditctl -w /var/lib/mysql -p wa -k mysql_data_change # 添加审计规则,监控mysqld进程的异常启动 sudo auditctl -w /usr/sbin/mysqld -p x -k mysql_process_start # 查看审计日志 sudo ausearch -k mysql_data_change
完成上述配置后,建议定期更新CentOS系统补丁,及时修复系统层面的安全漏洞,同时结合数据库自身的安全配置,形成多层防护体系,最大程度保障数据库服务器的安全。