無効な「/ etc / sudoers」ファイルを変更する方法は?


238

無効なsudoersファイルを編集するにはどうすればよいですか?以下のエラーがスローされ、修正するために再度編集することはできません。

ここで何が起こるかです:

$ sudo visudo
>>> /etc/sudoers: syntax error near line 28 <<<
sudo: parse error in /etc/sudoers near line 28
sudo: no valid sudoers sources found, quitting

2
このページを考慮大きな問題は、そのエラーを作成help.ubuntu.com/community/RootSudoTimeout

回答:


361

最新のUbuntuシステム(および他の多くのGNU / Linuxディストリビューション)では、破損したsudoersファイルの修正は実際には非常に簡単で、再起動、ライブCDの使用、またはマシンへの物理的なアクセスは必要ありません。

SSH経由でこれを行うには、マシンにログインしてコマンドを実行しpkexec visudoます。マシンに物理的にアクセスできる場合、SSHは不要です。ターミナルウィンドウを開いて、そのpkexecコマンドを実行するだけです。

あなた(または他のユーザー)がrootPolicyKitのようにプログラムを実行する権限を持っていると仮定すると、パスワードを入力すると、visudoとして実行されroot、を修正できます/etc/sudoers

/etc/sudoers.d(この状況ではまれですが、可能です)の構成ファイルの1つを編集する必要がある場合は、を使用します。pkexec visudo -f /etc/sudoers.d/filename

問題を解決するためにrootとして追加のシステム管理コマンドを実行する必要がある関連状況がある場合(この状況でも珍しいが、他の状況では一般的です)、でインタラクティブルートシェルを起動できますpkexec bash。一般的に言えば、実行するグ​​ラフィカルではないコマンドはsudopkexec代わりに実行できます。

(システムにrootPolicyKitのようにプログラムの実行が許可されているユーザーアカウントが複数ある場合、これらのアクションのいずれかについて、パスワードを要求される前に、使用するアカウントを選択するように求められます。)


それが機能しない場合-たとえば、PolicyKitを介してrootとしてプログラムを実行する権限のあるユーザーがいない場合-UbuntuのライブCD(おそらくUbuntuのインストールに使用したCDなど)から起動し、ファイルシステムをマウントしますインストール済みシステム。sudo parted -lパーティションを表示するために実行することでこれを行うことができます。おそらく、ext4パーティションは1つだけで、これがルートファイルシステムです。

インストールされたUbuntuシステムのルートファイルシステムが/ dev / sda1にあるとします。次に、でマウントできますsudo mount /dev/sda1 /mnt。次に、インストールしたシステムのsudoersファイルをで編集できますsudo nano -w /mnt/etc/sudoers。または、さらに良いことに、あなたはそれを編集することができます

sudo visudo -f /mnt/etc/sudoers

(これにより、sudoersファイルを誤った構文で保存できなくなります)。


7
pkexec / usr / sbin / visudoはdebian 7で動作しました
marinara 14年

10
聖なる牛!どうもありがとう!ベーコンを保存しました。通常のテキストエディターを使用して、推奨されるファイルをetc / sudoers.d /ディレクトリに追加しました(DON-T__D-O__T-HAT !!!)。問題のファイルを編集するなど、昇格した権限を実行するすべての機能が失われました。これはファイルの編集に役立ちました。奇妙なことに、最初に/ etc / sudoersを編集する必要があり、次に他のファイルでエラーを見つけて、それを開いてくれました。EVEN WEIRDER、/ etc / sudoersファイルのディレクティブ「inlcudedir /etc/sudoers.d」はコメント化されており、まだ含まれています。
デニス

4
@Dennisやや紛らわしいことに、ファイル内の#includeディレクティブはsudoers特別に扱われます。その#場合、行頭は行の残りをコメントとして解釈しません。man sudoers言う:「シャープ記号( 『#』)を...それは#includeディレクティブのか、しない限り、一部でない限り(コメントを示すために使用される」も参照してください。visudoを:#includedir sudoers.d(からアーカイブlzone.de/ブログ)。
Eliahケーガン

5
私のユーザーはsudoerですが、このエラーが発生しました:別のユーザーとしてコマンドを実行中に
-SuB

