第十四篇:《Linux 安全加固与最小权限运维》
2026/7/9 11:43:59 网站建设 项目流程

运维不只是保障“快”和“稳”,还得确保“不被入侵”。安全加固的本质是减少攻击面——关闭不需要的服务、限制访问来源、最小化权限。本文围绕 Linux 服务器的远程访问安全(SSH) 、防火墙(iptables/nftables) 、强制访问控制(SELinux/AppArmor) 和权限审计四个核心维度,提供一套可落地的安全加固实践。

一、SSH 安全加固
SSH(Secure Shell)是服务器的“大门”,也是最常被攻击的入口。

1.1 禁用 root 直接登录

# 编辑 /etc/ssh/sshd_configPermitRootLogin no

普通用户登录后通过 sudo 提权,所有操作都可被审计(参见后续 sudo 日志部分)。

1.2 使用密钥认证,禁用密码登录

# 在本地生成密钥对ssh-keygen-ted25519-C"your_email@example.com"# 将公钥复制到服务器ssh-copy-id user@your-server# 服务器上禁用密码认证PasswordAuthentication no

1.3 修改默认端口

# /etc/ssh/sshd_configPort2222

修改后需更新防火墙规则,并在客户端连接时指定端口:ssh -p 2222 user@server。

1.4 限制可登录用户

# /etc/ssh/sshd_configAllowUsers alice bob

1.5 安装 Fail2ban 防止暴力破解
Fail2ban 会扫描 /var/log/secure(或 /var/log/auth.log)中的登录失败记录,对频繁失败的 IP 进行临时封禁。

# 安装sudoaptinstallfail2ban# 配置(/etc/fail2ban/jail.local)[sshd]enabled=trueport=2222logpath=/var/log/secure maxretry=3bantime=3600

二、iptables / nftables:防火墙策略
防火墙是网络层的第一道防线。现代 Linux 发行版多使用 nftables 替代 iptables,但 iptables 命令在多数系统中仍然可用,且习惯用法依然通用。

2.1 基础规则

# 查看当前规则sudoiptables-L-n-v# 拒绝所有入站流量(先确保放行了 SSH)sudoiptables-PINPUT DROP# 放行已建立的连接sudoiptables-AINPUT-mstate--stateESTABLISHED,RELATED-jACCEPT# 放行本地回环sudoiptables-AINPUT-ilo-jACCEPT# 放行 SSH(假设端口 2222)sudoiptables-AINPUT-ptcp--dport2222-jACCEPT# 放行 HTTP/HTTPSsudoiptables-AINPUT-ptcp--dport80-jACCEPTsudoiptables-AINPUT-ptcp--dport443-jACCEPT

2.2 保存规则
Ubuntu/Debian(iptables-persistent):

sudonetfilter-persistent save CentOS/RHEL(firewalld 或 iptables-services):bashsudoserviceiptables save

2.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:强制访问控制
SELinux(Security-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 记录。

sudogrep"denied"/var/log/audit/audit.log|tail-20

使用 audit2allow 生成策略(谨慎操作,建议由有经验的管理员执行):

# 将最近被拒绝的访问生成自定义策略模块sudoaudit2allow-a-Mmy_custom_modulesudosemodule-imy_custom_module.pp

3.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/sudoers):

text
Defaults logfile=“/var/log/sudo.log”
Defaults log_input,log_output
4.2 重要系统文件的权限检查
敏感配置文件应严格限制读写权限:

# 检查 shadow(用户密码哈希)权限ls-l/etc/shadow# 应为 -r-------- 1 root root# 检查 sudoersls-l/etc/sudoers# 应为 -r--r----- 1 root root

4.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 Flood:net.ipv4.tcp_syncookies = 1

关闭不必要的服务:

# 查看正在运行的服务sudosystemctl list-units--type=service--state=running

定期更新系统补丁:

sudoaptupdate&&sudoaptupgrade-y# Ubuntusudoyum update-y# CentOS

六、小结
SSH 加固:禁用 root 登录、禁用密码、修改端口、安装 fail2ban。

防火墙:默认拒绝入站,仅放行必要端口。

SELinux/AppArmor:提供高于文件权限的强制访问控制,按需启用和排错。

审计:通过 sudo 日志和文件权限管理,确保操作可追溯。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询