suid 可执行文件仅在系统路径中存在时才起作用

suid 可执行文件仅在系统路径中存在时才起作用

我有一个需要 root 权限的可执行文件。但它似乎只有当它存在于系统路径中时才起作用。当我这样执行时:

$ ./prog

该程序抱怨没有 root 访问权限。看起来这是对 suid 程序的另一个安全限制,但我已经搜索过,但在网上找不到任何与之相关的内容。为什么会这样呢?除了添加.到 PATH 或以 root 身份调用之外,是否有一种优雅的方法可以对此程序进行一些测试make

编辑:即使当前目录位于 PATH 中,它也不起作用。

答案1

用于调用程序的路径名没有任何特殊之处,可以影响其 setuid 位是否得到遵守。可以肯定的是,这里正在发生两件事之一。任何一个

  • prog在 中找到的和$PATHprog当前目录中找到的实际上并不相同prog。你是当然仅此一项就可以通过? prog找到相同的副本prog$PATH
    • (例外:我可以想到一种不太可能的边缘情况,它们可能是同一个文件,因为它们是相同的 inode,但它们是通过不同的安装点到达的,其中一个安装点有nosuid,另一个没有。)
  • prog它本身正在咨询它argv[0]以了解它是如何被调用的,并且如果它没有找到它所期望的内容,则拒绝对其 setuid 权力采取行动(或放弃它们)。

相关内容