2
Ubuntu 16.04ではpkexec visudo、正しいパスワードを受け入れないパスワードを要求します。「AUTHENTICATION FAILED」エラーがスローされます。
ジュハウンティネン

54

常にvisudosudoersファイルの編集に使用し、自分で直接編集しないでください。検証しない限り、ディスクに保存できません。


17
後知恵は20/20
code_monk

4
災害を防ぐことはできません。自分を正当に否定するのは簡単です。
ジョシュア

visudoはscritpsで使用できますか?もしそうなら、どのように?
ルーカス

visudoがインストールされていません。そこで、pkexec vimを実行しました。次に、ユーザーのリストを表示し、パスワードを要求します。パスワードを入力すると、「別のユーザーとしてコマンドを実行中にエラーが発生しました:認証されていません」というエラーがスローされます。助けてください
-Shyamkkhadka

24

入力する:

pkexec visudo

次に、最後の行を変更します

#includedir /etc/sudoers

に:

#includedir /etc/sudoers.d

それはあなたの問題を解決するはずです。


2
私は、主要な取り外し気づいた#から#includedir、原因構文エラーが#少なくともUbuntuの12.10で、ディレクティブの一部です。
SAFX

1
それにより、頭痛が大幅に軽減されました。おかげでトン:)
Addo Solutions

1
visudoがインストールされていません。そこで、pkexec vimを実行しました。次に、ユーザーのリストを表示し、パスワードを要求します。パスワードを入力すると、「別のユーザーとしてコマンドを実行中にエラーが発生しました:認証されていません」というエラーがスローされます。助けてください
-Shyamkkhadka

11

私のような誰かがpkexecをインストールしていないか、vi、visudo、nanoまたは他のエディターを実行してsudoersファイルを変更できなかった場合、このプロセスで確実にできます。

  • リブート
  • 起動中にShiftキーを押し、回復モードのオプションを選択します(入力します)
  • ルートとしてコマンドラインを入力します(grubメニューの最後から2番目のオプション)
  • rwのブートデバイスを再マウントし、ユーザーにexec権限を適用し、ファイルを編集します

    mount -n -o remount,rw /
    chmod u+x /etc/sudoers
    nano /etc/sudoers
    

その間違いを修正して幸せになります:)


@ eliah-kaganによって提案されたpkexecソリューションは簡単に思えますが、これはより普遍的です。私のマシンでは、pkexecがインストールされていないことがわかりました。もちろん、sudo apt-get install pkexecが何らかの形で機能しなかったため、インストールできませんでした。
running.t

また、このアプローチ内では、visudo代わりに使用しますnano /etc/sudoers
pa4080

7

sudoersファイルを台無しにした場合、次のことを行う必要があります。

  • 復旧モードで再起動します(起動中にエスケープをヒットし、grub画面で復旧モードオプションを選択します)
  • 「ネットワークを有効にする」オプションを選択します(ファイルシステムが読み取り専用としてマウントされない場合)。
  • 「ルートシェルにドロップ」オプションを選択します
  • 実行visudo、ファイルを修正
  • 通常のgrubオプションで再起動します

ソース:-http : //mario.net.au/content/recover-etcsudoers-ubuntu-1204


こんにちは、iptables、既存のシステムのファイルを削除しますか?
Shyamkkhadka

6

#include sudoer.dを削除しても、#include sudoer.dを削除しても違いはありません。

ただし、構文エラーがないことを確認してください。私は同じ問題を抱えていましたが、修正に何時間も費やし、それらが構文エラーであるとわかりました。マニュアルを参照して、正しく作成してください。

たとえば、ユーザー名は次のようになります。

 dolly ALL = (ALL) ALL NO PASSWD: ALL

正しい構文は

dolly ALL = (ALL) ALL //give permission to everything, not good

または

dolly ALL=(ALL) NOPASSWD:/usr/bin/thurderbird //good, give specific permission

お役に立てれば


構文エラーがないことを確認するよりも良い方法は、visudoこれらのファイルを編集するときに常に使用することです。これにより、ファイルを変更する前に構文エラーがないことを確認できます。visudoは単なる編集用ではありません/etc/sudoers-でファイルを作成および編集します/etc/sudoers.d。また、必要なテキストエディタでも動作します。詳細については、マンページを参照してください。
エリアケイガン

