Linux安全加固核心是实施最小权限原则:禁用非必要UID为0账户、禁止root远程SSH登录、锁定系统账户shell、白名单管控sudo命令、禁用交互式shell与su通道、剥离守护进程隐式特权。

禁用所有非必要的高特权执行环境,核心是切断提权路径、收缩权限边界、阻断隐式能力继承——不是简单关掉root,而是让系统默认“没权限”,只在明确需要时才临时赋予最小必要权限。
锁定特权账户与登录入口
高权限账户是攻击者首要目标,必须从源头限制其可用性:
- 禁用所有UID为0的账户(除root外),运行
awk -F: '($3==0)' /etc/passwd确认仅剩root;发现异常立即溯源并删除 - 禁止root远程SSH登录:编辑
/etc/ssh/sshd_config,设PermitRootLogin no,重启sshd - 将
sync、shutdown、halt等系统账户用usermod -L锁定,确保/etc/passwd中shell字段为/sbin/nologin或/bin/false - 检查
/etc/shells,移除非必需shell(如/bin/zsh、/usr/bin/pwsh),防止被用于绕过限制
收紧sudo与特权命令执行
sudo是权限提升最常见跳板,必须按命令粒度白名单控制:
- 禁用NOPASSWD泛授权,删除类似
%sudo ALL=(ALL) NOPASSWD: ALL的配置 - 用
visudo为每类运维场景定义精确规则,例如:%dbadmin ALL=(postgres) /usr/bin/pg_ctl start - 启用
requiretty和env_reset(确认未被注释),防止TTY劫持与环境变量注入 - 定期运行
sudo -l -U username审计每个用户实际可执行命令,重点排查find、vim、less、git等支持shell逃逸的工具
消除危险Shell与交互式提权通道
非登录账户若拥有交互式shell,极易成为提权中转站:
- 对所有服务账户(如
nginx、redis、mysql)执行chsh -s /sbin/nologin - 对必须保留bash的受限用户,改用
rbash(受限bash),并配合PAM限制:auth required pam_restricted.so - 禁用
su到root的通用通道:编辑/etc/pam.d/su,添加auth required pam_wheel.so group=wheel,再确保只有极少数运维账号在wheel组 - 检查cron任务、systemd timer、at job中是否含
sudo或su -c调用,替换为专用低权限服务单元
剥离守护进程隐式特权
服务进程常因历史原因以root运行,但实际只需极小能力:
- 为每个守护进程创建专用低权限用户(如
myapp),并在systemd unit中强制指定:User=myapp、Group=myapp、RestrictSUIDSGID=true - 需绑定80/443端口时,不用root,改用
CapabilityBoundingSet=CAP_NET_BIND_SERVICE+AmbientCapabilities=CAP_NET_BIND_SERVICE - 禁用危险capability:
CapabilityBoundingSet=~CAP_SYS_ADMIN CAP_SYS_MODULE CAP_SYS_PTRACE CAP_AUDIT_WRITE - 启用
NoNewPrivileges=true和PrivateTmp=true,阻止execve提权及临时文件竞争

















