如果 root 存取被停用,如何修復無效的 /etc/sudoers 檔案?

如果 root 存取被停用,如何修復無效的 /etc/sudoers 檔案?

這適用於我的 Raspberry Pi,我在其上安裝了 Raspbmc。我確實意識到有一個 Raspberry Pi StackExchange 站點,但我想在這裡我可能會更多地關注這個問題。

問題是我進行了修改/etc/sudoers,試圖NOPASSWD向其中一個用戶授予權限,但我猜想在這個過程中我破壞了文件,現在每當我登入/嘗試使用時都會收到以下錯誤sudo

sudo: parse error in /etc/sudoers near line 19
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin

我在上面找到了類似的帖子烏班圖堆疊溢位,但問題是所有答案都需要 root 密碼,並且Raspbmc 上預設禁用 root 帳戶,並且在嘗試更改之前我顯然沒有啟用它/etc/sudoers

所以我的問題是:如果我沒有啟用根訪問權限,該如何修復該文件?有可能嗎?

答案1

您應該仍然能夠在單一使用者模式下啟動 Pi 以存取 root 權限。

使用另一台計算機,修改cmdline.txt並添加single到該行的末尾
然後,當您從 SD 卡啟動 Pi 時,它應該會自動將您轉儲到 root 提示符,這樣您就可以更新/etc/sudoers

答案2

經過兩天的研究和瀏覽網頁,我終於找到了解決方案,並且能夠保存我自己的 Raspberry Pi 系統(不必重新格式化 SD 卡並從頭開始)!

筆記:這個答案相當長。如果您想快速找到實際的解決方案,我添加了一個您可以向下滾動到的標題。不過,我確實建議您閱讀整個答案,因為它可能會讓您深入了解Raspbian 發行版和其他Linux 發行版之間的差異,並清楚為什麼您在互聯網上找到的許多建議解決方案可能不適用於您的Pi 。

因此,通常情況下,在 Linux 環境中,修復損壞的 sudo 甚至無需重新啟動的最快方法是使用 PolicyKit 或pkexec- 命令,如下所示:

pkexec visudo

但在 Pi 上它很可能不起作用,它會要求輸入 root 密碼,但不接受任何密碼。 (我的意思是,您還記得設定 root 密碼嗎?等等,您記得嗎?然後跳到星號*。)

一些Linux 發行版,例如Ubuntu,帶有一種恢復模式,可以透過在啟動期間按住Shift 鍵來存取該模式,並提供用戶友好的介面,並允許用戶進入root shell 提示符,在該提示符下可以存取修復損壞的檔案。 Pi 的 Raspbian Linux 發行版並沒有提供這種復原模式,因此該解決方案不適合我們。然而,Pi 確實會在啟動時提示您按住 Shift 鍵進入某種恢復模式,透過進入 Pi 的恢復模式或 NOOBS 對話框,我們肯定走在修復 Pi 上損壞的 sudo 的正確道路上。

修復 sudo 的另一種常見方法是啟動到單一使用者模式,這會讓您進入 root shell 提示字元。執行此操作的方法是將單字新增至系統引導分割區上的 -檔案single的末尾。cmdline.txt下次系統啟動時,它將啟動到單一使用者模式。

我們可以輕鬆地在 Pi 上嘗試此解決方案,因為 Pi 的復原模式或 NOOBS 對話方塊允許我們方便地編輯該cmdline.txt檔案。在復原模式或 NOOBS 對話方塊中,透過按下「編輯配置」圖標,您將開啟一個編輯器,可讓您編輯兩個文件,其中一個是cmdline.txt.透過在編輯器中按“確定”,您的變更將被儲存。

不幸的是,當您在 Pi 上啟動到單一使用者模式或「救援模式」時,您很可能會收到以下訊息:

Cannot open access to console, the root account is locked.
See sulogin(8) man page for more details.

Press Enter to continue.

這以及為什麼前面提到的 root 密碼提示不接受任何密碼的原因是,預設情況下,Raspbian 沒有為 root 帳戶設定密碼。不要將其與無密碼或不需要密碼混為一談。 Raspbian 與其他一些 Linux 發行版(例如 Raspbian 的衍生版 Debian)一樣,期望用戶透過 sudo 而不是透過帳戶本身以 root 身分進行操作。因此,根帳戶處於我們正在經歷的「鎖定」狀態。

*如果您自己設定 root 密碼,例如透過命令sudo passwd root,那麼您應該能夠使用pkexec- 命令並啟動到單一使用者模式。請注意,當您執行此操作時,您需要使用sudo,因此一旦sudo 被破壞,這顯然不是一個解決方案,但我指出這一點,因為這可能就是為什麼有些人在應用建議的解決方案時成功修復Pi 的原因pkexec-指令或單一使用者模式。這些人在某個時候手動設定了 root 密碼,解鎖了系統的 root 帳號。

解決方案

這篇博文解釋瞭如何做我們需要做的事情。這些步驟與我們嘗試透過單一使用者模式修復 sudo 時所採取的步驟幾乎相同。您不必執行部落格文章中提到的所有繁瑣的操作來編輯該cmdline.txt文件,只需在 NOOBS 對話框中執行即可。關鍵是添加init=/bin/sh到文件的末尾cmdline.txt。新增該程式碼片段後,下次啟動 Pi 時,您將進入 root shell 提示字元。

最初,檔案系統將以唯讀模式加載,因此在能夠編輯任何內容之前,您必須透過執行以下命令以讀寫模式重新掛載根分割區:

mount -o remount,rw /dev/mmcblk0p2 /

現在您應該處於 root shell 提示字元中,您可以在其中自由編輯任何文件,包括損壞的 sudo 文件。

答案3

最簡單的解決方案是在 LiveDVD 或 LiveUSB(最好是 LiveUSB,最好是 Linux 作業系統)上啟動另一個作業系統,然後安裝光碟並手動更改檔案。我以前做過類似的事情並以這種方式修復它。您的所有檔案都可以在 Live 系統中檢視和編輯。除非您已加密磁碟機;這讓事情變得有點複雜。

如果您有疑問,請告訴我,我將編輯此答案 - 我不確定您對設定即時 USB 有多滿意,但這並不難。

相關內容