visudo(8) sudoers ファイルを編集する

書式

visudo [-chqsV] [-f sudoers]

説明

visudovipw(8) によく似た安全なやり方で sudoers ファイルを編集する。 visudosudoers ファイルをロックして、重複した編集が同時に行われないようにするとともに、 整合性をざっと調べ、文法エラーのチェックを行う。 sudoers ファイルが現在編集中だった場合は、 「try again later」というメッセージを端末に表示する。

visudo が使用するエディタについては、コンパイル時に設定された 一つ以上のエディタからなるリストがプログラムに埋め込まれているが、 sudoers ファイルの Defaults
行で editor オプションを使えば、それを変更することができる。 このリストはデフォルトでは、"/usr/bin/vi" になっている。 通常 visudo は、 環境変数 VISUAL
EDITOR
の値が上述のエディタ・リストに含まれるエディタでないかぎり、 そうした環境変数を使用しない。とは言え、 visudo--with-env-editor オプションを付けて configure されている場合や、 sudoeres ファイルの Defaults
行で env_editor オプションがセットされている場合は、visudo VISUAL
EDITOR
によって指定された どんなエディタでも使用することになる。 これがセキュリティホールになりかねないことに注意してほしい。 単に VISUAL
EDITOR
を設定するだけで、 ユーザが任意のプログラムを実行できるようになってしまうからだ。

visudo は編集が終わると、sudoers ファイルの文法解析を行い、 文法エラーがあれば、変更を保存しない。visudo はエラーを発見すると、 エラーが起きた行番号を知らせるメッセージを表示し、``What now?'' というプロンプトを出す。このとき、``e'' を押せば、 sudoers ファイルを再編集できる。``x'' を押せば、 変更を保存せず終了だし、``Q'' を押せば、変更を保存して終了だ。 ``Q'' の選択は、くれぐれも慎重にやってほしい。なぜなら、 visudo が文法エラーがあると考えるのなら、sudo も同様に考えるはずであり、エラーが訂正されるまで、もう誰にも sudo が使えなくなってしまうからだ。文法エラーが発見されたとき、``e'' を押して sudoers ファイルを編集しようとすると、 カーソルがファイルのエラーが起きた行に飛ぶ (エディタにその機能があればだが)。

オプション

visudo では以下のコマンドラインオプションが使用できる。
-c
check-only モードを有効にする。現在の sudoers ファイルの 文法エラー、所有者、アクセス権をチェックする (訳注: 所有者とアクセス権のチェックをするのは sudo-1.8.4p3 以降である)。 -q オプションが指定されていない場合は、メッセージを標準出力に表示して、 sudoers の状態を報告する。チェックが成功裡に終わった場合は、 visudo は返り値 0 で終了する。 エラーに出会った場合の返り値は 1 である。
-f sudoers
sudoers ファイルの位置を指定・変更する。このオプションを付けると、 visudo はデフォルトの /etc/sudoers ではなく、 ユーザが選んだ sudoers ファイルを編集 (あるいは、チェック) することになる。ロックファイルとしては、指定された sudoers ファイルの名前の末尾に ``.tmp'' を付けたものが使われる。なお、 check-only モードの場合だけ、-f の引数に ``-'' を指定することができる。 これは、標準入力から sudoers が読み込まれるということである。
-h
-h (help) オプションを指定すると、 visudo は標準出力に簡単なヘルプメッセージを表示して、終了する。
-q
quiet モードを有効にする。このモードでは、 文法エラーの詳細情報は表示されない。このオプションが役に立つのは、 -c オプションと組み合わせたときだけである。
-s
sudoers ファイルの厳密 (strict) チェックを有効にする。 エイリアスを定義する前に使用すると、 visudo がそれを文法エラーと見なすようになるわけだ。 ホスト名やユーザ名がアルファベットの大文字、数字、アンダースコア ('_') だけから構成されている場合は、 そうしたものとエイリアスとの区別が付かないことに注意してほしい。
-V
-V (version) オプションを指定すると、 visudo はバージョン番号を表示して、終了する。

環境変数

以下の環境変数が参照されるかどうかは、sudoerseditorenv_editor オプションの値次第である。
VISUAL
visudo が起動するエディタ
EDITOR
VISUAL が設定されていないとき visudo が使用するエディタ

ファイル

/etc/sudoers
誰が何を実行できるかのリスト
/etc/sudoers.tmp
visudo が使うロックファイル

メッセージによる診断

sudoers file busy, try again later.
現在、ほかの誰かが sudoers ファイルを編集中である。
/etc/sudoers.tmp: Permission denied
visudo を root として実行しなかった。
Can't find you in the passwd database
あなたのユーザ ID はシステムの passwd ファイルに載っていない。
Warning: {User,Runas,Host,Cmnd}_Alias referenced but not defined
User_Alias (あるいは、Runas_Alias, Host_Alias, Cmnd_Alias) を、定義しないまま使用しようとしている。 あるいは、記載したユーザ名かホスト名の中に、アルファベットの大文字、 数字、アンダースコア ('_') のみからなるものがある。後者の場合は、 この warning を無視して構わない (sudo は警告を出さないないだろう)。 -s (strict) モードでは、warning ではなく、error になる。
Warning: unused {User,Runas,Host,Cmnd}_Alias
指摘された User_Alias (あるいは、Runas_Alias, Host_Alias, Cmnd_Alias) は、 定義されているが、一度も使用されていない。そうした使用しないエイリアスは、 コメントアウトするなり、消去するなりしてもよい。 -s (strict) モードでは、warning ではなく、error になる。
Warning: cycle in {User,Runas,Host,Cmnd}_Alias
指摘された User_Alias (あるいは、Runas_Alias, Host_Alias, Cmnd_Alias) は、 直接自分自身を参照しているか、 構成要素のエイリアスを通して自分自身を参照している。 sudosudoers を解析するとき、 循環を無視するので、これはデフォルトでは、単なる警告になっている。

作者

多数の人々が長年に渡って sudo の開発に取り組んできた。 visudo の当バージョンを書いたのは、

 Todd Miller

である。sudo の開発に貢献してくださった方々のリストについては、 sudo の配布に含まれる CONTRIBUTORS ファイルをご覧いただきたい (http://www.sudo.ws/sudo/contributors.html)。

警告

visudo が使用するエディタでシェル・エスケープが可能なかぎり、 ユーザがルート・シェルを獲得するのを防止する簡単な方法はない。

バグ

visudo にバクを発見したと思ったら、下記のページにアクセスして、 バグレポートを提出していただきたい。
http://www.sudo.ws/sudo/bugs/

サポート

ある程度の無料サポートが sudo-users メーリングリストを通して利用できる。 購読やアーカイブの検索には下記 URL を御覧になること。
http://www.sudo.ws/mailman/listinfo/sudo-users

免責

visudo は「現状のまま」提供される。 明示的な、あるいは黙示的ないかなる保証も、 商品性や特定目的への適合性についての黙示的な保証を含め、 またそれのみに止まらず、これを否認する。詳細な全文については、 sudo と一緒に配布されている LICENSE ファイルや、 下記 Web ページを御覧いただきたい。
http://www.sudo.ws/sudo/license.html