Linux多用户权限管理通过用户组、sudo和ACL分层协作:组策略定义身份归属,sudo控制特权命令执行,ACL实现文件级细粒度访问。

Linux多用户权限管理核心在于精准控制谁能在何时、以何种身份执行哪些命令。sudo、ACL和用户组策略不是孤立工具,而是分层协作的权限体系:组策略定义“谁属于哪类人”,sudo决定“谁能执行什么特权操作”,ACL解决“对特定文件或目录的精细访问”。关键不在堆砌命令,而在理解每层的职责边界。
用户与组:权限分配的基础单元
Linux一切权限最终落到用户(user)和组(group)。普通用户默认仅对自己主目录有完全控制权;系统通过/etc/group管理组成员关系,/etc/passwd记录用户基本信息。
- 添加用户并指定初始组:
useradd -m -g developers alice(-g 指定主组,-m 创建家目录) - 将现有用户加入附加组:
usermod -aG sudo,developers bob(-aG 确保不覆盖已有组) - 验证组成员关系:
groups alice或id bob
注意:用户登录后新加入的组不会立即生效,需重新登录或用 newgrp developers 切换当前会话组。
sudo:授予有限且可审计的特权执行能力
sudo 不是给 root 密码,而是按策略授权特定命令。配置集中在 /etc/sudoers(必须用 visudo 编辑,防止语法错误锁死系统)。
- 让 developers 组所有成员免密运行 systemctl:
%developers ALL=(ALL) NOPASSWD: /bin/systemctl start nginx - 限制某用户只能重启服务,不能停用或查看状态:
alice ALL=(root) /bin/systemctl restart nginx - 日志审计:启用
Defaults logfile="/var/log/sudo.log"记录每次 sudo 调用
避免写 ALL=(ALL) ALL —— 这等同于交出 root 权限,违背最小权限原则。
ACL:突破传统UGO模型的文件级细粒度控制
当用户不属于文件所属组,又需要读写某个特定目录时,ACL 是唯一可靠方案。它为文件/目录额外添加访问条目,不破坏原有权限结构。
- 启用 ACL(如 ext4 文件系统):
mount -o remount,acl /(永久生效需在 /etc/fstab 中添加 acl 参数) - 给用户 carol 对 /srv/app/data 的读写权限:
setfacl -m u:carol:rw /srv/app/data - 给组 devs 设置默认 ACL(影响新建文件):
setfacl -d -m g:devs:rwx /srv/app/data - 查看 ACL:
getfacl /srv/app/data;清除 ACL:setfacl -b /srv/app/data
ACL 权限优先级高于传统 rwx,但受 mask 限制 —— 实际生效权限是 ACL 条目与 mask 的交集,可用 setfacl -m m::rwx 调整 mask。
策略协同:一个典型运维场景示例
假设 Web 项目部署在 /var/www/myapp,需实现:开发组可更新代码,运维组可重启服务,审计员只读日志。
- 创建专用组:
groupadd webdev && groupadd webops && groupadd webaudit - 设置目录归属:
chown -R :webdev /var/www/myapp,chmod 2775 /var/www/myapp(2 表示 SGID,新文件自动继承组) - 用 ACL 授予 webops 对 systemctl 的权限(通过 sudo),同时允许 webaudit 读取 /var/log/myapp/*.log:
setfacl -m g:webaudit:r /var/log/myapp/ - 在 /etc/sudoers 中授权:
%webops ALL=(root) /bin/systemctl restart myapp
这样各角色权限清晰隔离,操作可追溯,无需共享账号或开放过度权限。










