Linux中查看文件与目录特殊权限需用ls -l和stat:第4位s/S为setuid,第7位s/S为setgid,第10位t/T为sticky bit;数字表示分别为4、2、1,可组合相加;目录中setuid无效,setgid使新文件继承组,sticky bit限制删除权。

Linux 中查看文件与目录的特殊权限,关键在于识别 setuid(s)、setgid(s)和 sticky bit(t) 这三类标志,它们分别出现在权限字符串的用户、组、其他权限位上,且会替代原本的 x(若原无执行权则显示为 S 或 T)。
用 ls -l 识别符号形式的特殊权限
ls -l 是最常用方式,输出权限字段共 10 位,其中第 4、7、10 位是判断特殊权限的关键位置:
-
第 4 位(所有者执行位):若为
s表示 setuid(-rwsr-xr-x),S表示有 setuid 但无执行权(-rwSr-xr-x) -
第 7 位(所属组执行位):若为
s表示 setgid(-rwxr-sr-x),S表示有 setgid 但无执行权(-rwxr-Sr-x) -
第 10 位(其他用户执行位):若为
t表示 sticky bit(-rwxr-xr-t),T表示有 sticky 但无执行权(-rwxr-xr-T)
例如:drwxrwsr-t 表示这是一个目录,启用了 setgid(组内新建文件自动继承该组)和 sticky bit(如 /tmp,仅文件所有者可删除自己文件)。
用 stat 查看八进制与明确标识
stat 能清晰显示特殊权限对应的八进制值及文字说明:
- setuid 对应数字 4(如
4755→-rwsr-xr-x) - setgid 对应数字 2(如
2755→-rwxr-sr-x) - sticky bit 对应数字 1(如
1755→-rwxr-xr-t) - 组合时相加:如
3755= 2 + 1 → setgid + sticky;6755= 4 + 2 → setuid + setgid;7755= 4 + 2 + 1 → 全启用
运行 stat /usr/bin/passwd 可看到 Access: (4755/-rwsr-xr-x),确认其 setuid 属性。
注意目录与文件的语义差异
特殊权限对文件和目录作用不同,需结合上下文理解:
-
setuid 文件:运行时进程有效 UID 变为文件所有者(常用于
passwd、sudo) - setuid 目录:无实际效果(Linux 忽略目录的 setuid)
- setgid 文件:运行时进程有效 GID 变为文件所属组(较少见)
- setgid 目录:在此目录中新建的文件/子目录自动继承该目录的所属组(协作场景常用)
-
sticky bit 目录:仅文件所有者、目录所有者或 root 可删除或重命名该目录下的文件(
/tmp的核心保护机制) - sticky bit 文件:已废弃,无意义
排查隐藏的特殊权限(ACL 或扩展属性)
如果 ls -l 权限末尾带 +(如 -rw-r--r--+ ),说明存在 ACL 或扩展属性,此时特殊权限可能被覆盖或补充:
- 用
getfacl filename查看是否通过 ACL 显式授予了类似 setgid 的行为 - 用
lsattr filename检查是否设置了不可变(i)、追加(a)等扩展属性(虽非传统“特殊权限”,但影响操作)











