linux系统加固围绕“谁在用、用什么、怎么用、有没有异常”四主线做减法设防,核心是让系统只做该做的事、只让该做的人做、全程可查可控,涵盖账户权限、服务端口、ssh访问、内核审计四大维度。

linux系统加固不是堆砌配置,而是围绕“谁在用、用什么、怎么用、有没有异常”四条主线做减法和设防。核心逻辑就一句话:让系统只做该做的事,只让该做的人做,且全程可查可控。下面从四个最实际的维度讲清楚怎么做。
账户与权限:先清门户,再立规矩
攻击者第一目标永远是登录入口。加固不是加锁,而是清理+分级:
- 删或锁掉所有非必要系统账号(如games、lp),用
awk -F: '($3==0)' /etc/passwd确认只有root的UID为0 - 禁用空密码账号:
awk -F: '($2=="")' /etc/shadow查出后立即用passwd设密 - 普通用户不给root密码,改用sudo;通过
visudo只授权具体命令(比如%admin ALL=(ALL) /usr/bin/systemctl restart nginx) - 强制启用PAM密码策略:在
/etc/security/pwquality.conf里设minlen=12、lcredit=-1等,确保大小写+数字+符号全有
服务与端口:越少越安全,不启即免疫
每个运行的服务都是潜在入口。加固关键是“默认关闭”,只开刚需:
- 用
ss -tuln扫一遍当前监听端口,对照业务清单划掉非必需项(比如telnet、rpcbind、vsftpd) - 禁用服务:systemd系统执行
systemctl disable --now;老系统用chkconfig off - 关掉xinetd或inetd这类“服务总管”,避免它动态拉起一堆老旧协议
- 最小化安装原则延续到运行期:没装的服务,自然不会被误启
SSH与远程访问:默认即高危,必须重配
SSH是管理员命脉,也是黑客主攻方向。加固不是调几个参数,而是重构认证链:
- 绝对禁止
PermitRootLogin yes,改成no;同时确保至少一个普通用户已配好sudo权限 - 关密码,只留密钥:
PasswordAuthentication no+PubkeyAuthentication yes - 改默认端口(比如2222),虽不能防扫描,但能过滤90%自动化爆破
- 加登录失败锁定:在
/etc/pam.d/system-auth加auth [default=die] pam_faillock.so preauth deny=5 unlock_time=900
内核与审计:看不见的防线,决定能否事后溯源
前面三步防入侵,这一步防失守后的失控和掩盖:
- 启用auditd:在
/etc/audit/rules.d/immutable.rules里加规则监控/etc/passwd、/etc/shadow、/bin/su等敏感路径 - 加固内核参数:编辑
/etc/sysctl.conf,设net.ipv4.conf.all.rp_filter=1(防IP伪造)、fs.suid_dumpable=0(禁核心转储)、kernel.randomize_va_space=2(全开ASLR) - 限制模块加载:
echo "options kernel modules_disabled=1" >> /etc/modprobe.d/disable-modules.conf,防止恶意ko注入 - 日志本地存不够,必须同步到远程syslog服务器——否则被黑后第一件事就是删日志
基本上就这些。不复杂但容易忽略:每一步都在缩小攻击面、抬高攻击成本、延长响应时间。加固不是一次动作,而是把这套逻辑变成日常检查项。