Ubuntu入门学习教程,从入门到精通, Ubuntu 22.04 用户和组管理指南(8)

Ubuntu 22.04 用户和组管理指南


1. 用户账户基础

1.1 Linux用户账户

Linux系统是一个多用户操作系统,通过用户账户机制实现系统资源的安全隔离和访问控制。

1.1.1 用户账户的基本概念
  • 用户标识(UID):系统内部唯一标识用户的数字ID
  • 用户组(GID):用户所属的主要组标识
  • 家目录(Home Directory):用户登录后的默认工作目录
  • Shell:用户登录后执行的命令解释器
1.1.2 用户账户的分类
  1. 超级用户(Root)

    • UID: 0
    • 具有系统最高权限
    • 可以执行所有系统操作
  2. 系统用户

    • UID: 1-999(Ubuntu 22.04)
    • 用于运行系统服务和程序
    • 通常没有登录权限
  3. 普通用户

    • UID: 1000+(Ubuntu 22.04)
    • 普通用户使用的账户
    • 具有有限的系统权限
bash 复制代码
# 查看当前用户信息
whoami                    # 显示当前用户名
id                        # 显示用户ID和组ID
id username              # 显示指定用户的信息

# 查看系统用户分类
cat /etc/passwd | awk -F: '$3 == 0 {print "超级用户:", $1}'
cat /etc/passwd | awk -F: '$3 >= 1 && $3 <= 999 {print "系统用户:", $1}'
cat /etc/passwd | awk -F: '$3 >= 1000 {print "普通用户:", $1}'

1.2 Ubuntu用户账户

1.2.1 Ubuntu用户管理的特点

Ubuntu作为Debian系Linux发行版,具有以下用户管理特点:

  1. 用户ID范围

    • 系统用户:1-999
    • 普通用户:1000-65535
  2. 默认Shell:/bin/bash(大多数情况下)

  3. 家目录位置:/home/username

  4. 用户组自动创建:adduser命令会自动创建同名家目录组

1.2.2 Sudo权限管理

Ubuntu使用sudo机制管理超级用户权限:

bash 复制代码
# 查看sudo组权限
grep sudo /etc/group

# 查看sudoers配置
sudo visudo
# 或者
sudo cat /etc/sudoers | grep sudo

# 查看当前用户的sudo权限
sudo -l

1.3 用户配置文件

Linux系统中用户账户信息存储在多个配置文件中,这些文件协同工作提供完整的用户管理功能。

1.3.1 /etc/passwd文件

/etc/passwd文件是用户信息的主要配置文件,存储用户的基本信息。

文件结构

复制代码
用户名:密码占位:UID:GID:注释:家目录:Shell

字段详细说明

  1. 用户名(Username):用户登录时使用的名称
  2. 密码占位(Password):由于安全考虑,实际密码存储在/etc/shadow文件中,此处显示"x"
  3. UID(User ID):用户唯一标识符
  4. GID(Group ID):用户主要组的ID
  5. 注释(Comment):用户描述信息,通常包含全名、联系方式等
  6. 家目录(Home Directory):用户登录后的默认工作目录
  7. Shell:用户默认的命令解释器
bash 复制代码
# 查看passwd文件内容
cat /etc/passwd

# 查看特定用户信息
grep username /etc/passwd

# 查看root用户信息
grep root /etc/passwd

# 格式化显示用户信息
getent passwd username          # 获取用户条目
getent group groupname         # 获取组条目

# 查看UID范围分布
awk -F: '{print $3}' /etc/passwd | sort -n | uniq -c

实际示例

bash 复制代码
# 查看passwd文件典型条目
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
testuser:x:1001:1001:Test User,,,:/home/testuser:/bin/bash
1.3.2 /etc/shadow文件

/etc/shadow文件存储用户密码和密码策略信息,只有root用户可以读取。

文件结构

复制代码
用户名:加密密码:最后修改时间:最小修改间隔:最大有效期限:警告期:宽限期:失效日期:保留

字段详细说明

  1. 用户名(Username):与/etc/passwd中的用户名对应
  2. 加密密码(Encrypted Password):SHA512加密的密码哈希值
  3. 最后修改时间(Last Password Change):距离1970年1月1日的天数
  4. 最小修改间隔(Minimum Age):密码修改的最小间隔天数
  5. 最大有效期限(Maximum Age):密码最大有效天数
  6. 警告期(Warning Period):密码到期前的警告天数
  7. 宽限期(Grace Period):密码到期后的宽限天数
  8. 失效日期(Account Expiration):账户失效日期(距离1970年1月1日的天数)
  9. 保留(Reserved):保留字段,暂时未使用
bash 复制代码
# 查看shadow文件内容(需要root权限)
sudo cat /etc/shadow

# 查看特定用户shadow条目
sudo grep username /etc/shadow

# 格式化显示shadow信息
sudo getent shadow username

# 转换日期格式(天数转日期)
date -d "1970-01-01 + 15775 days" +"%Y-%m-%d"

密码状态特殊值

  • !!:未设置密码
  • *:密码被禁用
  • 空字符串:不需要密码

实际示例

bash 复制代码
# 查看shadow文件典型条目
root:$6$rounds=656000$YQKt8VxjVa2vVca5$Fh7e2gBt5u6Q9N5W.X5F2e5hN5l8e5R6t7Y8u9I0o9P6a5S4d3F2g1H7j9K0l:$6$...:19000:0:99999:7:::
daemon:*:19000:0:99999:7:::
bin:*:19000:0:99999:7:::
sys:*:19000:0:99999:7:::
www-data:*:19000:0:99999:7:::
ubuntu:$6$rounds=656000$YQKt8VxjVa2vVca5$Fh7e2gBt5u6Q9N5W...:19000:0:99999:7:::
testuser:$6$...:19750:0:99999:7:::

安全注意事项

bash 复制代码
# 检查shadow文件权限
ls -l /etc/shadow

# 验证shadow文件完整性
sudo pwck

# 检查密码策略
sudo pwconv
sudo pwunconv

2. 用户账户管理命令

2.1 新建用户账户命令

2.1.1 useradd命令

useradd是Linux系统原生的用户创建命令,提供底层的用户创建功能。

基本语法

bash 复制代码
useradd [选项] 用户名

常用参数

  • -c, --comment COMMENT:添加注释信息
  • -d, --home HOME_DIR:指定用户家目录
  • -e, --expiredate EXPIRE_DATE:设置账户过期日期
  • -f, --inactive INACTIVE:设置密码过期后账户禁用天数
  • -g, --gid GROUP:指定主组GID或组名
  • -G, --groups GROUP1[,GROUP2,...]:指定附加组
  • -m, --create-home:创建用户家目录
  • -M:不创建用户家目录
  • -r, --system:创建系统用户
  • -s, --shell SHELL:指定登录Shell
  • -u, --uid UID:指定用户UID

