
核心要点(TL;DR)
- 账户加固:锁定无用账户、设置强密码策略、限制root远程登录。
- 权限控制:遵循最小权限原则,关键文件设置不可变属性。
- 端口管理:关闭非必要端口,使用防火墙限制访问来源。
- 审计配置:启用auditd记录关键操作,定期审查日志。
痛点引入:你的Linux服务器真的安全吗?
许多运维人员将服务器上线后便疏于安全加固,导致弱密码、开放端口、权限泛滥等问题普遍存在。攻击者往往利用这些漏洞轻易入侵。本文提供一套立即可用的Linux主机安全加固命令清单,涵盖账户、权限、端口、审计四大方面,帮助你快速提升系统安全水位。
账户安全加固:从源头控制访问
1. 锁定无用账户与空密码账户
检查并锁定系统默认的无用账户(如lp、sync、shutdown等),并确保没有空密码账户。
# 查找空密码账户
awk -F: '(==""){print }' /etc/shadow
# 锁定账户(以lp为例)
usermod -L lp
# 设置账户过期时间
chage -E 0 username2. 强化密码策略
修改 /etc/login.defs 设置密码有效期和复杂度,并安装pam_cracklib模块。
# 编辑 /etc/login.defs
PASS_MAX_DAYS 90
PASS_MIN_DAYS 7
PASS_MIN_LEN 10
PASS_WARN_AGE 7
# 安装pam_cracklib(Debian/Ubuntu)
apt install libpam-cracklib
# 配置 /etc/pam.d/common-password
password requisite pam_cracklib.so retry=3 minlen=10 difok=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-13. 限制root远程登录
编辑SSH配置,禁止root直接登录,强制使用普通用户+sudo。
# 编辑 /etc/ssh/sshd_config
PermitRootLogin no
PasswordAuthentication no # 推荐使用密钥登录
# 重启sshd
systemctl restart sshd权限控制加固:最小权限原则
1. 关键文件权限与属性
确保敏感文件权限为600,属主为root,并使用chattr添加不可变属性。
chmod 600 /etc/shadow /etc/gshadow /etc/passwd-
chown root:root /etc/shadow /etc/gshadow
chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow注意:修改这些文件前需先移除i属性。
2. 用户sudo权限管理
使用visudo编辑sudoers,避免直接赋予ALL权限,限制命令范围。
# 示例:允许用户deploy重启nginx
Cmnd_Alias NGINX_CMD = /bin/systemctl restart nginx, /bin/systemctl reload nginx
deploy ALL=(root) NGINX_CMD3. 查找SUID/SGID文件
定期检查具有SUID/SGID权限的文件,移除不必要的权限。
# 查找SUID文件
find / -perm -4000 -type f 2>/dev/null
# 移除SUID权限
chmod u-s /path/to/file端口与服务安全:减少攻击面
1. 查看监听端口
使用ss或netstat列出所有监听端口,识别非必要服务。
ss -tulnp2. 关闭非必要服务
停止并禁用不需要的服务,如telnet、ftp等。
systemctl stop telnet.socket
systemctl disable telnet.socket
# 对于xinetd服务
chkconfig telnet off3. 配置防火墙限制访问
使用iptables或firewalld限制端口访问来源,仅允许可信IP。
# 使用firewalld允许特定IP访问SSH
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="22" protocol="tcp" accept'
firewall-cmd --reload审计与日志:记录一切可疑行为
1. 启用auditd审计服务
安装并配置auditd,监控关键文件和命令执行。
# 安装auditd
apt install auditd # Debian/Ubuntu
yum install audit # CentOS/RHEL
# 添加监控规则
auditctl -w /etc/passwd -p wa -k passwd_change
auditctl -w /etc/ssh/sshd_config -p wa -k sshd_config
# 永久保存规则
echo '-w /etc/passwd -p wa -k passwd_change' >> /etc/audit/rules.d/audit.rules
service auditd restart2. 日志集中管理与分析
配置rsyslog将日志发送到远程日志服务器,防止本地日志被清除。
# 编辑 /etc/rsyslog.conf
*.* @@log-server:514
# 重启rsyslog
systemctl restart rsyslog3. 定期审查日志
使用ausearch和aureport分析审计日志,关注异常事件。
# 查询passwd修改事件
ausearch -k passwd_change -i
# 生成审计报告
aureport --summary加固检查清单与行动建议
| 项目 | 检查命令 | 预期结果 |
|---|---|---|
| 空密码账户 | awk -F: '(==""){print }' /etc/shadow | 无输出 |
| root远程登录 | grep PermitRootLogin /etc/ssh/sshd_config | PermitRootLogin no |
| 关键文件权限 | ls -l /etc/shadow | -rw------- root root |
| 监听端口 | ss -tulnp | 仅必要端口 |
| 审计规则 | auditctl -l | 包含关键文件监控 |
建议每季度执行一次全面加固检查,并结合自动化工具(如AegisX主机安全平台)实现持续监控与基线合规,快速发现配置漂移。立即动手,从账户和端口开始,逐步落实上述命令,显著提升服务器安全防护水平。
常见问题(FAQ)
如何快速检查Linux服务器是否存在弱密码账户?
使用命令 `awk -F: '(==""){print }' /etc/shadow` 检查空密码账户;结合 `john` 工具对shadow文件进行弱密码扫描。建议定期使用 `chage -l` 查看密码有效期,并强制用户修改弱密码。
Linux服务器需要关闭哪些高危端口?
常见高危端口包括:21(FTP)、23(Telnet)、25(SMTP)、135/139/445(SMB)、3389(RDP)等。使用 `ss -tulnp` 查看监听端口,通过防火墙或修改服务配置关闭非必要端口。对于必须开放的端口,限制访问来源IP。
如何配置Linux审计日志记录关键文件操作?
使用auditd服务,添加规则如:`auditctl -w /etc/passwd -p wa -k passwd_change` 监控文件修改。规则可写入 `/etc/audit/rules.d/audit.rules` 永久生效。通过 `ausearch -k passwd_change` 查询相关事件。
怎样限制root用户远程登录以提升安全?
编辑 `/etc/ssh/sshd_config`,设置 `PermitRootLogin no`,然后重启sshd服务。建议使用普通用户登录后通过 `sudo` 提权,并配置SSH密钥认证,禁用密码登录。
Linux权限加固中如何防止关键文件被篡改?
使用 `chattr +i` 命令为关键文件(如 `/etc/passwd`、`/etc/shadow`)添加不可变属性,防止意外或恶意修改。同时,设置合理的文件权限(如600)和属主,并定期使用 `lsattr` 检查属性。