用户分三类

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

下一篇:用户组管理。