使用示例

bash 复制代码
# 1. 创建基本用户账户
sudo useradd newuser

# 2. 创建用户并指定详细信息
sudo useradd -c "张三" -d /home/zhangsan -s /bin/bash -m zhangsan

# 3. 创建用户指定UID和主组
sudo useradd -u 1005 -g developers -m -s /bin/bash developer1

# 4. 创建用户并添加到多个附加组
sudo useradd -G sudo,developers,webadmin -m -s /bin/bash webdev

# 5. 创建系统用户(无登录权限)
sudo useradd -r -s /bin/false serviceuser

# 6. 创建用户指定过期日期
sudo useradd -e 2025-12-31 -m tempuser

# 7. 创建用户设置密码过期策略
sudo useradd -f 30 -e 2025-06-30 -m businessuser

# 8. 批量创建用户
for i in {1..5}; do
    sudo useradd -m -s /bin/bash user$i
done

配置文件影响

useradd命令的行为受以下配置文件影响:

bash 复制代码
# 查看useradd默认配置
cat /etc/default/useradd

# 查看用户创建模板
ls -la /etc/skel/

# 编辑默认配置
sudo vi /etc/default/useradd
2.1.2 adduser命令

adduser是Debian/Ubuntu系统提供的交互式用户创建命令,它是useradd的包装脚本。

基本语法

bash 复制代码
adduser [选项] 用户名

特点

  1. 交互式界面,用户友好
  2. 自动创建用户家目录
  3. 自动创建与用户名同名的组
  4. 设置合理的默认权限

使用示例

bash 复制代码
# 1. 交互式创建用户(推荐方式)
sudo adduser username

# 2. 创建系统用户
sudo adduser --system sysuser

# 3. 不创建家目录
sudo adduser --no-create-home user

# 4. 指定家目录
sudo adduser --home /custom/home user

# 5. 指定shell
sudo adduser --shell /bin/zsh user

# 6. 创建用户并添加到组
sudo adduser --ingroup sudo user

# 7. 禁用登录
sudo adduser --disabled-login user

# 8. 设置密码过期时间
sudo adduser --expire 2025-12-31 user

交互式创建过程示例

bash 复制代码
$ sudo adduser testuser
正在添加用户 'testuser'...
正在添加新组 'testuser' (1001)...
正在添加新用户 'testuser' (1001) 并将其加入组 'testuser'...
创建主目录 '/home/testuser'...
正在从 '/etc/skel' 复制文件...
请为这个用户输入新的密码,或者按回车键使用默认密码(无密码):
请重新输入密码:
passwd: 已成功更新密码
更改 testuser 的用户信息。
请输入新值,或按回车键接受默认值。
    全名 []: Test User
    房间号码 []: 101
    工作电话 []: 123-456-7890
    家庭电话 []: 098-765-4321
    其它 []: This is a test account
这些信息是否正确?[Y/n] y
2.1.3 useradd与adduser的区别
特性 useradd adduser
适用系统 所有Linux发行版 Debian系发行版
交互性 非交互式 交互式
默认创建家目录 否(需-m参数)
自动创建组 是(同名组)
参数复杂度 高(参数丰富) 低(默认值合理)
自动化程度 高(适合脚本) 中(适合手动操作)
配置依赖 /etc/login.defs 交互式配置
bash 复制代码
# 使用useradd创建用户(脚本化)
sudo useradd -m -s /bin/bash -c "Web Developer" -G www-data webdev

# 使用adduser创建用户(交互式)
sudo adduser webdev

# 查看创建结果
id webdev
getent passwd webdev
getent group webdev
ls -la /home/ | grep webdev

2.2 修改用户账户命令

2.2.1 passwd命令

passwd命令用于管理用户密码,是最常用的用户管理命令之一。

基本语法

bash 复制代码
passwd [选项] [用户名]

常用参数

  • -l, --lock:锁定用户账户
  • -u, --unlock:解锁用户账户
  • -d, --delete:删除用户密码
  • -e, --expire:强制用户下次登录时修改密码
  • -n, --mindays MIN_DAYS:设置密码最小修改间隔
  • -x, --maxdays MAX_DAYS:设置密码最大有效天数
  • -w, --warndays WARN_DAYS:设置密码到期警告天数
  • -i, --inactive INACTIVE:设置密码到期后禁用天数
  • -S, --status:显示密码状态

使用示例

bash 复制代码
# 1. 修改当前用户密码
passwd

# 2. 修改指定用户密码(root权限)
sudo passwd username

# 3. 锁定用户账户
sudo passwd -l username

# 4. 解锁用户账户
sudo passwd -u username

# 5. 删除用户密码(清空密码)
sudo passwd -d username

# 6. 强制用户下次登录时修改密码
sudo passwd -e username

# 7. 设置密码策略
sudo passwd -n 7 -x 90 -w 14 -i 30 username
# 最小间隔7天,最大有效期90天,警告14天,宽限30天

# 8. 查看密码状态
sudo passwd -S username

# 9. 设置密码永不过期
sudo passwd -x -1 username

# 10. 查看所有用户密码状态
sudo passwd -Sa

密码状态说明

bash 复制代码
# passwd -S 输出格式
username PS 2023-01-15 0 99999 7 -1
# 格式:用户名 状态 最后修改日期 最小天数 最大天数 警告天数 宽限天数

# 状态含义:
# P:密码已设置且可以使用
# NP:没有密码
# L:账户被锁定

批量密码管理

bash 复制代码
# 批量为用户设置密码
for user in user1 user2 user3; do
    echo "$user:TempPass123" | sudo chpasswd
done

# 生成随机密码并设置
for user in user1 user2 user3; do
    password=$(openssl rand -base64 12)
    echo "$user:$password" | sudo chpasswd
    echo "User: $user, Password: $password"
done
2.2.2 usermod命令

usermod命令用于修改已存在用户的属性和配置。

基本语法

bash 复制代码
usermod [选项] 用户名

常用参数

  • -a, --append:将用户添加到附加组(必须与-G一起使用)
  • -c, --comment COMMENT:修改注释信息
  • -d, --home HOME_DIR:修改用户家目录
  • -e, --expiredate EXPIRE_DATE:设置账户过期日期
  • -f, --inactive INACTIVE:设置密码过期后禁用天数
  • -g, --gid GROUP:修改主组
  • -G, --groups GROUP1[,GROUP2,...]:设置附加组(覆盖原设置)
  • -l, --login NEW_LOGIN:修改用户名
  • -L:锁定用户账户
  • -m, --move-home:移动家目录到新位置
  • -s, --shell SHELL:修改登录Shell
  • -u, --uid UID:修改用户UID
  • -U:解锁用户账户

