第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

课后练习

  1. 基础练习

    • 创建一个新的用户账户
    • 修改用户账户的属性
    • 删除用户账户
    • 查看用户账户的信息
  2. 进阶练习

    • 创建一个系统用户
    • 批量创建多个用户账户
    • 修改用户的登录shell和主目录
    • 锁定和解锁用户账户
  3. 思考问题

    • /etc/passwd和/etc/shadow文件的作用是什么?
    • 如何区分系统用户和普通用户?
    • 为什么要为系统用户设置登录shell为/sbin/nologin?
    • 批量创建用户时,如何自动为每个用户设置初始密码?

总结

本集介绍了Linux系统中用户账户管理的相关知识,包括:

  • 用户账户的基本概念和类型
  • 用户配置文件(/etc/passwd和/etc/shadow)的结构
  • 使用useradd命令创建用户账户
  • 使用usermod命令修改用户账户属性
  • 使用userdel命令删除用户账户
  • 查看用户信息的命令和方法
  • 用户账户的默认配置
  • 用户账户管理的最佳实践

用户账户管理是Linux系统管理的重要组成部分,掌握用户账户管理的技能对于维护系统安全和稳定运行至关重要。在下一集中,我们将介绍Linux系统中用户组管理的相关知识。

« 上一篇 文件系统维护 下一篇 » 用户组管理