6. 用户与组
6.1 用户管理命令
bash
# 添加用户(Ubuntu 推荐用 adduser 交互式)
sudo adduser john
# 或者用 useradd(需要手动设置密码等)
sudo useradd -m -s /bin/bash john
sudo passwd john
# 修改用户信息
sudo usermod -aG docker john # 将 john 添加到 docker 组
sudo usermod -s /bin/zsh john # 修改默认 Shell
sudo usermod -L john # 锁定账户
sudo usermod -U john # 解锁账户
# 删除用户
sudo userdel john # 删除用户(保留家目录)
sudo userdel -r john # 删除用户及家目录bash
$ sudo adduser john
Adding user `john' ...
Adding new group `john' (1001) ...
Adding new user `john' (1001) with group `john' ...
Creating home directory `/home/john' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for john
Enter the new value, or press ENTER for the default
Full Name []: John Smith
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] Y6.2 组管理
bash
# 创建组
sudo groupadd developers
# 将用户添加到组
sudo usermod -aG developers john
sudo usermod -aG developers jane
# 查看用户所属的组
groups john
id john
# 删除组
sudo groupdel developersbash
$ id john
uid=1001(john) gid=1001(john) groups=1001(john),27(sudo),1002(developers)
$ groups john
john : john sudo developers6.3 理解 /etc/passwd
bash
head -3 /etc/passwdbash
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
john:x:1001:1001:John Smith,,,:/home/john:/bin/bash每行以 : 分隔,共 7 个字段:
- 用户名:john
- 密码占位符:x(实际密码存在 /etc/shadow)
- UID:1001(用户 ID,0 = root)
- GID:1001(主组 ID)
- 描述信息:John Smith
- 家目录:/home/john
- 默认 Shell:/bin/bash
6.4 sudo — 临时提权
bash
# 以 root 权限执行单条命令
sudo apt update
# 切换到 root 用户的 Shell
sudo -i
# 以其他用户身份执行命令
sudo -u www-data cat /var/www/html/index.html
# 编辑 sudoers 文件(安全方式)
sudo visudo⚠️ 注意: ⚠️ 注意:永远不要直接编辑/etc/sudoers文件,使用visudo命令,它会检查语法错误。语法错误可能导致你失去 sudo 权限!
常见 sudoers 配置:
bash
# 允许 john 重启指定服务时无需密码
john ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
# 允许 developers 组执行特定命令
%developers ALL=(ALL) /usr/bin/systemctl restart nginx⚠️ 注意:
NOPASSWD: ALL等于给账号一把免密 root 钥匙,除非是在受控的自动化账号里并且配合严格的访问控制,否则不要这么写。更安全的做法是只放行确实需要的命令。