Skip to content

用户管理

概述

Linux 是一个多用户操作系统,用户管理是系统管理的核心任务之一。本章介绍用户和组的概念、创建、修改和删除操作。

用户和组的概念

用户类型

类型UID 范围说明
root0超级用户,拥有所有权限
系统用户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 maxwell

whoami - 当前用户名

bash
$ whoami
maxwell

who - 登录用户

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 -a

w - 用户活动

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 bash

last - 登录历史

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 maxwell

groups - 用户所属组

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 alice

adduser - 交互式创建(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 username

chsh - 修改 Shell

bash
# 修改自己的 Shell
$ chsh -s /bin/zsh

# 修改其他用户的 Shell
$ sudo chsh -s /bin/zsh username

# 查看可用 Shell
$ cat /etc/shells

chfn - 修改用户信息

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 username

deluser(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 -1

chage - 密码过期策略

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 username

sudo 权限

配置 sudo

编辑 /etc/sudoers(使用 visudo):

bash
$ sudo visudo
bash
# 用户权限规则
# 用户名 主机=(运行身份) 命令
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 用户管理:

  • 用户操作useraddusermoduserdel
  • 组操作groupaddgroupmodgroupdel
  • 密码管理passwdchage
  • sudo 权限:配置和使用 sudo
  • 用户切换susudo su

良好的用户管理是系统安全的基础。遵循最小权限原则,只给用户必要的权限。


上一章:正则表达式

下一章:进程管理