gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:03:41 25 4
gpt4 key购买 nike

伙计们。

这是我的问题:

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

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

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

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

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

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

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

谢谢。

最佳答案

needs to create a folder in a particular emplacement in the system.

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

Then set the setuid bit on the executable

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

When I launch it without the setuid bit, everything works fine

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

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

When I launch it with the setuid bit, however, the system tells me it can't find the shared library,

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

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

关于linux - 使用 setuid 的可执行文件找不到共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51425975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com