【问题标题】:Linux SUID config cause binary file fail to executeLinux SUID config 导致二进制文件无法执行
【发布时间】:2012-04-10 07:28:38
【问题描述】:

我有一个二进制文件(名称为 bmu),在调用 statfs 函数时需要 root 权限。

操作系统是SuSE Linux 2.6.16.60-0.21-smp
用户是 test 运行 bmu 并且是非 root 用户

test@SuSE:~> id
uid=1056(test) gid=0(root) groups=0(root),16(dialout),33(video)

我已经测试了 3 种场景。

--->场景1
如果bmu没有配置SUID,可以执行bmu但调用会失败。

-rwxr-xr-x 1 test root 14389879 2012-04-10 10:38 bmu

--->场景2
如果bmu配置了SUID,当bmu通过test运行时会失败,提示“DBMS API Library 'libclntsh.so' loading failed”

-rwsr-sr-x 1 root root 14389879 2012-04-10 10:38 bmu

--->场景3
如果 bmu 由 root 运行,它将被成功执行。当然,无论是否配置了 SUID。

-rwxr-xr-x 1 root root 14389879 2012-04-10 10:38 bmu
-rwsr-sr-x 1 root root 14389879 2012-04-10 10:38 bmu

从场景二看,好像是LD_LIBRARY_PATH配置的问题,但从场景一看,这应该不是LD_LIBRARY_PATH配置的问题。从场景3中,我们可以发现bmu是root可执行的。

只有场景2有问题,所以有人可以提出一些建议吗?谢谢!

【问题讨论】:

    标签: linux suid


    【解决方案1】:

    当程序以 setuid 运行时,您环境中的 LD_LIBRARY_PATH 变量将被忽略,因为它是一个潜在的安全漏洞。

    您应该使用 $ORIGIN 相对 rpath 将二进制文件链接到依赖库,或使用绝对 rpath 引用库。有关 $ORIGIN rpath 的详细信息,请参阅ld man page

    【讨论】:

    • 非常准确有用的答案!谢谢皮特什!我将所需的库路径添加到 ld.so.conf 并且程序运行良好。我对操作做一个简单的说明: 1、root登录系统; 2.在/etc/ld.so.conf中添加需要的lib路径; 3.运行ldconfig命令; 4. su——测试; 5.运行配置SUID的二进制文件查看结果:OK!
    • 将库路径添加到 /etc/ld.so.conf 也是一种有效的替代方法
    猜你喜欢
    • 2013-08-04
    • 2016-08-22
    • 2022-08-06
    • 2014-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多