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

相关推荐
暮云星影4 小时前
全志linux开发屏幕适配(一)屏幕参数设置说明
linux·arm开发
swordbob5 小时前
NIO 的 Channel 里有多个 BIO 吗?
linux·网络·nio
Fcy6485 小时前
Linux下 信号的保存与捕捉
linux·中断·信号的捕捉·信号的保存
A_humble_scholar6 小时前
Linux(九) 进程管理完全指南:从入门到实战
linux·运维·chrome
江华森6 小时前
Linux 操作命令完全指南
linux·运维
rjszcb7 小时前
Linux,sensor调试笔记1,修改帧率,以及曝光上不去问题
linux
C++ 老炮儿的技术栈7 小时前
Ubuntu root账号自动登陆
linux·运维·服务器·c语言·c++·ubuntu·visual studio
2301_780789667 小时前
零信任架构中,身份感知防火墙(IAFW)的部署要点与最佳实践
linux·运维·服务器·人工智能·tcp/ip·架构
小狮子&8 小时前
ubuntu2604无法共享文件夹问题解决
linux·运维·服务器
biter down8 小时前
3:VMware Workstation 安装 Ubuntu 22.04 超详细教程
linux·运维·ubuntu