返回首页

Linux 用户管理避坑指南 — /etc/passwd/shadow 到用户安全运维

📅 创建于 2026-05-15 🔄 更新于 2026-05-15 📝 715 字

Linux 用户管理避坑指南

作者:zhou | 系列:运维安全第 20 期

90% 的安全事件都跟用户管理有关——弱密码、权限滥用、日志没看。本文覆盖 Linux 用户管理的核心文件、用户 CRUD、登录过程、密码安全、登录审计、防暴力破解完整体系。

一、用户管理的核心文件

1. /etc/passwd — 用户的"身份证"

每行代表一个用户,格式:

用户名:密码占位:UID:GID:用户说明:主目录:登录Shell
devops:x:1000:1000:运维工程师:/home/devops:/bin/bash

关键规则:

  • 密码占位符是 x,真正的密码在 /etc/shadow 里 — 分离设计是安全考虑的基线
  • UID 潜规则: 0 = 超级管理员,1-999 = 系统账号,1000+ = 普通用户
  • ⚠️ 天坑: 把普通用户 UID 改成 0,该用户就是 root 了——权限管理大忌

2. /etc/shadow — 密码的"保险箱"

格式:

用户名:加密密码:最后修改:最小天数:最大天数:警告天数:过期天数:保留

加密密码字段解读:

前缀 算法 说明
$6$ SHA-512 当前推荐算法
$5$ SHA-256 兼容性场景
$1$ MD5 已废弃,强度不足
$2y$ Blowfish 强度高但兼容性差

特别注意:

  • 密码为 *! → 该用户不能登录
  • !! → 密码从未设置过
  • 空密码 → 后果很严重

3. /etc/group — 用户的"朋友圈"

格式:

组名:组密码:GID:成员列表

一个用户可以属于多个组(逗号分隔)。用 id 命令查看用户的完整"社交关系"。


二、用户的增删改查

1. 创建用户:useradd

标准姿势:

useradd -m -s /bin/bash -G wheel devops
参数 作用
-m 自动创建主目录 /home/devops
-s /bin/bash 指定登录 Shell
-G wheel 加入 wheel 组(获得 sudo 权限)

创建完后必须设密码:

passwd devops

2. 修改用户:usermod

# 改 Shell
usermod -s /bin/zsh devops

# 改主目录(-m 移动原目录内容)
usermod -d /new/home/devops -m devops

# 加入新组(-aG 追加,避免覆盖)
usermod -aG docker devops

# 锁定/解锁
usermod -L devops     # 锁定
usermod -U devops     # 解锁

⚠️ 坑: usermod 操作正在登录的用户可能失败——先踢下线再说。

3. 删除用户:userdel

userdel -r devops     # -r = 删掉主目录和邮件

