使用 Set uid 从非 root 用户运行 root 命令

使用 Set uid 从非 root 用户运行 root 命令

考虑以下两个文件。summarize的可执行 UID 位已设置,以便属于另一个组的另一个用户可以执行使用customers.dat 文件的summary 可执行文件。

-rw-------  steve  sales  customers.dat
-rwsr-xr-x  steve  sales  summarize

现在考虑以下两个文件:

-rwxrwx--- 1 root   root   5974 May 17 13:53 1.out
-rwsrwsrwx 1 root   root   5970 May 17 14:03 a.out

两者都是可执行文件,我希望其他用户运行a.out,它1.out使用调用在其内部进行调用system("./1.out");

但我总是收到权限被拒绝的错误

sh: ./1.out: Permission denied

对我来说,这两种情况看起来都是一样的。为什么我会收到权限被拒绝的错误?我错过了什么吗?

答案1

摘自Set-UID 程序和漏洞:

– 回想一下,system() 首先调用 /bin/sh。在 Fedora 中,它使用参数“sh”、“-c”和用户提供的字符串执行 /bin/sh。

– 在 Fedora 中,/bin/sh(实际上是 bash)忽略 Set-UID 位选项。因此,当在 Set-UID 程序中调用系统(cmd)时,cmd 不会以 root 权限执行,除非 cmd 本身是一个 Set-UID 程序。 bash 中的以下代码删除了 Set-UID 位。实际上,我想不出我们需要允许 Set-UID shell 程序的任何合理原因。 Fedora 正在做正确的事情;许多其他 Unix 操作系统还没有做到这一点。

根据此 1.out 未设置 uid,并且 a.out 在执行之前会删除权限。

相关内容