Linux SUID配置导致二进制文件无法执行

时间:2012-04-10 07:28:38

标签: linux suid

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

操作系统为SuSE Linux 2.6.16.60-0.21-smp
用户是测试,它是运行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运行测试时,它将失败并显示提示“DBMS API Library'libclntsh.so'loading loading”

-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

从方案2看,它看起来像是LD_LIBRARY_PATH config的问题,但从方案1中,我们可以发现这不应该是LD_LIBRARY_PATH config的问题。从方案3中,我们可以发现bmu可以由root执行。

只有方案2有问题,所以有人可以给出一些建议吗?谢谢!

1 个答案:

答案 0 :(得分:2)

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

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