使用示例

bash 复制代码
# 1. 修改用户注释信息
sudo usermod -c "Web开发工程师" username

# 2. 修改用户家目录
sudo usermod -d /new/home/dir username

# 3. 移动家目录到新位置
sudo usermod -d /new/home/dir -m username

# 4. 修改用户主组
sudo usermod -g developers username

# 5. 将用户添加到附加组
sudo usermod -aG sudo username
sudo usermod -aG docker,www-data username

# 6. 设置用户附加组(覆盖原设置)
sudo usermod -G developers,webadmin username

# 7. 修改用户shell
sudo usermod -s /bin/zsh username

# 8. 修改用户UID
sudo usermod -u 1005 username

# 9. 修改用户名
sudo usermod -l newname oldname

# 10. 锁定用户账户
sudo usermod -L username

# 11. 解锁用户账户
sudo usermod -U username

# 12. 设置账户过期日期
sudo usermod -e 2025-12-31 username

# 13. 设置密码过期禁用天数
sudo usermod -f 30 username

# 14. 综合修改用户属性
sudo usermod -c "开发工程师" -G sudo,developers -s /bin/bash username

安全注意事项

bash 复制代码
# 修改用户前先备份当前配置
cp /etc/passwd /etc/passwd.backup
cp /etc/shadow /etc/shadow.backup
cp /etc/group /etc/group.backup

# 修改后验证用户信息
id username
getent passwd username
getent group username

# 检查用户登录状态
w username
last username
2.2.3 chage命令

chage命令专门用于管理用户密码老化策略,是系统安全管理的重要工具。

基本语法

bash 复制代码
chage [选项] 用户名

常用参数

  • -l, --list:显示密码老化信息
  • -d, --lastday LAST_DAY:设置最后密码修改日期
  • -m, --mindays MIN_DAYS:设置最小密码修改间隔
  • -M, --maxdays MAX_DAYS:设置最大密码有效天数
  • -W, --warndays WARN_DAYS:设置密码到期警告天数
  • -I, --inactive INACTIVE:设置密码过期后禁用天数
  • -E, --expiredate EXPIRE_DATE:设置账户过期日期
  • -h, --help:显示帮助信息

使用示例

bash 复制代码
# 1. 查看用户密码策略
sudo chage -l username

# 2. 设置密码永不过期
sudo chage -M -1 username

# 3. 设置密码有效期为90天
sudo chage -M 90 username

# 4. 设置密码最小修改间隔为7天
sudo chage -m 7 username

# 5. 设置密码到期前警告14天
sudo chage -W 14 username

# 6. 设置密码过期后宽限30天
sudo chage -I 30 username

# 7. 设置密码最后修改日期
sudo chage -d 2025-01-15 username

# 8. 设置账户过期日期
sudo chage -E 2025-12-31 username

# 9. 强制用户下次登录时修改密码
sudo chage -d 0 username

# 10. 综合设置密码策略
sudo chage -m 3 -M 90 -W 14 -I 30 username

# 11. 查看所有用户密码策略
for user in $(cut -d: -f1 /etc/passwd | grep -v "^#"); do
    echo "=== $user ==="
    sudo chage -l $user | head -1
done

# 12. 重置密码策略为默认值
sudo chage -m 0 -M 99999 -W 7 -I -1 username

密码策略查看示例

bash 复制代码
$ sudo chage -l username
用户名: username
密码最近一次设置时间: 1月 15, 2025
密码最后修改时间: 1月 15, 2025
密码过期时间: 4月 15, 2025
密码过期后禁用天数: 30
密码最低使用天数: 7
密码最大使用天数: 90
密码到期前警告天数: 14
账户过期时间: 永不过期

批量密码策略管理

bash 复制代码
# 为开发组用户设置严格密码策略
for user in dev1 dev2 dev3; do
    sudo chage -m 7 -M 60 -W 14 -I 15 $user
done

# 为管理员用户设置宽松策略
for user in admin1 admin2; do
    sudo chage -M -1 $user
done

# 查看策略生效情况
for user in $(groups dev1 | cut -d: -f2 | tr ' ' '\n' | sort | uniq); do
    sudo chage -l $user | grep "密码最大使用天数"
done

安全最佳实践

bash 复制代码
# 1. 设置合理的密码策略
# 普通用户:60天有效期,7天最小间隔,14天警告,15天宽限
sudo chage -m 7 -M 60 -W 14 -I 15 username

# 2. 定期审计密码策略
sudo chage -l username | grep -E "密码最大使用天数|密码到期前警告天数"

# 3. 强制新用户首次登录修改密码
sudo chage -d 0 newuser

# 4. 查看即将过期的用户
awk -F: '$5 > 0 && $5 <= 7 {print $1}' /etc/shadow | while read user; do
    echo "User $user password expires in $5 days"
    sudo chage -l $user
done

2.3 删除用户账户命令

2.3.1 userdel命令

userdel命令用于从系统中删除用户账户。

基本语法

bash 复制代码
userdel [选项] 用户名

常用参数

  • -f, --force:强制删除用户,即使该用户当前已登录
  • -r, --remove:删除用户的同时删除用户家目录
  • -Z:删除用户的SELinux用户映射

使用示例

bash 复制代码
# 1. 删除用户账户(不删除家目录)
sudo userdel username

# 2. 删除用户及其家目录
sudo userdel -r username

# 3. 强制删除已登录的用户
sudo userdel -f username

# 4. 删除用户并清理相关文件
sudo userdel -r -f username

# 5. 删除用户保留备份
sudo tar -czf /backup/user_$username.tar.gz /home/$username
sudo userdel -r username

# 6. 删除用户前备份重要数据
if [ -d /home/$username ]; then
    sudo cp -r /home/$username /backup/
    sudo find /home/$username -type f -exec ls -l {} \; > /backup/files_$username.list
fi
sudo userdel -r username
2.3.2 deluser命令

deluser是Ubuntu/Debian系统提供的删除用户的交互式命令。

基本语法

bash 复制代码
deluser [选项] 用户名

常用参数

  • --remove-home:删除用户家目录
  • --remove-all-files:删除用户所有文件
  • --system:仅删除系统用户
  • --group:删除用户的同时删除同名组
  • --help:显示帮助信息

使用示例

bash 复制代码
# 1. 删除用户账户
sudo deluser username

# 2. 删除用户及其家目录
sudo deluser --remove-home username

# 3. 删除用户及所有相关文件
sudo deluser --remove-all-files username

# 4. 删除用户及同名组
sudo deluser --group username

# 5. 删除系统用户
sudo deluser --system sysuser

