Linux 系统安全是整个 IT 环境安全的核心环节,唯有通过合理的配置与精细化管理 Linux 服务器,才能最大限度降低应用系统面临的安全风险。本文旨在指导其完成 Linux 操作系统与 MySQL 数据库的安全合规性检查及加固工作,满足操作系统与数据库层面的等保测评、审计合规、年度审查等需求。
所有 Linux 用户与管理员均应遵循以下核心安全原则,为系统安全奠定基础:
在类 Unix 系统中,攻击者若获取特定 Shell 访问权限,可能引发严重安全问题。因此需通过严格策略限制账号使用,尤其保护 Root 账号权限不被非法获取。
减少系统中无用账号数量,降低被利用的风险,可通过以下命令操作:
userdel -r <用户名> # 彻底删除不必要的账号(含家目录) passwd -l <用户名> # 锁定暂时无需使用的账号,禁止登录 passwd -u <用户名> # 对需要恢复使用的账号进行解锁
空口令账号是重大安全隐患,需定期检查并为其设置密码:
awk -F: '($2 == "") {print}' /etc/shadow # 检查系统中存在空密码的用户
发现空口令账号后,执行passwd <用户名>命令为其设置符合复杂度要求的密码。
弱口令易被暴力破解,需询问管理员是否存在简单密码配置,例如root/root、test/test、root/root1234等,若存在需立即强制修改。
UID 为 0 的用户拥有系统最高特权(与 root 权限等同),需确保仅 root 用户的 UID 为 0:
awk -F: '($3 == "0") {print}' /etc/passwd # 列出所有UID为0的账号,排查非root特权账号
系统服务账号(UID 通常在 0-500 之间)无需登录权限,需检查是否存在可登录的服务账号:
awk -F: '{print $1 ":" $3 ":" $7}' /etc/passwd # 查看账号名称、UID及登录Shell
对明确的系统账号,执行以下命令锁定账号并禁用 Shell:
usermod --lock <用户名> # 锁定账号 usermod -s /sbin/nologin <用户名> # 将登录Shell设为/sbin/nologin,禁止登录
采用静态口令认证的设备,需满足 “口令长度至少 8 位、包含数字 / 小写字母 / 大写字母 / 特殊符号中至少 3 类、每 90 天更换 1 次” 的要求。具体配置如下:
推荐密码策略:
针对新创建用户(修改 /etc/login.defs):
sed -i '/^PASS_MAX_DAYS/c PASS_MAX_DAYS 90' /etc/login.defs # 密码最长使用天数 sed -i '/^PASS_MIN_DAYS/c PASS_MIN_DAYS 1' /etc/login.defs # 密码最短使用天数(避免频繁修改) sed -i '/^PASS_MIN_LEN/c PASS_MIN_LEN 8' /etc/login.defs # 密码最小长度 sed -i '/^PASS_WARN_AGE/c PASS_WARN_AGE 7' /etc/login.defs # 密码到期前7天提醒 cat /etc/login.defs | grep PASS # 验证配置结果
针对已存在账号(使用 chage 命令):
# 将用户“test”的密码最短使用天数设为7、最长90天,2030年1月1日过期,过期前7天提醒 chage -m 7 -M 90 -E 2030-01-01 -W 7 <用户名>
通过 PAM(可插拔认证模块)配置登录失败锁定规则,防止暴力破解:
CentOS 7 限制 tty 登录(仅本地终端):
vim /etc/pam.d/login # 在auth行最上方添加以下内容(登录失败3次,锁定5分钟,含root账号) auth required pam_tally2.so deny=3 lock_time=300 even_deny_root root_unlock_time=300
CentOS 7 限制远程登录(SSH)[审计项]:
vim /etc/pam.d/sshd # 在auth行最上方添加以下内容(规则同上,作用于SSH远程登录) auth required pam_tally2.so deny=3 unlock_time=300 even_deny_root root_unlock_time=300
查看登录失败次数与解锁账号:
pam_tally2 --user root # 查看root账号的登录失败次数 pam_tally2 -r -u root # 重置root账号的登录失败次数(解锁)
禁止使用近期已用密码,并强制密码复杂度,需修改/etc/pam.d/system-auth文件:
cat /etc/pam.d/system-auth | grep password # 查看当前密码配置
推荐配置:
password requisite pam_cracklib.so retry=5 difok=3 minlen=8 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1 dictpath=/usr/share/cracklib/pw_dict password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok remember=3 password required pam_deny.so
参数解析:
系统中部分账号(如 sync、shutdown、halt)仅用于执行特定功能,无需登录权限,需修改其登录 Shell:
sermod -s /sbin/nologin sync usermod -s /sbin/nologin shutdown usermod -s /sbin/nologin halt cat /etc/passwd | egrep "(sync|shutdown|halt)" # 验证配置结果
若系统仅通过 Shell 登录(无 X Windows 图形界面),需设置空闲超时自动登出(15 分钟 = 900 秒):
# 修改/etc/profile文件,启用并设置TMOUT sed -i "s/#TMOUT/TMOUT/" /etc/profile if [ `cat /etc/profile | grep TMOUT | wc -l` -gt 0 ];then sed -i '/^TMOUT/c TMOUT=900' /etc/profile; fi if [ `cat /etc/profile | grep TMOUT | wc -l` -eq 0 ];then echo "TMOUT=900" >> /etc/profile; echo "export TMOUT" >> /etc/profile; fi cat /etc/profile | grep TMOUT # 验证配置
使用 SecureCRT、PuTTY 等 SSH 客户端连接服务器时,需配置 SSH 登录超时(15 分钟):
# 修改/etc/ssh/sshd_config,配置客户端存活检测 sed -i "s/#ClientAliveInterval/ClientAliveInterval/" /etc/ssh/sshd_config sed -i '/^ClientAliveInterval/c ClientAliveInterval=60' /etc/ssh/sshd_config cat /etc/ssh/sshd_config | grep ClientAliveInterval || echo "ClientAliveInterval=60" >> /etc/ssh/sshd_config sed -i "s/#ClientAliveCountMax/ClientAliveCountMax/" /etc/ssh/sshd_config sed -i '/^ClientAliveCountMax/c ClientAliveCountMax=15' /etc/ssh/sshd_config cat /etc/ssh/sshd_config | grep ClientAliveCountMax || echo "ClientAliveCountMax=15" >> /etc/ssh/sshd_config # 验证配置并重启SSH服务 cat /etc/ssh/sshd_config | egrep "(ClientAliveInterval|ClientAliveCountMax)" systemctl restart sshd.service
参数解释:
通过修改/etc/pam.d/su文件,限制仅特定用户组可 su 到 root:
cat /etc/pam.d/su | grep required # 查看当前su权限配置
推荐配置(仅允许 test 组用户 su 到 root):
auth required pam_wheel.so group=test为避免 root 账号直接暴露在攻击中,需禁止其直接登录,通过非 root 管理员账号间接提权:
# 1. 创建非root管理员账