ルート アクセスが無効になっている場合、無効な /etc/sudoers ファイルを修正するにはどうすればよいですか?

ルート アクセスが無効になっている場合、無効な /etc/sudoers ファイルを修正するにはどうすればよいですか?

これは、Raspbmc をインストールした Raspberry Pi に関係します。Raspberry Pi StackExchange サイトがあることは承知していますが、ここでこの問題についてもっと多くの人に知ってもらえるかもしれないと思いました。

問題は、ユーザーの 1 人に権限/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

似たような投稿を見つけましたウブントゥ同様にスタックオーバーフローしかし、問題はすべての回答にルートパスワードが必要であり、Raspbmcではrootアカウントはデフォルトで無効になっています、そして明らかに私は変更を試みる前にそれを有効にしていませんでした/etc/sudoers

そこで質問ですが、ルート アクセスが有効になっていない場合にファイルを修正するにはどうすればよいでしょうか? それは可能ですか?

答え1

ルートにアクセスするには、Pi をシングル ユーザー モードで起動できるはずです。

別のコンピュータを使用して、行の末尾に変更しcmdline.txtて追加します。 その後、SDカードからPiを起動すると、自動的にルートプロンプトにダンプされ、更新できるようになります。single
/etc/sudoers

答え2

2 日間の調査と Web の閲覧を経て、ようやく解決策が見つかり、自分の Raspberry Pi システムを救うことができました (SD カードを再フォーマットして最初からやり直す必要はありませんでした)。

注記:この回答はかなり長いです。実際の解決策にすぐにアクセスしたい場合は、下にスクロールできるヘッダーを追加しました。ただし、回答全体を読むことをお勧めします。Raspbian ディストリビューションと他の Linux ディストリビューションの違いについての洞察が得られるだけでなく、インターネットで見つかる多くの提案された解決策が Pi で機能しない理由が明確になる場合があります。

したがって、通常、Linux 環境では、再起動せずに壊れた sudo を修復する最も簡単な方法は、PolicyKit を使用するか、pkexec次のような -command を使用することです。

pkexec visudo

しかし、Pi ではおそらく機能しません。ルート パスワードを要求されますが、パスワードは受け入れられません。(つまり、ルート パスワードを設定したことを覚えていますか? 待ってください、覚えていますか? それならアスタリスク* に進んでください。)

Ubuntu などの一部の Linux ディストリビューションには、起動時に Shift キーを押したままにすることでアクセスできるリカバリ モードが付属しており、ユーザー フレンドリなインターフェイスが提供され、ルート シェル プロンプトにドロップして壊れたファイルを修復するためのアクセスが可能になります。Pi の Raspbian Linux ディストリビューションにはそのようなリカバリ モードが付属していないため、このソリューションは私たちにとっては適していません。ただし、Pi は起動時に Shift キーを押したままにして何らかのリカバリ モードに入るようにプロンプ​​トを表示し、Pi のリカバリ モードまたは NOOBS ダイアログに入ることで、Pi の壊れた sudo を修復するための正しい道を進むことができます。

sudo を修復するもう 1 つの一般的な方法は、シングル ユーザー モードで起動して、ルート シェル プロンプトを表示することです。これを行うには、システムのブート パーティションの -filesingleの末尾に単語を追加しますcmdline.txt。次にシステムを起動すると、シングル ユーザー モードで起動します。

このソリューションは Pi で簡単に試すことができます。便利なことに、Pi のリカバリ モードまたは NOOBS ダイアログで -file を編集できますcmdline.txt。リカバリ モードまたは NOOBS ダイアログで、「Edit config」アイコンを押すと、2 つのファイルを編集できるエディターが開きます。そのうちの 1 つは ですcmdline.txt。エディターで「OK」を押すと、変更が保存されます。

残念ながら、Pi でシングルユーザー モードまたは「レスキュー モード」で起動すると、次のメッセージが表示される可能性が高くなります。

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

Press Enter to continue.

これは、前述のルート パスワード プロンプトがパスワードを受け入れなかった理由と同様、Raspbian ではデフォルトでルート アカウントにパスワードが設定されていないためです。これは、パスワードが何も設定されていない、またはパスワードが不要であるという意味ではありません。Raspbian は、他のいくつかの Linux ディストリビューション (Raspbian の派生である Debian など) と同様に、ユーザーがアカウント自体ではなく sudo を介してルートとして操作することを想定しています。そのため、ルート アカウントは、私たちが経験している「ロックダウン」状態にあります。

* コマンドなどを使用して自分でルート パスワードを設定すると、 - コマンドsudo passwd rootを使用しpkexecてシングル ユーザー モードで起動できるはずです。これを行うときは sudo を使用する必要があることに注意してください。したがって、sudo が壊れている場合は、これは明らかに解決策ではありません。ただし、 - コマンドpkexecまたはシングル ユーザー モードを提案する解決策を適用して、一部の人が Pi の修復に成功したのはおそらくこのためであるため、この点を指摘します。これらの人々は、ある時点で手動でルート パスワードを設定し、システムのルート アカウントのロックを解除していました。

ソリューション

このブログ投稿必要な作業のやり方を説明します。手順は、シングル ユーザー モードで sudo を修復しようとしたときに実行した手順とほぼ同じです。-file を編集するために、ブログ記事で説明されている面倒な作業をすべて実行する必要はありませんcmdline.txt。代わりに、NOOBS ダイアログで実行します。重要なのは、 -fileinit=/bin/shの末尾に追加することですcmdline.txt。そのスニペットを追加すると、次に Pi を起動したときに、ルート シェル プロンプトが表示されます。

最初は、ファイル システムは読み取り専用モードでロードされるため、何かを編集する前に、次のコマンドを実行して、ルート パーティションを読み取りおよび書き込みモードで再マウントする必要があります。

mount -o remount,rw /dev/mmcblk0p2 /

これで、ルート シェル プロンプトが表示され、壊れた sudo ファイルを含む任意のファイルを自由に編集できるようになります。

答え3

最も簡単な解決方法は、LiveDVD または LiveUSB (理想的には LiveUSB、理想的には Linux OS) で別の OS を起動し、ディスクをマウントして手動でファイルを変更することです。私は以前にも同じようなことをして、この方法で修正しました。すべてのファイルは Live システムから表示および編集できます。ドライブを暗号化していない限り、状況は少し複雑になります。

質問があればお知らせください。この回答を編集します。ライブ USB の設定にどの程度慣れているかはわかりませんが、それほど難しいことではありません。

関連情報