假设一个可执行文件的 set-user-id 位打开。
进程在执行可执行文件时,在内核通过文件访问测试确定该文件可以执行后,将其有效用户ID更改为可执行文件的所有者用户ID。请参阅 https://stackoverflow.com/questions/41456225/how-and-when-does-exec-change-the-effective-user-id-when-the-set-user-id-is-s 和 什么是程序文件的 set-user-ID 的用法?
这是否意味着可执行文件的所有者用户ID可以是不通过内核执行的文件访问测试的用户ID,即使基于进程的原始有效用户ID已经通过了测试?
一般来说,可执行文件的所有者没有执行权限是否有意义?
谢谢。
我不知道它是如何工作的(主要是因为我从未见过这种配置有任何用途)。我的猜测是这无关紧要,因为 SUID
seteuid()
在启动过程的最后(就在执行转移到程序本身之前)有效地调用了一个调用,这将是在文件被加载执行之后,因此一次检查也发生了(检查发生在任何数据加载到内存之前(至少在 Linux 上))。这取决于你所说的有意义。它在功能上什么都不做,因为所有者可以自己设置可执行位(假设没有额外的强制访问控制阻止他们这样做),所以在这方面不是真的。至于它在有用的意义上是否有意义,我想不出任何情况下所有者没有执行权限但其他用户有执行权限是有意义的,所以我也会说不。