用户和权限
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 usernamesudo 配置
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/htmlchown - 修改所有者
# 修改文件所有者
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 directoryumask - 默认权限掩码
# 查看当前 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最佳实践
- 最小权限原则:只授予用户完成工作所需的最小权限。
- 避免直接使用 root:通过
sudo执行管理命令,而非长期以 root 身份登录。 - 合理使用群组:通过群组管理权限比逐个配置用户更高效。
- 定期审计:定期检查
/etc/passwd和/etc/group,清理不再需要的用户和群组。 - 保护敏感文件:确保
/etc/shadow、SSH 密钥等文件权限正确(600 或更严格)。
Last updated on