我有一个二进制文件(名称是bmu),它在调用statfs函数时需要root权限。
Linux SUID配置导致二进制文件无法执行
操作系统是SuSE Linux 2.6.16.60-0.21-smp
用户被测试,其是运行BMU和是一个非超级用户
[email protected]:~> 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库 'libclntsh.so' 加载失败”
-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
配置的问题,但是从方案1中,我们可以发现,这不应该LD_LIBRARY_PATH
配置的问题。从场景3中,我们可以发现bmu可以由root执行。
只有情况2有问题,所以有人可以提出一些建议?谢谢!
非常准确和有用的答案!谢谢Petesh!我将所需的lib路径添加到ld.so.conf,程序运行良好。我对操作做了简单的描述:1.通过root登录系统; 2.将所需的lib路径添加到/etc/ld.so.conf; 3.运行ldconfig命令; su - 测试; 5.运行二进制文件配置的SUID来检查结果:OK! – siikee 2012-04-10 10:31:17
将库路径添加到/etc/ld.so.conf也是有效的替代方法 – Petesh 2012-04-10 16:06:23