使用setuid可执行文件找不到共享库

时间:2018-07-19 15:02:26

标签: linux shared-libraries setuid

人。

这是我的问题:

我有一个可执行文件,需要在系统中的特定位置创建一个文件夹。

我希望无论谁执行它都能做到这一点。

我的想法是将父文件夹(可执行文件需要在其中创建文件夹的文件夹)分配给用户,并将可执行文件分配给同一用户。然后在可执行文件上设置setuid位。这样,可执行文件将以该用户的权限执行,因此它具有该文件夹的权限。

这就是问题:可执行文件使用了它旁边的共享库。

当我在没有setuid的情况下启动它时,一切正常(嗯,显然,除了创建文件夹以外,但可执行文件已启动)。

但是,当我使用setuid位启动它时,系统会告诉我它找不到共享库,该共享库显然没有被移动,并且拥有所有人的读取和执行权限。

发生了什么事?我想念什么?

谢谢。

1 个答案:

答案 0 :(得分:0)

  

需要在系统中的特定位置创建一个文件夹。

在UNIX系统上没有文件夹,正确的名称是“目录”。

  

然后在可执行文件上设置setuid位

通常,这是一个非常糟糕的主意(TM)。编写将作为setuid可执行文件的一部分正确运行的代码需要格外小心,而您询问此问题的事实表明您可能尚未准备好执行此任务。

  

当我在没有setuid的情况下启动它时,一切正常

二进制文件如何找到所需的共享库?

您很有可能将LD_LIBRARY_PATH设置为包括共享库所在的目录。

  

但是,当我使用setuid位启动它时,系统会告诉我找不到共享库,

如果我的LD_LIBRARY_PATH猜测是正确的,则可以预期:setuid二进制文件忽略LD_LIBRARY_PATH(出于明显的安全原因)。

您可以在链接可执行文件的同时使用-Wl,--rpath='$ORIGIN'并取消设置LD_LIBRARY_PATH来解决此问题-可执行文件现在无论是否带有setuid位都可以使用。