visudoとは
visudoはsudoersファイルを安全に編集するコマンドです。
visudoは複数の同時編集に対してsudoersファイルをロックし、基本的な健全性チェックを提供し、解析エラーをチェックします。
sudoersとは
どのユーザーが何を実行できるかを記述した設定ファイルのことです。
/etc/sudoers
に設定ファイルがあります。
ファイルのロック
$ ll /etc/ | grep sudoers
-r--r----- 1 root wheel 2299 7 11 12:13 sudoers
$ sudo visudo
(編集中にもう一つの画面から下記を実行)
$ ll /etc/ | grep sudoers
-r--r----- 1 root wheel 2299 7 11 12:13 sudoers
-rw------- 1 root wheel 2299 7 11 12:13 sudoers.tmp
$ sudo visudo
visudo: /etc/sudoers busy, try again later
visudo
を実行している間はロックファイルとして/etc/sudoers.tmp
が作成されています。
この状態でもう一度visudo
を実行するとエラーが出て編集ができない状態になっていたので、これでファイルがロックされていることがわかります。
解析エラーのチェック
manコマンドの日本語訳です。
visudoは編集後にsudoersファイルを解析し、構文エラーがあれば変更を保存しません。 エラーが見つかると、visudoはエラーが発生した行番号を示すメッセージを表示し、ユーザーは `` What now? ''プロンプトを受け取ります。 この時点で、ユーザはsudoersファイルを再編集するために
e 'を、変更を保存せずに終了するために
x'を、あるいは変更を終了して保存する `Q 'を入力することができます。 visudoが解析エラーがあると考えている場合は、sudoも同様にエラーが修正されるまで誰も再びsudoできないため、 `Q 'オプションは非常に注意して使用する必要があります。
実際にvisudo
で適当にa
を追記したところ下記の表示になりました。
$ sudo visudo
>>> /etc/sudoers: syntax error near line 31 <<<
What now?
Options are:
(e)dit sudoers file again
e(x)it without saving changes to sudoers file
(Q)uit and save changes to sudoers file (DANGER!)
sudoが使えなくなっても大丈夫な環境なので、Qで保存をしてみるとsudo
が使えなくなりました。
$ sudo visudo
>>> /etc/sudoers: syntax error near line 31 <<<
What now?
Options are:
(e)dit sudoers file again
e(x)it without saving changes to sudoers file
(Q)uit and save changes to sudoers file (DANGER!)
What now? Q
$ sudo visudo
>>> /etc/sudoers: syntax error near line 31 <<<
sudo: parse error in /etc/sudoers near line 31
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin
$ sudo ll
>>> /etc/sudoers: syntax error near line 31 <<<
sudo: parse error in /etc/sudoers near line 31
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin
なるほど、sudoers
の編集を行う場合にミスるとsudo
が使えなくなるので、visudo
以外でsudoers
を修正するのは危ないということですね。
今回は検証のためにエラーがある状態でQを選択しましたが、使う場合には気をつけてください。