当前位置:首页>Linux>Linux 用户与组管理基础——运维视角下的核心概念、配置与最佳实践

Linux 用户与组管理基础——运维视角下的核心概念、配置与最佳实践

  • 2026-10-11 07:17:13
Linux 用户与组管理基础——运维视角下的核心概念、配置与最佳实践

Linux 用户与组管理基础——运维视角下的核心概念、配置与最佳实践

一、Linux 用户与组的基本概念

1.1 用户的本质:UID 与多用户多任务系统

Linux 是一个多用户、多任务的分时操作系统。每个“用户”在系统中由一个唯一的 UID (User ID) 标识。UID 是一个非负整数:

  • root 用户:UID 为 0,具有最高权限。
  • 系统用户(伪用户):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 天数)。
  • min:最小修改间隔天数。
  • max:密码最长有效期。
  • warn:到期前警告天数。
  • inactive:密码过期后账户锁定天数。
  • expire:账户过期日期。

运维命令:

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

最佳实践:

  • 永远不要给普通用户 ALL 权限。
  • 使用命令别名(Cmnd_Alias)。
  • 记录 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。
  • PAM 配置错误导致认证失败(后续文章)。

七、安全最佳实践(运维重点)

  1. 最小权限原则:只给必要权限。
  2. 定期审计:lastlog、last、w、ausearch。
  3. 密码策略:使用 pam_pwquality 强制复杂度。
  4. 禁用 root SSH 登录:PermitRootLogin no in sshd_config。
  5. 使用 sudo 而非直接 root。
  6. 定期清理:禁用离职账户,usermod -L 或 chage -E 0。
  7. 监控异常:失败登录日志、异常 sudo。

审计命令示例:

last -a                  # 登录历史journalctl -u sshd       # SSH 日志sudo grep sudo /var/log/secure | tail

最新文章

随机文章