visudo - sudoers
ファイルを編集する
visudo [
-chqsV] [
-f sudoers]
visudo は
vipw(8)
によく似た安全なやり方で
sudoers
ファイルを編集する。
visudo は
sudoers
ファイルをロックして、重複した編集が同時に行われないようにするとともに、
整合性をざっと調べ、文法エラーのチェックを行う。
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
はバージョン番号を表示して、終了する。
環境変数¶
以下の環境変数が参照されるかどうかは、
sudoers の
editor や
env_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) は、
直接自分自身を参照しているか、
構成要素のエイリアスを通して自分自身を参照している。
sudo は sudoers
を解析するとき、
循環を無視するので、これはデフォルトでは、単なる警告になっている。
関連項目¶
vi(1),
sudoers(5),
sudo(8),
vipw(8)
多数の人々が長年に渡って
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