Linux 用户管理
Linux 系统的用户管理是系统安全与资源分配的核心部分。用户通过命令行工具(如 useradd、userdel、passwd 等)和配置文件(如 /etc/passwd、/etc/shadow 等)完成用户账户的创建、修改和删除。
一. 用户分类
在 Linux 中,用户分为以下三类:
- 超级用户(root)
- UID 为
0
,拥有最高权限,可管理系统所有资源。 - 默认账户为
root
,通常用于系统维护和特权操作。
- UID 为
- 系统用户(服务用户)
- UID 范围为
1-999
,用于运行系统服务(如httpd
、mysql
)。 - 通常不允许登录系统,登录 shell 设置为
/sbin/nologin
。 - 注意:不同发行版对“系统 UID / 普通用户 UID”范围的规定不同(例如某些系统默认把小于 1000 的 UID 留给系统账号)。想确认本机范围可查看
/etc/login.defs
中的UID_MIN
/UID_MAX
、GID_MIN
/GID_MAX
。
- UID 范围为
- 普通用户
- UID 范围为
1000-65535
,用于日常操作和资源访问。 - 需通过
sudo
获取额外权限执行特权命令。
- UID 范围为
二. 用户管理命令
1. 创建用户
(1) 使用 useradd 命令
sudo useradd [选项] 用户名
- 常用选项:
-m
:自动创建用户的家目录(默认位于/home/用户名
)。-s SHELL
:指定用户默认的登录 Shell(如/bin/bash
)。-g GID
:指定用户的主组(GID 对应的组名或 ID)。-G G1,G2
:添加用户到多个附加组。-u UID
:手动指定用户的 UID。-c "注释"
:添加用户描述信息(如 "Development User")。-r
:创建系统用户(UID 自动分配在1-999
范围内)。
示例:
sudo useradd -m -s /bin/bash -g developers -G sudo,adm -u 1005 -c "Dev User" devuser
创建一个普通用户 devuser
,家目录为 /home/devuser
,主组为 developers
,附加组为 sudo
和 adm
,UID 为 1005
,描述为 "Dev User"。
(2) 使用 adduser 命令
sudo adduser 用户名
adduser
是useradd
的交互式封装工具,创建用户时会提示输入密码、确认信息等,适合新手使用。
2. 设置密码
使用 passwd
命令为用户设置或修改密码:
sudo passwd 用户名
- 其他选项:
passwd -l 用户名
:锁定用户账户。passwd -u 用户名
:解锁用户账户。passwd -e 用户名
:强制用户下次登录时修改密码。
示例:
sudo passwd devuser
执行后需输入并确认新密码。若未指定用户名,则默认修改当前用户的密码。
3. 修改信息
使用 usermod
命令调整用户属性:
sudo usermod [选项] 用户名
- 常用选项:
-l 新用户名
:修改用户名。-d 新家目录
:修改用户的家目录(需配合-m
选项迁移旧目录)。-g 新主组
:更改用户的主组。-G 新附加组
:替换用户的附加组(原附加组会被清除)。-aG 新附加组
:追加用户到附加组(不删除原有附加组)。-s 新Shell
:修改默认 Shell。
示例:
sudo usermod -aG docker devuser # 将 devuser 添加到 docker 组
sudo usermod -d /newhome/devuser -m devuser # 迁移家目录到 /newhome/devuser
4. 删除用户
使用 userdel
或 deluser
命令删除用户:
sudo userdel [选项] 用户名
- 常用选项:
-r
:同时删除用户的家目录和邮件目录(/var/spool/mail/用户名
)。-f
:强制删除用户(即使用户已登录)。
示例:
sudo userdel -r devuser # 删除用户及家目录
三. 用户组管理
1. 创建用户组
sudo groupadd [选项] 组名
- 常用选项:
-g GID
:手动指定组 ID。-r
:创建系统组(GID 自动分配在1-999
范围内)。
示例:
sudo groupadd -g 1005 developers # 创建 GID 为 1005 的组
2. 删除用户组
sudo groupdel 组名
- 注意事项:
- 无法删除当前存在成员的组。
- 删除组前需先移除其所有成员(通过
usermod -G
或gpasswd -M
)。
3. 修改用户组成员
从组移除用户:
sudo gpasswd -d 用户名 组名
添加用户到组:
sudo usermod -aG 组名 用户名
或使用 gpasswd
:
sudo gpasswd -a 用户名 组名
四. 用户与用户组的配置文件
1. /etc/passwd
- 作用:存储用户基本信息(所有用户均可读)。
示例:
devuser:x:1005:1005::/home/devuser:/bin/bash
格式:
用户名:密码占位符:UID:GID:描述信息:家目录:默认Shell
2. /etc/shadow
- 作用:存储用户密码加密信息(仅 root 可读)。
示例:
devuser:$6$randomsalt$hash:19123:0:99999:7:::
格式:
用户名:加密密码:上次修改时间:最小间隔:最大间隔:警告期:宽限期:过期日期:保留
3. /etc/group
- 作用:存储用户组信息。
示例:
developers:x:1005:devuser,root
格式:
组名:密码占位符:GID:组成员列表
4. /etc/gshadow
- 作用:存储用户组密码信息(仅 root 可读)。
格式:
组名:加密密码:组管理员:组成员
5. /etc/skel
/etc/skel
目录是Linux 系统中用于存储新用户默认配置文件模板的目录。
当创建一个新用户时,/etc/skel
目录下的所有文件和子目录都会被复制到新用户的家目录中,为新用户提供一个初始化的环境。
简单来说,它就像一个“用户模板”目录,方便系统管理员为新用户预设一些常用的配置文件,比如 .bashrc
, .profile
等。
五. 用户管理的注意事项
- 安全实践:
- 不要随意使用
777
权限,避免安全风险。 - 定期检查
/etc/passwd
和/etc/shadow
的权限(chown root:root /etc/shadow && chmod 600 /etc/shadow
)。
- 不要随意使用
- 系统用户与普通用户:
- 系统用户(UID 1-999)通常用于运行服务,禁止登录。
- 普通用户(UID ≥1000)用于日常操作,需通过
sudo
提权。
- 用户切换:
- 使用
su - 用户名
切换用户并加载环境变量。 - 使用
sudo -i
切换到 root 用户(需当前用户有 sudo 权限)。
- 使用
六. 综合案例
创建用户并赋予 sudo 权限
# 创建用户并自动创建家目录
sudo useradd -m -s /bin/bash devuser
# 设置密码
sudo passwd devuser
# 将用户添加到 sudo 组
sudo usermod -aG sudo devuser
# 验证用户信息
id devuser # 输出:uid=1005(devuser) gid=1005(devuser) groups=1005(devuser),27(sudo)
删除用户及其家目录
sudo userdel -r devuser