Ubuntu 用户与权限管理指南

Ubuntu 用户与权限管理指南

Ubuntu 的用户与权限系统是 Linux 安全模型的核心,基于 DAC(自主访问控制) + sudo 特权提升 + AppArmor/MAC 补充。理解它能帮你避免 90% 的“权限拒绝”“sudo 失效”“误删系统文件”等常见生产事故。

本文针对 Ubuntu 24.04 LTS / 26.04 LTS(主流服务器版本),聚焦本地用户管理(/etc/passwd & /etc/group),不涉及 LDAP/AD/SSSD 等企业级集中认证。

1. 核心概念速览

  • 用户(User):每个进程都运行在某个用户身份下。UID 0 = root(全权),普通用户 UID ≥ 1000(Ubuntu 默认从 1000 开始)。
  • 组(Group):用户可属于多个组,主组(primary group)通常与用户名同名,补充组(supplementary groups)决定额外权限。
  • 文件权限:rwx(读/写/执行) × 拥有者 / 所属组 / 其他用户。八进制:7=rwx, 6=rw-, 4=r– 等。
  • sudo:允许普通用户以 root 或其他身份执行命令。Ubuntu 默认把初始用户加入 sudo 组,实现“无密码 root 账户”策略。
  • /etc/sudoers:sudo 规则文件。用 visudo 编辑(语法检查 + 安全锁)。

2. 查看当前用户与组状态(日常诊断)

Bash
whoami             # 当前用户
id                 # UID、GID、主组 + 所有补充组
groups             # 只列出所属组(简洁)
id -u wu           # 只看 UID
cat /etc/passwd | grep wu   # 用户条目(密码占位 x 表示用 shadow)
cat /etc/group | grep sudo  # 谁在 sudo 组里
getent group sudo  # 更可靠(支持 NSS,如 LDAP)

生产常用:lastlog 查看最后登录时间,排查异常账户。

3. 创建用户(推荐方式对比)

Ubuntu 强烈推荐用 adduser 而非 useradd(后者更底层,选项多但易出错)。

命令交互式?创建家目录?设置密码?默认 shell?推荐场景
sudo adduser wu/bin/bash99% 日常创建普通用户
sudo useradd -m -s /bin/bash -G sudo deploy是(-m)否(需 passwd)指定脚本批量创建、CI/CD 账户

adduser 示例(最友好):

Bash
sudo adduser deploy
# 交互:全名、房间号、电话等可回车跳过
# 最后问是否加到 sudo 组 → 直接 y(生产常见)

useradd + 后续设置(脚本化):

Bash
sudo useradd -m -s /bin/bash -c "Deploy User" -G sudo,www-data deploy
sudo passwd deploy

系统/服务账户(无登录、无家目录):

Bash
sudo adduser --system --group --no-create-home --shell /usr/sbin/nologin nginx

4. 修改用户(usermod 最常用)

Bash
sudo usermod -l newname oldname          # 改用户名(慎用,家目录不自动改)
sudo usermod -aG docker,www-data wu      # 加补充组(-a 必须有!否则覆盖所有组)
sudo usermod -G "" wu                    # 清空所有补充组(危险)
sudo usermod -L wu                       # 锁定账户(! 开头密码)
sudo usermod -U wu                       # 解锁
sudo usermod -e 2026-12-31 wu            # 设置账户过期日期
sudo usermod -s /bin/zsh wu              # 改默认 shell

经典错误:忘了 -a,导致用户从 sudo 组被踢出。

5. 删除用户(小心家目录与进程)

Bash
sudo userdel wu           # 只删用户条目(家目录残留)
sudo userdel -r wu        # 删用户 + 家目录 + 邮件池

先检查:

  • ps -u wu 或 pkill -u wu 杀残留进程
  • lsof -u wu 查看打开的文件

6. 组管理(groupadd / groupmod / gpasswd)

Bash
sudo groupadd monitoring          # 创建新组
sudo groupmod -n newname oldname  # 改组名
sudo gpasswd -a wu monitoring     # 加用户到组
sudo gpasswd -d wu monitoring     # 删用户从组
sudo gpasswd -A wu monitoring     # 设 wu 为组管理员(可自己加人)

查看组成员:getent group monitoring

7. 授予 sudo 权限(三种主流方式)

方式一:加 sudo 组(最简单,Ubuntu 默认推荐)

Bash
sudo usermod -aG sudo deploy
# 或创建时:adduser 时选 yes

方式二:精细控制(编辑 /etc/sudoers.d/)

Bash
sudo visudo -f /etc/sudoers.d/deploy
# 内容示例:
deploy ALL=(ALL:ALL) ALL                    # 等同 sudo 组
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx  # 无密码重启 nginx
deploy ALL=(www-data) ALL                   # 以 www-data 身份运行所有命令
%monitoring ALL=(ALL) NOPASSWD: /usr/sbin/reboot  # 整个组无密码重启

方式三:现代替代 sudo-rs(Ubuntu Server 文档推荐,2025+ 逐渐流行)

  • 安装 sudo-rs(Rust 重写,更安全、更快)
  • 配置类似,但支持 TOML 格式,审计更强

8. 文件权限与所有权管理(每天都在用)

Bash
# 改拥有者(最常见 web 修复 403)
sudo chown -R www-data:www-data /var/www/html

# 只改组
sudo chgrp -R docker /data/volumes

# 权限(八进制最直观)
chmod 755 script.sh          # rwxr-xr-x
chmod 640 config.yaml        # rw-r-----
chmod -R 750 /app            # 目录常用
chmod +x *.sh                # 批量加执行权限

# setgid(新文件继承目录组,常用于协作目录)
chmod g+s /data/team

# sticky bit(/tmp 经典,只允许拥有者删)
chmod +t /tmp

口诀

  • 可执行脚本/目录 → 755
  • 配置文件 → 640 / 600
  • 共享写目录 → 775 + setgid
  • 绝不 777(除非临时测试)

9. 生产最佳实践

  • 禁用 root SSH 登录:/etc/ssh/sshd_config → PermitRootLogin no → 重启 ssh
  • 用密钥 + sudo:所有运维走普通用户 + 密钥,禁用密码登录
  • 最小权限原则:服务跑专用用户(如 nginx、postgres),绝不 root
  • 定期审计:sudo apt install acct → lastcomm、aureport(需 auditd)
  • sudo 日志:默认在 /var/log/auth.log,监控 “COMMAND=” 异常
  • 密码策略:/etc/login.defs 或 PAM(pwquality)强制复杂密码 + 过期
  • 避免直接编辑 /etc/sudoers:永远用 visudo 或 /etc/sudoers.d/
  • 备份关键文件:/etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/sudoers*

掌握这些,你就能安全、优雅地管理一台或一群 Ubuntu 服务器的用户与权限。

Telegram
Telegram服务器销售@IDCSELL