# 6. 删除用户保留邮件
sudo deluser --remove-home --keep-home username

删除前的安全检查

bash 复制代码
# 1. 检查用户是否在线
who | grep username
w | grep username

# 2. 查看用户进程
ps aux | grep username

# 3. 检查用户拥有的文件
find / -user username 2>/dev/null | head -20

# 4. 检查用户定时任务
sudo crontab -l -u username 2>/dev/null

# 5. 检查用户sudo权限
sudo -l -U username 2>/dev/null

# 6. 查看用户登录历史
last username

用户删除后的清理工作

bash 复制代码
# 1. 清理相关组信息
sudo groupdel username 2>/dev/null || true

# 2. 清理cron任务
sudo crontab -r -u username 2>/dev/null || true

# 3. 清理at任务
sudo atq | grep "username" | awk '{print $1}' | xargs -r sudo atrm 2>/dev/null || true

# 4. 清理打印任务
sudo lprm -U username - 2>/dev/null || true

# 5. 清理用户邮箱
sudo rm -rf /var/mail/username 2>/dev/null || true
sudo rm -rf /var/spool/mail/username 2>/dev/null || true

# 6. 清理临时文件
sudo find /tmp -user username -delete 2>/dev/null || true
sudo find /var/tmp -user username -delete 2>/dev/null || true

3. 组账户基础

3.1 组账户配置文件

Linux系统中的组账户信息存储在配置文件中,主要包括/etc/group和/etc/gshadow两个文件。

3.1.1 组账户的基本概念
  • 主组(Primary Group):用户登录时的默认组,用户只能有一个主组
  • 附加组(Supplementary Groups):用户可以属于多个附加组,用于获取额外权限
  • 组ID(GID):系统内部唯一标识组的数字ID
  • 组管理员:可以管理组内成员的用户
3.1.2 组账户的作用
  1. 权限管理:通过组权限控制文件访问
  2. 资源共享:允许多个用户共享资源和数据
  3. 权限委派:通过组管理员分配管理权限
  4. 安全隔离:不同组用户之间权限隔离
bash 复制代码
# 查看用户所属的所有组
groups                    # 当前用户的组
groups username          # 指定用户的组
id username              # 显示用户ID和组ID

# 查看组信息
getent group groupname   # 获取组详细信息
cat /etc/group          # 查看所有组

# 查看组中成员
getent group sudo       # 查看sudo组成员
getent group www-data   # 查看www-data组成员

3.2 /etc/group文件

/etc/group文件存储系统组账户的基本信息,所有用户都可以读取。

文件结构

复制代码
组名:组密码:GID:组内用户列表

字段详细说明

  1. 组名(Group Name):组的名称标识
  2. 组密码(Group Password):通常显示"x",实际密码存储在/etc/gshadow中
  3. 组ID(GID):组的唯一标识符
  4. 组内用户列表(Member List):属于该组的用户列表,用逗号分隔
bash 复制代码
# 查看group文件内容
cat /etc/group

# 查看特定组信息
grep sudo /etc/group
getent group sudo

# 查看组中包含的用户
grep "username" /etc/group

# 统计系统中组数量
wc -l /etc/group

# 查看GID范围分布
awk -F: '{print $3}' /etc/group | sort -n | uniq -c

实际示例

bash 复制代码
# 查看group文件典型条目
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:syslog,ubuntu
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:ubuntu
floppy:x:25:
tape:x:26:
sudo:x:27:ubuntu
audio:x:29:pulse
dip:x:30:ubuntu
plugdev:x:46:ubuntu
lpadmin:x:120:ubuntu
sambashare:x:126:ubuntu
ubuntu:x:1000:ubuntu
www-data:x:33:
developers:x:1001:dev1,dev2,dev3
webadmin:x:1002:webdev1,webdev2

特殊说明

  • 主组成员不一定在第4列显示,附加组成员会显示在第4列
  • 系统组(1-999)通常没有成员在第4列
  • 用户创建时默认加入以其用户名命名的组

3.3 /etc/gshadow文件

/etc/gshadow文件存储组密码和组管理员信息,只有root用户可以读取。

文件结构

复制代码
组名:组密码:组管理员:组内用户列表

字段详细说明

  1. 组名(Group Name):与/etc/group中的组名对应
  2. 组密码(Group Password):加密的组密码,"!"表示无密码
  3. 组管理员(Group Administrators):可以管理该组的用户列表
  4. 组内用户列表(Group Members):该组的成员列表
bash 复制代码
# 查看gshadow文件内容(需要root权限)
sudo cat /etc/gshadow

# 查看特定组的shadow信息
sudo getent gshadow groupname

# 查看组管理员
sudo grep "groupname" /etc/gshadow

实际示例

bash 复制代码
# 查看gshadow文件典型条目
root:*:: 
daemon:*::
bin:*::
sys:*::
adm:*::
tty:*::
disk:*::
lp:*::
mail:*::
news:*::
uucp:*::
man:*::
proxy:*::
kmem:*::
dialout:*::
fax:*::
voice:*::
cdrom:*::
floppy:*::
tape:*::
sudo:*::ubuntu
audio:*::
dip:*::
plugdev:*::
lpadmin:*::
sambashare:*::
ubuntu:*::
www-data:*::
developers:*::admin1,admin2:dev1,dev2,dev3
webadmin:!::admin3:webdev1,webdev2

特殊值说明

  • !:组无密码或组被锁定
  • *:组密码已设置但未知
  • 空字符串:组密码为空,允许所有成员加入

4. 组账户管理命令

4.1 创建组账户命令

4.1.1 groupadd命令

groupadd命令用于创建新的用户组,是Linux系统原生提供的组管理命令。

基本语法

bash 复制代码
groupadd [选项] 组名

常用参数

  • -f, --force:如果组已存在则成功退出
  • -g, --gid GID:指定组的GID
  • -h, --help:显示帮助信息
  • -K, --key KEY=VALUE:覆盖/etc/login.defs中的默认值
  • -o, --non-unique:允许使用非唯一的GID创建组
  • -p, --password PASSWORD:为组设置密码
  • -r, --system:创建系统组
  • -R, --root CHROOT_DIR:在指定目录中应用操作

使用示例

bash 复制代码
# 1. 创建基本用户组
sudo groupadd developers

# 2. 指定GID创建组
sudo groupadd -g 1001 designers

# 3. 创建系统组
sudo groupadd -r system_users

# 4. 创建非唯一GID的组
sudo groupadd -o -g 1001 temp_group

# 5. 为组设置密码
sudo groupadd -p secret123 project_group

# 6. 创建组并指定自定义参数
sudo groupadd -K GID_MIN=1000 -K GID_MAX=9999 custom_group

