Linux 安全加固需要从用户权限、系统服务、网络防护、日志审计、文件系统、访问控制等多个维度入手,目标是减少攻击面、限制未授权访问、提升系统健壮性。以下是详细步骤+实操示例,覆盖主流 Linux 发行版(如 CentOS/Ubuntu)。
一、用户与权限安全:最小权限原则
用户和权限是最基础的安全防线,核心是“最小权限原则”(Least Privilege),即用户仅拥有完成任务所需的最小权限。
1. 禁用或删除冗余用户/组
- 目标:移除默认无用账户(如
nobody
、bin
等),避免被攻击者利用。 - 操作:
# 查看所有用户(关注 UID < 1000 的系统用户) cat /etc/passwd | awk -F: '$3 < 1000 {print $1}'# 删除冗余用户(示例:删除 games 用户) sudo userdel -r games # -r 同时删除家目录和邮件# 禁用用户(不删除,仅锁定) sudo passwd -l username # 锁定 sudo passwd -u username # 解锁
2. 强制密码策略
- 目标:防止弱密码(如短密码、常见密码)被暴力破解。
- 操作(以 PAM 模块为例):
编辑/etc/security/pwquality.conf
(CentOS 7+/Ubuntu 18.04+):minlen = 12 # 最小长度 12 位 dcredit = -1 # 至少 1 位数字(负数表示至少) ucredit = -1 # 至少 1 位大写字母 lcredit = -1 # 至少 1 位小写字母 ocredit = -1 # 至少 1 位特殊符号(如 !@#$) maxrepeat = 3 # 禁止连续 3 位重复字符
3. 限制 root 远程登录
- 目标:避免 root 账户直接暴露在公网,降低被暴力破解风险。
- 操作(以 SSH 为例):
编辑/etc/ssh/sshd_config
:PermitRootLogin no # 禁止 root 远程登录 # 改为允许特定用户通过 sudo 切换 root(更安全) AllowUsers user1 user2 # 仅允许 user1/user2 远程登录
sudo systemctl restart sshd # CentOS/Ubuntu 通用
二、系统更新与补丁管理:修复已知漏洞
未修复的系统/软件漏洞是最常见的攻击入口,需定期更新。
1. 自动更新配置(以 Ubuntu 为例)
- 启用无人值守更新(自动安装安全补丁):
sudo apt install unattended-upgrades sudo dpkg-reconfigure unattended-upgrades # 图形化配置
/etc/apt/apt.conf.d/50unattended-upgrades
,启用以下选项:Unattended-Upgrade::Allowed-Origins {"${distro_id}:${distro_codename}";"${distro_id}:${distro_codename}-security"; # 仅安全补丁 };
2. 手动更新(CentOS 示例)
sudo yum update -y # 升级所有包(生产环境建议先测试)
# 或仅升级安全补丁(需安装 yum-plugin-security)
sudo yum update --security -y
三、网络服务与防火墙:最小化暴露面
关闭不必要的网络服务,仅开放需要的端口,并通过防火墙严格限制访问。
1. 关闭冗余服务
- 目标:减少攻击面(如未使用的 FTP、Telnet、RPC 等)。
- 操作:
# 查看运行中的服务(CentOS 7+/Ubuntu 16.04+ 使用 systemd) systemctl list-units --type=service --state=running# 禁用并停止冗余服务(示例:禁用 telnet) sudo systemctl disable --now telnet.socket # 禁用开机启动并停止
2. 配置防火墙(以 firewalld 为例,CentOS)
- 目标:仅允许必要的端口(如 SSH 22、HTTP 80、HTTPS 443)。
- 操作:
# 查看当前规则 sudo firewall-cmd --list-all# 开放 HTTP/HTTPS 端口(永久生效) sudo firewall-cmd --add-service=http --permanent sudo firewall-cmd --add-service=https --permanent# 禁止 ICMP(ping)请求(防扫描) sudo firewall-cmd --add-icmp-block=echo-request --permanent# 重载规则 sudo firewall-cmd --reload
3. 高级防护:使用 fail2ban 防止暴力破解
目标:自动封禁多次登录失败的 IP。
操作(以 SSH 为例):
# 安装 fail2ban(CentOS) sudo yum install fail2ban -y# 配置(编辑 /etc/fail2ban/jail.local) [sshd] enabled = true maxretry = 3 # 允许失败次数 findtime = 600 # 统计时间窗口(秒) bantime = 3600 # 封禁时间(秒,1小时)
重启服务生效:
sudo systemctl start fail2ban && sudo systemctl enable fail2ban
四、日志与审计:监控异常行为
通过日志记录和分析,及时发现入侵迹象。
1. 启用详细日志记录
- 目标:记录关键操作(如 sudo、SSH 登录、文件修改)。
- 操作:
编辑/etc/rsyslog.conf
(或/etc/syslog.conf
),调整日志级别:# 记录所有 sudo 操作(需配合 auditd) local2.debug /var/log/sudo.log# 记录 SSH 登录成功/失败 authpriv.* /var/log/auth.log # Ubuntu # 或 /var/log/secure (CentOS)
2. 使用 auditd 进行审计(高级)
- 目标:监控敏感文件/目录的访问(如
/etc/passwd
、/root
)。 - 操作:
# 安装 auditd(CentOS) sudo yum install auditd -y# 添加审计规则(监控 /etc/passwd 的修改) sudo auditctl -w /etc/passwd -p wa -k passwd_changes # wa=写/属性变更# 查看审计日志 ausearch -k passwd_changes # 按标签过滤
3. 日志集中管理(可选)
- 目标:避免日志被篡改,便于集中分析。
- 方案:使用 ELK(Elasticsearch+Logstash+Kibana)或 Graylog 收集多台服务器日志。
五、文件系统与磁盘安全:保护数据完整性
1. 设置文件/目录权限
- 目标:敏感文件(如
passwd
、shadow
)仅允许 root 读取。 - 操作:
# 查看 /etc/shadow 权限(应仅 root 可读) ls -l /etc/shadow # 正常输出:-rw-r----- 1 root shadow ...# 修复权限(示例:设置 /etc/ssh/sshd_config 仅 root 可写) sudo chmod 600 /etc/ssh/sshd_config # 600=所有者读写,其他无权限
2. 挂载选项强化(防数据篡改)
- 目标:防止关键分区(如
/home
、/var
)被意外或恶意修改。 - 操作:编辑
/etc/fstab
,添加noexec
(禁止执行)、nosuid
(禁止 SUID)选项:/dev/sda3 /home ext4 defaults,noexec,nosuid 0 0
六、高级防护:SELinux/AppArmor
SELinux(Security-Enhanced Linux)是 Linux 内核的强制访问控制(MAC)模块,可限制进程的权限(即使 root 也无法越权)。
1. 启用 SELinux(CentOS 默认启用)
检查状态:
getenforce # 输出 Enforcing(启用)、Permissive(警告模式)、Disabled(禁用)
临时禁用(测试用):
sudo setenforce 0 # 设为 Permissive 模式
永久启用:编辑
/etc/selinux/config
,将SELINUX=disabled
改为SELINUX=enforcing
,重启生效。
2. SELinux 策略示例(限制 Apache 访问)
假设 Apache(httpd
)仅需访问 /var/www/html
,可设置自定义策略:
# 查看当前布尔值(是否允许 Apache 访问外部网络)
semanage boolean -l | grep httpd_can_network_connect# 禁止 Apache 访问外部网络(增强安全性)
sudo setsebool -P httpd_can_network_connect off
七、其他关键加固项
禁用不必要的内核功能:
编辑/etc/sysctl.conf
,调整内核参数(如禁止 IP 转发、限制 SYN 洪水攻击):net.ipv4.ip_forward = 0 # 禁止 IP 转发(非网关服务器) net.ipv4.tcp_syncookies = 1 # 启用 SYN Cookie 防御洪水攻击 net.ipv4.icmp_echo_ignore_broadcasts = 1 # 忽略 ICMP 广播请求(防 ping 扫描)
生效:
sudo sysctl -p
。定期备份:
使用rsync
或tar
备份关键数据,结合cron
定时任务(如每日凌晨备份):# 示例:每天 2 点备份 /etc 到 /backup/etc.tar.gz 0 2 * * * tar -czf /backup/etc_$(date +\%F).tar.gz /etc
禁用 USB 自动挂载(防恶意设备):
编辑/etc/modprobe.d/disable-usb-storage.conf
:options usb-storage delay_use=1 # 延迟挂载(需手动触发) # 或完全禁用(需重启): blacklist usb-storage
加固效果验证
完成上述步骤后,需验证安全措施是否生效:
- 检查开放端口:
ss -tlnp
或netstat -tlnp
(仅应显示必要端口)。 - 测试 root 远程登录:尝试
ssh root@服务器IP
(应拒绝连接)。 - 模拟暴力破解:使用工具(如
hydra
)尝试登录,观察是否触发 fail2ban 封禁。 - 查看日志:检查
/var/log/auth.log
(Ubuntu)或/var/log/secure
(CentOS)是否有异常登录记录。
总结
Linux 安全加固是持续过程,需结合“最小权限、定期更新、网络隔离、日志监控”四大原则。实际操作中需根据业务需求调整(如 Web 服务器需开放 80/443,数据库服务器需限制 3306 仅内网访问),并定期进行安全审计(如使用 lynis
工具扫描)。