刪除 libpcre2 後無法執行 sudo
我手動將帶有調試符號的 libpcre2 編譯到 /usr/local/lib 中,然後刪除了 /lib64 中安裝的版本。雖然我仍然可以通過第一次執行以我的使用者身份執行命令
export LD_LIBRARY_PATH=/usr/local/lib
,但執行sudo
仍然失敗並顯示消息sudo:載入共享庫時出錯:libpcre2-8.so.0:無法打開共享對象文件:沒有這樣的文件或目錄
即使我使用
-E
or-H
選項執行它也會發生這種情況。sudo - root
給我“su:身份驗證失敗”。有任何想法嗎?
為什麼圖書館沒有被使用
LD_LIBRARY_PATH
為了安全起見,如果要載入的程序設置了 setuid 或 setgid 位,動態連結器將忽略。否則,將有使用LD_LIBRARY_PATH
或LD_PRELOAD
覆蓋無害的系統/庫呼叫的舊技巧來代替或除了它應該做的事情之外做其他事情。如果對不受此技巧保護的 setuid root 程序執行此操作,您將能夠在擁有 root 權限的同時控制該程序的操作……那時,您可以做的事情完全沒有限制。
您將在
ld.so(8)
手冊頁中找到此安全機制的描述:安全執行模式
出於安全原因,如果動態連結器確定二進製文件應在安全執行模式下執行,則某些環境變數的影響將無效或修改。(有關詳細資訊,請參閱下面對各個環境變數的討論。)如果輔助向量(請參閱 getauxval(3))中的 AT_SECURE 條目具有非零值,則以安全執行模式執行二進製文件。由於各種原因,該條目可能具有非零值,包括:
- 程序的真實有效使用者ID不同,或者真實有效組ID不同。這通常是執行 set-user-ID 或 set-group-ID 程序的結果。
- 具有非 root 使用者 ID 的程序執行了賦予程序功能的二進製文件。
- Linux 安全模組可能設置了一個非零值。
…隨後是
LD_*
環境變數的長格式描述,以及它們中的每一個如何受安全執行模式的影響。如何解決您的問題
您可以
/usr/local/lib
為其添加/etc/ld.so.conf
或製作自己的/etc/ld.so.conf.d/*.conf
文件,然後ldconfig
以 root 身份執行以確保選擇新的庫路徑……如果您仍然有一種工作方式可以成為獨立於 的 rootsudo
,那就是!否則,您可能需要啟動到單使用者/恢復模式,並獲得對系統的訪問權限,就像您失去了 root 密碼一樣。但是,您無需重置 root 密碼,而是
/etc/ld.so.conf[.d]
按上述方式進行修改。為什麼這裡的
-E
選項sudo
無濟於事
sudoers(5)
手冊頁說:請注意,大多數作業系統上的動態連結器將從 setuid 執行檔(包括 sudo)的環境中刪除可以控制動態連結的變數。根據作業系統,這可能包括
_RLD*
、DYLD_*
、LD_*
、LDR_*
、LIBPATH
、SHLIB_PATH
等。這些類型的變數在 sudo 開始執行之前就從環境中刪除了,因此 sudo 不可能保留它們。你說
sudo - root
給你su: Authentication failure
。命令和錯誤消息不完全匹配。你真的跑su - root
了嗎?那麼你可能正在執行 Ubuntu 或其他一些 Linux 發行版,它們預設鎖定了 root 帳戶的密碼;這些發行版通常嚴重依賴sudo
管理員訪問權限。如果您的發行版是這種情況,您現在會發現為什麼刪除位於其中的標準系統庫/lib64
不是一個好主意。