Linux 账户与权限安全加固实践

Linux 服务器是 Web 应用最常见的运行环境,一旦账户与权限配置存在疏漏,攻击者往往能以极低成本从 Web 层横向渗透到系统层。本文从账户管理、权限控制、SSH 加固和审计监控四个维度,梳理一套可落地的加固方案。

一、账户管理:减少攻击面

1.1 清理不必要的账户

系统预置账户(如 gamesftplp)如果未被使用,应直接锁定或删除。攻击者常利用这些默认账户进行暴力破解。

# 查看所有可登录账户
awk -F: '$7 !~ /(nologin|false)$/ {print $1}' /etc/passwd

# 锁定无用账户
usermod -L games
usermod -s /sbin/nologin ftp

对于确实需要保留但无需交互登录的服务账户,将 shell 设为 /sbin/nologin,并检查 /etc/shadow 中密码字段是否为 !!*

1.2 设置强密码策略

通过 pam_pwquality 模块强制密码复杂度:

# /etc/security/pwquality.conf
minlen = 12
dcredit = -1
ucredit = -1
lcredit = -1
ocredit = -1
maxrepeat = 3

同时配置 /etc/login.defs 中的密码有效期:

PASS_MAX_DAYS   90
PASS_MIN_DAYS   7
PASS_WARN_AGE   14

1.3 限制 root 直接登录

禁止 root 通过 SSH 登录,改为普通用户登录后 susudo 提权。这样即使 SSH 密码泄露,攻击者也无法直接获得最高权限。

二、权限控制:最小权限原则

2.1 文件权限与属主

Web 目录的权限配置是最容易出问题的地方。常见错误是将目录设为 777,或者让 Web 进程以 root 运行。

推荐配置:

# Web 根目录属主为部署用户,属组为 Web 服务组
chown -R deploy:www-data /var/www/html
find /var/www/html -type d -exec chmod 750 {} \;
find /var/www/html -type f -exec chmod 640 {} \;

# 上传目录禁止执行脚本
chmod 750 /var/www/html/uploads

Nginx/Apache 的 worker 进程应以 www-data 等低权限用户运行,绝不能是 root。

2.2 sudo 精细化授权

避免在 /etc/sudoers 中使用 ALL=(ALL) NOPASSWD: ALL。应按需授权:

deploy ALL=(root) NOPASSWD: /usr/bin/systemctl restart nginx
ops    ALL=(root) /usr/bin/journalctl, /usr/bin/tail

使用 visudo -c 校验语法,并将自定义规则放入 /etc/sudoers.d/ 目录便于管理。

2.3 敏感文件的特殊权限

  • /etc/shadow 应为 00000400,属组 shadow
  • 含密码的配置文件(如 .envwp-config.php)设为 600
  • 使用 chattr +i 锁定关键文件,防止被篡改:
chattr +i /etc/passwd /etc/shadow /etc/sudoers

三、SSH 加固:守住入口

SSH 是服务器最主要的入口,加固要点如下:

# /etc/ssh/sshd_config
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
PermitEmptyPasswords no
MaxAuthTries 3
LoginGraceTime 30
AllowUsers deploy ops
Protocol 2

关键措施包括:

  1. 禁用密码登录,仅允许密钥认证。生成密钥时使用 ed25519 算法,并为私钥设置 passphrase。
  2. 修改默认端口(如改为 22022),可减少大量自动化扫描。
  3. 限制来源 IP,通过 AllowUsers、防火墙或安全组只放行可信网段。
  4. 部署 Fail2ban,自动封禁多次认证失败的 IP:
# /etc/fail2ban/jail.local
[sshd]
enabled = true
maxretry = 3
bantime = 3600
findtime = 600

四、审计与监控:及时发现异常

4.1 启用审计日志

使用 auditd 监控关键文件和命令:

# 监控 /etc/passwd 的写入和属性变更
auditctl -w /etc/passwd -p wa -k passwd_change
auditctl -w /etc/sudoers -p wa -k sudoers_change

# 监控提权命令
auditctl -a always,exit -F arch=b64 -S execve -F euid=0 -k rootcmd

4.2 定期检查账户异常

# 查看最近登录记录
last -n 20
# 查看失败登录
lastb -n 20
# 检查 UID 为 0 的账户
awk -F: '$3 == 0 {print $1}' /etc/passwd
# 检查空密码账户
awk -F: '$2 == "" {print $1}' /etc/shadow

将上述检查脚本化,配合 cron 定期执行并邮件告警。

4.3 文件完整性监控

使用 AIDE 或 Tripwire 建立文件基线,定期比对关键目录的哈希值。一旦 /bin/sbin/etc 出现非预期变更,立即排查是否被植入后门。

五、加固清单速查

类别 措施 优先级
账户 清理无用账户、锁定服务账户
密码 强密码策略、90 天有效期
权限 Web 目录 750/640、禁止 777
sudo 精细化授权、禁用 NOPASSWD ALL
SSH 禁用 root 和密码登录、密钥认证
防火墙 仅放行必要端口
审计 auditd + Fail2ban + AIDE
监控 登录日志巡检、UID 0 检查

结语

Linux 账户与权限加固的核心思路是最小权限纵深防御:能不给的权限就不给,能给小的就不给大的,同时在入口、执行、审计三个层面都设置检查点。加固不是一次性的工作,而应纳入日常运维流程,配合自动化巡检和定期复查,才能持续保持系统的安全基线。

未经允许不得转载:任鹏个人博客 » Linux 账户与权限安全加固实践

赞 (0) 打赏

评论 0

取消
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