第十四篇:《Linux 安全加固与最小权限运维》
运维不只是保障“快”和“稳”还得确保“不被入侵”。安全加固的本质是减少攻击面——关闭不需要的服务、限制访问来源、最小化权限。本文围绕 Linux 服务器的远程访问安全SSH 、防火墙iptables/nftables 、强制访问控制SELinux/AppArmor 和权限审计四个核心维度提供一套可落地的安全加固实践。一、SSH 安全加固SSHSecure Shell是服务器的“大门”也是最常被攻击的入口。1.1 禁用 root 直接登录# 编辑 /etc/ssh/sshd_configPermitRootLogin no普通用户登录后通过 sudo 提权所有操作都可被审计参见后续 sudo 日志部分。1.2 使用密钥认证禁用密码登录# 在本地生成密钥对ssh-keygen-ted25519-Cyour_emailexample.com# 将公钥复制到服务器ssh-copy-id useryour-server# 服务器上禁用密码认证PasswordAuthentication no1.3 修改默认端口# /etc/ssh/sshd_configPort2222修改后需更新防火墙规则并在客户端连接时指定端口ssh -p 2222 userserver。1.4 限制可登录用户# /etc/ssh/sshd_configAllowUsers alice bob1.5 安装 Fail2ban 防止暴力破解Fail2ban 会扫描 /var/log/secure或 /var/log/auth.log中的登录失败记录对频繁失败的 IP 进行临时封禁。# 安装sudoaptinstallfail2ban# 配置/etc/fail2ban/jail.local[sshd]enabledtrueport2222logpath/var/log/secure maxretry3bantime3600二、iptables / nftables防火墙策略防火墙是网络层的第一道防线。现代 Linux 发行版多使用 nftables 替代 iptables但 iptables 命令在多数系统中仍然可用且习惯用法依然通用。2.1 基础规则# 查看当前规则sudoiptables-L-n-v# 拒绝所有入站流量先确保放行了 SSHsudoiptables-PINPUT DROP# 放行已建立的连接sudoiptables-AINPUT-mstate--stateESTABLISHED,RELATED-jACCEPT# 放行本地回环sudoiptables-AINPUT-ilo-jACCEPT# 放行 SSH假设端口 2222sudoiptables-AINPUT-ptcp--dport2222-jACCEPT# 放行 HTTP/HTTPSsudoiptables-AINPUT-ptcp--dport80-jACCEPTsudoiptables-AINPUT-ptcp--dport443-jACCEPT2.2 保存规则Ubuntu/Debianiptables-persistentsudonetfilter-persistent save CentOS/RHELfirewalld 或 iptables-servicesbashsudoserviceiptables save2.3 使用 nftables新版推荐# 安装sudoaptinstallnftables# 创建规则集文件 /etc/nftables.conftable inet filter{chain input{typefilter hook input priority0;policy drop;ct state{established, related}accept iif lo accept tcp dport2222accept tcp dport{80,443}accept}}# 加载规则sudonft-f/etc/nftables.conf三、SELinux 与 AppArmor强制访问控制SELinuxSecurity-Enhanced Linux和 AppArmor 是 Linux 的强制访问控制MAC, Mandatory Access Control 系统即使进程以 root 运行也无法违反安全策略访问未授权的文件。3.1 两者对比3.2 SELinux检查与状态管理查看状态getenforce输出Enforcing强制执行、Permissive仅记录不拦截、Disabled关闭。临时切换模式sudosetenforce0# 切换为 Permissive排错用sudosetenforce1# 切换回 Enforcing常见排错场景服务无法启动检查 /var/log/audit/audit.log 中是否有 denied 记录。sudogrepdenied/var/log/audit/audit.log|tail-20使用 audit2allow 生成策略谨慎操作建议由有经验的管理员执行# 将最近被拒绝的访问生成自定义策略模块sudoaudit2allow-a-Mmy_custom_modulesudosemodule-imy_custom_module.pp3.3 AppArmor管理与排错查看状态sudoaa-status切换模式# 将配置文件从 enforcing 改为 complain 模式排错sudoaa-complain /path/to/bin# 恢复 enforcingsudoaa-enforce /path/to/bin日志AppArmor 的拒绝日志通常出现在 /var/log/syslog 或 dmesg 中包含 DENIED 字样。sudogrepDENIED /var/log/syslog|tail-10四、用户权限与审计4.1 sudo 日志所有通过 sudo 执行的命令都会被记录。通过审计 sudo 日志可以追溯谁在什么时间执行了什么管理命令。查看 sudo 日志# CentOS/RHELsudotail-f/var/log/secure# Ubuntu/Debiansudotail-f/var/log/auth.log配置更详细的 sudo 日志/etc/sudoerstextDefaults logfile“/var/log/sudo.log”Defaults log_input,log_output4.2 重要系统文件的权限检查敏感配置文件应严格限制读写权限# 检查 shadow用户密码哈希权限ls-l/etc/shadow# 应为 -r-------- 1 root root# 检查 sudoersls-l/etc/sudoers# 应为 -r--r----- 1 root root4.3 使用 ACL访问控制列表实现细粒度权限# 赋予特定用户对特定目录的读写权限setfacl-mu:alice:rwx /data/shared/# 查看现有 ACLgetfacl /data/shared/五、其他安全实践内核参数加固/etc/sysctl.conf禁用 IP 转发除非是路由器net.ipv4.ip_forward 0禁用 ICMP 重定向net.ipv4.conf.all.send_redirects 0启用 TCP SYN Cookie 防御 SYN Floodnet.ipv4.tcp_syncookies 1关闭不必要的服务# 查看正在运行的服务sudosystemctl list-units--typeservice--staterunning定期更新系统补丁sudoaptupdatesudoaptupgrade-y# Ubuntusudoyum update-y# CentOS六、小结SSH 加固禁用 root 登录、禁用密码、修改端口、安装 fail2ban。防火墙默认拒绝入站仅放行必要端口。SELinux/AppArmor提供高于文件权限的强制访问控制按需启用和排错。审计通过 sudo 日志和文件权限管理确保操作可追溯。