[Linux] setuid 程式不能使用 LD_LIBRARY_PATH 環境變數

[Linux] setuid 程式不能使用 LD_LIBRARY_PATH 環境變數

在寫 設定 setuid 讓 python 程式可以用 root 權限執行 這篇文章時,

其實本來考慮的是寫一個 C++ 程式,讓這 C++ 程式作原本 python 做的事情~

因為 python 的那支程式會用到 XML-RPC,

於是就找了 XML-RPC for C/C++ 這套函式庫

這才發現,平常可以像這樣設定 LD_LIBRARY_PATH 來執行程式,

在 setuid bit 打開之後就不行了:

LD_LIBRARY_PATH=/usr/local/lib ./testrpc

 

在 setuid bit 打開之後,執行上面的指令,就會說函式庫找不到…

查了一下 stackoverflow: Program can’t load after setting the setuid bit on

原來是 Linux 為了安全考量,

不允許 setuid 的程式去吃 shell 裡面設定的 LD_LIBRARY_PATH,

避免有心人把壞東西設定在 LD_LIBRARY_PATH 的路徑裡面,

這樣就可能會用 root 權限跑壞東西了~

 

要解決的方法,似乎只能在編譯時,

用 -R 選項指定將函式庫的路徑寫入囉,例如:

g++ -R /usr/local/lib testrpc.cpp -o testrpc

 

 

 

(本頁面已被瀏覽過 54 次)

發表迴響

你的電子郵件位址並不會被公開。

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料