Skip to Content
文档运维系统管理用户和权限

用户和权限

Ubuntu 是一个多用户操作系统,合理的用户管理和权限配置是系统安全的基石。本文介绍如何在 Ubuntu 26.04 中创建和管理用户、配置群组以及理解文件权限体系。

用户管理

创建用户

使用 useradd 创建新用户:

# 创建用户并自动创建主目录 sudo useradd -m -s /bin/bash username # 同时设置密码 sudo passwd username

更推荐使用 adduser,它是一个交互式的封装脚本,会自动引导你完成设置:

sudo adduser username

修改用户属性

使用 usermod 修改已有用户的属性:

# 修改用户的默认 Shell sudo usermod -s /bin/zsh username # 修改用户主目录(同时移动文件) sudo usermod -d /home/newdir -m username # 锁定用户账户 sudo usermod -L username # 解锁用户账户 sudo usermod -U username # 修改用户名 sudo usermod -l newname oldname

删除用户

# 删除用户但保留主目录 sudo userdel username # 删除用户及其主目录 sudo userdel -r username

查看用户信息

# 查看当前用户 whoami # 查看用户 ID 和群组信息 id username # 列出所有用户 cat /etc/passwd # 查看当前登录的用户 who w

群组管理

创建和管理群组

# 创建新群组 sudo groupadd developers # 将用户添加到群组(保留现有群组) sudo usermod -aG developers username # 将用户添加到多个群组 sudo usermod -aG docker,sudo,developers username # 查看用户所属的群组 groups username # 查看群组的所有成员 getent group developers # 删除群组 sudo groupdel developers

主要群组与附加群组

每个用户都有一个主要群组(primary group)和零个或多个附加群组(supplementary groups):

# 修改用户的主要群组 sudo usermod -g newgroup username # 修改附加群组(-a 表示追加,不加 -a 会替换所有附加群组) sudo usermod -aG extragroup username

sudo 配置

Note

Ubuntu 26.04 默认使用 Rust 重写的 sudo-rs 替代传统 C 版 sudo。它兼容绝大多数常见的 sudoers 语法(用户/群组规则、NOPASSWD、ALL、/etc/sudoers.d/ 等),日常用法无差异。但部分冷门指令和第三方插件尚未实现。若某个依赖 sudo 的脚本报错或行为异常,可先用 sudo --version 确认当前实现,必要时临时安装传统版 sudo apt install sudo 排查,问题定位后再切回 sudo-rs。

基础用法

# 以 root 权限执行命令 sudo apt update # 切换到 root 用户 sudo -i # 以其他用户身份执行命令 sudo -u www-data command

将用户加入 sudo 群组

# Ubuntu 中 sudo 群组的成员拥有管理员权限 sudo usermod -aG sudo username

编辑 sudoers 文件

始终使用 visudo 编辑 sudoers 配置,它会在保存前进行语法检查:

sudo visudo

常见配置示例:

# 允许用户无密码执行所有命令 username ALL=(ALL) NOPASSWD: ALL # 允许用户只能执行特定命令 username ALL=(ALL) /usr/bin/systemctl restart nginx, /usr/bin/systemctl status nginx # 允许群组成员无密码执行 apt 命令 %developers ALL=(ALL) NOPASSWD: /usr/bin/apt

也可以在 /etc/sudoers.d/ 目录中创建独立配置文件:

sudo visudo -f /etc/sudoers.d/developers

文件权限基础

理解权限表示

Linux 文件权限由三组构成:所有者(owner)、群组(group)、其他人(others),每组包含读(r=4)、写(w=2)、执行(x=1)三种权限。

# 查看文件权限 ls -la # 输出示例: # -rwxr-xr-- 1 user group 4096 Jan 1 12:00 script.sh # │├─┤├─┤├─┤ # │ │ │ └── 其他人:r--(只读) # │ │ └── 群组:r-x(读和执行) # │ └── 所有者:rwx(读、写、执行) # └── 文件类型:- 普通文件,d 目录,l 链接

chmod - 修改权限

# 数字模式 chmod 755 script.sh # rwxr-xr-x chmod 644 config.txt # rw-r--r-- chmod 600 secret.key # rw------- # 符号模式 chmod u+x script.sh # 给所有者添加执行权限 chmod g+w file.txt # 给群组添加写权限 chmod o-r file.txt # 移除其他人的读权限 chmod a+r file.txt # 给所有人添加读权限 # 递归修改目录权限 chmod -R 755 /var/www/html

chown - 修改所有者

# 修改文件所有者 sudo chown newuser file.txt # 同时修改所有者和群组 sudo chown newuser:newgroup file.txt # 只修改群组 sudo chgrp newgroup file.txt # 递归修改目录的所有者 sudo chown -R www-data:www-data /var/www

特殊权限

# SUID - 以文件所有者身份执行 chmod u+s executable chmod 4755 executable # SGID - 以文件群组身份执行 / 目录中新文件继承群组 chmod g+s directory chmod 2755 directory # Sticky Bit - 只有文件所有者能删除文件(常用于 /tmp) chmod +t directory chmod 1777 directory

umask - 默认权限掩码

# 查看当前 umask umask # 设置 umask(新文件默认权限 = 0666 - umask,新目录 = 0777 - umask) umask 022 # 新文件 644,新目录 755 umask 077 # 新文件 600,新目录 700

要永久修改 umask,编辑 ~/.bashrc 或 /etc/login.defs。

ACL 扩展权限

当标准权限不够灵活时,可以使用 ACL(访问控制列表):

# 安装 ACL 工具 sudo apt install acl # 给特定用户添加权限 setfacl -m u:username:rwx /path/to/file # 给特定群组添加权限 setfacl -m g:groupname:rx /path/to/dir # 查看 ACL 设置 getfacl /path/to/file # 递归设置 ACL setfacl -R -m u:username:rwx /path/to/dir # 设置默认 ACL(新创建的文件自动继承) setfacl -d -m u:username:rwx /path/to/dir # 移除 ACL setfacl -x u:username /path/to/file

最佳实践

  1. 最小权限原则:只授予用户完成工作所需的最小权限。
  2. 避免直接使用 root:通过 sudo 执行管理命令,而非长期以 root 身份登录。
  3. 合理使用群组:通过群组管理权限比逐个配置用户更高效。
  4. 定期审计:定期检查 /etc/passwd 和 /etc/group,清理不再需要的用户和群组。
  5. 保护敏感文件:确保 /etc/shadow、SSH 密钥等文件权限正确(600 或更严格)。
Last updated on