我有一个需要 root 权限的可执行文件。但它似乎只有当它存在于系统路径中时才起作用。当我这样执行时:
$ ./prog
该程序抱怨没有 root 访问权限。看起来这是对 suid 程序的另一个安全限制,但我已经搜索过,但在网上找不到任何与之相关的内容。为什么会这样呢?除了添加.
到 PATH 或以 root 身份调用之外,是否有一种优雅的方法可以对此程序进行一些测试make
?
编辑:即使当前目录位于 PATH 中,它也不起作用。
答案1
用于调用程序的路径名没有任何特殊之处,可以影响其 setuid 位是否得到遵守。可以肯定的是,这里正在发生两件事之一。任何一个
prog
在 中找到的和$PATH
在prog
当前目录中找到的实际上并不相同prog
。你是当然仅此一项就可以通过?prog
找到相同的副本prog
$PATH
- (例外:我可以想到一种不太可能的边缘情况,它们可能是同一个文件,因为它们是相同的 inode,但它们是通过不同的安装点到达的,其中一个安装点有
nosuid
,另一个没有。)
- (例外:我可以想到一种不太可能的边缘情况,它们可能是同一个文件,因为它们是相同的 inode,但它们是通过不同的安装点到达的,其中一个安装点有
prog
它本身正在咨询它argv[0]
以了解它是如何被调用的,并且如果它没有找到它所期望的内容,则拒绝对其 setuid 权力采取行动(或放弃它们)。