[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
(本頁面已被瀏覽過 295 次)