在Linux和Unix-like系统中,管理本地用户和组是系统管理员的核心任务之一,涉及到系统安全、资源分配和权限控制等多个方面,通过命令行工具可以高效地完成用户和组的创建、修改、删除及权限配置等操作,以下将详细介绍常用的本地用户和组管理命令及其使用方法。

用户管理命令
- 
useradd:创建新用户
useradd是用于创建新用户的基本命令,其常用选项包括:-m:自动创建用户的主目录(默认位于/home/username)。-s:指定用户的默认登录shell(如/bin/bash或/sbin/nologin)。-G:将用户添加到附加组(需与主组区分)。-c:添加用户注释信息(如用户全名)。
示例:sudo useradd -m -s /bin/bash -c "John Doe" john,此命令会创建用户john,并设置其主目录、默认shell和注释信息。
 - 
passwd:修改用户密码
创建用户后需通过passwd命令设置密码,普通用户只能修改自己的密码,而root用户可以修改任何用户的密码。
示例:sudo passwd john,系统会提示输入并确认新密码,若要锁定用户密码(禁用登录),可使用sudo passwd -l john;解锁则用sudo passwd -u john。 - 
usermod:修改用户属性
usermod用于修改已存在用户的属性,常用选项包括:-l:修改用户名(如sudo usermod -l newname oldname)。-aG:将用户添加到新组(需与-G区分,-aG保留原有组,-G会覆盖)。-d:修改用户主目录路径(需配合-m移动目录内容)。-s:更改默认shell。
示例:sudo usermod -aG sudo john,将john添加到sudo组以获取管理员权限。
 - 
userdel:删除用户
使用userdel可以删除用户账户,选项-r会同时删除用户的主目录及相关文件。
示例:sudo userdel -r john,彻底删除用户john及其主目录。
(图片来源网络,侵删) - 
su与sudo:切换用户身份
su:切换到其他用户(如su - username切换至目标用户并加载其环境变量)。sudo:以其他用户身份(通常是root)执行命令,需配置/etc/sudoers文件,普通用户加入sudo组后,可通过sudo command执行管理员命令。
 
组管理命令
- 
groupadd:创建新组
用于创建新的用户组,选项-g可指定组ID(GID),若不指定则系统自动分配。
示例:sudo groupadd developers,创建名为developers的组。 - 
groupmod:修改组属性
用于修改组名或GID,选项-n修改组名,-g修改GID。
示例:sudo groupmod -n dev_team developers,将组名从developers改为dev_team。 - 
groupdel:删除组
删除已存在的组,需确保组内无用户成员。
示例:sudo groupdel dev_team。
(图片来源网络,侵删) - 
gpasswd:管理组成员
用于添加或删除组成员,常用选项:-a:将用户加入组(如sudo gpasswd -a john developers)。-d:将用户移出组(如sudo gpasswd -d john developers)。-M:直接设置组成员列表(覆盖原有成员)。
示例:sudo gpasswd -M user1,user2 developers,将developers组的成员设置为user1和user2。
 - 
groups与id:查看用户所属组
groups [username]:显示用户所属的所有组(默认为当前用户)。id [username]:显示用户的UID、GID及所属组信息,更详细。
示例:id john,输出类似uid=1001(john) gid=1001(john) groups=1001(john),27(sudo)。
 
用户与组配置文件
- 用户信息文件:
/etc/passwd,每行记录用户信息,格式为username:password:UID:GID:comment:home_dir:shell。 - 用户密码文件:
/etc/shadow,存储加密后的密码及密码过期时间等信息,仅root可读。 - 组信息文件:
/etc/group,记录组名、GID及组成员,格式为groupname:password:GID:user_list。 
权限与ACL(访问控制列表)
除了基本的用户/组权限(rwx),还可通过setfacl和getfacl管理更精细的权限,为用户john设置对目录/data的读写权限:  
sudo setfacl -m u:john:rw /data
常见操作示例表格
| 操作场景 | 命令示例 | 说明 | 
|---|---|---|
| 创建用户并设置主目录和shell | sudo useradd -m -s /bin/bash alice | 
创建用户alice,自动创建主目录 | 
| 修改用户登录shell | sudo usermod -s /usr/sbin/nologin bob | 
禁用用户bob的登录功能 | 
| 将用户添加到多个组 | sudo usermod -aG sudo,docker alice | 
将alice加入sudo和docker组 | 
| 创建系统用户(无主目录) | sudo useradd -r -s /sbin/nologin service | 
创建系统服务账户,不创建主目录 | 
| 设置组密码 | sudo gpasswd developers | 
为developers组设置组密码(较少使用) | 
| 查看用户UID和GID | id -u alice 和 id -g alice | 
分别显示alice的UID和GID | 
相关问答FAQs
Q1:如何批量创建多个用户?
A1:可通过结合useradd和循环命令实现批量创建,使用for循环和用户列表文件:  
sudo for user in user1 user2 user3; do useradd -m -s /bin/bash $user; done
或使用newusers命令(从格式化文件批量创建):  
echo -e "user1:password1:1001:1001::/home/user1:/bin/bash\nuser2:password2:1002:1002::/home/user2:/bin/bash" | sudo newusers
Q2:如何修改用户的主目录而不丢失文件?
A2:使用usermod命令的-d(修改目录路径)和-m(移动原目录内容)选项,将用户alice的主目录从/home/alice改为/data/alice:  
sudo usermod -d /data/alice -m alice
此命令会自动将原主目录下的文件移动到新路径,并更新/etc/passwd中的主目录记录,若新目录不存在,需提前创建并设置权限(如sudo mkdir -p /data/alice && sudo chown alice:alice /data/alice)。
