Linux 用户与组管理基础——运维视角下的核心概念、配置与最佳实践
一、Linux 用户与组的基本概念
1.1 用户的本质:UID 与多用户多任务系统
Linux 是一个多用户、多任务的分时操作系统。每个“用户”在系统中由一个唯一的 UID (User ID) 标识。UID 是一个非负整数:
- 系统用户(伪用户):UID 通常在 1~999(CentOS/RHEL)或 1~9999(部分发行版),用于运行服务进程(如 nginx、mysql),不用于登录。
- 普通用户:UID 通常从 1000 开始(可配置),供真实人员使用。
用户不仅代表“人”,还代表“进程的归属”。当一个进程运行时,它会以某个用户的身份执行,继承该用户的权限。这就是“最小权限原则”的基础。
查看当前用户信息的命令:
whoami # 当前用户名id # 当前用户详细 UID/GID/组信息id username # 查看指定用户
1.2 用户组(Group)的意义:权限简化的关键
组是用户集合的抽象。通过将权限赋予组,再将用户加入组,可以极大地简化权限管理。例如:
developers 组:所有开发人员共享代码目录读写权限。wheel 组(或 sudo 组):拥有 sudo 权限的管理员组。
每个用户有一个主要组(Primary Group) 和多个附属组(Supplementary Groups)。主要组在创建用户时指定,附属组通过 usermod -aG 添加。
查看组信息:
groups # 当前用户所属组groups usernamecat /etc/group # 所有组信息
二、核心配置文件详解(运维必背)
用户管理的所有信息都存储在纯文本配置文件中,掌握它们是运维的必备技能。
2.1 /etc/passwd —— 用户账户数据库
格式:username:password:UID:GID:comment:home:shell
示例:
root:x:0:0:root:/root:/bin/bashnginx:x:997:995:Nginx web server:/var/lib/nginx:/sbin/nologindevops:x:1001:1001::/home/devops:/bin/bash
password 字段现在通常是 x,真实密码哈希存放在 /etc/shadow。shell 为 /sbin/nologin 或 /bin/false 表示禁止登录(系统用户常用)。- 运维提示:不要直接用
vi 编辑此文件,推荐使用 useradd 等命令,避免格式错误导致系统无法登录。
2.2 /etc/shadow —— 密码信息(仅 root 可读)
格式:username:password:lastchg:min:max:warn:inactive:expire:reserved
密码字段使用 SHA-512 等强哈希算法。字段含义:
lastchg:上次修改密码的日期(自 1970-01-01 天数)。
运维命令:
sudo cat /etc/shadow | grep usernamechage -l username # 查看密码策略chage -M 90 username # 设置密码 90 天过期
2.3 /etc/group —— 组信息
格式:groupname:password:GID:user_list
示例:
wheel:x:10:devops,admindevelopers:x:1002:dev1,dev2
2.4 /etc/gshadow —— 组密码(较少使用)
三、用户管理常用命令详解与实战
3.1 创建用户(useradd)
# 基础创建(推荐)useradd -m -s /bin/bash -c "开发人员张三" -G developers,wheel devops# 常用选项详解-m # 创建家目录-s # 指定 shell(/bin/bash 或 /bin/zsh)-c # 注释(全名)-G # 附属组(逗号分隔)-u # 指定 UID(谨慎使用)
企业级创建脚本示例(可直接用于运维):
#!/bin/bashUSERNAME=$1FULLNAME=$2GROUPS="developers,deploy"useradd -m -s /bin/bash -c "$FULLNAME" -G $GROUPS$USERNAMEecho"临时密码: Changeme123!" | passwd --stdin $USERNAMEchage -d 0 $USERNAME# 首次登录强制改密echo"用户 $USERNAME 创建完成"
3.2 修改用户(usermod)
usermod -l oldname newname # 修改用户名usermod -aG sudo username # 添加到 sudo 组(注意 -a 避免覆盖)usermod -s /sbin/nologin username # 禁用登录usermod -u 1500 username # 修改 UID(生产环境极慎)
3.3 删除用户(userdel)
userdel username # 只删除用户userdel -r username # 删除用户及家目录(谨慎!)
运维注意:删除前备份家目录重要数据,使用 find / -user olduid 查找残留文件。
3.4 密码管理(passwd)
passwd username # 修改密码passwd -l username # 锁定账户passwd -u username # 解锁passwd -e username # 强制下次登录改密
3.5 组管理命令
groupadd developersgroupmod -n newname oldnamegroupdel developersgpasswd -a user group # 添加用户到组gpasswd -d user group # 移除
四、权限基础: chown、chmod 与 ACL
用户管理最终服务于权限控制。
chown username:group filechown -R user:group dir/chmod 755 file # rwxr-xr-xchmod u+rwx,g+rx,o-rwx file# ACL 高级权限(推荐运维使用)setfacl -m u:devops:rwx /data/projectgetfacl /data/project
ACL 允许更细粒度控制,尤其在多用户共享目录场景。
五、sudo 权限管理(运维核心)
visudo 是编辑 /etc/sudoers 的唯一正确方式(语法检查)。
基础配置示例:
# 允许 wheel 组无密码 sudo%wheel ALL=(ALL) NOPASSWD: ALL# 精细控制:devops 只允许特定命令devops ALL=(ALL) NOPASSWD: /usr/bin/docker, /usr/bin/systemctl restart nginx
最佳实践:
- 记录 sudo 操作(默认日志在 /var/log/secure 或 sudo 日志)。
六、运维场景案例与故障排查
案例1:新员工入职用户批量创建 使用 Ansible 或脚本 + LDAP 集成(后续文章详解)。
案例2:忘记 root 密码恢复 单用户模式或 Live CD 修改 shadow 文件。
案例3:用户家目录权限错误导致 SSH 登录失败
chmod 700 /home/userchown -R user:user /home/user
常见故障:
- UID 冲突:
useradd -u 时检查 id。 - Shell 不存在:检查
/etc/shells。
七、安全最佳实践(运维重点)
- 定期审计:
lastlog、last、w、ausearch。 - 密码策略:使用
pam_pwquality 强制复杂度。 - 禁用 root SSH 登录:
PermitRootLogin no in sshd_config。 - 定期清理:禁用离职账户,
usermod -L 或 chage -E 0。
审计命令示例:
last -a # 登录历史journalctl -u sshd # SSH 日志sudo grep sudo /var/log/secure | tail