我有一個二進制文件(名稱是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