用户管理
概述
Linux 是一个多用户操作系统,用户管理是系统管理的核心任务之一。本章介绍用户和组的概念、创建、修改和删除操作。
用户和组的概念
用户类型
| 类型 | UID 范围 | 说明 |
|---|---|---|
| root | 0 | 超级用户,拥有所有权限 |
| 系统用户 | 1-999 | 服务和守护进程使用 |
| 普通用户 | 1000+ | 日常使用的用户账户 |
用户相关文件
| 文件 | 说明 |
|---|---|
/etc/passwd | 用户账户信息 |
/etc/shadow | 加密的密码信息 |
/etc/group | 组信息 |
/etc/gshadow | 组密码信息 |
/etc/passwd 格式
username:x:UID:GID:comment:home_dir:shell
maxwell:x:1000:1000:Maxwell:/home/maxwell:/bin/bash| 字段 | 说明 |
|---|---|
| username | 用户名 |
| x | 密码占位符(实际在 shadow 中) |
| UID | 用户 ID |
| GID | 主组 ID |
| comment | 用户描述 |
| home_dir | 家目录 |
| shell | 登录 Shell |
/etc/shadow 格式
username:$6$salt$hash:lastchg:min:max:warn:inactive:expire:reserved| 字段 | 说明 |
|---|---|
| username | 用户名 |
| password | 加密的密码 |
| lastchg | 最后修改密码的天数(从 1970-01-01 起) |
| min | 密码最少使用天数 |
| max | 密码最长使用天数 |
| warn | 密码过期前警告天数 |
| inactive | 密码过期后账户禁用天数 |
| expire | 账户过期日期 |
/etc/group 格式
groupname:x:GID:members
developers:x:1001:alice,bob查看用户信息
id - 用户 ID 信息
bash
# 当前用户
$ id
uid=1000(maxwell) gid=1000(maxwell) groups=1000(maxwell),27(sudo),docker
# 指定用户
$ id alice
# 只显示 UID
$ id -u maxwell
# 只显示 GID
$ id -g maxwell
# 显示所有组
$ id -G maxwellwhoami - 当前用户名
bash
$ whoami
maxwellwho - 登录用户
bash
$ who
maxwell pts/0 2025-01-09 10:00 (192.168.1.100)
alice pts/1 2025-01-09 11:00 (192.168.1.101)
# 显示更多信息
$ who -aw - 用户活动
bash
$ w
10:30:00 up 5 days, 3:00, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
maxwell pts/0 192.168.1.100 10:00 0.00s 0.01s 0.00s w
alice pts/1 192.168.1.101 11:00 1:00m 0.00s 0.00s bashlast - 登录历史
bash
$ last
maxwell pts/0 192.168.1.100 Thu Jan 9 10:00 still logged in
alice pts/1 192.168.1.101 Thu Jan 9 09:00 - 09:30 (00:30)
# 最近 10 条
$ last -10
# 指定用户
$ last maxwellgroups - 用户所属组
bash
$ groups
maxwell sudo docker
$ groups alice
alice : alice developers创建用户
useradd - 添加用户
bash
# 基本创建
$ sudo useradd username
# 创建并设置家目录
$ sudo useradd -m username
# 指定家目录
$ sudo useradd -m -d /home/custom username
# 指定 Shell
$ sudo useradd -m -s /bin/bash username
# 指定主组
$ sudo useradd -m -g groupname username
# 指定附加组
$ sudo useradd -m -G sudo,docker username
# 指定 UID
$ sudo useradd -m -u 1500 username
# 添加描述
$ sudo useradd -m -c "Full Name" username
# 设置账户过期时间
$ sudo useradd -m -e 2025-12-31 username
# 完整示例
$ sudo useradd -m -s /bin/bash -c "Alice Smith" -G sudo,developers aliceadduser - 交互式创建(Debian 系)
bash
$ sudo adduser username
Adding user `username' ...
Adding new group `username' (1001) ...
Adding new user `username' (1001) with group `username' ...
Creating home directory `/home/username' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n]设置密码
bash
# 设置密码
$ sudo passwd username
New password:
Retype new password:
passwd: password updated successfully
# 修改自己的密码
$ passwd修改用户
usermod - 修改用户
bash
# 修改用户名
$ sudo usermod -l newname oldname
# 修改家目录
$ sudo usermod -d /home/newdir -m username
# 修改 Shell
$ sudo usermod -s /bin/zsh username
# 修改描述
$ sudo usermod -c "New Description" username
# 添加到附加组
$ sudo usermod -aG sudo username
$ sudo usermod -aG docker,developers username
# 更改主组
$ sudo usermod -g newgroup username
# 锁定账户
$ sudo usermod -L username
# 解锁账户
$ sudo usermod -U username
# 设置账户过期时间
$ sudo usermod -e 2025-12-31 usernamechsh - 修改 Shell
bash
# 修改自己的 Shell
$ chsh -s /bin/zsh
# 修改其他用户的 Shell
$ sudo chsh -s /bin/zsh username
# 查看可用 Shell
$ cat /etc/shellschfn - 修改用户信息
bash
$ sudo chfn username
Changing finger information for username.
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:删除用户
userdel - 删除用户
bash
# 只删除用户
$ sudo userdel username
# 删除用户和家目录
$ sudo userdel -r username
# 强制删除(即使用户已登录)
$ sudo userdel -f usernamedeluser(Debian 系)
bash
# 删除用户
$ sudo deluser username
# 删除用户和家目录
$ sudo deluser --remove-home username
# 删除用户的所有文件
$ sudo deluser --remove-all-files username组管理
创建组
bash
# 创建组
$ sudo groupadd groupname
# 指定 GID
$ sudo groupadd -g 1500 groupname
# 创建系统组
$ sudo groupadd -r systemgroup修改组
bash
# 重命名组
$ sudo groupmod -n newname oldname
# 修改 GID
$ sudo groupmod -g 1600 groupname删除组
bash
$ sudo groupdel groupname管理组成员
bash
# 将用户添加到组
$ sudo usermod -aG groupname username
$ sudo gpasswd -a username groupname
# 从组中移除用户
$ sudo gpasswd -d username groupname
# 设置组管理员
$ sudo gpasswd -A admin_user groupname
# 查看组成员
$ getent group groupname密码管理
passwd - 密码操作
bash
# 设置密码
$ sudo passwd username
# 锁定账户
$ sudo passwd -l username
# 解锁账户
$ sudo passwd -u username
# 删除密码(无密码登录)
$ sudo passwd -d username
# 强制下次登录修改密码
$ sudo passwd -e username
# 查看密码状态
$ sudo passwd -S username
username P 01/09/2025 0 99999 7 -1chage - 密码过期策略
bash
# 查看密码信息
$ sudo chage -l username
Last password change : Jan 09, 2025
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires: 7
# 设置最大使用天数
$ sudo chage -M 90 username
# 设置最小使用天数
$ sudo chage -m 7 username
# 设置警告天数
$ sudo chage -W 14 username
# 设置过期日期
$ sudo chage -E 2025-12-31 username
# 强制下次登录修改密码
$ sudo chage -d 0 usernamesudo 权限
配置 sudo
编辑 /etc/sudoers(使用 visudo):
bash
$ sudo visudobash
# 用户权限规则
# 用户名 主机=(运行身份) 命令
maxwell ALL=(ALL:ALL) ALL
# 组权限规则
%sudo ALL=(ALL:ALL) ALL
# 无密码执行
maxwell ALL=(ALL) NOPASSWD: ALL
# 限制命令
bob ALL=(ALL) /usr/bin/apt, /usr/bin/systemctl
# 别名
User_Alias ADMINS = alice, bob
Cmnd_Alias SERVICES = /usr/bin/systemctl
ADMINS ALL=(ALL) SERVICES添加用户到 sudo 组
bash
# 方法 1:使用 usermod
$ sudo usermod -aG sudo username
# 方法 2:编辑 sudoers
$ sudo visudo
# 添加:username ALL=(ALL:ALL) ALL使用 sudo
bash
# 以 root 身份执行
$ sudo command
# 以其他用户身份执行
$ sudo -u username command
# 切换到 root Shell
$ sudo -i
$ sudo su -
# 保持环境变量
$ sudo -E command
# 编辑文件
$ sudo -e /etc/hosts
$ sudoedit /etc/hosts切换用户
su - 切换用户
bash
# 切换到 root
$ su -
Password:
# 切换到其他用户
$ su - username
# 不加载用户环境
$ su username
# 执行单个命令
$ su - username -c "command"sudo su vs su
bash
# 使用 sudo su(使用当前用户密码)
$ sudo su -
# 使用 su(使用 root 密码)
$ su -实用技巧
批量创建用户
bash
#!/bin/bash
# 从文件批量创建用户
while IFS=: read username password; do
sudo useradd -m -s /bin/bash "$username"
echo "$username:$password" | sudo chpasswd
done < users.txt查找无密码用户
bash
$ sudo awk -F: '($2 == "" || $2 == "!") {print $1}' /etc/shadow查找 UID 为 0 的用户
bash
$ awk -F: '$3 == 0 {print $1}' /etc/passwd列出所有普通用户
bash
$ awk -F: '$3 >= 1000 && $3 < 65534 {print $1}' /etc/passwd小结
本章介绍了 Linux 用户管理:
- 用户操作:
useradd、usermod、userdel - 组操作:
groupadd、groupmod、groupdel - 密码管理:
passwd、chage - sudo 权限:配置和使用 sudo
- 用户切换:
su、sudo su
良好的用户管理是系统安全的基础。遵循最小权限原则,只给用户必要的权限。
上一章:正则表达式
下一章:进程管理