Linux安全需围绕最小权限、纵深防御、可观测性三原则手动组合机制:细化sudo命令级控制、防火墙默认拒绝并阻断元数据接口、启用auditd监控execve等关键调用、停用rpcbind等非必要服务,并通过自动化校验确保各层持续生效。

Linux 系统没有“开箱即用”的完整防护体系,所谓多层安全设计,本质是围绕最小权限、纵深防御和可观测性三个原则,手动组合基础机制——不是装几个工具就叫防护,而是让每个环节都形成可验证的约束。
用户与权限控制:别让sudo变成后门
很多系统把普通用户加进sudo组就认为“权限管好了”,实际等于默认授予 root 权限。真正有效的控制必须细化到命令级,并禁用密码免交互等高危配置。
- 用
visudo编辑/etc/sudoers,避免直接修改文件导致语法错误锁死系统 - 禁止使用
NOPASSWD,除非明确该命令不涉及敏感操作(如systemctl status) - 对运维账号按职责拆分:比如
backup用户只允许/usr/bin/rsync和/bin/tar,路径必须写绝对路径 - 启用
requiretty防止通过 SSH 非交互式提权
iptables / nftables策略:默认拒绝比开放端口更重要
防火墙不是“放开 SSH 和 HTTP 就行”,而是先drop所有入站,再按需accept——尤其要防内部横向扫描和云环境元数据接口暴露。
-
云服务器务必阻断对
169.254.169.254(AWS/Azure 元数据服务)的出向请求,防止凭证泄露 - 禁止
ICMP echo-request响应外网,但保留内网探测(避免运维失联) - 用
nftables替代iptables时,注意inetfamily 规则需显式声明ip protocol,否则 TCP/UDP 可能被意外放行 - 记录可疑连接:
nft add rule inet filter input ct state invalid log prefix "INVALID_CT: " drop
日志与审计:靠rsyslog转发不够,得让auditd盯住关键系统调用
/var/log/messages只记录服务级日志,无法捕获execve、openat这类行为。没开auditd,等于没审计。
- 在
/etc/audit/rules.d/immutable.rules中添加:-a always,exit -F arch=b64 -S execve -k exec_monitor
- 禁用
auditctl -e 2(锁定规则),防止攻击者临时关闭审计 - 将
audit.log通过rsyslog发往远程 SIEM,本地日志设为只追加(chattr +a /var/log/audit/audit.log) - 定期检查
aureport -m -ts today | grep -i "failed",重点关注failed的chmod、chown操作
服务精简与加固:停掉rpcbind比给sshd改端口更有效
攻击者不会先猜 SSH 端口,而是扫2049(NFS)、111(RPC)这种默认暴露的老协议。关掉不用的服务,比调参数更直接。
- 查活跃监听端口:
ss -tlnp | grep -v '127.0.0.1',重点看非0.0.0.0绑定的残留服务 - 禁用
rpcbind:systemctl disable --now rpcbind{,-socket},NFS 客户端无需此服务 -
sshd加固优先级:禁用PasswordAuthentication> 禁用RootLogin> 改端口(后者仅防脚本扫描,不防定向攻击) - 用
systemd-analyze blame发现启动慢且非必要的服务(如avahi-daemon),直接mask掉
真正的防护难点不在配置本身,而在于每次系统更新、新服务上线、运维流程变更时,是否同步校验这些层是否仍生效——比如kernel升级后audit规则是否兼容,或新部署的容器是否绕过了主机nftables规则。自动化校验比手工配置重要得多。










