1
我已經安裝了一個程序,播放器,並且正在嘗試運行player
命令。 玩家需要cfg文件作爲輸入,例如使用sudo時無法訪問共享對象
player create.cfg
我注意到,我能夠運行上面的命令罰款作爲普通用戶,但是當我運行它爲根,
sudo player create.cfg
我得到以下錯誤:
error while loading shared libraries: libplayerdrivers.so.3.0: cannot open shared object file: No such file or directory
我的問題是,爲什麼會使用該命令運行它作爲一個普通用戶的時候,但而不是作爲root用戶運行時?我會理解,如果這是相反的。是什麼賦予了?
更多細節
我知道錯誤通常意味着LD_LIBRARY_PATH沒有設置正確。有問題的共享對象是在/usr/local/lib
,所以我把命令
EXPORT LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
在我的.bashrc文件和採購它。但使用sudo
運行player
命令仍然無法找到它。
做ls -l /usr/local/lib | grep libplayerdrivers
給出了下面的輸出:
lrwxrwxrwx 1 root root 23 Jun 27 16:34 libplayerdrivers.so -> libplayerdrivers.so.3.0
lrwxrwxrwx 1 root root 25 Jun 27 16:28 libplayerdrivers.so.3.0 -> libplayerdrivers.so.3.0.2
-rw-r--r-- 1 root root 3042066 Jun 27 16:28 libplayerdrivers.so.3.0.2
你是對的,我可以確認當我sudo su;'然後'echo $ LD_LIBRARY_PATH'輸出爲空時。那麼圍繞這個的方法是什麼,這樣我就可以正常運行並以root身份運行了。我應該在/ usr/lib中添加一個指向/ usr/local/lib中的.so的符號鏈接嗎? – maditya
您還可以詳細說明發生了哪些安全風險,或者指出一些信息? – maditya
'su'也對環境做了些什麼 - 'sudo bash'就是等價的。我建議你運行'sudo bash',然後在設置LD_LIBRARY_PATH解決你的問題時工作。如果是這樣,寫一個bash腳本(OWNED BY ROOT,不能被其他人寫!),根據需要設置變量,然後運行你想要的程序。 –