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

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

1. 前言

Linux 是多用户系统。

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

常见场景:

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

本文重点讲解:

bash 复制代码
useradd
passwd
usermod
groupadd
sudo
visudo

2. 查看当前用户信息

查看当前用户名:

bash 复制代码
whoami

查看 UID、GID 和所属组:

bash 复制代码
id

示例:

bash 复制代码
uid=1000(user) gid=1000(user) groups=1000(user),27(sudo)

含义:

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

3. /etc/passwd

用户基础信息存放在:

bash 复制代码
/etc/passwd

查看:

bash 复制代码
cat /etc/passwd

一行示例:

text 复制代码
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

密码哈希存放在:

bash 复制代码
/etc/shadow

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

bash 复制代码
sudo cat /etc/shadow

不要手动编辑密码字段。

修改密码使用:

bash 复制代码
passwd

root 修改其他用户密码:

bash 复制代码
sudo passwd username

5. /etc/group

用户组信息存放在:

bash 复制代码
/etc/group

查看:

bash 复制代码
cat /etc/group

一行示例:

text 复制代码
sudo:x:27:user

含义:

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

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


6. useradd:创建用户

创建用户:

bash 复制代码
sudo useradd username

更常用写法:

bash 复制代码
sudo useradd -m -s /bin/bash devuser

参数:

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

设置密码:

bash 复制代码
sudo passwd devuser

Ubuntu/Debian 中也常用:

bash 复制代码
sudo adduser devuser

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


7. passwd:修改密码

修改当前用户密码:

bash 复制代码
passwd

root 修改其他用户密码:

bash 复制代码
sudo passwd devuser

锁定用户密码:

bash 复制代码
sudo passwd -l devuser

解锁:

bash 复制代码
sudo passwd -u devuser

查看密码状态:

bash 复制代码
sudo passwd -S devuser

8. usermod:修改用户

添加用户到附加组:

bash 复制代码
sudo usermod -aG groupname username

例如 Ubuntu 给 sudo 权限:

bash 复制代码
sudo usermod -aG sudo devuser

CentOS/RHEL 常用 wheel 组:

bash 复制代码
sudo usermod -aG wheel devuser

注意一定要用 -aG

如果只用 -G,可能会覆盖原来的附加组。

修改默认 shell:

bash 复制代码
sudo usermod -s /bin/bash devuser

禁止登录:

bash 复制代码
sudo usermod -s /usr/sbin/nologin devuser

修改家目录并迁移:

bash 复制代码
sudo usermod -d /new/home -m devuser

9. groupadd:创建用户组

创建组:

bash 复制代码
sudo groupadd developers

添加用户到组:

bash 复制代码
sudo usermod -aG developers alice
sudo usermod -aG developers bob

查看用户所属组:

bash 复制代码
groups alice
id alice

删除组:

bash 复制代码
sudo groupdel developers

10. 删除用户

删除用户:

bash 复制代码
sudo userdel devuser

删除用户并删除家目录:

bash 复制代码
sudo userdel -r devuser

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

bash 复制代码
ps -u devuser

11. sudo 是什么

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

例如:

bash 复制代码
sudo apt update
sudo systemctl restart nginx

查看当前用户 sudo 权限:

bash 复制代码
sudo -l

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

text 复制代码
user is not in the sudoers file

12. 配置 sudo 权限

Ubuntu/Debian:

bash 复制代码
sudo usermod -aG sudo devuser

CentOS/RHEL:

bash 复制代码
sudo usermod -aG wheel devuser

修改后需要重新登录。

也可以用:

bash 复制代码
sudo visudo

添加:

text 复制代码
devuser ALL=(ALL) ALL

允许免密 sudo:

text 复制代码
devuser ALL=(ALL) NOPASSWD: ALL

只允许重启 nginx:

text 复制代码
devuser ALL=(ALL) /usr/bin/systemctl restart nginx

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


13. 服务用户

正式服务不要直接用 root 运行。

可以创建专门的服务用户:

bash 复制代码
sudo useradd -r -s /usr/sbin/nologin myapp

设置目录归属:

bash 复制代码
sudo chown -R myapp:myapp /opt/myapp

systemd 中指定:

ini 复制代码
[Service]
User=myapp
Group=myapp
ExecStart=/opt/myapp/app

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


14. 多人协作目录

创建组:

bash 复制代码
sudo groupadd project

添加用户:

bash 复制代码
sudo usermod -aG project alice
sudo usermod -aG project bob

创建目录:

bash 复制代码
sudo mkdir /srv/project
sudo chown root:project /srv/project
sudo chmod 2775 /srv/project

2775 中的 2 是 SGID 位。

作用是:目录中新建文件继承目录所属组。


15. 常见问题

15.1 用户加入 sudo 组后不生效

重新登录。

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

15.2 普通用户无法访问目录

检查:

bash 复制代码
ls -ld /path/to/dir
id username

要看:

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

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

说明系统找不到对应用户名。

可以重新修改归属:

bash 复制代码
sudo chown newuser:newgroup file.txt

16. 小结

用户管理可以总结为:

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

常用命令:

bash 复制代码
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 权限和服务器安全会清晰很多。

相关推荐
2023自学中1 天前
Linux 图形系统
linux
mounter6251 天前
高性能网络技术演进与创新探索:RDMA、eBPF/XDP 深度解析及 LSF/MM/BPF 2023 专题演讲
linux·ebpf·linux kernel·kernel·rdma·xdp
名字还没想好☜1 天前
Python itertools 实战:用 groupby、chain、islice 优雅处理大数据流
linux·windows·python·迭代器·itertools
ziguo11221 天前
深入浅出 C/C++ 数据类型:从入门到踩坑
linux·c语言·c++·windows·visual studio
无垠的广袤1 天前
【工业树莓派 CM0 Dev Board】扩展板设计
linux·python·嵌入式硬件·pcb设计·模块化·传感器
会编程的土豆1 天前
MySQL 入门:库、表、行、主键是什么
linux·数据库·网络协议·http
△曉風殘月〆1 天前
如何在Linux中安装Qt开发环境
linux·运维·qt
不会就选b1 天前
Linux之文件--fd,重定向
linux
三十岁老牛再出发1 天前
07.26每日总结
linux·c语言·mysql
fengyehongWorld1 天前
Linux update-alternatives命令
linux