用户体系:Linux 创建/删除用户及用户组的权限逻辑
搞 Linux 运维,用户和用户组这块要是没理清,权限问题能让你排查一整天。主机选这篇 Linux 教程直接给你讲清楚:怎么创建用户、怎么删、用户组怎么管,以及背后的权限逻辑到底是啥。别问为什么,照着做能少踩一半的坑。

用户管理的核心:/etc/passwd 与 /etc/shadow
Linux 的用户信息不是藏着掖着的,全写在明面上。两个文件你得记住:
• `/etc/passwd`:存用户基本信息,比如用户名、UID、GID、家目录、登录 shell。
• `/etc/shadow`:存加密后的密码和有效期信息,只有 root 能读。
老手都知道,改用户信息直接编辑这两个文件是高风险操作,语法错一个系统就炸了。所以老老实实用命令。
创建用户:useradd 和 adduser 的区别
`useradd` 是底层命令,`adduser` 是 Perl 脚本(Debian/Ubuntu 下),会交互式引导你设密码、填信息。生产环境推荐 `useradd`,可控性更强。
创建一个名为 devops 的用户,指定 UID 为 2000,家目录为 /home/devops
useradd -u 2000 -m -d /home/devops devops
-u: 指定 UID
-m: 自动创建家目录
-d: 指定家目录路径
设置密码(必须执行,否则用户无法登录)
passwd devops
**常见报错**:如果你忘了 `-m`,用户没有家目录,SSH 登录时可能报 `Could not chdir to home directory`。别慌,手动创建目录并改权限就行:
mkdir /home/devops
chown devops:devops /home/devops
删除用户:userdel 的坑
很多人直接 `userdel username`,结果用户删了,家目录和邮件池还留着。时间长了系统里一堆垃圾。
彻底删除用户,连家目录和邮件池一起清掉
userdel -r username
-r: 删除家目录和邮件池
**老鸟叮嘱**:删除用户前,务必确认该用户没有在运行的进程。用 `ps -u username` 查一下,否则进程会变成孤儿进程,占用资源。万一删错了,数据恢复起来很麻烦。
用户组管理:groupadd、groupdel 与 gpasswd
用户组的作用是简化权限分配。比如你要给 10 个开发人员统一访问 `/var/www` 的权限,把他们加到 `devgroup` 组里,然后改目录组权限就够了。
创建和删除用户组
创建一个名为 devgroup 的组,指定 GID 为 3000
groupadd -g 3000 devgroup
删除用户组(前提是组内没有用户作为主要组)
groupdel devgroup
**注意**:如果某个用户的主要组(primary group)是你要删的组,得先改掉那个用户的主要组,或者删掉用户,否则报错 `groupdel: cannot remove the primary group of user 'xxx'`。
把用户加到组里:usermod 和 gpasswd
`usermod -aG` 是最常用的,但容易犯一个低级错误:不加 `-a`(append)会覆盖用户之前的所有附加组。
把 devops 用户加到 devgroup 组(保留原有组)
usermod -aG devgroup devops
-a: 追加,不加的话会替换掉用户当前的所有附加组
也可以用 gpasswd 更直观
gpasswd -a devops devgroup
查看用户所属组
查看 devops 用户属于哪些组
groups devops
输出示例:devops : devops devgroup sudo
权限逻辑背后的核心:UID、GID 与 umask
用户和组的权限最终落到文件上。Linux 文件权限有三组:owner、group、others。每个文件都记录着 UID 和 GID,而不是用户名。
umask 决定新建文件的默认权限
`umask` 是个掩码,决定你新建文件或目录时默认权限是什么。默认文件是 644(rw-r–r–),目录是 755(rwxr-xr-x)。如果你改了 umask,比如设为 027,那新建文件权限就是 640。
查看当前 umask 值
umask
输出:0022(常见值)
临时修改 umask(仅当前 shell 生效)
umask 0027
**排障场景**:用户 A 创建的文件,用户 B 打不开。查一下 umask 和文件所属组。如果 A 的 umask 太严,B 又不在文件所属组里,自然没权限。解法:调整 umask 或把 B 加到文件所属组。
实战:给 WordPress 站点目录分配权限
假设你有个 VPS,跑着 WordPress,Web 用户是 `www-data`,开发用户是 `devops`。你想让两人都能写 `/var/www/html`。
创建 web 组
groupadd webgroup
把两个用户加到 webgroup
usermod -aG webgroup www-data
usermod -aG webgroup devops
修改目录所属组
chown -R www-data:webgroup /var/www/html
设置目录权限:owner 可读写执行,group 可读写执行,others 只读执行
chmod -R 775 /var/www/html
这样 `www-data` 和 `devops` 都能正常上传文件、修改插件。别给 777,那是给自己挖坑。
老鸟叮嘱:别用 root 直接操作日常任务
很多 Linux 小白图省事,直接 root 登录操作。一旦误删用户或改错权限,系统可能直接瘫痪。正确的做法是用普通用户,需要提权时用 `sudo`。
把 devops 加到 sudo 组(Debian/Ubuntu)
usermod -aG sudo devops
之后 devops 就能用 sudo 执行命令
sudo useradd newuser
**高风险操作提醒**:千万不要手贱去删 `root` 用户或者 `sudo` 组。删了 root,你连系统都进不去,只能进救援模式重建。我见过不止一个运维翻过这个车。
FAQ
**Q1:Linux 创建用户后无法登录 SSH 怎么办?**
A:检查 `/etc/ssh/sshd_config` 里是否禁止了密码登录(`PasswordAuthentication no`)。如果开了密钥登录,确认用户家目录下有 `.ssh/authorized_keys` 且权限为 600。
**Q2:用户组删除时提示“cannot remove the primary group”是什么原因?**
A:这个用户组是某个用户的 primary group,不能直接删。先改掉那个用户的主要组:`usermod -g newgroup username`,再删组。
**Q3:Linux 小白可以直接用 root 账号操作吗?**
A:不推荐。root 权限太大,一个误操作就能让系统崩溃。建议用普通用户加 sudo,至少有个保护层。
**Q4:为什么我改了 umask 后新建文件权限还是 644?**
A:umask 只影响当前 shell 和子进程。如果你退出重登或换个终端,umask 恢复默认。要永久修改,把 `umask 0027` 写入 `/etc/profile` 或用户的 `~/.bashrc`。
**Q5:用 userdel -r 删用户后,数据还能恢复吗?**
A:基本不能。`-r` 会直接删除家目录和邮件池,不走回收站。建议删前备份:`tar -czf backup.tar.gz /home/username`。
**Q6:如何查看一个用户属于哪些组?**
A:用 `groups username`。想查更细,看 `/etc/group` 文件,或者 `id username` 显示 UID、GID 和所有组。
转载请注明出处:https://www.zhujixuan.com/jishujiaocheng/9388.html 商家投稿邮箱:zhujixuanblog@qq.com
