Linux 的权限介绍
- uvim管理员
Linux 的权限系统主要围绕“用户类型”、“权限类型”和“特殊权限”三个核心维度展开。
一、 核心基础:权限的三要素 (rwx)
Linux 中的每个文件或目录都有对应的读
r(read)、写w(write)、执行x(execute) 权限:- r (4):读取文件内容,或列出目录下的文件名。
- w (2):修改文件内容,或在目录下创建/删除/重命名文件。
- x (1):作为程序执行文件,或进入(cd)目录。
二、 用户身份划分 (ugo)
Linux 将权限检查分为三个维度:
1. u (User/Owner):文件所有者。
2. g (Group):文件所属组的成员。
3. o (Others):既不是所有者,也不在组内的其他用户。
4. (还有一个 a - All,代表 u+g+o)当我们执行
ls -l时,会看到类似-rwxr-xr--的字符串,解析如下:
* 第一个字符:文件类型 (-是普通文件,d是目录,l是软链接等)。
* 接下来的rwx:所有者权限。
* 中间的r-x:所属组权限。
* 最后的r--:其他用户权限。三、 权限的数学表示法 (Chmod)
为了方便管理,Linux 用八进制数表示权限组合:
*r=4, w=2, x=1, -=0
* 例如rwxr-xr-x即为755(4+2+1, 4+0+1, 4+0+1)常用命令:
chmod
*chmod 755 file:所有者读写执行,组和其他只读执行。
*chown user:group file:修改文件所属用户和组。四、 进阶:特殊权限 (SUID, SGID, Sticky Bit)
作为资深工程师,这部分内容在处理复杂的生产环境问题(如权限提升、共享目录冲突)时至关重要:
1. SUID (Set User ID):
* 表现:文件所有者权限位上的x被s替换。
* 作用:当普通用户执行该文件时,程序会以“文件所有者”的权限运行(如/usr/bin/passwd,普通用户改密码需要修改/etc/shadow,这是只有 root 才能读写的)。
2. SGID (Set Group ID):
* 表现:组权限位上的x被s替换。
* 作用:在目录下启用时,新创建的文件会继承该目录的所属组,而不是创建者的主组,非常适合团队协作目录。
3. Sticky Bit (粘滞位):
* 表现:其他用户权限位上的x被t替换。
* 作用:常见于/tmp目录。使用后,用户即便对目录有写权限,也只能删除/修改属于自己的文件,不能删除别人的文件。五、 资深工程师的排查逻辑
当你遇到“Permission Denied”时,我通常建议按以下步骤排查:
1. 检查所有者与组:确认你是谁 (
whoami),以及文件属于谁 (ls -l)。
2. 检查路径权限:这是最容易忽略的。即使文件本身权限 777,但如果其上一级目录没有x权限,你依然无法进入该目录访问文件。
3. 检查 ACL (Access Control Lists):如果传统ugo不够用,使用getfacl和setfacl查看是否有更细粒度的控制。
4. 检查安全模块:排除了文件权限仍报错?检查 SELinux 或 AppArmor 的策略日志(通常在/var/log/audit/audit.log或dmesg中),它们在内核层面对进程行为有额外限制。
5. 检查文件挂载选项:如果是在外部存储或 NFS 上,检查挂载参数是否包含noexec(禁止执行)或ro(只读)。思考建议:
在生产环境中,“最小权限原则 (Principle of Least Privilege)” 是最高准则。尽量不要使用777,如果要授权,优先考虑通过用户组权限变更来实现,而不是盲目打开文件权限。对于这段权限原理,你是在具体的项目部署中遇到了阻碍,还是希望深入理解这块的系统安全?我可以针对具体场景为你深入细化。
- 暂无回复