特定の許可を与えることに関しては、これは非常に単純なコマンド/アプリに対してのみ有用であることに注意してくださいthunderbird。一見シンプルな機能でさえ、完全なルートアクセスへの扉を開きます。たとえば、ルートとして任意の場所にファイルを保存できるプログラムを実行できるユーザーは、完全なルートアクセス権を取得できます(独自のをインストールする/etc/sudoersか、構文上の制限によりそれをインストールできない場合は、独自のをインストールできます/etc/crontab)。
エリアケイガン

3

回復モードを実行して、これを入力します

chown -R root:root /etc/sudoers.d
chmod u = rwx、g = rx、o = rx /etc/sudoers.d/
chmod u = r、g = r、o = /etc/sudoers.d/*

グループとユーザールートのみが読み取り権限を持っている必要があります



2

grubでブートエントリを編集することもできます。

PCを再起動し、grubが表示されるのを待ちます。次に、「Ubuntu」エントリで「e」を押して編集します。

「linux =」または「kernel =」の行を探し、その行の最後に「単一」を追加します。

次に、F10を押して、この一時的に変更されたブートエントリを起動します。これにより、root権限を持つシェル(GUIなし)が提供され、s.thでsudoersファイルを編集できます。nano / etc / sudoersのように、以前の状態に戻ります。

その後、再起動して完了です。


2
pkexec visudo

間違いを元に戻す


1
pkexecを使用する必要はありません
Braiam

@Braiam visudoはルートとして実行する必要があります。sudo動作しない場合、pkexec時々動作します。これは私の以前の回答でカバーされていますが、それは正しい答えであり、visudo(rootとして実行されていない場合)それ自体では機能せず、推奨事項が他の回答とかなり重複している場合でも、正しい短い回答には価値があるかもしれません。もちろん、回復モードに入った場合、それはルートシェルであり、などのコマンドには必要ありませsudoん。多分それは...あなたが何を意味するかだvisudopkexec
Eliahケーガン

0

VirtualBoxで実行されているUbuntu 16.04(違いはありません)では、上記の方法は機能しませんでした(ファイルの最後の無効な行)。うまくいったのは:

  1. VirtualBoxを再起動します
  2. コンソールでユーザー名とパスワードの入力を求められるまで、通常どおり起動します。
  3. ユーザー名で通常ログイン
  4. 次に、コンソールに移動したら(ボックスがGUIで起動しない場合)、コマンドsu -を入力してから独自のユーザー名のパスワードを入力します。
  5. が壊れていたり空になっていroot@ubuntu-xenial:~#なければ、プロンプトが表示されます/etc/sudoers。その場合に何が起こるかわからない。
  6. 次にvisudo、ファイルを実行して修正するだけです。
  7. 次にCtrl + X、変更されたバッファを保存するように求められます。を押しYEnter
  8. ボックスを再起動すると、すぐに動作するはずです。

あなた/etc/sudoersが空であるか何かが欠落している場合、あなたがそれを編集できる場合、私のコンテンツは次のとおりです

Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

root ALL=(ALL:ALL) ALL

%admin ALL=(ALL) ALL

%sudo ALL=(ALL:ALL) ALL

手順4は意味がありません。ルートパスワードが通常のユーザーと同じ場合にのみ機能します。
アルフレッド

これはローカルVMで非常に一般的です。
ジュハウンティネン

0

良い習慣:バックアップターミナルウィンドウを実行しsudo suます。別の端末でvisudoまたはsudo vim / etc / sudoersを実行します。問題が発生した場合は、ターミナル1に戻ってファイルを修正します。sudo suvisudoに1つのターミナルで実行してみませんか?これも機能しますが、知らないうちに端末を閉じるリスクが高くなります。


-1

もっと簡単な方法があります。再起動、リカバリモード、またはpkgexec(動作pkgexecせず、なぜ、またはどのように使用するべきかわからない)なしで、単に次の操作を行います。

su root # switch to root user, without using sudo (which is broken at this point)
your_favorite_editor /etc/sudoers # e.g. nano

そして、構文エラーを修正するだけです!


downvoteとは何ですか?私にとって完璧に働いた。
rien333
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.