Day 009:用户与组管理详解

理论学习

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、付费专栏及课程。

余额充值