2012-04-10 157 views
1

我有一個二進制文件(名稱是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有問題,所以有人可以提出一些建議?謝謝!

回答

2

當程序作爲setuid運行時,環境中的LD_LIBRARY_PATH變量將被忽略,因爲它是一個潛在的安全漏洞。

您應該使用$ORIGIN相對路徑將二進制文件鏈接到相關庫或對庫的絕對路徑引用。有關$ ORIGIN rpath的詳細信息,請參見ld man page

+0

非常準確和有用的答案!謝謝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

+0

將庫路徑添加到/etc/ld.so.conf也是有效的替代方法 – Petesh 2012-04-10 16:06:23

相關問題