用户分三类
root UID = 0 超级用户,能干一切
系统用户 UID 1-999 服务账号(nginx / mysql / postgres 等)
普通用户 UID 1000+ 给人用的账号
id 命令看自己:
id
# uid=1000(wadely) gid=1000(wadely) groups=1000(wadely),27(sudo)
/etc/passwd:用户清单
cat /etc/passwd | head -3
# root:x:0:0:root:/root:/bin/bash
# daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
# wadely:x:1000:1000:WadeLy,,,:/home/wadely:/bin/bash
每行 7 列,用冒号分隔:
用户名 : 密码占位 : UID : GID : 备注 : 家目录 : 登录 shell
密码占位=x→ 真正的密码哈希在/etc/shadow- 登录 shell 是
/usr/sbin/nologin→ 表示这账号不能登录(适合服务账号)
/etc/shadow:密码存这
只 root 能读:
sudo head -2 /etc/shadow
# root:$6$abc...$XYZ...::0:99999:7:::
# wadely:$6$def...$ABC...:19000:0:99999:7:::
$6$ = SHA-512 哈希;从来不存明文密码。
useradd:建用户
# 最简版(不太友好)
sudo useradd alice
# 没有家目录、没有密码、登录会失败
# 推荐写法
sudo useradd -m -s /bin/bash alice
sudo passwd alice # 设密码
参数:
| 参数 | 作用 |
|---|---|
-m |
创建家目录 /home/alice |
-s /bin/bash |
指定 shell |
-G sudo,docker |
加入额外组 |
-c "Alice" |
备注 |
-u 1500 |
指定 UID |
-r |
系统账号(UID < 1000) |
或者用更高层封装(Debian/Ubuntu 系):
sudo adduser alice # 交互式向导,自动创建家目录 + 设密码 + 备注
usermod:改用户
sudo usermod -aG sudo alice # 加入 sudo 组(-a 追加,-G 组)
sudo usermod -s /usr/bin/zsh alice # 改 shell
sudo usermod -L alice # 锁定(禁止登录)
sudo usermod -U alice # 解锁
sudo usermod -l new-name alice # 改用户名
⚠ 加组用
-aG不要光-G——光-G会替换所有附加组,不是追加。
userdel:删用户
sudo userdel alice # 删账号,保留家目录
sudo userdel -r alice # 同时删家目录和邮件
删之前先
who看是否在线,ps -u alice看有没有进程。
修改密码
passwd # 改自己
sudo passwd alice # root 改别人
sudo passwd -l alice # 锁定密码
sudo passwd -d alice # 删密码(空密码登录,**危险**)
实战:建一个 deploy 服务账号
# 1. 建账号(系统账号 + nologin + 指定家目录)
sudo useradd -r -m -d /opt/deploy -s /bin/bash deploy
# 2. 设 SSH key(普通密码不允许)
sudo mkdir -p /opt/deploy/.ssh
sudo cp ~/.ssh/authorized_keys /opt/deploy/.ssh/
sudo chown -R deploy:deploy /opt/deploy/.ssh
sudo chmod 700 /opt/deploy/.ssh
sudo chmod 600 /opt/deploy/.ssh/authorized_keys
# 3. 给 sudo(仅特定命令)
echo "deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart myapp" | sudo tee /etc/sudoers.d/deploy
下一篇:用户组管理。