Day 009:用户与组管理详解

目录

理论学习

1. 用户文件解析

/etc/passwd 结构详解

/etc/shadow 安全机制

2. Sudoers 配置进阶

visudo 工作原理

安全最佳实践

实操演练

1. 用户创建与管理

用户创建

用户删除

2. 组管理操作

创建组

用户组管理

3. 权限验证

4. 常见问题排查

用户无法登录

sudo权限失效

复习巩固

1. 关系图绘制指南(draw.io)

核心元素

连接关系

2. 复习问题与答案

理论题

实操题


理论学习

1. 用户文件解析

/etc/passwd 结构详解

  • 字段说明(冒号分隔,共7个字段):
    1. 用户名:登录系统使用的标识符(1-32字符,字母开头)
    2. 密码占位符x表示密码已迁移至/etc/shadow
    3. UID(用户ID):
      • 0: 超级用户
      • 1-999: 系统保留(不同发行版可能不同,如Debian系1-999为系统用户)
      • 1000+: 普通用户(可通过/etc/login.defs配置UID_MIN
    4. GID(主组ID):用户所属主组的ID
    5. 描述字段:全名/备注信息(可通过chfn命令修改)
    6. 主目录:用户登录后的默认路径(/home/用户名
    7. 登录Shell:用户登录时启动的Shell(/bin/bash/bin/false等)
  • 示例分析

    plaintext

    developer:x:1001:1001:Dev Team Member:/home/developer:/bin/bash
    • 用户developer属于UID 1001,主组GID 1001,主目录/home/developer,使用Bash Shell

/etc/shadow 安全机制

  • 字段说明(冒号分隔,共9个字段):
    1. 用户名
    2. 加密密码$id$salt$encrypted格式
      • $6$: SHA-512加密(现代系统默认)
      • $y$: Blowfish加密
      • $5$: SHA-256加密
    3. 最后修改时间:自1970-01-01以来的天数
    4. 最小密码年龄:修改后多少天内禁止再次修改
    5. 最大密码年龄:密码有效期(99999表示永不过期)
    6. 警告期:密码过期前多少天开始警告
    7. 非活动期:密码过期后多少天禁用账户
    8. 账户过期时间:自1970-01-01以来的天数(留空表示永不过期)
    9. 保留字段
  • 权限控制

    bash

    ls -l /etc/shadow
    # 输出:-rw-r----- 1 root root 1.3K May 15 10:00 /etc/shadow
    • root用户可读,其他用户无权限

2. Sudoers 配置进阶

visudo 工作原理

  • 文件路径/etc/sudoers
  • 语法检查机制
    • 使用visudo时,会锁定文件防止并发编辑
    • 保存时自动检查语法错误
    • 若检测到错误,会提示修复或放弃保存
  • 常用配置示例

    bash

    # 允许用户kali无密码执行所有命令
    kali ALL=(ALL) NOPASSWD: ALL
    # 允许组admins无密码执行指定命令
    %admins ALL=(ALL) NOPASSWD: /usr/bin/systemctl, /bin/journalctl
    # 允许用户developer在host1上以root身份执行/usr/bin/apt
    developer host1=(root) NOPASSWD: /usr/bin/apt
    # 命令别名(提高可维护性)
    Cmnd_Alias SYSTEM_MGMT = /usr/bin/systemctl, /bin/journalctl
    %admins ALL=(ALL) NOPASSWD: SYSTEM_MGMT

安全最佳实践

  • 最小权限原则:仅授予必要权限
  • 命令限制:避免使用ALL,优先指定具体命令
  • 审计日志:通过/var/log/auth.log追踪sudo操作
  • 密码策略:设置合理的密码超时(Defaults timestamp_timeout=15

实操演练

1. 用户创建与管理

用户创建

bash

# 创建用户并指定UID/GID
sudo useradd -m -u 1002 -g 1002 -s /bin/bash tester
# 非交互式设置密码(生产环境慎用)
echo "tester:T3st3r@123" | sudo chpasswd
# 查看用户信息
id tester
# 输出:uid=1002(tester) gid=1002(tester) groups=1002(tester)
getent passwd tester
# 输出:tester:x:1002:1002::/home/tester:/bin/bash

用户删除

bash

# 删除用户并保留主目录
sudo userdel tester
# 删除用户并级联删除主目录
sudo userdel -r tester

2. 组管理操作

创建组

bash

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

用户组管理

bash

# 将用户加入多个组
sudo usermod -aG sudo,dev_group,docker developer
# 查看用户所属组
groups developer
# 输出:developer : developer sudo dev_group docker
# 查看组内用户
getent group dev_group
# 输出:dev_group:x:1003:developer

3. 权限验证

bash

# 测试sudo权限
sudo -l -U developer
# 输出:
# User developer may run the following commands on hostname:
# (ALL) NOPASSWD: ALL
# 切换用户验证
su - developer
# 输出:
# Creating directory '/home/developer/.ssh'.
# developer@hostname:~$

4. 常见问题排查

用户无法登录

bash

# 检查Shell是否存在
ls -l /bin/bash
# 输出:-rwxr-xr-x 1 root root 1.2M May 10 2023 /bin/bash
# 检查主目录权限
ls -ld /home/developer
# 输出:drwxr-xr-x 2 developer developer 4096 May 15 10:00 /home/developer

sudo权限失效

bash

# 修复sudoers文件
sudo pkexec visudo
# 查看审计日志
grep sudo /var/log/auth.log
# 输出:May 15 10:05 sudo: developer : TTY=pts/0 ; PWD=/home/developer ; USER=root ; COMMAND=/usr/bin/apt update

复习巩固

1. 关系图绘制指南(draw.io)

核心元素

  • 用户节点(圆形):
    • 标注:用户名/UID(如developer/1001
    • 样式:不同颜色区分系统用户/普通用户
  • 组节点(方形):
    • 标注:组名/GID(如sudo/27
    • 样式:虚线边框表示附加组
  • 权限箭头
    • 箭头方向:用户/组 → 资源
    • 标注:权限类型(读/写/执行)
  • 文件节点(文档图标):
    • /etc/passwd:标注字段含义(用户名❌UID:GID:...)
    • /etc/group:标注字段含义(组名❌GID:用户列表)

连接关系

  • 用户 → 组:多对多关系(用户可属于多个组)
  • 组 → 权限:通过GID关联资源权限(如文件所属组)
  • 用户 → 权限:通过UID直接关联或通过组间接关联
  • 文件 → 用户/组/etc/passwd/etc/group定义用户/组信息

2. 复习问题与答案

理论题

  1. /etc/passwd中的x表示什么?
    • 密码已迁移至/etc/shadow,此处为占位符。
  2. 如何安全编辑sudoers文件?
    • 使用sudo visudo命令,它提供语法检查和文件锁定功能。
  3. 如何允许用户无密码执行sudo命令?
    • 在sudoers文件中添加username ALL=(ALL) NOPASSWD: ALL

实操题

  1. 创建用户testuser并设置密码。

    bash

    sudo useradd -m testuser
    echo "testuser:P@ssw0rd" | sudo chpasswd
  2. 将用户testuser加入sudo组。

    bash

    sudo usermod -aG sudo testuser
  3. 验证用户testuser的sudo权限。

    bash

    sudo -l -U testuser

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值