首页 > 解决方案 > 带有 setuid 的可执行文件找不到共享库

问题描述

伙计们。

这是我的问题:

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

无论谁执行它,我都希望它能够这样做。

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

事情是这样的:可执行文件使用旁边的共享库。

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

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

发生了什么 ?我错过了什么?

谢谢你。

标签: linuxshared-librariessetuid

解决方案


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

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

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

一般来说,这是一个非常糟糕的主意 (TM)。编写将作为 setuid 可执行文件的一部分正确运行的代码需要非常小心,而您提出这个问题的事实表明您可能还没有准备好执行此任务。

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

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

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

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

如果我的LD_LIBRARY_PATH猜测是正确的,这是意料之中的:setuid 二进制文件忽略LD_LIBRARY_PATH(出于明显的安全原因)。

您可以通过-Wl,--rpath='$ORIGIN'在链接可执行文件和取消设置时使用来解决此问题LD_LIBRARY_PATH——可执行文件现在应该可以使用或不使用 setuid 位。


推荐阅读