# 7. 批量创建组
for dept in sales marketing finance hr; do
    sudo groupadd ${dept}_dept
done

# 8. 创建项目组
sudo groupadd -g 2001 project_alpha
sudo groupadd -g 2002 project_beta
sudo groupadd -g 2003 project_gamma

# 9. 创建功能组
sudo groupadd -r logreaders
sudo groupadd -r webadmins
sudo groupadd -r dbadmins

创建组前的检查

bash 复制代码
# 1. 检查组名是否已存在
getent group groupname

# 2. 检查GID是否已使用
grep ":1001:" /etc/group

# 3. 查看可用GID范围
cat /etc/login.defs | grep GID

# 4. 查看现有组数量
wc -l /etc/group

# 5. 生成组名建议
for i in {1001..1010}; do
    if ! grep -q ":$i:" /etc/group; then
        echo "Available GID: $i"
        break
    fi
done
4.1.2 addgroup命令

addgroup是Debian/Ubuntu系统提供的交互式组创建命令,是groupadd的包装脚本。

基本语法

bash 复制代码
addgroup [选项] 组名

常用参数

  • --gid GID:指定GID
  • --help:显示帮助信息
  • --quiet:静默模式
  • --system:创建系统组
  • --verbose:详细输出

使用示例

bash 复制代码
# 1. 创建用户组(推荐方式)
sudo addgroup team_leaders

# 2. 创建系统组
sudo addgroup --system monitor_daemon

# 3. 指定GID创建组
sudo addgroup --gid 1100 analysts

# 4. 批量创建部门组
sudo addgroup --quiet sales_dept
sudo addgroup --quiet marketing_dept
sudo addgroup --quiet finance_dept
sudo addgroup --quiet hr_dept

# 5. 创建项目相关组
sudo addgroup --verbose project_management
sudo addgroup --verbose project_development
sudo addgroup --verbose project_testing
sudo addgroup --verbose project_delivery

# 6. 创建权限组
sudo addgroup file_managers
sudo addgroup backup_operators
sudo addgroup security_officers

交互式创建过程

bash 复制代码
$ sudo addgroup testgroup
正在添加用户组 'testgroup' (GID 1003)...
完成。
4.1.3 组管理的最佳实践

命名规范

bash 复制代码
# 1. 按功能命名
sudo addgroup file_managers        # 文件管理员组
sudo addgroup backup_operators     # 备份操作员组
sudo addgroup log_viewers          # 日志查看器组

# 2. 按部门命名
sudo addgroup sales_team
sudo addgroup marketing_team
sudo addgroup development_team

# 3. 按项目命名
sudo addgroup project_alpha
sudo addgroup project_beta
sudo addgroup project_gamma

# 4. 按系统命名
sudo addgroup database_users
sudo addgroup web_server_admin
sudo addgroup mail_server_admin

# 5. 按权限命名
sudo addgroup read_only_users
sudo addgroup read_write_users
sudo addgroup full_access_users

批量创建脚本

bash 复制代码
#!/bin/bash
# 创建项目组的脚本

# 项目名称
PROJECT_NAME="myproject"

# 创建项目相关组
sudo addgroup ${PROJECT_NAME}_developers
sudo addgroup ${PROJECT_NAME}_testers
sudo addgroup ${PROJECT_NAME}_admins

# 创建权限组
sudo addgroup ${PROJECT_NAME}_read_access
sudo addgroup ${PROJECT_NAME}_write_access
sudo addgroup ${PROJECT_NAME}_admin_access

echo "项目组创建完成:"
getent group | grep ${PROJECT_NAME}

4.2 修改组账户属性命令

4.2.1 groupmod命令

groupmod命令用于修改已存在用户组的属性和配置。

基本语法

bash 复制代码
groupmod [选项] 组名

常用参数

  • -g, --gid GID:修改组GID
  • -h, --help:显示帮助信息
  • -n, --new-name NEW_GROUP:修改组名
  • -o, --non-unique:允许使用非唯一GID
  • -p, --password PASSWORD:设置组密码

使用示例

bash 复制代码
# 1. 修改组名
sudo groupmod -n newgroupname oldgroupname

# 2. 修改组GID
sudo groupmod -g 1100 developers

# 3. 修改组名和GID
sudo groupmod -n designers -g 1101 old_designers

# 4. 设置组密码
sudo groupmod -p secret456 project_group

# 5. 强制修改为已使用的GID
sudo groupmod -o -g 1005 temp_group

# 6. 修改系统组名
sudo groupmod -n system_admins old_sysadmin

# 7. 批量重命名组
for group in old_sales old_marketing old_finance; do
    newname=$(echo $group | sed 's/old_//')
    sudo groupmod -n $newname $group
done

# 8. 更新项目组GID
sudo groupmod -g 2001 project_alpha
sudo groupmod -g 2002 project_beta
sudo groupmod -g 2003 project_gamma

修改组属性前的安全检查

bash 复制代码
# 1. 检查组是否存在
getent group groupname

# 2. 检查新组名是否已存在
getent group newgroupname && echo "组名已存在"

# 3. 检查新GID是否已使用
grep ":1100:" /etc/group && echo "GID已使用"

# 4. 备份现有配置
sudo cp /etc/group /etc/group.backup.$(date +%Y%m%d)
sudo cp /etc/gshadow /etc/gshadow.backup.$(date +%Y%m%d)

# 5. 检查组中是否有用户
getent group groupname | cut -d: -f4

# 6. 列出组中所有用户
echo "组 $groupname 中的用户:"
getent group groupname | cut -d: -f4 | tr ',' '\n' | grep -v '^$'

4.3 删除组账户

4.3.1 groupdel命令

groupdel命令用于从系统中删除用户组。

基本语法

bash 复制代码
groupdel [选项] 组名

常用参数

  • -h, --help:显示帮助信息
  • -R, --root CHROOT_DIR:在指定目录中应用操作

使用示例

bash 复制代码
# 1. 删除用户组
sudo groupdel temp_group

# 2. 删除系统组
sudo groupdel -r old_system_group

# 3. 删除项目组
sudo groupdel project_alpha
sudo groupdel project_beta
sudo groupdel project_gamma

# 4. 删除部门组
sudo groupdel old_sales_team
sudo groupdel old_marketing_team

删除前的检查

bash 复制代码
# 1. 检查组是否存在
getent group groupname || echo "组不存在"

# 2. 检查组中是否有用户
members=$(getent group groupname | cut -d: -f4)
if [ -n "$members" ]; then
    echo "警告:组中仍有用户 $members"
    echo "是否继续删除?(y/N)"
    read -r response
    if [[ ! "$response" =~ ^[Yy]$ ]]; then
        exit 1
    fi
