VISUDO(8)

名前
visudo - sudoers ファイルを編集する

書式

visudo [-chqsV] [-f sudoers] [-x output_file]

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

visudo が使用するエディタについては、 コンパイル時に設定された一つ以上のエディタからなるリストがプログラムに埋め込まれているが、 sudoers ファイルの Defaults 行で editor オプションを使えば、 それを変更することができる。このリストは、デフォルトでは 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 ファイルを編集しようとすると、カーソルがファイルのエラーが起きた行に飛ぶ (エディタにその機能があればだが)。

オプションとして以下のものが使用できる。

-c, --check
    check-only モードを有効にする。 現在の sudoers ファイルの文法エラー、所有者、アクセス権をチェックする。 -q オプションが指定されていない場合は、メッセージを標準出力に表示して、 sudoers の状態を報告する。チェックが成功裡に終わった場合、 visudo は返り値 0 で終了する。エラーに出会った場合の返り値は 1 である。

-f sudoers, --file=sudoers
    デフォルト以外の sudoers ファイルの位置を指定する。 このオプションを付けると、visudo はデフォルトの /etc/sudoers ではなく、 ユーザが選んだ sudoers ファイルを編集 (あるいは、チェック) することになる。 ロックファイルとしては、指定された sudoers ファイルの名前の末尾に ".tmp" を付けたものが使われる。なお、check-only モードの場合だけは、 -f の引数に '-' を指定することができる。 これは、標準入力から sudoers を読み込むということである。

-h, --help
    標準出力に簡単なヘルプメッセージを表示して終了する。

-q, --quiet
    quiet モードを有効にする。このモードでは、文法エラーの詳細は表示されない。 このオプションが役に立つのは、-c オプションと組み合わせたときだけである。

-s, --strict
    sudoers ファイルの厳密 (strict) チェックを有効にする。 エイリアスを定義する前に使用すると、 visudo がそれを文法エラーと見なすようになる。 ホスト名やユーザ名がアルファベットの大文字、数字、アンダースコア ('_') だけから構成されている場合には、 そうしたものとエイリアスとの区別が付かないことに注意していただきたい。

-V, --version
    visudo のバージョンと sudoers の文法バージョンを表示して終了する。

-x output_file, --export=output_file
    sudoers を JSON フォーマットに変換 (export) して、 output_file に書き出す。output_file が '-' の場合は、 変換された sudoers ポリシーが標準出力に書き出されることになる。 デフォルトでは、/etc/sudoers (及び、それにインクルードされているすべてのファイル) が変換の対象になる。 -f を使用すれば、それ以外の sudoers ファイルを変換対象として指定することができる。 フォーマットを変換するのは、サードパーティのアプリケーションにとって、 従来の sudoers のフォーマットよりも解析しやすくするためである。 様々な値は明示的なタイプを持ち、そうすることで従来の sudoers フォーマットの持つ曖昧さの多くを排除している。

  デバッグと sudoers プラグインへの引き数について
バージョン 1.8.4 以上の visudo は、 柔軟なデバッグ用の枠組みをサポートしており、sudo.conf(5) ファイルの Debug 行で設定するようになっている。

sudo 1.8.12 以降の visudo は、 (訳注: /etc/sudo.conf で指定された) sudoers プラグインに対する引き数も理解する。 そうした引き数は、sudoers ファイルのパス名、UID、GID、 ファイルのモードを、デフォルトのものから変更しているのである。 そうした引き数が存在する場合は、プラグインのパスの後ろに (すなわち、sudoers.so の後ろに) 列挙することになっている。 複数の引き数があるときは、ホワイトスペースで区切って指定すればよい。 一例を挙げる。

    Plugin sudoers_policy sudoers.so sudoers_mode=0400

以下の引き数が使用できる。

sudoers_file=pathname
    sudoers_file 引き数を使用すると、 sudoers ファイルのパスをデフォルトのものから変更することができる。

sudoers_uid=uid
    sudoers_uid 引き数を使用すると、 sudoers ファイルの所有者をデフォルトのものから変更することができる。 指定には、ユーザ ID 番号を使うべきである。

sudoers_gid=gid
    sudoers_gid 引き数を使用すると、 sudoers ファイルのグループをデフォルトのものから変更することができる。 指定には、グループ ID 番号を使用しなければならない (グループ名ではない)。

sudoers_mode=mode
    sudoers_mode 引き数を使用すると、 sudoers ファイルのファイル・モードをデフォルトのものから変更することができる。 指定には、8 進数の値を使うべきである。

sudo.conf(5) の設定についてさらに詳しいことをお知りになりたかったら、 sudo.conf(5) のマニュアルをご覧になっていただきたい。

環境変数
以下の環境変数が参照されるかどうかは、sudoers における editor や env_editor の値次第である。

VISUAL
    visudo が起動するエディタ

EDITOR
    VISUAL が設定されていないとき visudo が使用するエディタ

ファイル

/etc/sudo.conf
    sudo のフロントエンドの設定

/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) は、 定義されているが、一度も使用されていない。そうした使用しないエイリアスは、 コメントアウトするなり、消去するなりしてもよい。

Warning: cycle in {User,Runas,Host,Cmnd}_Alias
    指摘された User_Alias (あるいは、Runas_Alias, Host_Alias, Cmnd_Alias) は、 直接自分自身を参照しているか、 構成要素のエイリアスを通して自分自身を参照している。 sudo は sudoers ファイルを解析するとき、 循環を無視するので、デフォルトでは単なる警告になっている。

visudo: /etc/sudoers: input and output files must be different
    -x オプションを使用する際に引数として指定した output_file ファイルのパス名が、 変換対象である sudoers ファイルのパス名と同じである。

関連項目
vi(1), sudo.conf(5), sudoers(5), sudo(8), vipw(8)

作者
多数の人々が長年に渡って sudo の開発に取り組んできた。 このバージョンは、主として次の者が書いたコードからなっている。

    Todd C. Miller

sudo の開発に貢献してくださった方々の詳細なリストについては、 配布物中の CONTRIBUTORS ファイルをご覧になっていただきたい (https://www.sudo.ws/contributors.html)。

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

バグ
visudo にバグを発見したと思ったら、https://bugzilla.sudo.ws/ にアクセスして、バグレポートを提出していただきたい。

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

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