1. 首页 > 技术教程 > 正文

用户体系:Linux 创建/删除用户及用户组的权限逻辑

用户体系:Linux 创建/删除用户及用户组的权限逻辑

搞 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