⚠️ 血的教训: 生产环境慎用 userdel -r!先检查:

  • 有没有正在运行的任务(ps -u devops
  • 有没有打开的文件(lsof -u devops
  • 有没有 crontab 任务(crontab -u devops -l

4. 查看用户:id

id devops
# uid=1000(devops) gid=1000(devops) groups=1000(devops),10(wheel),996(docker)

三、用户登录过程

登录 Shell vs 非登录 Shell

类型 触发场景 读取配置文件
登录 Shell SSH 登录、telnet、本地登录 /etc/profile~/.bash_profile/~/.bash_login/~/.profile
非登录 Shell 再开终端窗口、运行脚本 ~/.bashrc

配置文件加载顺序

登录 Shell 加载顺序:

/etc/profile → ~/.bash_profile → ~/.bash_login → ~/.profile

bash 只读上面三个用户级文件中的第一个,读到就停。

不管哪种 Shell 都会读:~/.bashrc

⚠️ 常见坑: 别把环境变量放 ~/.bashrc 里!登录 Shell 不读它!系统级环境变量放 /etc/profile,用户级放 ~/.bash_profile

退出时执行的文件

用户退出时会执行 ~/.bash_logout,可在这里写清理逻辑(如记录退出时间)。


四、密码安全:策略与管理

1. 密码复杂度策略:/etc/security/pwquality.conf

# /etc/security/pwquality.conf
minlen = 12           # 最小 12 位
dcredit = -1          # 至少 1 位数字
ucredit = -1          # 至少 1 位大写
lcredit = -1          # 至少 1 位小写
ocredit = -1          # 至少 1 位特殊字符

负值表示"至少 N 位",正值表示"最多 N 位"。

2. 密码过期管理:chage

# 查看密码状态
chage -l devops

# 强制 90 天改密码,提前 7 天警告
chage -M 90 -W 7 devops

# 设为首登录必须改密码
chage -d 0 devops

3. 密码历史:防止重复使用

/etc/login.defs 设置:

PASS_HISTORY_SIZE 5    # 最近 5 个密码不能重用

五、登录日志:谁在什么时候登录了

安全审计的第一步:知道谁在什么时候登录了服务器。

1. last — 最近登录记录

last -10                    # 最近 10 条
last -a                     # 显示主机名
last -F                     # 显示完整时间
last devops                 # 特定用户

2. lastlog — 所有用户最后登录

lastlog

3. lastb — 失败的登录尝试(最重要的!)

lastb                       # 需 root 权限
lastb -10                   # 最近 10 条失败记录

# 统计被暴力破解的用户
lastb | awk '{print $1}' | sort | uniq -c | sort -rn

⚠️ 如果 lastb 输出很多,说明有人在暴力破解 SSH!

4. /var/log/secure — 详细日志

# 成功的登录
grep "Accepted" /var/log/secure

# 失败的登录
grep "Failed" /var/log/secure

# 查看某个 IP 的所有记录
grep "192.168.1.100" /var/log/secure

六、防暴力破解

ssh-brute-force-protection-guide 的纵深防御体系一致,本文从用户管理视角给出快速落地方法:

1. 禁用密码登录,改用密钥

# /etc/ssh/sshd_config
PasswordAuthentication no
PubkeyAuthentication yes

2. 换掉默认端口

# /etc/ssh/sshd_config
Port 22222

3. Fail2Ban — 自动封 IP

[sshd]
enabled = true
port = ssh
filter = sshd
maxretry = 3
bantime = 3600           # 封 1 小时
findtime = 600           # 10 分钟内

4. PAM 模块:pam_tally2

# /etc/pam.d/sshd 第一行加
auth required pam_tally2.so deny=3 unlock_time=600 even_deny_root root_unlock_time=300
pam_tally2 --user devops          # 查看失败次数
pam_tally2 --user devops --reset  # 解锁

5. 禁止 root 直接登录

# /etc/ssh/sshd_config
PermitRootLogin no

6. 云防火墙/安全组

云服务器务必使用安全组,只开放需要的端口。


七、用户安全 Checklist

创建用户时:

  • useradd -m 创建,自动建主目录
  • 加入 wheelsudo
  • 立即用 passwd 设密码

密码安全:

  • 复杂度至少 12 位,含大小写数字特殊字符
  • 90 天强制换密码
  • chage 检查密码状态

登录安全:

  • 禁用 root SSH 登录
  • 改 SSH 默认端口
  • 用密钥登录,禁用密码
  • 装 Fail2Ban 或配 pam_tally2

日志审计:

  • 每天看 lastb 有没有异常
  • 定期查 /var/log/secure

关联页面

页面关联点
server-security-hardening-checklist服务器安全加固清单:用户管理、密码策略、禁用 root 登录等基线配置(本文的延伸实践)
ssh-brute-force-protection-guideSSH 暴力破解纵深防御:公钥认证 / fail2ban / 2FA 完整方案
linux-intrusion-detection-guideLinux 入侵检测:auditd 监控 passwd/shadow 变更 + 应急响应