fi

# 3. 检查是否有文件属于该组
find / -group groupname 2>/dev/null | head -10

# 4. 检查系统组依赖
grep "groupname" /etc/passwd | cut -d: -f1

# 5. 检查组是否为主组
awk -F: -v group="groupname" '$4 == group {print $1}' /etc/passwd
4.3.2 delgroup命令

delgroup是Debian/Ubuntu系统提供的交互式组删除命令。

基本语法

bash 复制代码
delgroup [选项] 组名

常用参数

  • --help:显示帮助信息
  • --only-if-empty:仅在组为空时删除
  • --quiet:静默模式
  • --system:仅删除系统组
  • --verbose:详细输出

使用示例

bash 复制代码
# 1. 删除用户组
sudo delgroup groupname

# 2. 仅在组为空时删除
sudo delgroup --only-if-empty groupname

# 3. 删除系统组
sudo delgroup --system system_group

# 4. 删除所有用户组
sudo delgroup --only-if-empty old_sales
sudo delgroup --only-if-empty old_marketing
sudo delgroup --only-if-empty old_finance

# 5. 批量删除项目组
sudo delgroup --quiet project_alpha
sudo delgroup --quiet project_beta
sudo delgroup --quiet project_gamma

删除后的清理工作

bash 复制代码
# 1. 验证组已删除
getent group groupname || echo "组已删除"

# 2. 检查用户配置文件
grep -v "groupname" /etc/passwd > /tmp/passwd_new
sudo mv /tmp/passwd_new /etc/passwd

# 3. 检查其他配置文件
sudo grep -r "groupname" /etc 2>/dev/null | grep -v "Binary file"

# 4. 清理相关目录
sudo find /home -group groupname 2>/dev/null | head -10

# 5. 重启相关服务
sudo systemctl restart nscd 2>/dev/null || true

4.4 管理组账户命令

4.4.1 gpasswd命令

gpasswd命令用于管理组密码和组管理员权限。

基本语法

bash 复制代码
gpasswd [选项] 组名

常用参数

  • -a, --add USER:将用户添加到组
  • -d, --delete USER:从组中删除用户
  • -h, --help:显示帮助信息
  • -M, --members USER[,...]:设置组的所有成员
  • -r, --remove-password:移除组密码
  • -R, --restrict:限制对组的访问
  • -A, --administrators USER[,...]:设置组管理员

使用示例

bash 复制代码
# 1. 设置组密码
sudo gpasswd groupname
# 输入并确认密码

# 2. 添加用户到组
sudo gpasswd -a username groupname

# 3. 从组中删除用户
sudo gpasswd -d username groupname

# 4. 设置组管理员
sudo gpasswd -A adminuser groupname

# 5. 添加多个组管理员
sudo gpasswd -A admin1,admin2,admin3 groupname

# 6. 设置组的所有成员
sudo gpasswd -M user1,user2,user3,user4 groupname

# 7. 移除组密码
sudo gpasswd -r groupname

# 8. 限制组访问
sudo gpasswd -R groupname

# 9. 批量添加用户到组
for user in dev1 dev2 dev3; do
    sudo gpasswd -a $user developers
done

# 10. 批量设置组成员
sudo gpasswd -M user1,user2,user3,user4,user5 project_team

# 11. 查看组信息
gpasswd -A groupname    # 查看组管理员
gpasswd -M groupname    # 查看组所有成员
4.4.2 组权限管理实例

项目团队权限管理

bash 复制代码
# 1. 创建项目组
sudo groupadd project_omega
sudo groupadd project_omega_read
sudo groupadd project_omega_write

# 2. 添加用户到不同的权限组
sudo gpasswd -a alice project_omega_read      # 读权限
sudo gpasswd -a bob project_omega_write       # 写权限
sudo gpasswd -a charlie project_omega         # 管理权限

# 3. 设置组管理员
sudo gpasswd -A charlie project_omega

# 4. 为组设置密码(如果需要)
sudo gpasswd project_omega_write

临时项目权限分配

bash 复制代码
# 1. 创建临时项目组
sudo groupadd temp_project_q1

# 2. 批量添加项目成员
sudo gpasswd -M alice,bob,charlie,david,temp_project_q1

# 3. 设置项目负责人
sudo gpasswd -A charlie temp_project_q1

# 4. 验证组配置
getent group temp_project_q1

# 5. 项目结束后清理组成员
sudo gpasswd -M "" temp_project_q1

文件权限组管理

bash 复制代码
# 1. 创建文件管理组
sudo groupadd file_managers

# 2. 设置文件目录组权限
sudo mkdir /project/files
sudo chgrp file_managers /project/files
sudo chmod 770 /project/files

# 3. 添加管理员到组
sudo gpasswd -a sysadmin file_managers
sudo gpasswd -A backup_admin file_managers

# 4. 查看组状态
getent group file_managers

组管理最佳实践

bash 复制代码
# 1. 定期审计组成员
echo "=== 组 $1 成员审计 ==="
getent group $1 | cut -d: -f4 | tr ',' '\n' | grep -v '^$'

# 2. 检查空组
awk -F: '{if($4=="") print "空组: " $1}' /etc/group

# 3. 检查未使用的组
echo "近30天未使用的组:"
for group in $(awk -F: '{print $1}' /etc/group); do
    if ! getent passwd | cut -d: -f4 | grep -q "^.*,${group}$"; then
        echo "未使用组: $group"
    fi
done

# 4. 组权限同步检查
echo "=== 组权限同步检查 ==="
for user in $(awk -F: '{print $1}' /etc/passwd); do
    user_groups=$(groups $user | cut -d: -f2)
    echo "用户 $user 的组:$user_groups"
done

5. 本章小结

5.1 核心概念总结

5.1.1 用户管理核心要点
  1. 用户账户体系

    • UID 0:超级用户root,具有系统最高权限
    • UID 1-999:系统用户,用于运行系统服务和程序
    • UID 1000+:普通用户,日常使用的用户账户
  2. 关键配置文件

    • /etc/passwd:用户基本信息(7个字段)
    • /etc/shadow:密码和策略信息(9个字段)
    • 字段格式:用户名:密码:UID:GID:注释:家目录:Shell
  3. 用户创建命令对比

    • useradd:底层命令,功能全面,适合脚本化
    • adduser:交互式命令,用户友好,Ubuntu推荐
5.1.2 组管理核心要点
  1. 组账户体系

    • 主组:用户登录时的默认组,只能有一个
    • 附加组:用户可属于多个,用于权限分配
  2. 关键配置文件

    • /etc/group:组基本信息(4个字段)
    • /etc/gshadow:组密码和管理员(4个字段)
  3. 组管理命令

    • groupadd/addgroup:创建组
    • groupmod:修改组属性
    • groupdel/delgroup:删除组
    • gpasswd:管理组成员和密码

