要准确找出仅含 sticky bit 的共享目录,需用 find / -xdev -type d -perm -1000 -perm -o+w 2>/dev/null:先限定目录类型,再精确匹配 sticky bit(-1000),最后筛选其他用户可写的不安全共享场景,避免 /7000 引起的 setuid/setgid 误报。

直接用 find -perm /7000 并不能准确找出仅含 sticky bit 的目录,因为 /7000 是“按位或”匹配,它会命中任何设置了 setuid(4000)、setgid(2000)或 sticky(1000)中**至少一个**的文件或目录,范围太宽,且不区分类型。
真正要找“具备 sticky bit 的共享目录”,得三步结合
sticky bit(粘滞位)本身只对**目录**有意义(如 /tmp),它的八进制值是 1000。但单独用 -perm /1000 仍可能误匹配普通文件(虽然无实际作用),所以必须限定类型 + 精确判断权限位。
-
先限定为目录:加
-type d,排除文件干扰 -
再精准匹配 sticky bit:用
-perm -1000(注意是减号),表示“该目录权限中必须包含 sticky bit”,其他权限不限(如 1777、1755、1700 都符合) -
最后加安全筛选逻辑:共享目录通常意味着组或其他用户有写权限(
w),否则无法“共享”。所以建议补上-perm -g+w,o+w或更常见的是-perm -o+w(其他用户可写)——这类目录才真正构成“不安全共享”风险
推荐命令(兼顾准确与实用)
查找所有设置了 sticky bit 且其他用户可写的目录(典型不安全共享场景):
find / -xdev -type d -perm -1000 -perm -o+w 2>/dev/null
-
-xdev:不跨文件系统,避免扫描挂载点(如/proc、/sys、NFS),提升速度并减少权限错误提示 -
2>/dev/null:屏蔽“Permission denied”等无关报错 - 结果示例:
/tmp、/var/tmp、/run/user/1000等——这些是系统级共享目录,需确认是否被滥用
为什么不用 /7000?
/7000 对应二进制 111000000000,它同时检查 setuid、setgid、sticky 三个位。只要任意一个被置 1 就命中,比如:
-
4755(带 setuid 的可执行文件)→ 被误报,但它不是目录,也不涉及共享 -
2755(带 setgid 的目录)→ 被误报,虽有共享意图,但和 sticky 无关 - 真正目标
1777→ 虽然也会被匹配,但混在大量噪音里,难定位
延伸:确认 sticky 是否生效的快速验证
对查出的目录,运行:
ls -ld /path/to/dir
观察最末位权限字符:若显示为 t(如 drwxrwxrwt)表示 sticky 已启用;若为 T,说明其他用户无执行权(x),sticky 实际无效。


















