第26集:用户账户管理
教学目标
- 理解Linux系统中用户账户的基本概念
- 掌握使用useradd命令创建用户账户
- 掌握使用usermod命令修改用户账户属性
- 掌握使用userdel命令删除用户账户
- 了解/etc/passwd和/etc/shadow文件的结构
- 掌握查看用户账户信息的方法
- 了解用户账户的默认配置
- 掌握用户账户管理的最佳实践
核心知识点讲解
1. 用户账户概述
Linux是一个多用户操作系统,每个用户都有自己的用户账户。用户账户用于:
- 标识用户身份
- 控制用户对系统资源的访问权限
- 跟踪用户的活动
- 管理用户的文件和进程
2. 用户类型
Linux系统中的用户类型:
- 超级用户(root):UID为0,具有系统的所有权限
- 系统用户:UID范围通常为1-999,用于运行系统服务
- 普通用户:UID范围通常为1000及以上,用于日常操作
3. 用户配置文件
/etc/passwd文件
/etc/passwd文件存储用户账户的基本信息,格式为:
用户名:密码占位符:UID:GID:用户描述:主目录:登录shell字段说明:
- 用户名:用户的登录名
- 密码占位符:通常为"x",表示密码存储在/etc/shadow文件中
- UID:用户ID
- GID:用户的主组ID
- 用户描述:用户的注释信息
- 主目录:用户的家目录路径
- 登录shell:用户登录后使用的默认shell
/etc/shadow文件
/etc/shadow文件存储用户的密码信息,格式为:
用户名:加密密码:最后修改时间:最小密码年龄:最大密码年龄:密码警告时间:密码过期宽限期:账户过期时间:保留字段字段说明:
- 用户名:与/etc/passwd中的用户名对应
- 加密密码:使用哈希算法加密后的密码
- 最后修改时间:从1970年1月1日到密码最后修改的天数
- 最小密码年龄:密码可以修改的最小天数
- 最大密码年龄:密码必须修改的最大天数
- 密码警告时间:密码过期前的警告天数
- 密码过期宽限期:密码过期后的宽限天数
- 账户过期时间:账户过期的日期
- 保留字段:预留字段
4. useradd命令
useradd命令用于创建新的用户账户。
基本语法:
useradd [选项] 用户名常用选项:
| 选项 | 描述 |
|---|---|
-c |
指定用户描述信息 |
-d |
指定用户主目录 |
-e |
指定账户过期日期(格式:YYYY-MM-DD) |
-g |
指定用户的主组 |
-G |
指定用户的附加组 |
-m |
自动创建用户主目录 |
-M |
不创建用户主目录 |
-p |
指定加密后的密码 |
-s |
指定用户的登录shell |
-u |
指定用户的UID |
5. usermod命令
usermod命令用于修改用户账户的属性。
基本语法:
usermod [选项] 用户名常用选项:
| 选项 | 描述 |
|---|---|
-c |
修改用户描述信息 |
-d |
修改用户主目录 |
-e |
修改账户过期日期 |
-g |
修改用户的主组 |
-G |
修改用户的附加组 |
-l |
修改用户名 |
-s |
修改用户的登录shell |
-u |
修改用户的UID |
-L |
锁定用户账户 |
-U |
解锁用户账户 |
6. userdel命令
userdel命令用于删除用户账户。
基本语法:
userdel [选项] 用户名常用选项:
| 选项 | 描述 |
|---|---|
-r |
同时删除用户主目录和邮件文件 |
7. 查看用户信息的命令
- id:查看用户的UID、GID和所属组
- whoami:查看当前登录用户
- w:查看当前系统中的登录用户及其活动
- who:查看当前系统中的登录用户
- finger:查看用户的详细信息(需要安装)
8. 用户默认配置
/etc/default/useradd文件
/etc/default/useradd文件存储useradd命令的默认配置:
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/sh
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes/etc/skel目录
/etc/skel目录包含新用户主目录的默认文件:
.bashrc:bash shell的配置文件.bash_logout:用户退出登录时执行的命令.bash_profile:用户登录时执行的命令.profile:通用的登录配置文件
9. 用户账户管理的最佳实践
- 使用标准工具:使用useradd、usermod、userdel等标准命令管理用户
- 设置强密码:为所有用户设置强密码
- 定期检查:定期检查系统中的用户账户,删除不需要的账户
- 使用sudo:尽量使用sudo授权,而不是直接使用root账户
- 限制登录shell:对于系统账户,设置登录shell为/sbin/nologin
- 设置账户过期时间:对于临时账户,设置合理的过期时间
- 备份配置文件:定期备份/etc/passwd和/etc/shadow文件
操作示例
示例1:创建用户账户
# 创建基本用户账户
useradd user1
# 创建用户并指定主目录
useradd -d /home/user2 user2
# 创建用户并自动创建主目录
useradd -m user3
# 创建用户并指定登录shell
useradd -m -s /bin/bash user4
# 创建用户并指定描述信息
useradd -m -c "Test User" user5
# 创建用户并指定UID
useradd -m -u 1001 user6
# 创建用户并指定主组和附加组
useradd -m -g users -G wheel,video user7
# 创建系统用户(无主目录,无登录shell)
useradd -r -s /sbin/nologin systemuser
# 查看创建的用户
cat /etc/passwd | grep user示例2:修改用户账户
# 修改用户描述信息
usermod -c "Modified Test User" user1
# 修改用户主目录
usermod -d /home/newuser1 user1
# 修改用户登录shell
usermod -s /bin/zsh user1
# 修改用户名
usermod -l newuser1 user1
# 修改用户UID
usermod -u 1002 newuser1
# 修改用户主组
usermod -g staff newuser1
# 修改用户附加组(覆盖原有附加组)
usermod -G wheel newuser1
# 添加用户到附加组(不覆盖原有附加组)
usermod -aG video newuser1
# 锁定用户账户
usermod -L newuser1
# 解锁用户账户
usermod -U newuser1
# 设置账户过期时间
usermod -e 2023-12-31 newuser1
# 查看修改后的用户信息
id newuser1
cat /etc/passwd | grep newuser1示例3:删除用户账户
# 删除用户账户(保留主目录)
userdel user2
# 删除用户账户并同时删除主目录
userdel -r user3
# 验证用户是否被删除
cat /etc/passwd | grep user2
cat /etc/passwd | grep user3
ls -la /home/ | grep user3 # 应该不存在示例4:查看用户信息
# 查看当前登录用户
whoami
# 查看用户的UID、GID和所属组
id
id user4
# 查看当前系统中的登录用户
who
# 查看当前系统中的登录用户及其活动
w
# 查看用户的详细信息(需要安装finger)
# finger user4
# 查看用户的登录shell
echo $SHELL
# 查看用户的环境变量
env | grep USER
# 查看用户的主目录
echo $HOME示例5:用户默认配置
# 查看useradd的默认配置
cat /etc/default/useradd
# 查看/etc/skel目录的内容
ls -la /etc/skel/
# 查看/etc/skel目录中的文件内容
cat /etc/skel/.bashrc
cat /etc/skel/.bash_profile
# 自定义新用户的默认文件
# 在/etc/skel目录中添加或修改文件
# 例如:echo "echo 'Welcome to Linux!'" >> /etc/skel/.bashrc
# 创建新用户,验证默认文件是否生效
useradd -m testuser
cat /home/testuser/.bashrc示例6:用户账户管理脚本
# 创建用户管理脚本
cat > user_management.sh << 'EOF'
#!/bin/bash
# 显示菜单
echo "用户账户管理脚本"
echo "1. 创建用户"
echo "2. 修改用户"
echo "3. 删除用户"
echo "4. 查看用户信息"
echo "5. 退出"
read -p "请选择操作:" choice
case $choice in
1)
read -p "请输入用户名:" username
read -p "是否创建主目录?(y/n):" create_home
if [ "$create_home" = "y" ]; then
useradd -m $username
else
useradd $username
fi
echo "用户 $username 创建成功"
;;
2)
read -p "请输入要修改的用户名:" username
read -p "请输入新的登录shell:" shell
usermod -s $shell $username
echo "用户 $username 的登录shell修改为 $shell"
;;
3)
read -p "请输入要删除的用户名:" username
read -p "是否删除主目录?(y/n):" remove_home
if [ "$remove_home" = "y" ]; then
userdel -r $username
else
userdel $username
fi
echo "用户 $username 删除成功"
;;
4)
read -p "请输入要查看的用户名:" username
id $username
cat /etc/passwd | grep $username
;;
5)
echo "退出脚本"
exit 0
;;
*)
echo "无效的选择"
;;
esac
EOF
# 使脚本可执行
chmod +x user_management.sh
# 运行脚本
sudo ./user_management.sh示例7:批量创建用户
# 创建批量用户脚本
cat > create_users.sh << 'EOF'
#!/bin/bash
# 要创建的用户名列表
users=(user1 user2 user3 user4 user5)
# 批量创建用户
for user in "${users[@]}"; do
useradd -m $user
echo "用户 $user 创建成功"
done
# 查看创建的用户
cat /etc/passwd | grep user
EOF
# 使脚本可执行
chmod +x create_users.sh
# 运行脚本
sudo ./create_users.sh课后练习
基础练习:
- 创建一个新的用户账户
- 修改用户账户的属性
- 删除用户账户
- 查看用户账户的信息
进阶练习:
- 创建一个系统用户
- 批量创建多个用户账户
- 修改用户的登录shell和主目录
- 锁定和解锁用户账户
思考问题:
- /etc/passwd和/etc/shadow文件的作用是什么?
- 如何区分系统用户和普通用户?
- 为什么要为系统用户设置登录shell为/sbin/nologin?
- 批量创建用户时,如何自动为每个用户设置初始密码?
总结
本集介绍了Linux系统中用户账户管理的相关知识,包括:
- 用户账户的基本概念和类型
- 用户配置文件(/etc/passwd和/etc/shadow)的结构
- 使用useradd命令创建用户账户
- 使用usermod命令修改用户账户属性
- 使用userdel命令删除用户账户
- 查看用户信息的命令和方法
- 用户账户的默认配置
- 用户账户管理的最佳实践
用户账户管理是Linux系统管理的重要组成部分,掌握用户账户管理的技能对于维护系统安全和稳定运行至关重要。在下一集中,我们将介绍Linux系统中用户组管理的相关知识。