5.2 安全最佳实践

5.2.1 用户安全策略
bash 复制代码
# 1. 强制密码复杂度
# 编辑 /etc/pam.d/common-password
password required pam_pwquality.so retry=3 minlen=12 maxrepeat=3

# 2. 设置合理的密码过期策略
sudo chage -m 7 -M 90 -W 14 -I 30 username

# 3. 定期审计用户账户
sudo awk -F: '$7 ~ /(\/bin\/bash|\/bin\/sh)$/ {print $1}' /etc/passwd

# 4. 禁用不必要的账户登录
sudo usermod -s /usr/sbin/nologin unnecessary_user

# 5. 设置账户锁定策略
sudo passwd -l username    # 锁定账户
sudo usermod -U username   # 解锁账户
5.2.2 组权限管理
bash 复制代码
# 1. 使用最小权限原则
# 为用户分配最小的必要组权限

# 2. 定期审计组成员
sudo awk -F: '$4 !="" {print "组 " $1 " 有成员: " $4}' /etc/group

# 3. 清理未使用的组
for group in $(awk -F: '{print $1}' /etc/group); do
    if ! getent passwd | cut -d: -f4 | grep -q ".*,${group}"; then
        echo "未使用组: $group"
    fi
done

# 4. 使用组权限控制文件访问
sudo chgrp groupname /path/to/file
sudo chmod 770 /path/to/file

5.3 常见问题解决

5.3.1 用户管理问题
  1. 用户无法登录

    bash 复制代码
    # 检查用户Shell
    grep username /etc/passwd
    
    # 检查密码状态
    sudo passwd -S username
    
    # 检查用户是否被锁定
    sudo grep username /etc/shadow
  2. 密码过期问题

    bash 复制代码
    # 查看密码状态
    sudo chage -l username
    
    # 重置密码过期策略
    sudo chage -m 0 -M -1 username
  3. 家目录权限问题

    bash 复制代码
    # 修复家目录权限
    sudo chown -R username:username /home/username
    sudo chmod 700 /home/username
5.3.2 组管理问题
  1. 用户不在预期组中

    bash 复制代码
    # 查看用户实际组
    groups username
    
    # 查看组详细信息
    getent group groupname
    
    # 重新添加用户到组
    sudo usermod -aG groupname username
  2. 文件权限问题

    bash 复制代码
    # 查看文件所属组
    ls -l filename
    
    # 修改文件所属组
    sudo chgrp groupname filename
    
    # 修改文件权限
    sudo chmod 770 filename

5.4 自动化脚本示例

5.4.1 用户批量创建脚本
bash 复制代码
#!/bin/bash
# 批量创建用户脚本

USER_FILE="users.txt"
GROUP_NAME="developers"

while IFS=',' read -r username fullname email; do
    if [ -n "$username" ]; then
        echo "创建用户: $username"
        sudo adduser --disabled-login --gecos "$fullname,$email,," --ingroup $GROUP_NAME $username
        
        # 设置临时密码
        temp_password=$(openssl rand -base64 12)
        echo "$username:$temp_password" | sudo chpasswd
        
        # 强制首次登录修改密码
        sudo chage -d 0 $username
        
        echo "用户 $username 创建完成,临时密码: $temp_password"
    fi
done < $USER_FILE
5.4.2 用户审计脚本
bash 复制代码
#!/bin/bash
# 用户账户审计脚本

echo "=== 用户账户审计报告 ==="
echo "生成时间: $(date)"
echo

echo "1. 系统用户总数:"
awk -F: '$3 < 1000 {count++} END {print count}' /etc/passwd

echo "2. 普通用户总数:"
awk -F: '$3 >= 1000 {count++} END {print count}' /etc/passwd

echo "3. 已锁定用户:"
sudo awk -F: '$2 ~ /^!/ {print $1}' /etc/shadow

echo "4. 密码过期的用户:"
for user in $(sudo awk -F: -v today=$(date +%s) '{
    if ($5 > 0 && $3 + $5*86400 < today) print $1
}' /etc/shadow); do
    echo "  - $user"
done

echo "5. 系统组数量:"
awk -F: '$3 < 1000 {count++} END {print count}' /etc/group

echo "6. 空组数量:"
awk -F: '{if ($4 == "") count++} END {print count}' /etc/group

6. 习题

6.1 基础概念题

  1. 填空题

    • Linux系统中,超级用户的UID是____,系统用户的UID范围是____,普通用户的UID范围是____。
    • /etc/passwd文件包含____个字段,分别是:、____。
    • /etc/shadow文件包含____个字段,其中第2字段存储____,第5字段表示____。
    • 用户的____组是登录时的默认组,一个用户只能有一个____组,但可以有多个____组。
  2. 选择题

    • 下列哪个命令可以查看用户的详细组信息?

      a) groups username

      b) id username

      c) getent group groupname

      d) 以上都可以

    • 在Ubuntu系统中,推荐使用哪个命令创建新用户?

      a) useradd

      b) adduser

      c) newuser

      d) createuser

    • 下列关于/etc/gshadow文件的说法正确的是?

      a) 所有用户都可以读取该文件

      b) 只有root用户可以读取该文件

      c) 该文件存储组的密码信息

      d) b和c正确

  3. 判断题

    • ( ) 用户创建后必须设置密码才能登录系统
    • ( ) usermod -G命令会保留用户的原有附加组
    • ( ) groupdel命令可以删除任何系统组
    • ( ) chage -l命令可以修改用户的密码策略
    • ( ) /etc/group文件中主组成员会显示在第4字段

6.2 操作实践题

  1. 用户管理实验

    bash 复制代码
    # 任务1:创建测试用户
    # 使用adduser命令创建一个名为testuser的用户
    # 设置全名为"测试用户"
    # 添加注释信息:开发工程师
    
    # 任务2:设置用户权限
    # 将testuser添加到sudo组
    # 设置密码有效期为60天
    # 设置密码到期前14天警告
    
    # 任务3:修改用户属性
    # 修改testuser的shell为/bin/zsh
    # 修改用户注释信息为"高级开发工程师"
    # 将用户添加到developers和webadmin组
    
    # 任务4:验证配置
    # 查看testuser的详细信息
    # 查看testuser所属的所有组
    # 查看testuser的密码策略
  2. 组管理实验

    bash 复制代码
    # 任务1:创建项目组
    # 创建名为project_alpha的组,GID为2001
    # 创建名为project_beta的组,GID为2002
    
    # 任务2:设置组权限
    # 为project_alpha组设置密码
    # 设置admin1为project_alpha的组管理员
    
    # 任务3:管理组成员
    # 将testuser添加到project_alpha组
    # 将dev1,dev2,dev3添加到project_beta组
    # 查看各组的详细信息
    
    # 任务4:修改组属性
    # 将project_alpha重命名为project_alpha_new
    # 修改project_alpha_new的GID为2003
  3. 密码策略配置

    bash 复制代码
    # 任务1:设置全局密码策略
    # 编辑/etc/login.defs文件,设置:
    # PASS_MAX_DAYS = 90
    # PASS_MIN_DAYS = 7
    # PASS_WARN_AGE = 14
    
    # 任务2:为特定用户设置策略
    # 为testuser设置密码永不过期
    # 为admin用户设置密码30天过期
    
    # 任务3:批量策略应用
    # 为开发组所有用户设置密码60天过期
    # 为管理员用户设置密码永不过期
    
    # 任务4:策略验证
    # 查看所有用户的密码策略
    # 生成密码即将过期的用户列表

