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 当常态。