Linux用户和用户组管理指南

在Linux系统中,用户和用户组管理是系统安全与权限控制的核心机制。每个运行中的进程都关联着特定的用户身份,而文件系统访问权限则是基于用户和用户组建立的。本指南将全面解析Linux用户/组的管理机制,涵盖从基本命令到企业级最佳实践的完整知识体系。无论您是系统管理员还是开发人员,掌握这些技能对于构建安全的Linux环境至关重要。


目录#

  1. 引言
  2. 用户管理基础
  3. 用户组管理
  4. 关键配置文件解析
  5. 权限管理实践
  6. 最佳实践
  7. 完整示例
  8. 结语
  9. 参考文献

用户管理基础#

2.1 添加用户#

命令语法:
useradd [选项] 用户名

常用选项:

  • -m:创建用户主目录
  • -s:指定默认shell(如/bin/bash
  • -u:指定用户UID
  • -g:指定主用户组
  • -c:添加注释(通常用于全名)

示例:

# 创建用户并建立主目录
sudo useradd -m -s /bin/bash john
 
# 创建系统用户(无登录权限)
sudo useradd -r -s /usr/sbin/nologin appuser

最佳实践:

  • 最小权限原则:使用-s /usr/sbin/nologin限制服务账户登录权限
  • UID规划:普通用户UID>=1000,系统用户UID<1000
  • 主目录权限:确保/home/用户名权限为700(drwx------

2.2 修改用户属性#

命令语法:
usermod [选项] 用户名

关键选项:

  • -l:修改用户名
  • -d:更改主目录路径
  • -aG:将用户追加到补充组(不加-a会覆盖现有组)
  • -L:锁定账户
  • -U:解锁账户

示例:

# 将john加入sudo组(Ubuntu/Debian)
sudo usermod -aG sudo john
 
# 更改主目录并迁移文件
sudo usermod -d /new/home/john -m john

风险提示:
直接修改/etc/passwd可能导致系统不一致,务必使用usermod命令!


2.3 删除用户#

命令语法:
userdel [选项] 用户名

选项:

  • -r:同时删除主目录和邮件池
  • -f:强制删除(即使用户已登录)

示例:

# 安全删除用户及其数据
sudo userdel -r john
 
# 部分删除(保留主目录)
sudo userdel john

最佳实践:

  1. 删除前确认进程: ps -fu john
  2. 备份关键数据: tar -cvf john_backup.tar /home/john
  3. 清理cron任务: crontab -u john -r

2.4 查看用户信息#

常用命令:

  • id [用户名]:显示用户UID/GID信息
  • whoami:显示当前用户
  • finger 用户名:显示用户详细信息(需安装)
  • grep 用户名 /etc/passwd:直接查询配置文件

输出示例:

$ id john
uid=1001(john) gid=1001(john) groups=1001(john),27(sudo)

用户组管理#

3.1 创建用户组#

命令语法:
groupadd [选项] 组名

选项:

  • -g:指定GID
  • -r:创建系统组

示例:

# 创建普通组
sudo groupadd developers
 
# 创建系统组(GID<1000)
sudo groupadd -r docker

3.2 修改用户组#

命令语法:
groupmod [选项] 组名

常用操作:

  • 更改组名: sudo groupmod -n new_group old_group
  • 更改GID: sudo groupmod -g 1500 groupname

3.3 删除用户组#

命令语法:
groupdel 组名

限制条件:

  • 组不能是任何用户的主组(primary group)
  • 组内不能有成员

正确操作流程:

# 1. 确认组成员
getent group developers
 
# 2. 更改成员主组(如需)
sudo usermod -g users john
 
# 3. 删除组
sudo groupdel developers

3.4 将用户加入/移出组#

添加用户到组:
sudo usermod -aG 组名 用户名

从组移出用户:

# 方法1:使用gpasswd
sudo gpasswd -d 用户名 组名
 
# 方法2:手动编辑/etc/group
sudo vipw -g

关键配置文件解析#

4.1 /etc/passwd#

文件结构:
用户名:x:UID:GID:全名/注释:主目录:登录Shell

示例:

john:x:1001:1001:John Doe:/home/john:/bin/bash

字段解析:

  • x:密码占位符(实际存储在/etc/shadow)
  • UID 0 = root用户
  • GID 0 = root组

4.2 /etc/shadow#

安全存储加密密码

结构示例:
john:$y$j9T$8HnZ...:19000:0:99999:7:::

关键字段:

  1. 加密密码(yy表示yescrypt)
  2. 上次修改密码时间(自1970-01-01的天数)
  3. 密码最短有效期
  4. 密码最长有效期
  5. 过期警告天数

4.3 /etc/group#

定义用户组信息

格式:
组名:密码占位符:GID:成员列表

示例:

developers:x:1002:john,alice,bob

4.4 /etc/gshadow#

组的安全信息

格式:
组名:加密密码:管理员:成员

高级功能:

  • 组管理员:可添加/删除组成员
  • 密码保护:限制newgrp命令访问

权限管理实践#

5.1 文件权限基础#

权限三元组:

  • 用户(User)
  • 组(Group)
  • 其他(Other)

数值表示:

rwx r-x r-- = 754
   └─ other:读权限
   └─── group:读+执行
 └───── user:读+写+执行

常用命令:

chown user:group file   # 修改属主和属组
chmod 750 directory/    # 设置权限
chmod g+s shared_dir/   # 设置SGID(新建文件继承组)

5.2 ACL高级权限控制#

启用ACL:

  1. 挂载时添加acl选项
  2. 使用命令: setfacl/getfacl

操作示例:

# 为组添加rwx权限
setfacl -m g:developers:rwx project/
 
# 为用户添加特定权限
setfacl -m u:john:r-- config.txt
 
# 查看ACL权限
getfacl project/

继承权限:

setfacl -d -m g:developers:rwX shared_dir/

最佳实践#

  1. 权限最小化原则

    • 服务账户使用nologin shell
    • 限制sudo仅限管理员使用
  2. 审计与监控

    # 定期检查特权账户
    grep ':0:' /etc/passwd
     
    # 检查空密码账户
    awk -F: '($2=="")' /etc/shadow
  3. 密码策略强化

    # 修改/etc/login.defs
    PASS_MAX_DAYS 90
    PASS_MIN_DAYS 7
    PASS_WARN_AGE 14
     
    # 安装pam_cracklib强制复杂密码
  4. 隔离策略

    • 不同服务使用独立用户/组
    • 关键目录设置粘滞位: chmod +t /shared/tmp
  5. 备份配置文件

    cp -a /etc/passwd /etc/passwd.bak
    cp -a /etc/shadow /etc/shadow.bak

完整示例#

场景: 为开发团队创建共享环境

# 1. 创建组
sudo groupadd -g 2001 dev_team
 
# 2. 创建用户
sudo useradd -m -G dev_team -c "Alice" -s /bin/bash alice
sudo useradd -m -G dev_team -c "Bob" -s /bin/bash bob
 
# 3. 创建共享目录并设置权限
sudo mkdir /projects
sudo chown :dev_team /projects
sudo chmod 2770 /projects  # SGID+rwx for group
 
# 4. 设置ACL继承
sudo setfacl -d -m g:dev_team:rwX /projects
 
# 5. 验证配置
$ ls -ld /projects
drwxrws---+ 2 root dev_team 4096 Aug 1 10:00 /projects

结语#

Linux用户和组管理系统为多用户环境提供了强大灵活的安全框架。通过合理运用用户隔离、权限控制和组策略,可构建既安全又高效的协作环境。记住:最小权限原则不是可选项,而是安全运维的核心要求。随着容器化技术的发展,这些基础知识在Docker/Kubernetes环境中同样至关重要。


参考文献#

  1. Linux man pages:
    man 5 passwd, man 8 useradd, man 8 usermod
  2. Red Hat Enterprise Linux Security Guide:
    https://access.redhat.com/documentation
  3. Linux Filesystem Hierarchy Standard:
    https://refspecs.linuxfoundation.org/FHS_3.0/fhs
  4. POSIX ACL规范:
    IEEE Std 1003.1e-1990
  5. OWASP Linux安全加固指南:
    https://cheatsheetseries.owasp.org