各位运维同僚,大家好。在日常企业服务器管理中,安全加固往往是最容易被忽视,却又最致命的一环。很多团队在上线前只关注功能是否跑通,等到被挖矿、被提权、被勒索时,才后悔没做基础防护。今天,我结合多年一线运维经验,整理了一份 Linux安全加固 checklist。全文聚焦可落地、可执行的操作,每条都附具体命令或配置,建议收藏后逐条检查。
1. 账号与权限管理(最基础也最关键)
1.1 禁用 root 远程登录
root 是黑客的第一目标。务必使用普通用户 sudo 提权。
操作命令:
# 创建普通用户(示例) useradd opsadmin passwd opsadmin usermod -aG wheel opsadmin # CentOS/RHEL # 或 usermod -aG sudo opsadmin # Ubuntu # 修改 /etc/ssh/sshd_config sed -i 's/^#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config systemctl restart sshd
1.2 清理僵尸账号与空密码
检查并删除:
# 列出所有用户,检查是否有异常 uid=0 的账号 awk -F: '($3==0){print $1}' /etc/passwd # 查找空密码用户 awk -F: '($2==""){print $1}' /etc/shadow # 锁定长期不用的账号(非删除) usermod -L username
1.3 关键文件权限加固
重点保护以下文件:
• `/etc/passwd` → 644
• `/etc/shadow` → 600(或 000)
• `/etc/ssh/sshd_config` → 600
• `/etc/sudoers` → 440
批量修复命令:
chmod 644 /etc/passwd /etc/group chmod 600 /etc/shadow /etc/gshadow /etc/ssh/sshd_config chmod 440 /etc/sudoers
2. SSH 服务安全强化
SSH 是运维的第一道门,绝不能裸奔。
推荐配置(编辑 /etc/ssh/sshd_config):
# 禁止 root 登录 PermitRootLogin no # 仅允许指定用户登录(白名单) AllowUsers opsadmin deployer # 修改默认端口(避开 22) Port 22222 # 关闭密码认证(仅密钥登录) PasswordAuthentication no PubkeyAuthentication yes # 闲置超时断开(300秒无操作) ClientAliveInterval 300 ClientAliveCountMax 0 # 限制最大认证尝试次数 MaxAuthTries 3
**注意**:修改端口后,务必在防火墙放行新端口,并保留一个终端会话防止失联。
3. 内核参数与网络层加固
3.1 防止 IP 欺骗和 SYN 洪水
编辑 /etc/sysctl.conf,追加:
# 禁 ping(可选,生产环境建议开启) net.ipv4.icmp_echo_ignore_all = 1 # 防止 SYN 洪水攻击 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_syn_retries = 2 # 忽略广播 ping net.ipv4.icmp_echo_ignore_broadcasts = 1 # 防止 IP 欺骗 net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 # 关闭源路由验证 net.ipv4.conf.all.accept_source_route = 0
生效命令:sysctl -p
3.2 防火墙最小化原则
使用 iptables 或 firewalld 设置白名单策略:
# 默认拒绝所有入站 iptables -P INPUT DROP iptables -P FORWARD DROP # 放行回环接口 iptables -A INPUT -i lo -j ACCEPT # 放行已建立的连接 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 放行 SSH(假设端口 22222) iptables -A INPUT -p tcp --dport 22222 -j ACCEPT # 放行业务端口(如 80,443) iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT # 保存规则 iptables-save > /etc/sysconfig/iptables
4. 日志审计与监控
没有日志,安全就是空谈。
4.1 开启 auditd 审计
# 安装 auditd yum install -y audit # 监控关键文件改动 auditctl -w /etc/passwd -p wa -k passwd_changes auditctl -w /etc/shadow -p wa -k shadow_changes auditctl -w /etc/ssh/sshd_config -p wa -k sshd_config # 查看审计日志 ausearch -k passwd_changes
4.2 日志远程集中存储
防止攻击者删除本地日志。推荐配置 rsyslog 发送到远程日志服务器:
# 在 /etc/rsyslog.conf 添加 *.* @192.168.1.100:514 # UDP 传输 # 或 *.* @@192.168.1.100:514 # TCP 传输 systemctl restart rsyslog
5. 软件包与系统更新
5.1 自动安全更新
Debian/Ubuntu 使用 unattended-upgrades:
apt install unattended-upgrades dpkg-reconfigure --priority=low unattended-upgrades
CentOS/RHEL 使用 yum-cron:
yum install yum-cron sed -i 's/apply_updates = no/apply_updates = yes/' /etc/yum/yum-cron.conf systemctl enable yum-cron
5.2 移除无用软件包
高危包必须卸载:telnet、rsh、rlogin、ftp、sendmail(若不用)
yum remove telnet rsh rlogin ftp sendmail
6. 文件完整性校验(进阶)
推荐部署 AIDE(Advanced Intrusion Detection Environment):
# 安装 yum install aide # 初始化数据库(首次运行较慢) aide --init # 将生成的数据库改名 mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz # 定期检查(可加入 cron) aide --check
当文件被篡改时,AIDE 会输出差异报告,是检测后门植入的利器。
7. 快速自检脚本
最后,分享一个我常用的一键检查脚本,覆盖上述大部分要点:
#!/bin/bash echo "=== 安全加固检查 ===" echo "1. 检查 root 远程登录状态:" grep "^PermitRootLogin" /etc/ssh/sshd_config echo "2. 检查空密码用户:" awk -F: '($2==""){print $1}' /etc/shadow echo "3. 检查关键文件权限:" ls -l /etc/passwd /etc/shadow /etc/ssh/sshd_config echo "4. 检查防火墙默认策略:" iptables -L -n | head -5 echo "5. 检查 auditd 运行状态:" systemctl is-active auditd echo "6. 检查 SSH 端口:" ss -tlnp | grep sshd
总结
安全加固不是一次性工作,而是一个持续迭代的过程。从账号权限、SSH 强化、内核参数到日志审计,每一条配置都可能挡住一次入侵。建议将上述 checklist 纳入服务器上线标准流程,并定期(每月/每季度)复查。
安全无小事,运维需谨慎。 希望这份清单能帮你构建起 Linux 服务器的第一道防线。
关注我,为您分享更多的IT知识!