6.3 高级应用题

  1. 企业用户管理系统设计

    复制代码
    假设你是一家公司的系统管理员,公司有以下组织结构:
    - 管理层:CEO, CTO, CFO
    - 技术部门:开发工程师,测试工程师,运维工程师
    - 业务部门:销售,市场营销,客户服务
    - 行政部门:人力资源,财务管理,行政助理
    
    请设计:
    1. 用户命名规范
    2. 组结构设计(包括主组和附加组)
    3. 权限矩阵(不同部门对不同资源的访问权限)
    4. 密码策略规范
    5. 编写批量用户创建脚本
  2. 安全审计脚本开发

    复制代码
    开发一个用户管理安全审计脚本,功能包括:
    1. 检查空密码用户
    2. 检查密码永不过期的用户
    3. 检查长期未登录的用户
    4. 检查组成员配置异常
    5. 生成安全审计报告
    6. 提供修复建议
  3. 文件权限管理案例

    复制代码
    公司有一个共享项目目录/project/shared,需要实现以下需求:
    - 管理层:有完全控制权限
    - 开发部:读权限,可创建文件但不能删除他人的文件
    - 测试部:读权限,可修改测试相关文件
    - 行政部门:读权限,可删除过期文件
    
    请设计:
    1. 目录结构
    2. 组划分
    3. 文件权限配置
    4. 实施步骤和命令

6.4 故障排除题

  1. 用户登录问题诊断

    复制代码
    现象:用户testuser无法登录系统,登录时立即被踢出
    
    请按照以下步骤进行诊断:
    1. 检查用户的shell设置
    2. 检查用户密码状态
    3. 检查用户家目录权限
    4. 检查用户是否被锁定
    5. 检查系统日志
    6. 提供解决方案
  2. 组权限问题排查

    复制代码
    现象:用户alice在developers组中,但无法访问group组权限的文件
    
    请进行以下检查:
    1. 验证alice是否确实在developers组中
    2. 检查文件所属组
    3. 检查文件权限设置
    4. 验证alice的登录状态
    5. 检查文件系统挂载选项
    6. 提供修复方案
  3. 密码策略配置错误

    复制代码
    现象:密码策略配置后,系统提示密码策略无效
    
    请检查以下配置:
    1. /etc/login.defs文件语法
    2. PAM模块配置
    3. 用户现有密码状态
    4. 系统时间同步
    5. 提供正确的配置方案

6.5 综合项目题

  1. 多用户Web服务器用户管理系统

    复制代码
    设计一个支持多用户的Web服务器用户管理方案,包括:
    
    功能要求:
    1. 支持用户自主注册和登录
    2. 不同用户有独立的Web目录
    3. 用户可以使用FTP上传文件
    4. 用户之间可以共享文件(可选)
    5. 支持用户配额管理
    6. 提供用户使用统计
    
    技术要求:
    1. 使用虚拟用户系统
    2. 集成Web管理界面
    3. 实现自动化脚本
    4. 包含安全防护措施
    5. 提供完整的文档
    
    请提交:
    1. 系统设计文档
    2. 实施步骤说明
    3. 配置文件模板
    4. 管理脚本代码
    5. 测试验证方案
  2. 企业级用户生命周期管理系统

    复制代码
    开发一个企业级用户管理解决方案:
    
    管理功能:
    1. 用户入职流程自动化
    2. 用户权限变更流程
    3. 用户离职流程自动化
    4. 定期权限审计
    5. 用户行为监控
    6. 合规性检查
    
    技术实现:
    1. 数据库存储用户信息
    2. Web管理界面
    3. 审批工作流
    4. 审计日志系统
    5. 邮件通知系统
    6. 备份和恢复机制
    
    请提供:
    1. 系统架构设计
    2. 数据库设计
    3. API接口文档
    4. 前端界面设计
    5. 部署运维指南

答案提示

基础概念题答案

  1. 填空题:

    • 0,1-999,1000-65535
    • 7,用户名,密码占位,UID,GID,注释,家目录,Shell
    • 9,加密密码,密码最大有效天数
    • 主组,主组,附加组
  2. 选择题:

    • d) 以上都可以
    • b) adduser
    • d) b和c正确
  3. 判断题:

    • ×(系统用户可能不需要密码)
    • ×(-G会覆盖原有组)
    • ×(系统关键组不能删除)
    • ×(-l只用于查看)
    • ×(主组成员不显示在第4字段)

通过本章的学习和实践,您应该能够熟练掌握Ubuntu 22.04系统中用户和组管理的基本操作,理解Linux用户管理机制,并能够在实际工作中应用这些知识进行系统用户管理和安全配置。

相关推荐
小鸡吃米…2 小时前
基于Python监督学习的人工智能:分类
人工智能·python·学习
DisonTangor2 小时前
英伟达开源会打游戏的Agent模型,模仿学习人类游戏视频进行训练
学习·游戏
OliverH-yishuihan2 小时前
用windows10的linux子系统在visual studio2019中用C语言开发linux项目
linux·运维·visual studio
xujiangyan_2 小时前
k8s中的pod管理及其优化
linux·容器·kubernetes
脏脏a2 小时前
【Linux】进程地址空间
linux·运维·服务器·进程地址空间
旖旎夜光2 小时前
Linux(5)(下)
linux·学习
后端小张2 小时前
【AI 学习】深入解析卷积神经网络(CNN):理论、实现与应用
人工智能·深度学习·神经网络·opencv·学习·自然语言处理·cnn
努力的小帅2 小时前
Linux_进程间通信(Linux入门到精通)
linux·c++·centos·共享内存·进程通信·命名管道·管道的学习
齐鲁大虾2 小时前
Linux 系统上的开发 C/S 架构的打印程序
linux·c语言·架构