楼层: 首页/ 软件技术/ Linux/ 用户与组管理
04

用户与组管理

Users & Groups · sudo

Linux 是"多人共用一台机器"设计出来的。每个人是一个用户,用户按组归类——文件归谁、谁能改,全看这一套。公司服务器上几十个开发共用一台机器,全靠它分权。

增删改用户和组

用户管理四件套(root 或 sudo 执行)

sudo useradd -m -s /bin/bash alice # 建用户:-m 建家目录,-s 指定登录 shell sudo passwd alice # 给她设密码(会提示输两遍) sudo usermod -aG docker alice # -aG 把她追加进 docker 附加组 sudo userdel -r alice # 删用户,-r 连家目录一起删 sudo groupadd developers # 建组 sudo gpasswd -a alice developers # 把 alice 加进组 sudo gpasswd -d alice developers # 把她移出组 sudo groupdel developers # 删组 id alice # 看 alice 的 UID、GID、在哪些组 who # 谁现在登录着 w # 谁在登录着,还在干嘛
$ id alice uid=1001(alice) gid=1001(alice) groups=1001(alice),998(docker),1002(developers) $ w 10:20:01 up 2 days, 1:12, 2 users, load average: 0.10, 0.05, 0.01 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT jianma pts/0 1.2.3.4 10:15 3.00s 0.05s 0.01s w

三个关键配置文件

用户和组的信息不是存在数据库里,就是三个明文文件。会读它们,排障时心里有底:

文件内容(冒号分隔的一行)
/etc/passwd每个用户一行:alice:x:1001:1001::/home/alice:/bin/bash —— 用户名:密码占位:UID:GID:备注:家目录:登录shell。密码不存这,x 只是占位。
/etc/shadow存加密后的密码和密码有效期,只有 root 能读。alice:$6$xxxx$...:19900:0:99999:7:::。
/etc/group每个组一行:docker:x:998:alice,bob —— 组名:占位:GID:组成员。

su 与 sudo:临时当超人

su - alice → 彻底切换成另一个人
需要对方密码。- 很关键:带它才会加载对方的环境变量和家目录。
su - = switch user 完整切换。日常不推荐总切 root,容易"身在 root 不自知"。
sudo 命令 → 以 root 身份跑这一条命令
输自己的密码,临时获得一次管理员权限。比如 sudo apt update。
这是正确姿势:平时普通用户,需要提权时 sudo 一下。日志还会记下来谁在什么时候干了啥,便于审计。

权谁能 sudo?写在 sudoers 里

能用 sudo 的人,登记在 /etc/sudoers 文件和 /etc/sudoers.d/ 目录里。千万别拿 vim 直接编辑它(写错一个符号 sudo 就废了),要用专门的 sudo visudo——它会在保存前自动检查语法。

常见写法:jianma ALL=(ALL) NOPASSWD: /usr/bin/apt 表示"允许 jianma 不用密码跑 apt"。给新人配权限时,按命令精细化授权,而不是直接 ALL=(ALL) ALL 全开。

推荐做法:往 /etc/sudoers.d/ 放独立文件

# sudo visudo -f /etc/sudoers.d/jianma jianma ALL=(ALL) NOPASSWD: /usr/bin/apt, /usr/bin/systemctl reload nginx # 这样不用动主 sudoers 文件,权限按人分文件,干净好管理
useradd 不建家目录?踩过的人能绕地球一圈

useradd alice 在很多发行版上默认不建 /home/alice、不给默认 shell,登录后环境一塌糊涂。永远带参数:sudo useradd -m -s /bin/bash alice。Ubuntu 上更省心的是直接 sudo adduser alice,它会交互式问你家目录和密码,一步到位。

记
本章小结

① 用户 useradd -m -s /bin/bash 建、userdel -r 删;组 groupadd / gpasswd -a/-d 管成员。

② 三个文件 /etc/passwd(账户)、/etc/shadow(密码)、/etc/group(组)。

③ 日常用 sudo 临时提权,改 sudoers 走 visudo,别 su 到 root 当常态。