Linux 用户和用户组管理:useradd、passwd、sudo 实战

1. 前言

Linux 是多用户系统。
用户、用户组和 sudo 权限,是 Linux 权限管理的基础。

常见场景:

  • 创建普通用户;
  • 设置用户密码;
  • 给用户 sudo 权限;
  • 创建服务运行用户;
  • 多人共享项目目录;
  • 禁止 root 远程登录;
  • 修改文件所属用户和用户组。

本文重点讲解:

useradd
passwd
usermod
groupadd
sudo
visudo

2. 查看当前用户信息

查看当前用户名:

whoami

查看 UID、GID 和所属组:

id

示例:

uid=1000(user) gid=1000(user) groups=1000(user),27(sudo)

含义:

字段 说明
UID 用户 ID
GID 主用户组 ID
groups 附加用户组

3. /etc/passwd

用户基础信息存放在:

/etc/passwd

查看:

cat /etc/passwd

一行示例:

user:x:1000:1000:User:/home/user:/bin/bash

字段含义:

字段 含义
user 用户名
x 密码占位符
1000 UID
1000 GID
User 用户描述
/home/user 家目录
/bin/bash 默认 shell

现在密码不放在 /etc/passwd,而是放在 /etc/shadow


4. /etc/shadow

密码哈希存放在:

/etc/shadow

普通用户通常没有权限查看:

sudo cat /etc/shadow

不要手动编辑密码字段。
修改密码使用:

passwd

root 修改其他用户密码:

sudo passwd username

5. /etc/group

用户组信息存放在:

/etc/group

查看:

cat /etc/group

一行示例:

sudo:x:27:user

含义:

字段 说明
sudo 组名
x 组密码占位
27 GID
user 组内用户

用户组适合多人协作权限管理。


6. useradd:创建用户

创建用户:

sudo useradd username

更常用写法:

sudo useradd -m -s /bin/bash devuser

参数:

参数 作用
-m 创建家目录
-s 指定默认 shell

设置密码:

sudo passwd devuser

Ubuntu/Debian 中也常用:

sudo adduser devuser

adduser 更偏交互式,useradd 更偏底层命令和脚本化。


7. passwd:修改密码

修改当前用户密码:

passwd

root 修改其他用户密码:

sudo passwd devuser

锁定用户密码:

sudo passwd -l devuser

解锁:

sudo passwd -u devuser

查看密码状态:

sudo passwd -S devuser

8. usermod:修改用户

添加用户到附加组:

sudo usermod -aG groupname username

例如 Ubuntu 给 sudo 权限:

sudo usermod -aG sudo devuser

CentOS/RHEL 常用 wheel 组:

sudo usermod -aG wheel devuser

注意一定要用 -aG
如果只用 -G,可能会覆盖原来的附加组。

修改默认 shell:

sudo usermod -s /bin/bash devuser

禁止登录:

sudo usermod -s /usr/sbin/nologin devuser

修改家目录并迁移:

sudo usermod -d /new/home -m devuser

9. groupadd:创建用户组

创建组:

sudo groupadd developers

添加用户到组:

sudo usermod -aG developers alice
sudo usermod -aG developers bob

查看用户所属组:

groups alice
id alice

删除组:

sudo groupdel developers

10. 删除用户

删除用户:

sudo userdel devuser

删除用户并删除家目录:

sudo userdel -r devuser

删除前建议检查是否还有进程:

ps -u devuser

11. sudo 是什么

sudo 允许普通用户以 root 身份执行命令。

例如:

sudo apt update
sudo systemctl restart nginx

查看当前用户 sudo 权限:

sudo -l

如果没有权限,可能提示:

user is not in the sudoers file

12. 配置 sudo 权限

Ubuntu/Debian:

sudo usermod -aG sudo devuser

CentOS/RHEL:

sudo usermod -aG wheel devuser

修改后需要重新登录。

也可以用:

sudo visudo

添加:

devuser ALL=(ALL) ALL

允许免密 sudo:

devuser ALL=(ALL) NOPASSWD: ALL

只允许重启 nginx:

devuser ALL=(ALL) /usr/bin/systemctl restart nginx

推荐用 visudo,因为它会检查 sudoers 语法,避免写错后 sudo 全部失效。


13. 服务用户

正式服务不要直接用 root 运行。
可以创建专门的服务用户:

sudo useradd -r -s /usr/sbin/nologin myapp

设置目录归属:

sudo chown -R myapp:myapp /opt/myapp

systemd 中指定:

[Service]
User=myapp
Group=myapp
ExecStart=/opt/myapp/app

这样可以减少服务被攻击后的权限范围。


14. 多人协作目录

创建组:

sudo groupadd project

添加用户:

sudo usermod -aG project alice
sudo usermod -aG project bob

创建目录:

sudo mkdir /srv/project
sudo chown root:project /srv/project
sudo chmod 2775 /srv/project

2775 中的 2 是 SGID 位。
作用是:目录中新建文件继承目录所属组。


15. 常见问题

15.1 用户加入 sudo 组后不生效

重新登录。
用户组变化通常不会立刻影响已有会话。

15.2 普通用户无法访问目录

检查:

ls -ld /path/to/dir
id username

要看:

  • 用户是否属于对应组;
  • 目录是否有 x 权限;
  • 是否有上级目录权限;
  • 文件本身权限是否正确。

15.3 删除用户后文件显示数字 UID

说明系统找不到对应用户名。
可以重新修改归属:

sudo chown newuser:newgroup file.txt

16. 小结

用户管理可以总结为:

useradd:创建用户
passwd:设置密码
usermod:修改用户
groupadd:创建用户组
sudo:授权管理权限

常用命令:

whoami
id
cat /etc/passwd
cat /etc/group
sudo useradd -m -s /bin/bash devuser
sudo passwd devuser
sudo usermod -aG sudo devuser
sudo groupadd developers
sudo visudo
sudo userdel -r devuser

理解用户、用户组、sudo、文件归属后,Linux 权限和服务器安全会清晰很多。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