1

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

操作系统是SuSE Linux 2.6.16.60-0.21-smp
运行 bmu 的用户是 test 并且是非 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

--->scenario 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_PATHconfig的问题,但从场景一看,这应该不是LD_LIBRARY_PATHconfig的问题。从场景 3 中,我们可以发现 bmu 可以被 root 执行。

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

4

1 回答 1

2

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

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

于 2012-04-10T08:09:49.540 回答