Sudo

刪除 libpcre2 後無法執行 sudo

  • June 23, 2020

我手動將帶有調試符號的 libpcre2 編譯到 /usr/local/lib 中,然後刪除了 /lib64 中安裝的版本。雖然我仍然可以通過第一次執行以我的使用者身份執行命令export LD_LIBRARY_PATH=/usr/local/lib,但執行sudo仍然失敗並顯示消息

sudo:載入共享庫時出錯:libpcre2-8.so.0:無法打開共享對象文件:沒有這樣的文件或目錄

即使我使用-Eor-H選項執行它也會發生這種情況。sudo - root給我“su:身份驗證失敗”。有任何想法嗎?

為什麼圖書館沒有被使用

LD_LIBRARY_PATH為了安全起見,如果要載入的程序設置了 setuid 或 setgid 位,動態連結器將忽略。否則,將有使用LD_LIBRARY_PATHLD_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 身份執行以確保選擇新的庫路徑……如果您仍然有一種工作方式可以成為獨立於 的 root sudo,那就是!

否則,您可能需要啟動到單使用者/恢復模式,並獲得對系統的訪問權限,就像您失去了 root 密碼一樣。但是,您無需重置 root 密碼,而是/etc/ld.so.conf[.d]按上述方式進行修改。

為什麼這裡的-E選項sudo無濟於事

sudoers(5)手冊頁說:

請注意,大多數作業系統上的動態連結器將從 setuid 執行檔(包括 sudo)的環境中刪除可以控制動態連結的變數。根據作業系統,這可能包括_RLD*DYLD_*LD_*LDR_*LIBPATHSHLIB_PATH等。這些類型的變數在 sudo 開始執行之前就從環境中刪除了,因此 sudo 不可能保留它們。


你說sudo - root給你su: Authentication failure。命令和錯誤消息不完全匹配。你真的跑su - root了嗎?那麼你可能正在執行 Ubuntu 或其他一些 Linux 發行版,它們預設鎖定了 root 帳戶的密碼;這些發行版通常嚴重依賴sudo管理員訪問權限。如果您的發行版是這種情況,您現在會發現為什麼刪除位於其中的標準系統庫/lib64不是一個好主意。

引用自:https://unix.stackexchange.com/questions/594651