linux中目录不能设置suid权限,suid仅适用于有执行权限的二进制文件,对目录无效;设置后无s显示、无提权效果,内核直接忽略;常见混淆源于将sgid目录(drwxr-sr-x)误认为suid。

Linux 中目录不能设置 SUID 权限。
SUID(Set User ID)是专用于可执行文件(二进制程序) 的特殊权限,对目录完全无效。你执行 chmod u+s /some/dir 后,系统不会报错,但该目录的权限位上不会出现 s,也不会有任何提权效果——因为内核根本忽略目录上的 SUID 位。
✅ 正确事实:
- SUID 只作用于文件,且该文件必须有执行权限(x);
- 对目录设置 SUID 是无意义的操作,
ls -ld /dir永远不会显示-rwsr-xr-x这类带s的权限;- Linux 内核不支持目录级 SUID,这是 POSIX 和内核设计决定的硬性限制。
那么,为什么有人误以为“能给目录设 SUID”?
常见混淆来源:
- 把 SUID(用户权限提升) 和 SGID(组权限继承) 搞混;
- 看到
chmod g+s /dir成功,并在ls -ld中看到drwxr-sr-x—— 这个s是 SGID 位,不是 SUID; - SGID 在目录上作用是:新创建的文件/子目录自动继承该目录的所属组,与提权无关。
如果目标是“临时提权”,该怎么做?
真正可行的路径(聚焦 SUID 相关):
-
✅ 找已有 SUID 文件
find / -perm -4000 -type f 2>/dev/null
重点看
vim,find,bash,python,cp,nmap等——再查 GTFOBins 确认是否可利用。 -
✅ 确认某 SUID 文件是否可被滥用
比如发现/usr/bin/find带 SUID:find . -exec /bin/sh -p \;
-p使 shell 以特权模式启动(若 find 是 root SUID)。 -
✅ 检查 sudo 权限绕过
sudo -l
若看到
NOPASSWD: /usr/bin/find或类似,直接提权:sudo find . -exec /bin/sh -p \;
-
❌ 不要尝试
-
chmod u+s /tmp/mydir→ 无效,不触发任何特权; -
chmod 4755 /var/www→ 数字4被忽略,实际权限仍是755; - 期望通过目录 SUID 让普通用户进入
/root→ 不可能,需靠其他漏洞或配置缺陷。
-
补充:SGID 目录 ≠ 提权,但要注意风险
chmod g+s /shared
→ 新建文件属组变成 shared 目录的组,不改变执行权限、不提升 UID/GID。
但如果该组是 sudo 或 docker,配合其他条件(如可写 + 可执行脚本),可能构成提权链——但这和 SUID 无关。
SUID 是文件级机制,目录没有 SUID 这回事。想提权,请转向真实有效的入口:SUID 文件、sudo 配置、内核漏洞、Capabilities 或定时任务。











