基础概念:用户与组在Linux中的角色
核心要点:在 Linux 系统中,Linux权限管理的基本单位是 用户和组。每个用户拥有唯一的 UID,每个组拥有唯一的 GID,文件和目录的访问控制通过所有者、组以及其他用户的权限位共同决定。
本文围绕 Linux权限管理,从用户到组的全面解析与实操要点展开,帮助运维与开发人员理解并落地实施。理解 主组(primary group)与 附加组(supplementary groups)的区别,是后续权限分配的基础。
在文件系统层面,所有权通常由一个用户与一个主组共同承担,而对于多用户协作,组权限提供了一种更高效的权限组管理方式。
用户ID与组ID的关系
每个文件和目录都绑定一个所有者用户以及一个所属组,系统通过 UID 和 GID 做权限校验,决定谁能够读取、写入或执行。
通过 getfacl、setfacl 等工具,可以在基本权限之外添加更细粒度的访问控制,以满足复杂的协作场景。
权限模型的核心要素
Linux 权限模型将访问权限分为三类对象:用户(Owner)、组(Group)、其他人(Others)。每一类对象都拥有 r、w、x 三个权限位的组合。
常见的权限表示法有三位数字的八进制表示法,例如 755 表示所有者具备 rwx 权限,组和其他人仅具备 rx 权限;也可使用符号形式如 chmod u=rwx,g=rx,o=rx 进行逐项设置。
查看权限的最直观方式是使用 ls -l,你会看到诸如 drwxr-xr-x 的权限字符串,分别对应文件类型、所有者、组和其他人的权限。
用户管理实操:新增、修改与删除
创建用户与设置初始环境
创建用户通常使用 useradd 或 adduser,并可指定 主目录、默认 shell 以及初始的 附加组。
示例:创建用户 alice,设定家目录、默认 shell、并加入 wheel 组,以便在需要时具备 sudo 权限。
sudo useradd -m -s /bin/bash -G wheel alice
sudo passwd alice
除了以上参数,还可以通过其他选项定制 UID、GID、禁止登录等策略。
修改用户属性与移除用户
需要调整用户属性时,常用 usermod,例如变更主组、增加附加组、或修改 UID/GID。
sudo usermod -d /home/alice -m alice # 移动家目录
sudo usermod -aG developers alice # 添加附加组
sudo usermod -g developers alice # 设置主组为 developers
删除用户时要注意是否保留家目录与数据,删除操作为 userdel,并可结合 -r 同时删除家目录。
sudo userdel -r alice # 删除用户及其家目录
组管理实操:创建、修改与权限关联
创建与分配组
组的创建使用 groupadd,通过组名对权限集合进行分组管理。
sudo groupadd developers
把用户加入组往往通过 usermod -aG 实现,这样不会移除用户已有的其他组。

sudo usermod -aG developers alice
组成员与权限绑定
通过设置文件或目录的所有权中的 组,以及对该组赋予相应的权限来实现访问控制。
sudo chown :developers /srv/project
sudo chmod 770 /srv/project
权限体系核心:文件与目录权限、默认权限
权限位的三类对象:用户、组、其他
Linux 的权限分为 所有者、所属组、以及 其他人,这三组对象各自的权限决定了对目标对象的访问能力。
常用表示法包括 rwx 的组合,以及八进制表示法 如 755。这是快速评估权限的常用方法。
查看权限的直观方式是执行 ls -l /path,你会看到类似 drwxr-xr-x 的字符串,指示不同对象的权限分布。
设置权限与默认umask
chmod 提供符号和数值两种方式来设置权限;在日常管理中,数值法更高效,而符号法更具可读性。
sudo chmod 750 /srv/project
sudo chmod u=rwx,g=rx,o= /srv/project
umask 控制新建文件和目录的默认权限,若为 022,新建文件对其他用户不可写。
umask 022
高级特性:ACL、Setuid/Setgid/Sticky 位
ACL的基本操作
当三类对象权限不足以覆盖需求时,可以使用 ACL,为特定用户或组赋予额外权限。
getfacl /srv/project
setfacl -m u:david:rwx /srv/project
setfacl -m g:developers:rw- /srv/project
可以设置默认 ACL,确保新创建的子目录和文件也继承权限。
setfacl -d -m u:david:rwx /srv/project
特殊位的作用与使用场景
Setuid、Setgid、以及 Sticky 位用于提升执行权限或限定行为范围。
# 设置目录及其新文件继承组
sudo chmod g+s /srv/project
# 设置一个可执行文件以提升权限
sudo chmod u+s /usr/bin/somebinary
Sticky 位常见于公共临时目录,如 /tmp,用于防止非所有者删除其他用户的文件。
sudo chmod 1777 /tmp
强制访问控制与安全上下文
SELinux与AppArmor概述
除了传统权限,SELinux或 AppArmor 提供了更严格的强制访问控制,基于策略对进程和对象进行约束。
通过工具如 ls -Z 可以查看安全上下文,策略通过 semanage、restorecon 等工具进行调整。
查看与调整安全上下文
示例:查看目录的上下文标签,并在需要时修复上下文。
ls -Z /var/www
sudo restorecon -Rv /var/www
实战演练:从创建用户到权限分配的完整流程
案例一:为一个项目团队创建账号与权限
步骤概述:创建组、创建用户、分配主组、设置目录权限,以及应用 ACL。
sudo groupadd devteam
sudo useradd -m -s /bin/bash -g devteam -G sudo devlead
sudo passwd devlead
sudo mkdir -p /srv/project
sudo chown :devteam /srv/project
sudo chmod 2770 /srv/project # 组可写,新的文件继承组
sudo setfacl -m u:devlead:rwx /srv/project
案例二:为公共资源配置最小权限
目标:让团队成员能够协作编辑,但不暴露系统敏感目录。
sudo mkdir /srv/shared
sudo chown :shared /srv/shared
sudo chmod 2770 /srv/shared
通过 ACL 将成员逐一授权,确保可读取与写入,而其他用户不可访问。
sudo setfacl -m u:alice:rw- /srv/shared
sudo setfacl -m u:bob:rw- /srv/shared


