Provided by: manpages-ja_0.5.0.0.20110915-1_all bug

名前

       sudoers - どのユーザが何を実行できるかのリスト

説明

       sudoers ファイルは二種類のエントリから構成されている。 (要するに変数である) エイリアスと
       (誰が何を実行できるかを 指定している) ユーザ設定だ。

       [訳注]: 訳者としては、「エイリアス、デフォルト指定、ユーザ設定の三種類の エントリから構成
               されている」と言った方が実態に合っているのではないかと思う。

       一人のユーザに複数のエントリがマッチするときは、順番に適用される。 複数の指定がマッチして
       いる箇所については、最後にマッチしたものが 使用される (それが一番明示的なマッチだとはかぎ
       らないが)。

       以下では sudoers の文法を拡張 Backus-Naur 記法 (EBNF) を 使って記述する。EBNF がどんなもの
       か知らないからといって、 あきらめないでいただきたい。わりと簡単なものだし、以下に出てくる
       定義には 詳しい説明を付けておきますから。

       EBNF 早わかり

       EBNF は言語の文法を記述する簡潔で厳密な方法である。 EBNF の個々の定義は生成規則からできて
       いる。たとえば、

        シンボル ::= 定義 | 別の定義 1 | 別の定義 2 ...

       個々の生成規則は、ほかの生成規則を参照し、そのようにして言語の文法を 作り上げている。また
       EBNF には以下の演算子が含まれるが、 正規表現で御存じの読者も多いだろう。だが、いわゆる「ワ
       イルドカード」文字と 混同しないでいただきたい。あれは別の意味を持っている。

       ?   直前のシンボル (または、シンボルのグループ) が、あってもなくてもよいことを 意味す
           る。すなわちそのシンボルは、1 回現れてもよいし、1 回も現れないでもよい。

       *   直前のシンボル (または、シンボルのグループ) が 0 回以上現れる。

       +   直前のシンボル (または、シンボルのグループ) が 1 回以上現れる。

       丸カッコを使うと、複数のシンボルをグループにまとめることができる。 なお混乱を避けるた
       め、以下の定義で (シンボル名ではなく) 文字どおりの 文字列や記号を示す場合は、それをシング
       ルクォート ('') で囲むことにする。

       エイリアス

       エイリアスには四種類ある。User_Alias, Runas_Alias, Host_Alias, Cmnd_Alias である。

        Alias ::= 'User_Alias'  User_Alias (':' User_Alias)* |
                  'Runas_Alias' Runas_Alias (':' Runas_Alias)* |
                  'Host_Alias'  Host_Alias (':' Host_Alias)* |
                  'Cmnd_Alias'  Cmnd_Alias (':' Cmnd_Alias)*

        User_Alias ::= NAME '=' User_List

        Runas_Alias ::= NAME '=' Runas_List

        Host_Alias ::= NAME '=' Host_List

        Cmnd_Alias ::= NAME '=' Cmnd_List

        NAME ::= [A-Z]([A-Z][0-9]_)*

       個々のエイリアスの定義は、次の形をとる。

        Alias_Type NAME = item1, item2, ...

       上記において、Alias_Type は User_Alias, Runas_Alias, Host_Alias, Cmnd_Alias のうちの一つで
       ある。 NAME はアルファベットの大文字、数字、 アンダースコア ('_') からなる文字列である
       が、先頭の文字は大文字で なければならない。同じタイプのエイリアス定義を、コロンで (':') つ
       ないで、 一行に複数書くこともできる。たとえば、

        Alias_Type NAME = item1, item2, item3 : NAME = item4, item5

       以下では、エイリアスの有効な要素となるものを定義する。

        User_List ::= User |
                      User ',' User_List

        User ::= '!'* username |
                 '!'* '#'uid |
                 '!'* '%'group |
                 '!'* '+'netgroup |
                 '!'* '%:'nonunix_group |
                 '!'* User_Alias

       User_List は一個以上の、ユーザ名、uid ('#' が 頭に付く)、システムグループ名 ('%' が頭に付
       く) 、ネットグループ名 ('+' が頭に付く)、非 UNIX グループ名 ('%:' が頭に付く)、 User_Alias
       からなる。 リストの各項目の前には一個以上の '!' 演算子を付けてもよい。 奇数個の '!' はその
       項目の値を否定する。偶数個の場合は互い相殺するだけだ。

       ユーザ名、グループ名、ネットグループ名、非 UNIX グループ名は、 ダブルクォートで囲めば、特
       殊文字をエスケープしないですむ。 ダブルクォートで囲まずに特殊文字を使いたいなら、エスケー
       プした 16 進数を 指定してやればよい。たとえば、スペースなら \x20 という具合だ。

       非 UNIX グループ名の書式は、利用するサービスの実装によって決まる。たとえば、 Quest
       Authentication Services の AD バックエンドは、 以下の書式をサポートしている。

       ·   同じドメインのグループ:  "Group Name"

       ·   任意のドメインのグループ:  "Group Name@FULLY.QUALIFIED.DOMAIN"

       ·   グループ SID: "S-1-2-34-5678901234-5678901234-5678901234-567"

       グループ名を囲む引用符は任意であることに注意してほしい。文字列を 引用符で囲まない場合
       は、スペースや '@' 記号をエスケープするために、 バックスラッシュ (\) を使わなければならな
       い。

        Runas_List ::= Runas_Member |
                       Runas_Member ',' Runas_List

        Runas_Member ::= '!'* username |
                         '!'* '#'uid |
                         '!'* '%'group |
                         '!'* +netgroup |
                         '!'* Runas_Alias

       Runas_List は User_List に似ている。 違うのは、User_Alias ではなく、 Runas_Alias が使える
       ことだ。ユーザ名やグループ名の マッチは文字列として行われることに気を付けてほしい。言い換
       えると、 二つのユーザ名 (あるいはグループ名) は、かりに同じ uid (gid) を 持っていても、別
       個のものと見なされるのである。 だから、もし同じ uid を持ったすべてのユーザ名にマッチさせた
       かったら (たとえば、root と toor がそうだとしよう)、ユーザ名の代わりに uid を 使えばよい
       (この例なら、#0 である)。

        Host_List ::= Host |
                      Host ',' Host_List

        Host ::= '!'* hostname |
                 '!'* ip_addr |
                 '!'* network(/netmask)? |
                 '!'* '+'netgroup |
                 '!'* Host_Alias

       Host_List は一個以上の、ホスト名、IP アドレス、 ネットワークアドレス、ネットグループ名 (頭
       に '+' が付く)、および 他のエイリアスからなる。ここでもまた、'!' 演算子を付けて、項目の値
       を 否定することができる。ネットワークアドレスにネットマスクを 指定しなかった場合は、sudo
       がローカルホストの ネットワークインターフェースを一つ一つ参照し、指定された ネットワークア
       ドレスと同じアドレスを持つインターフェースがあれば、 そのネットマスクを使用することにな
       る。ネットマスクの指定は、 標準の IP アドレス表記 (たとえば 255.255.255.0 とか
       ffff:ffff:ffff:ffff:: とか) でもよく、CIDR 表記 (ビット数、 たとえば 24 とか 64 とか) でも
       よい。ホスト名の一部にシェル風の ワイルドカードを使用することができるが (下記のワイルド
       カードのセクションを 参照)、使用マシンの hostname コマンドが 完全修飾ドメイン名を返さない
       場合、ワイルドカードを 利用するには fqdn オプションを使う必要がある。

        Cmnd_List ::= Cmnd |
                      Cmnd ',' Cmnd_List

        commandname ::= filename |
                        filename args |
                        filename '""'

        Cmnd ::= '!'* commandname |
                 '!'* directory |
                 '!'* "sudoedit" |
                 '!'* Cmnd_Alias

       Cmnd_List は一個以上の、コマンド名、ディレクトリ、 他のエイリアスからなるリストである。コ
       マンド名は絶対パスのファイル名で あり、シェル風のワイルドカードを含んでいても構わない (下
       記のワイルドカードの セクションを参照)。単にファイル名だけ指定した場合、ユーザはお望みの
       どんな引き数でも付けてそのコマンドを実行することができる。とは言え、 コマンドライン引き数
       を (ワイルドカードを含めて) 指定しても構わないし、 また、引き数に "" を指定して、そのコマ
       ンドは コマンドライン引き数なしの実行のみが可能だと指示することもできる。 ディレクトリは
       '/' で終わる絶対パス名である。 Cmnd_List に ディレクトリを指定すると、ユーザーはそのディレ
       クトリ内の任意のファイルを 実行できるようになる (だが、そのサブディレクトリにあるファイル
       は実行できない)。

       Cmnd がコマンドライン引き数を伴っている場合は、 Cmnd 中の引き数は、ユーザがコマンドライン
       に打ち込む 引き数と正確に一致しなければならない (Cmnd 中の引き数にワイルドカードが あるな
       らば、それがコマンドラインの引き数とマッチしなければならない)。 以下に挙げる文字をコマンド
       引き数の中で用いるときは、'\' によって エスケープしなければならないことに注意してほしい。
       ',', ':', '=', '\' が それである。スペシャルコマンド "sudoedit" は、ユーザが sudo-e オ
       プション付きで (あるいは、sudoedit という コマンド名で) 実行することを許可するために使用す
       る。この場合、 コマンドライン引き数を取ることができるのは、普通のコマンドとまったく 同様で
       ある。

       デフォルトの指定 (Defaults)

       かなりの設定オプションが、一行以上の Default_Entry 行を 使うことで実行時にデフォルトの値か
       ら変更可能だ。その効果の及ぶ範囲は、 任意のホストのすべてのユーザにすることもできるし、あ
       る特定のホストの すべてのユーザ、ある特定のユーザ、ある特定のコマンド、 ある特定のユーザと
       して実行するコマンドに限定することもできる。 気を付けてほしいのは、コマンドに限定した
       Defaults 行に コマンドライン引き数まで書くことができないことだ。引き数を指定する必要が あ
       る場合は、Cmnd_Alias を定義して、代わりにそれを 参照すればよい。

        Default_Type ::= 'Defaults' |
                         'Defaults' '@' Host_List |
                         'Defaults' ':' User_List |
                         'Defaults' '!' Cmnd_List |
                         'Defaults' '>' Runas_List

        Default_Entry ::= Default_Type Parameter_List

        Parameter_List ::= Parameter |
                           Parameter ',' Parameter_List

        Parameter ::= Parameter '=' Value |
                      Parameter '+=' Value |
                      Parameter '-=' Value |
                      '!'* Parameter

       パラメータはフラグ整数値文字列リスト の どれでもよい。フラグは要するにブーリアン (真
       偽値) であり、'!' 演算子で off にできる。整数値、文字列、リストのパラメータにも、真偽値と
       して使用して、 それを無効にできるものがいくつか存在する。パラメータの値が複数の単語を 含む
       ときは、値をダブルクオート (") で囲むとよい。 特殊文字はバックスラッシュ (\) でエスケープ
       することが できる。

       リストには代入演算子が = のほかにもう二つある。 += と -= である。こうした演算子は それぞれ
       リストに付け加えたり、リストから削除したりするのに使用する。 -= 演算子を使って、リストに存
       在しない要素を 消去しようとしても、エラーにはならない。

       Defaults 行の解析は、次の順序で行われる。最初に汎用、Host、User の Defaults が解析され、そ
       れから Runas、最後にコマンドの Defaults の順番になる。

       Defaults 行で使用できるパラメータのリストについては、 「SUDOERS のオプション」を御覧いただ
       きたい。

       ユーザの設定 (User Specification)

        User_Spec ::= User_List Host_List '=' Cmnd_Spec_List \
                      (':' Host_List '=' Cmnd_Spec_List)*

        Cmnd_Spec_List ::= Cmnd_Spec |
                           Cmnd_Spec ',' Cmnd_Spec_List

        Cmnd_Spec ::= Runas_Spec? Tag_Spec* Cmnd

        Runas_Spec ::= '(' Runas_List? (':' Runas_List)? ')'

        Tag_Spec ::= ('NOPASSWD:' | 'PASSWD:' | 'NOEXEC:' | 'EXEC:' |
                      'SETENV:' | 'NOSETENV:' )

       ユーザの設定は、あるユーザが指定されたホストで (どのユーザに 変身して) どのコマンドを実行
       できるかを決定する。デフォルトでは、 コマンドは root に変身して実行されるが、これはコマン
       ドごとに 変更することができる。

       ユーザの設定の基本構造は、「誰が どこで = (誰に変身して) 何を」 である (who where =
       (as_whom) what)。 構成部分に分けて説明しよう。

       Runas_Spec (どのユーザやグループに変身できるか)

       Runas_Spec は変身の対象となるユーザやグループを 規定している。完全な形の  Runas_Spec
       は、(上で定義して いるように) コロン (':') で区切られ、カッコで囲まれた、二つの Runas_List
       からなっている。 一つ目の Runas_List は、 sudo-u オプションを使ったときに変身できる
       ユーザを 指している。二番目の方が規定しているのは、sudo-g オプションによって指定できる
       グループのリストだ。 両方の Runas_List が指定されている場合は、 それぞれの Runas_List にリ
       ストされているユーザと グループの任意の組み合わせで、コマンドを実行することが可能である。
       一つ目の Runas_List だけが指定されているときは、 リスト中のいかなるユーザにでも変身してコ
       マンドを実行できるが、 -g オプションを指定することはできない。 一つ目の Runas_List が空
       で、二番目だけ指定されている場合は、 sudo を実行するユーザの資格で、グループを Runas_List
       にリストされている任意のグループに設定して、 コマンドを実行することができる。Runas_Spec が
       まったく 指定されていないときは、 root としてコマンドを実行できるが、グループを指定するこ
       とはできない。

       Runas_Spec は、それに続くコマンドに対してデフォルトを 定める。それはどういうことかと言う
       と、次のようなエントリがあったとしよう。

        dgb    boulder = (operator) /bin/ls, /bin/kill, /usr/bin/lprm

       ユーザ dgb/bin/ls, /bin/kill, /usr/bin/lprm を実行することができる。ただし、operator
       として実行できるだけだ。たとえば、次のようにである。

        $ sudo -u operator /bin/ls

       エントリの後ろの方の Runas_Spec を変更することも可能だ。 上のエントリをこんなふうに書き変
       えたとしよう。

        dgb    boulder = (operator) /bin/ls, (root) /bin/kill, /usr/bin/lprm

       すると、ユーザ dgb は、/bin/ls こそ operator としてだが、 /bin/kill/usr/bin/lprmroot の資格で 実行できるようになる。

       dgb/bin/ls を実行するとき、 変身対象ユーザとグループのどちらでも operator にできるよう
       に、 この記述を拡張することもできる。

        dgb    boulder = (operator : operator) /bin/ls, (root) /bin/kill, \
               /usr/bin/lprm

       次の例では、ユーザ tcm が モデムのデバイスファイルにアクセスする コマンドを dialer グルー
       プとして実行できるようにしている。 この例では、グループしか指定できないことに注意してほし
       い。コマンドは ユーザ tcm の資格で実行されるのである。

        tcm    boulder = (:dialer) /usr/bin/tip, /usr/bin/cu, \
               /usr/local/bin/minicom

       Tag_Spec

       コマンドは 0 個以上のタグを伴うことができる。タグの値としては、 NOPASSWD, PASSWD, NOEXEC,
       EXEC, SETENV, NOSETENV の六つが可能で ある。ある Cmnd にタグをセットすると、
       Cmnd_Spec_List 中のそれ以後の Cmnd は、反対の意味を持つタグによって変更されないかぎり、 そ
       のタグを継承する (すなわち、PASSWD は NOPASSWD を上書きし、NOEXEC は EXEC を上書きするわけ
       だ)。

       NOPASSWD  PASSWD

       デフォルトでは、sudo はコマンドを実行する前に、 ユーザが本人であることを証明するように求め
       る。この振舞いは NOPASSWD タグによって変更することができる。 Runas_Spec と同様、NOPASSWD
       タグも Cmnd_Spec_List 中のそれに続くコマンドに対して デフォルトを定める。PASSWD の働きは反
       対であり、 振舞いを元に戻したいときに使える。たとえば、

        ray    rushmore = NOPASSWD: /bin/kill, /bin/ls, /usr/bin/lprm

       とすれば、ユーザ ray はマシン rushmore 上で認証をしないでも root として /bin/kill,
       /bin/ls, /usr/bin/lprm を実行できるようになる。もし ray が パスワードなしで実行できるコマ
       ンドを /bin/kill だけに 絞りたいのなら、エントリはこうなるだろう。

        ray    rushmore = NOPASSWD: /bin/kill, PASSWD: /bin/ls, /usr/bin/lprm

       ただし、ユーザが exempt_group オプションで指定されているグループに 属する場合は、PASSWD タ
       グが効果を持たないことに 注意してほしい。

       デフォルトでは、現在使用中のホストに関するユーザのエントリのうちに NOPASSWD タグが指定され
       ているものが一つでもあれば、 そのユーザはパスワードなしで sudo -l を実行できる。 な
       お、ユーザがパスワードなしで sudo -v を実行できるのは、 現在使用中のホストに関するそのユー
       ザのエントリのすべてで NOPASSWD タグが生きているときのみである。この動作は、 verifypwlistpw オプションによって変更できる。

       NOEXEC  EXEC

       sudonoexec サポートつきでコンパイルされ、 下で稼働しているオペレーティングシステムがそ
       れに対応している場合、 NOEXEC タグを利用すれば、動的にリンクされた実行ファイルが そこから
       さらにコマンドを実行するのを防ぐことができる。

       次の例では、ユーザ aaron/usr/bin/more/usr/bin/vi を実行できるが、シェル・エスケー
       プは利用できない。

        aaron  shanty = NOEXEC: /usr/bin/more, /usr/bin/vi

       NOEXEC がどんなふうに働くのか、お使いのシステムで 利用できるかどうか、などについてさらに詳
       しく知りたかったら、 「シェル・エスケープを防止する」のセクションを御覧になっていただきた
       い。

       SETENV  NOSETENV

       上記のタグは setenv オプションの値をコマンドごとに変更する。 注意すべきは、あるコマンドに
       対して SETENV が 設定されていると、コマンドラインから設定するどんな環境変数も env_check,
       env_delete, env_keep による規制を受けないということである。 だから、そうした形で環境変数を
       設定することを許可するのは、 信用できるユーザだけに限るべきだ。なお、マッチするコマンドが
       ALL だった場合は、暗黙のうちに SETENV タグが そのコマンドに付けられるが、このデフォルトの
       動作は UNSETENV タグを使えば打ち消すことができる。

       ワイルドカード

       sudoers ファイルでは、ホスト名、コマンドラインのパス名、 コマンドラインの引き数にシェル形
       式のワイルドカード (メタ文字とか glob キャラクタとも言う) が使用できる。ワイルドカードの
       マッチングは POSIXglob(3) と fnmatch(3) ルーティンを用いて行われる。以下のものは正規表
       現ではないことに 注意してほしい。

       *       ゼロ個以上の任意の文字にマッチする。

       ?       任意の一文字にマッチする。

       [...]   指定された範囲の任意の一文字にマッチする。

       [!...]  指定された範囲以外の任意の一文字にマッチする。

       \x      "x" がどんな文字であっても、"x" そのものとして 評価する。これは "*", "?", "[", "}"
               といった 特殊文字をエスケープするために使用する。

       使用システムの glob(3) や fnmatch(3) 関数が POSIX の文字クラスに対応しているなら、文字クラ
       スも使用できる。 ただし、':' 文字は、sudoers で特別な意味を 持っているので、エスケープしな
       ければならない。一例を上げると、

           /bin/ls [[\:alpha\:]]*

       上記は、文字で始まるどんなファイル名にもマッチするだろう。

       コマンドのパス名に使われたワイルドカードはフォワードスラッシュ ('/') にマッチしないことに
       注意してほしい。だが、コマンドライン引き数との マッチングでは、ワイルドカードはスラッシュ
       としっかりマッチする。 そこで、

           /usr/bin/*

       というコマンドパスは、/usr/bin/who とマッチするが、 /usr/bin/X11/xterm とはマッチしないこ
       とになる。

       ワイルドカード・ルールの例外

       上記ルールには次の例外がある。

       ""      sudoers ファイルのエントリにおいて、空文字列 "" が唯一 のコマンドライン引き数だっ
               た場合は、そのコマンドにいかなる引き数を付 けて実行することも許されないということ
               である。

       sudoers に他のファイルをインクルードする

       #include 命令や #includedir 命令を 使えば、現在解析中の sudoers ファイルに外部にあるほかの
       sudoers ファイルをインクルードすることができる。

       この方法を使えば、たとえば、サイト全体で使用する sudoers ファイルの ほかに、マシンごとの
       ローカルな sudoers ファイルを持つことができる。 ここでは、サイト全体の sudoers/etc/sudoers とし、 マシンごとの方は /etc/sudoers.local とすることにしよう。 /etc/sudoers/etc/sudoers.local をインクルードするには、 /etc/sudoers 中に次の行を書き込む。

           #include /etc/sudoers.local

       sudo は解析中この行に出会うと、カレントファイル (/etc/sudoers だ) の処理を一時中止し、処理
       の対象を /etc/sudoers.local に切り替える。そして、 /etc/sudoers.local の末尾まで達した
       ら、/etc/sudoers の 残りを処理するのだ。インクルードされたファイルがさらに他のファイルを
       インクルードしてもよい。インクルートのネストには 128 ファイルまでという ハード・リミットが
       あって、インクルードファイルのループが起きないように なっている。

       ファイル名には %h エスケープが使える。これはホスト名の短縮形を 示している。たとえば、マシ
       ンのホスト名が "xerxes" のとき、

       #include /etc/sudoers.%h

       と書けば、sudo はファイル /etc/sudoers.xerxes をインクルード することになる。

       #includedir 命令を使えば、sudo.d ディレクトリを 作っておいて、システムのパッケージ管理者が
       パッケージをインストールする過程で sudoers のルールを記したファイルをそこに入れてやる、と
       いったことが 可能になる。たとえば、次のように書くと、

       #includedir /etc/sudoers.d

       sudo/etc/sudoers.d にあるファイルを一つづつ読み込む。 ただし、末尾が ~ だったり、. 文
       字を 含んでいたりするファイル名はスキップするが、これは パッケージマネージャや エディタが
       作った、テンポラリファイルやバックアップファイルを読み込むような 問題を起こさないためであ
       る。ファイルは辞書順にソートされて、解析される。 すなわち、/etc/sudoers.d/01_first/etc/sudoers.d/10_second より前に解析されるということだ。ソートは辞書順であって、数値の順
       では ないので、/etc/sudoers.d/1_whoops というファイルがあっても、 /etc/sudoers.d/10_second
       より後でロードされることに 注意してほしい。ファイル名の先頭を 0 で埋めて数字の桁を揃えれ
       ば、 こうした問題を回避することができる。

       気を付けてほしいが、#include でインクルードされた ファイルとは違って (訳注: visudo/etc/sudoers を 編集するとき、#include で指定したファイルがあれば、 続けてそれも編集す
       る)、 visudo が #includedir で指定したディレクトリの ファイルまで編集するのは、シンタクス
       エラーを含むものがあるときだけである。 とは言え、visudo を -f オプション付きで実行して、
       ディレクトリ中のファイルを直接編集することは可能だ。

       ほかの特殊文字と予約語

       パウンド記号 ('#') はコメントを示すのに使用される (例外は、#include 命令の 一部であるとき
       や、ユーザ名に関連して現れ、その後に一個以上の数字が 続くときであり、後者の場合は uid と見
       なされる)。コメント記号と それに続くテキストは、行末にいたるまで無視される。

       予約語 ALL は組込みのエイリアスであり、何に対してでも マッチする。ALL は、Cmnd_Alias,
       User_Alias, Runas_Alias, Host_Alias を代わりに使えるところなら、どこでも 使用できる。ALL
       という名前のエイリアスを自分で定義しようと してはいけない。組込みのエイリアスの方が、自分
       で作ったエイリアスより 優先して使われるからだ。ALL の使用には危険が伴うことが あるのを忘れ
       ないでいただきたい。なぜなら、ALL を コマンドに関して使うと、ユーザにシステム上のどんなコ
       マンドでも 実行することを許してしまうからである。

       エクスクラメーションマーク ('!') は、エイリアスでも Cmnd の前でも論理 not 演算子として使用
       できる。 これによってある値を除外することが可能だ。しかしながら、 組込みエイリアス ALL と
       ! を 組み合わせて、「二三のコマンド以外のすべての」コマンドの実行をあるユーザに 許可しよう
       としても、思いどおりの動きになることはめったにないことに 気を付けてほしい (下記の「セキュ
       リティに関する注意点」を参照)。

       長い行は、行末にバックスラッシュ ('\') を置けば、継続することができる。

       リストにおける要素間やユーザ設定における構文用特殊文字 ('=', ':', '(', ')') の前後に空白文
       字 (whitespace)を入れることは、 任意である。

       次の文字を単語 (ユーザ名とかホスト名とか) の一部として使うときは、 バックスラッシュ ('\')
       でエスケープしなければならない。 '@', '!', '=', ':', ',', '(', ')', '\' がそれである。

SUDOERS のオプション

       すでに説明したように、sudo の動作は Default_Entry 行によって変更することができる。
       Defaults に与えることのできるパラメータについて、サポートされているも ののすべてを、タイプ
       別にまとめて以下に列挙する。

       フラグ:

       always_set_home これをセットすると、sudo は環境変数 HOME を 変身対象ユーザのホームディレク
                       トリに設定する (-u オプションが 使用されないかぎり、それは root であ
                       る)。事実上、暗黙のうちに sudo-H オプションが常に指定されることになる
                       わけだ。このフラグは デフォルトでは off である。

       authenticate    これをセットすると、ユーザはコマンドの実行を許可される前に、パスワードで
                       (あるいは、ほかの認証方法で) 認証をしなければならない。このデフォルト値は
                       PASSWD や NOPASSWD タグで変更できる。 このフラグはデフォルトでは on であ
                       る。

       closefrom_override
                       これをセットすると、ユーザが sudo-C オプションを 使用できるようにな
                       る。-C オプションというのは、sudo が 開いたファイルを閉じていくとき、どの
                       ファイル・ディスクリプタから クローズしていくかというデフォルトの始点を変
                       更するものだ。このフラグは デフォルトでは off である。

       env_editor      これをセットすると、visudo はデフォルトのエディタ・リストを 利用する前
                       に、環境変数 EDITOR や VISUAL の値を 使用するようになる。これがセキュリ
                       ティホールになりかねないことに 注意してほしい。ユーザが root として任意の
                       コマンドをログに記録されることなく 実行できるようになるからだ。こうした環
                       境変数を利用するときの、 env_editor を有効にするよりも安全な方法は、
                       sudoers ファイルの editor オプションに コロンで区切ったエディタのリストを
                       書いておくことだ。そうすれば、 visudo が EDITOR や VISUAL を使うのは、 そ
                       れが editor オプションに指定した値とマッチしたときだけに なる。このフラグ
                       はデフォルトでは off である。

       env_reset       これをセットすると、sudo は環境を以下の変数のみを含むように 設定し直す。す
                       なわち、LOGNAME, SHELL, USER, USERNAME それに SUDO_* である。その後で さら
                       に、sudo を起動するユーザの環境にある変数のうち、 env_keep や env_check の
                       リストに マッチするものが追加される。 env_keep や env_check のリストにデ
                       フォルトでどんな変数が 含まれているかは、root ユーザが sudo-V オプショ
                       ン付きで 実行すれば、見ることができる。なお、sudoers ファイルの
                       secure_path オプションが設定されているときは、その値が 環境変数 PATH とし
                       て使用されることになる。 このフラグはデフォルトでは on である。

       fqdn            sudoers ファイルで完全修飾ホスト名を使用したかったら、 このフラグをセット
                       するとよい。すなわち、myhost ではなく、 myhost.mydomain.edu を使いたい場合
                       だ。そのときでも、そうしたければ、 短縮形も使える (両方を混ぜて使うこと
                       だってできる)。気を付けて ほしいのは、fqdn を 有効にすると、sudo は DNS へ
                       問い合わせをしなければならないので、DNS サービスが 稼働していない場
                       合、sudo が使えなくなるかもしれないということだ (たとえば、マシンがネット
                       ワークに接続していない場合)。 もう一つ気を付けるべきことがある。 DNS が
                       知っているホストの正式名を使わなければならないということだ。 言い換えれ
                       ば、ホストのエイリアス (CNAME のエントリ) を 使ってはいけない。パフォーマ
                       ンスの問題もあるし、DNS からエイリアスを すべて取得する方法はないからでも
                       ある。マシンのホスト名が (hostname コマンドで返ってくるものが) すでに 完全
                       修飾名になっているならば、fqdn をセットする必要はないだろう。 このフラグは
                       デフォルトでは off である。

       ignore_dot      これをセットすると、環境変数 PATH 中に '.' や '' (カレントディレクトリ) が
                       あっても、sudo はそれを無視する。 PATH そのものは変更されない。このフラグ
                       は デフォルトでは off である。

       ignore_local_sudoers
                       LDAP の方でこのフラグをセットすると、/etc/sudoers の 解析がスキップされ
                       る。このフラグは、ローカルにある sudoers ファイルの 使用を禁じて、LDAP の
                       みを使うようにしたい企業のためにある。 たちの悪いオペレータが /etc/sudoers
                       に手を加えて自分の権限を 増やそうとしても、そうした悪だくみは阻止されるわ
                       けだ。このオプションが 設定されているときは、/etc/sudoers ファイルは存在す
                       る必要すらない。 このオプションは、マッチする LDAP の具体的なエントリが 一
                       つもなかったときに、どう振舞うべきかを sudo に指示するものだから、 これを
                       指定した sudoOption は cn=defaults のセクションに なければ意味がない。この
                       フラグはデフォルトでは off である。

       insults         これをセットすると、不正なパスワードが入力されたとき、 sudo がユーザに悪態
                       をつく。このフラグはデフォルトでは off である。

       log_host        これをセットすると、ホスト名が (syslog 経由ではない) sudo の ログファイル
                       に記録されることになる。このフラグはデフォルトでは off である。

       log_year        これをセットすると、四桁の年が (syslog 経由ではない) sudo の ログファイル
                       に記入されることになる。このフラグはデフォルトでは off である。

       long_otp_prompt S/KeyOPIE のような One Time Password (OTP) スキームを採用しているとき
                       にこれを有効にすると、チャレンジを ローカルウィンドウにカット・アンド・
                       ペーストしやすいように、 二行のプロンプトが使用される。デフォルトのプロン
                       プトほど見栄えはよくないが、 こちらの方が便利だと思う人もいる。デフォルト
                       ではこのフラグは off である。

       mail_always     ユーザが sudo を実行するたびに、mailto ユーザにメールを送る。 このフラグは
                       デフォルトでは off である。

       mail_badpass    sudo を実行するユーザが正しいパスワードを入力しないと、 mailto ユーザに
                       メールを送る。このフラグはデフォルトでは off である。

       mail_no_host    これをセットすると、sudo を起動したユーザが sudoers ファイルに 存在するも
                       のの、使用中のホストでコマンドの実行を許可されていない場合、 mailto ユーザ
                       にメールを送付する。このフラグはデフォルトでは off である。

       mail_no_perms   これをセットすると、sudo を起動したユーザが sudo の使用を 許可されている
                       が、実行しようとしているコマンドが sudoers ファイルの そのユーザのエントリ
                       に登録されていないか、明示的に禁止されている場合、 mailto ユーザにメールを
                       送付する。このフラグはデフォルトでは off である。

       mail_no_user    これをセットすると、sudo を起動したユーザが sudoers ファイルに 記載されて
                       いない場合、mailto ユーザにメールを送付する。 このフラグはデフォルトでは
                       on である。

       noexec          これをセットすると、sudo を通して実行されるすべてのコマンドが、 EXEC タグ
                       で無効にされないかぎり、あたかも NOEXEC タグが設定されているかのごとく振舞
                       うようになる。 上述の「NOEXEC  EXEC」の説明、および、このマニュアルの 終
                       わりの方にある「シェル・エスケープを防止する」というセクションを 参照して
                       ほしい。このフラグはデフォルトでは off である。

       path_info       通常 sudo は、環境変数 PATH 中にコマンドが 見付からないと、ユーザにそのこ
                       とを知らせる。これを利用すれば、 一般ユーザにアクセス権のない実行ファイル
                       のありかについて情報を 収集できるという理由から、この動作を無効にしたいサ
                       イトもあるかもしれない。 その場合の欠点は、実行ファイルが単にユーザの PATH
                       中に なかっただけの場合でも、実行の許可がないと sudo がユーザに告げる こと
                       になって、実情がわかりにくいかもしれないことである。このフラグは デフォル
                       トでは on である。

       passprompt_override
                       通常、passprompt オプションによって指定されたパスワードプロンプトが 使用さ
                       れるのは、PAM のようなシステムが用意している パスワードプロンプトが
                       "Password:" という文字列にマッチしている ときだけであ
                       る。passprompt_override をセットすると、 passprompt が無条件で使われること
                       になる。このフラグは デフォルトでは off である。

       preserve_groups デフォルトでは、sudo は所属グループの初期値として、変身対象ユーザが 所属し
                       ているグループのリストを設定する。 preserve_groups を セットすると、sudo
                       を実行するユーザの所属グループのリストが、 変更されずにそのまま維持され
                       る。とは言え、実グループ ID や 実効グループ ID が変身対象ユーザのそれに設
                       定されることに変わりはない。 このフラグはデフォルトでは off である。

       pwfeedback      ほかのたいていの Unix プログラムと同様、sudo はパスワードを 読み込むと
                       き、デフォルトでは、ユーザが Return (または Enter) キーを 押すまで、エコー
                       を off にする。この動作にとまどうユーザが存在する。 彼らには sudo が急に反
                       応しなくなったように見えるのだ。 pwfeedback をセットすると、ユーザがキーを
                       押すたびに、sudo が 目に見える反応を返すようになる。これには、セキュリティ
                       上の問題が あることに注意してほしい。横で見ている人が、打ち込まれたパス
                       ワードの 文字数を特定することができるかもしれないのだ。このフラグはデフォ
                       ルトでは off である。

       requiretty      これをセットすると、sudo が実行されるのは、ユーザが実際の tty に ログイン
                       したときだけになる。すなわち、sudo を実行できるのは、 ログイン・セッション
                       からだけであって、 cron(8) や cgi-bin スクリプトといった、ほかの方法を介し
                       て実行する ことはできないということだ。このフラグは、デフォルトでは off で
                       ある。

       root_sudo       これをセットすると、root も sudo を実行できるようになる。 このフラグを無効
                       にすると、ユーザがたとえば "sudo sudo /bin/sh" と いったように sudo コマン
                       ドを連鎖的に使って、ルートシェルを 獲得することができなくなる。ところで、
                       root_sudo が off だと、root が sudoedit まで実行できなくなる ことに注意し
                       てほしい。 root_sudo を無効にしても、セキュリティが実際に向上するわけでは
                       ない。 このフラグが存在しているのは、もっぱら歴史的な理由からなのだ。 この
                       フラグはデフォルトでは on である。

       rootpw          これをセットすると、sudo はプロンプトで、起動したユーザの パスワードではな
                       く、root のパスワードを要求するようになる。 このフラグはデフォルトでは off
                       である。

       runaspw         これをセットすると、sudo はプロンプトで、起動したユーザの パスワードではな
                       く、sudoers ファイルの runas_default オプションが 定義しているユーザーの
                       (デフォルトでは root である) パスワードを要求する。このフラグはデフォルト
                       では off である。

       set_home        これがセットされているとき、sudo-s オプション付きで 起動すると、環境変
                       数 HOME が変身対象ユーザの (-u オプションが使用されないかぎり、それは root
                       である) ホームディレクトリに設定される。すなわち、 -s オプションが -H オプ
                       ションを事実上兼ねることになるわけだ。このフラグは デフォルトでは off であ
                       る。

       set_logname     通常 sudo は環境変数 LOGNAME, USER, USERNAME を 変身対象ユーザの名前 (-u
                       オプションが指定されていない場合、 普通は root) にセットする。しかし、プロ
                       グラムによっては (たとえば、 RCS リビジョンコントロールシステムがその一つ
                       だが) ユーザが 実際には誰であるかを判定するのに LOGNAME を 使用しているこ
                       とがあるので、この振舞いを変更することが望ましい場合もある。 set_logname
                       オプションに '!' を付けて否定することで、それができる。 なお env_reset オ
                       プションを無効にしていない場合、 env_keep リストの項目が set_logname によ
                       る値を 上書きすることになるので、注意してほしい。このフラグはデフォルトで
                       は on である。

       setenv          これをセットすると、ユーザがコマンドラインから env_reset オプションを 無効
                       にできるようになる。さらに、コマンドラインから設定する環境変数が
                       env_check, env_delete, env_keep による制限を 受けなくなる。それ故、そのよ
                       うなやり方で変数を設定することを 許可するのは、信用できるユーザのみに限る
                       べきだ。このフラグは デフォルトでは off である。

       shell_noargs    これがセットされているとき、sudo を引き数なしで起動すると、 sudo-s オ
                       プションが指定されたかのように振舞う。 すなわち、root ユーザとしてシェルを
                       実行するわけだ (シェルは、 環境変数 SHELL がセットされていれば、それによっ
                       て決まるし、 セットされていなければ、sudo を起動したユーザの /etc/passwd
                       エントリに 登録されたものになる)。このフラグはデフォルトでは off である。

       fast_glob       通常 sudo はパス名のマッチングをするとき、glob(3) 関数を 使用して、シェ
                       ル・スタイルのワイルドカード展開 (glob) を行う。しかし、 glob(3) はファイ
                       ルシステムにアクセスするので、指定パターンに よっては、作業を完了するまで
                       に時間がかかることがある。 必要な時にマウントするようになっている (つまり
                       オートマウントの) ネットワーク・ファイル・システムを参照するときは、とりわ
                       け時間がかかる。 fast_glob オプションを指定すると、sudofnmatch(3) 関数
                       を使うようになるが、こちらの関数はマッチングの際に ファイルシステムにアク
                       セスしない。fast_glob の欠点は、 ./ls../bin/ls のような相対パスに対す
                       るマッチが できないことである。このフラグはデフォルトでは off である。

       stay_setuid     通常 sudo がコマンドを実行するとき、実 UID と実効 UID は 変身対象ユーザ
                       (デフォルトでは root) のものにセットされる。このオプションは その振舞いを
                       変更して、sudo を起動したユーザの UID が、 そのまま実 UID として残るように
                       する。言い換えると、sudo が setuid ラッパーとして動作するようになるわけ
                       だ。プログラムを setuid で 動かすと、危険をもたらしかねないという理由か
                       ら、ある種の機能を 使えないようにしているシステムでは、このオプションが役
                       に立つかもしれない。 このオプションは、 setreuid() 関数なり setresuid() 関
                       数なりを 持っているシステムでのみ有効である。 このフラグはデフォルトでは
                       off である。

       targetpw        これをセットすると、sudo はプロンプトで、起動したユーザのパスワード ではな
                       く、-u オプションで指定されたユーザ (デフォルトでは root) の パスワードを
                       要求する。この設定をすると、-u オプションの引き数として、 passwd データ
                       ベースに登録されていない uid が使えなくなることに注意してほしい。 このフラ
                       グはデフォルトでは off である。

       tty_tickets     これをセットすると、ユーザは tty ごとに認証をしなければならなくなる。 sudo
                       は通常、チケットディレクトリ (訳注:たとえば /var/run/sudo) にある、sudo
                       を実行しているユーザと同じ名前のディ レクトリを認証に使用する。しかし、こ
                       のフラグが有効になっている場合は、 そのディレクトリにある、ユーザがログイ
                       ンしている tty に対応する名前の ファイルを使用することになるのだ。このフラ
                       グはデフォルトでは off である。

       umask_override  これをセットすると、sudo は umask を sudoers の umask オプションで指定され
                       たとおりの値に、変更を加えることなく設定する。 このことによって、ユーザ自
                       身の umask 値よりもっと緩やかな umask 値を sudoers で指定することが可能に
                       なる。sudo の昔の動作と 同じになるわけだ。 umask_override をセットしない場
                       合、現在の sudo は umask を、 ユーザの umask 値と sudoers で指定した umask
                       値とのビット和に 設定することになっている。このフラグはデフォルトでは off
                       である。

       visiblepw       デフォルトでは、ユーザがパスワードを入力しなければならないときに、 使用し
                       ているターミナルでエコーの抑制ができなかったら、 sudo は実行を拒否するよう
                       になっている。これに対し、 visiblepw フラグが設定されていると、パスワード
                       がスクリーンに 表示されてしまう場合でも、sudo はプロンプトを出して、パス
                       ワードを 求める。この動作によって、 rsh(1) は tty を割り当てないにもかかわ
                       らず、 "rsh somehost sudo ls" といった操作の実行が可能になるわけだ。 この
                       フラグはデフォルトでは off である。

       整数:

       closefrom       sudo はコマンドを実行する前に、標準入力、標準出力、標準エラー (すなわ
                       ち、ファイルディスクリプタ 0-2 である) を除いて、 オープンしたすべてのファ
                       イル・ディスクリプタをクローズする。 closefrom オプションを使用すると、0-2
                       以外の どのファイル・ディスクリプタからクローズして行くかを指定することが
                       できる。 デフォルトは 3 である。

       passwd_tries    sudo が「失敗」をログに記録して終了する前に、ユーザがパスワードを 入力でき
                       る回数。デフォルトは 3。

       真偽値としても使用できる整数:

       loglinelen      sudo 用ログファイルの一行あたりの文字数。この値は、ログファイルを 見やすく
                       するために改行する位置を決めるのに使用される。この値は、 syslog 経由のログ
                       ファイルには影響せず、直接ファイルにログを書き出すときのみ 効果がある。デ
                       フォルトは 80 である (改行をしないように するには、値を 0 にするか、頭に
                       '!' を付けて、このオプションを否定する)。

       passwd_timeout  sudo のパスワードプロンプトが時間切れになるまでの分単位の時間。 デフォルト
                       は 5 である。これを 0 にセットする と、パスワードプロンプトが時間切れなし
                       になる。

       timestamp_timeout
                       sudo がパスワードを再び要求するようになるまでの時間を分単位で 指定する。デ
                       フォルトでは 5 である。これを 0 に セットすると、毎回パスワードを要求する
                       ようになる。0 より小さい値に セットした場合は、ユーザのタイムスタンプが期
                       限切れになることがない。 ユーザが sudo -v と sudo -k を 実行することによっ
                       て、タイムスタンプを自分で作ったり、消したりできるように したかったら、こ
                       の手を使えばよい。

       umask           コマンドを実行しているときに使用する umask 値。ユーザの umask 値をそのまま
                       使いたかったら、'!' を頭に付けて、このオプションを否定するか、0777 に セッ
                       トする。このオプションの値が 0777 以外の場合、実際に使用される umask 値
                       は、ユーザの umask 値と umask オプションで指定する umask 値との ビット和に
                       なる。そのことによって、sudo がコマンドを実行するときの umask 値が、ユーザ
                       の umask 値より低くならないようになっているわけだ。 なお、umask オプション
                       のデフォルトの値は、0022 である。 PAM を使用しているシステムでは、 PAM の
                       デフォルト設定で umask 値を指定することができるが、その場合は、それが
                       sudoers で 指定した値を上書きすることに注意してほしい。

       文字列:

       badpass_message ユーザが不正なパスワードを入力したときに表示するメッセージ。 insults フラ
                       グが有効になっていないかぎり、デフォルトは 「Sorry, try again.」である。

       editor          visudo で使用できるエディタをコロン (':') で区切ったリスト。 visudo は、可
                       能ならば、ユーザの EDITOR 環境変数と一致し たエディタを選択する。それがで
                       きないときは、このリストにあるエディタで、 実際に存在し、かつ実行可能な最
                       初のエディタを使用する。デフォルトは使用 システムにおける vi のパスであ
                       る。

       mailsub         mailto ユーザに送付するメールの件名。エスケープ文字 %h はマシンのホスト名
                       に展開される。デフォルトは「*** SECURITY information for %h ***」。

       noexec_file     ライブラリ関数 execv(), execve(), fexecve() の ダミー版 (エラーを返すだけ
                       の関数) が入っている共有ライブラリのパス。 これは、LD_PRELOAD やそれに相当
                       するものを サポートしているシステムで noexec 機能を実現するために使用され
                       る。 デフォルトでは /usr/local/libexec/sudo_noexec.so になっている。

       passprompt      パスワードを要求するときに使用するデフォルトのプロンプト。-p オ プションや
                       環境変数 SUDO_PROMPT によって変更すること ができる。以下のパーセント (`%')
                       エスケープが使用で きる。

                       %H  ドメイン名付きのローカルホスト名に展開 (マシンのホスト名が完全修飾名
                           か、 fqdn オプションがセットされている場合に有効)

                       %h  ドメイン名なしのローカルホスト名に展開

                       %p  パスワードを要求されているユーザ名に展開 (sudoers ファイルの rootpw,
                           targetpw, runaspw フラグを尊重する)

                       %U  変身対象ユーザの (デフォルトでは root) ログイン名に展開

                       %u  sudo を起動するユーザのログイン名に展開

                       %%  連続した二個の % は、一個の % 文字 そのものを意味する

                       デフォルトの値は「Password:」である。

       runas_default   コマンドラインで -u オプションが指定されていないときの、デフォルトの 変身
                       対象ユーザ。デフォルトでは root になっている。 runas_default をセットする
                       なら、Runas_Alias を 指定するよりも前にやらなければならないことに注意する
                       こと。

       syslog_badpri   ユーザが認証に失敗したときに使用する syslog の優先順位 (priority)。デ フォ
                       ルトでは alert になっている。

       syslog_goodpri  ユーザが認証に成功したときに使用する syslog の優先順位 (priority)。デ フォ
                       ルトでは notice になっている。

       sudoers_locale  sudoers ファイルを解析するときに使用するロケール。ロケールの変更は、
                       sudoers の解釈に影響があるかもしれないので、注意してほしい。 デフォルトで
                       は "C" になっている。

       timestampdir    sudo がタイムスタンプ・ファイルを置くディレクトリ。デフォルト は
                       /var/run/sudo である。

       timestampowner  タイムスタンプ・ディレクトリとそこに置かれるタイムスタンプの所有者。デ
                       フォルトは root である。

       真偽値としても使用できる文字列:

       askpass     askpass で指定するのは、ヘルパー・プログラムの絶対パスである。 このヘルパー・
                   プログラムは、ターミナルを利用できないときに、 ユーザのパスワードを読み込むた
                   めに使用する。たとえば、sudo が (テキストベースではなく) グラフィカルなアプリ
                   ケーションから実行される といった場合だ。askpass で指定されたヘルパー・プログ
                   ラムは、 渡された引き数をプロンプトとして表示し、ユーザのパスワードを標準出力
                   に 書き出すべきである。 askpass の値は、環境変数 SUDO_ASKPASS で 上書きするこ
                   とができる。

       env_file    env_file オプションでファイルの絶対パスを指定すると、 実行するプログラムの環境
                   として設定する変数をそのファイルに格納して おくことができる。このファイルのエ
                   ントリは VARIABLE=value か export VARIABLE=value の形でなければならない。 変数
                   の値をシングルクォートやダブルクォートで囲んでもよい。 このファイルに含まれる
                   変数は、env_keepenv_check のような sudo のほかの環境設定の影響を受ける。

       exempt_group
                   このグループのユーザはパスワードの入力や secure_path による PATH の限定を免除
                   されている。このオプションはデフォルトでは セットされていない。

       lecture     sudo はパスワードプロンプトに添えて簡単な訓戒を表示することが できる。このオプ
                   ションはその訓戒をいつ表示するかを決定する。以下の値が 可能である。

                   always  いつでも必ず訓戒を表示する

                   never   訓戒を一切表示しない。

                   once    ユーザがはじめて sudo を実行したときだけ表示する。

                   値を指定しないと、once を指定したことになる。頭に '!' を付けて、 このオプショ
                   ンを否定すると、値に never が使用される。 デフォルトの値は once である。

       lecture_file
                   標準の訓戒の代わりに使用する sudo の訓戒を書き込んだファイルがあるなら、
                   lecture_file でそのパスを指定する。sudo はデフォルトでは、 プログラムに埋め込
                   まれた訓戒を使用する。

       listpw      このオプションは、sudo  -l オプション付きで実行したとき、 ユーザがパスワード
                   を要求されるのは、どんな場合かを決定する。 以下のような値が可能である。

                   all     パスワードを入力しないですむためには、sudoers ファイルの使用中の ホス
                           トに対する当該ユーザのエントリのすべてに NOPASSWD タグが設定されていな
                           ければならない。

                   always  ユーザは -l オプションを使用する際に必ずパスワードを入力しなければ な
                           らない。

                   any     パスワードを入力しないですむためには、sudoers ファイルの使用中の ホス
                           トに対する当該ユーザのエントリの少なくとも一つに NOPASSWD タグが設定さ
                           れていなければならない。

                   never   ユーザは -l オプションを使用する際にパスワードを入力する必要が まった
                           くない。

                   値を指定しないと、値は any だと見なされる。'!' を頭に付けて、 このオプションを
                   否定すると、値に never が使われることになる。 デフォルトは any である。

       logfile     sudo のログファイルのパス (syslog 経由のログファイルではない)。 パスを指定する
                   と、ファイルへのロギングが on になり、 '!' を頭に付けて、 このオプションを否定
                   すると、off になる。デフォルトでは、sudo は syslog 経由でログを取る。

       mailerflags メーラを起動するときに使用するフラグ。デフォルトは -t に なっている。

       mailerpath  警告メールの送信に使うメール・プログラムのパス。デフォルトは configure したと
                   きに見つかった sendmail のパス。

       mailfrom    警告メールやエラー・メールを送るとき、差出人として使用するアドレス。 sudo が @
                   記号を解釈しないようにするため、 アドレスはダブルクォート (") で囲むべきであ
                   る。 デフォルトは、sudo を実行するユーザの名前。

       mailto      警告メールやエラー・メールを送付する宛先のアドレス。sudo が @ 記号を解釈しない
                   ようにするため、アドレスは ダブルクォート (") で囲むべきである。デフォルトは
                   root に なっている。

       secure_path sudo から実行されるあらゆるコマンドが使用するパス。 sudo を実行するユーザ
                   が、無難な環境変数 PATH を 使っているかどうか確信が持てないなら、このオプショ
                   ンを使用するとよいだろう。 もう一つの使用法は、「root のパス」と「一般ユーザの
                   パス」を別のものに しておきたい場合だ。ユーザが exempt_group オプションで指定
                   した グループに属していると、そのユーザは secure_path の影響を受けない。 この
                   オプションは、デフォルトではセットされていない。

       syslog      syslog を使ってログを取っている場合の syslog のファシリティ (syslog 経由で ロ
                   グを取らない場合は、'!' を頭に付けて、このオプションを否定する)。 デフォルトは
                   local2 になっている。

       verifypw    このオプションは、sudo-v オプション付きで実行したとき、 ユーザがパスワード
                   を要求されるのは、どんな場合かを決定する。次のような 値が可能である。

                   all     パスワードを入力しないですむためには、sudoers ファイルの使用中の ホス
                           トに対する当該ユーザのエントリのすべてに NOPASSWD タグが設定されていな
                           ければならない。

                   always  ユーザは -v オプションを使用する際に必ずパスワードを入力しなければ な
                           らない。

                   any     パスワードを入力しないですむためには、sudoers ファイルの使用中の ホス
                           トに対する当該ユーザのエントリの少なくとも一つに NOPASSWD タグが設定さ
                           れていなければならない。

                   never   ユーザは -v オプションを使用する際にパスワードを入力する必要が まった
                           くない。

                   値を指定しないと、値は all だと見なされる。'!' を頭に付けて、 このオプションを
                   否定すると、値に never が使われることになる。 デフォルトは all である。

       真偽値としても使用できるリスト:

       env_check       変数の値に % や / が含まれる場合に、 ユーザの環境から取り除かれる環境変
                       数。 この機能は、出来のよくないプログラムに見られる printf 形式のフォー
                       マットの 脆弱性に対処するために利用できる。このオプションの引き数は、 ダブ
                       ルクォートで囲まれ、スペースで区切られたリストでもよく、 ダブルクォートな
                       しの単一の値でもよい。リストは、=, +=, -=, ! 演算子を 使って、それぞれ置き
                       換えたり、追加したり、削除したり、無効にしたり することができる。env_check
                       で指定された変数は、 env_reset オプショの有効・無効にかかわらず、上記の
                       チェックに パスすれば、環境に保存されることになる。チェックされる環境変数
                       の デフォルトのリストは、root ユーザが sudo-V オプションを 付けて実行
                       したときに表示される。

       env_delete      env_reset オプションが無効になっているときに、ユーザの環境から 取り除かれ
                       る環境変数。このオプションの引き数は、ダブルクォートで囲まれ、 スペースで
                       区切られたリストでもよく、ダブルクォートなしの単一の値でもよい。 リスト
                       は、=, +=, -=, ! 演算子を使って、それぞれ置き換えたり、追加したり、 削除し
                       たり、無効にしたりすることができる。取り除かれる環境変数の デフォルトのリ
                       ストは、root ユーザが sudo-V オプションを 付けて実行したときに表示され
                       る。留意すべきは、オペレーティングシステムには、 危険をもたらしかねない変
                       数をいかなる setuid プロセス (sudo も その一つ) の環境からも取り除くことに
                       しているものが多いということである。

       env_keep        env_reset オプションが有効になっているときでも、ユーザの環境に そのまま保
                       存される環境変数。このオプションによって、sudo から 生み出されるプロセスが
                       受け取る環境を、きめ細かく制御することが可能になる。 このオプションの引き
                       数は、ダブルクォートで囲まれ、スペースで区切られたリ ストでもよく、ダブル
                       クォートなしの単一の値でもよい。リストは、 =, +=, -=, ! 演算子を使って、そ
                       れぞれ置き換えたり、 追加したり、削除したり、無効にしたりすることができ
                       る。保存される変数の デフォルトのリストは、root ユーザが sudo-V オプ
                       ションを 付けて実行したときに表示される。

       syslog(3) 経由でログを記録する場合、sudo は syslog のファ シリティ (facility: syslog パラ
       メータの値) として次の値を受け付 ける。authpriv (ただし、OS がサポートしているならばだ
       が)、 auth, daemon, user, local0, local1, local2, local3, local4, local5, local6,
       local7。syslog の優先順位 (priority) については、 次のものに対応している。alert, crit,
       debug, emerg, err, info, notice, warning

ファイル

       /etc/sudoers            誰が何を実行できるかのリスト

       /etc/group              ローカルのグループファイル

       /etc/netgroup           ネットワークグループのリスト

用例

       以下は sudoers エントリの見本である。正直なところ、いささか 凝りすぎの部分もある。まず最初
       にエイリアスを定義する。

        # User alias の指定
        User_Alias     FULLTIMERS = millert, mikef, dowdy
        User_Alias     PARTTIMERS = bostley, jwfox, crawl
        User_Alias     WEBMASTERS = will, wendy, wim

        # Runas alias の指定
        Runas_Alias    OP = root, operator
        Runas_Alias    DB = oracle, sybase
        Runas_Alias    ADMINGRP = adm, oper

        # Host alias の指定
        Host_Alias     SPARC = bigtime, eclipse, moet, anchor :\
                       SGI = grolsch, dandelion, black :\
                       ALPHA = widget, thalamus, foobar :\
                       HPPA = boa, nag, python
        Host_Alias     CUNETS = 128.138.0.0/255.255.0.0
        Host_Alias     CSNETS = 128.138.243.0, 128.138.204.0/24, 128.138.242.0
        Host_Alias     SERVERS = master, mail, www, ns
        Host_Alias     CDROM = orion, perseus, hercules

        # Cmnd alias の指定
        Cmnd_Alias     DUMPS = /usr/bin/mt, /usr/sbin/dump, /usr/sbin/rdump,\
                               /usr/sbin/restore, /usr/sbin/rrestore
        Cmnd_Alias     KILL = /usr/bin/kill
        Cmnd_Alias     PRINTING = /usr/sbin/lpc, /usr/bin/lprm
        Cmnd_Alias     SHUTDOWN = /usr/sbin/shutdown
        Cmnd_Alias     HALT = /usr/sbin/halt
        Cmnd_Alias     REBOOT = /usr/sbin/reboot
        Cmnd_Alias     SHELLS = /usr/bin/sh, /usr/bin/csh, /usr/bin/ksh, \
                                /usr/local/bin/tcsh, /usr/bin/rsh, \
                                /usr/local/bin/zsh
        Cmnd_Alias     SU = /usr/bin/su
        Cmnd_Alias     PAGERS = /usr/bin/more, /usr/bin/pg, /usr/bin/less

       以下では、コンパイル時に埋め込まれたデフォルト値のいくつかを変更している。 sudo には
       syslog(3) 経由でログを記録し、ファシリティには すべての場合に auth を使用させたい。フルタ
       イムのスタッフには sudo の訓戒を出さないようにしたい。ユーザ millert は パスワードを入力し
       ないでよい。コマンドを root として実行するときは、 環境変数 LOGNAME, USER, USERNAME を変更
       したくない。さらに、 SERVERS という Host_Alias に属する マシンでは、ローカルなログファイル
       を副本として作り、ログの記入事項は 数年に渡って保存されるので、ログの各行に間違いなく年度
       が入るようにする。 最後に PAGERS という Cmnd_Alias に属する コマンド (/usr/bin/more,
       /usr/bin/pg, /usr/bin/less) については、シェル・エスケープを無効にする。

        # built-in defaults の変更
        Defaults               syslog=auth
        Defaults>root          !set_logname
        Defaults:FULLTIMERS    !lecture
        Defaults:millert       !authenticate
        Defaults@SERVERS       log_year, logfile=/var/log/sudo.log
        Defaults!PAGERS        noexec

       ユーザ設定が、誰が何を実行できるかを実際に決めている部分だ。

        root           ALL = (ALL) ALL
        %wheel         ALL = (ALL) ALL

       rootwheel グループのすべてのユーザには、どのホストでも 任意のユーザとしていかなるコマ
       ンドでも実行することを認める。

        FULLTIMERS     ALL = NOPASSWD: ALL

       フルタイムのシステム管理者 (millert, mikef, dowdy) は、どのホストでも任意のコマンドを認証
       なしで実行できる。

        PARTTIMERS     ALL = ALL

       パートタイムのシステム管理者 ((bostley, jwfox, crawl) は、どのホストでも任意のコマンドを実
       行できるが、 その際に認証をしなければならない (このエントリには NOPASSWD タグが指定されて
       いないので)。

        jack           CSNETS = ALL

       ユーザ jack は、CSNETS というエイリアスに属するマシンで 任意のコマンドを実行できる (すなわ
       ち、ネットワークが 128.138.243.0, 128.138.204.0, 128.138.242.0 のマシンだ)。この内、
       128.138.204.0 にのみ class C のネットワークであることを示す 明示的な (CIDR 表記の) netmask
       がある。CSNETS の ほかのネットワークについては、ローカルマシンの netmask がマッチングの際
       に 使われることになる。

        lisa           CUNETS = ALL

       ユーザ lisa はエイリアスが CUNETS のいかなるホストでも 任意のコマンドを実行することができ
       る (すなわち、 128.138.0.0 という class B ネットワークのマシンだ)。

        operator       ALL = DUMPS, KILL, SHUTDOWN, HALT, REBOOT, PRINTING,\
                       sudoedit /etc/printcap, /usr/oper/bin/

       ユーザ operator は、用途が簡単な保守管理に限定されたコマンドを 実行できる。この場合それ
       は、バックアップしたり、プロセスを kill したり、 印刷システムを操作したり、システムを
       シャットダウンしたりするのに 関係するコマンドと、/usr/oper/bin/ ディレクトリにある任意のコ
       マンド である。

        joe            ALL = /usr/bin/su operator

       ユーザ joesu(1) を使って operator になることしか できない。

        %opers         ALL = (: ADMINGRP) /usr/sbin/

       opers グループのユーザは、/usr/sbin/ にあるコマンドを 自分自身の資格で、 Runas_Alias
       ADMINGRP に属する 任意のグループ (すなわち、admoper グループ) として 実行できる。(訳
       注: 実のところ、sudo-1.7.2p1 では、 /etc/sudoers で変身可能グループに Runas_Alias を まだ
       指定できないようだ。今のところ、この例で言うなら、ADMINGRP ではなく、admoper を直接指
       定しなければならない。)

        pete           HPPA = /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root

       ユーザ peteHPPA に属するマシンで root 以外なら 誰のパスワードでも変更することを許され
       ている。上記の指定は、 passwd(1) がコマンドラインで複数のユーザ名を受け付けないことを 前提
       としている点に注意してほしい。

        bob            SPARC = (OP) ALL : SGI = (OP) ALL

       ユーザ bobSPARCSGI に属する マシンで Runas_Alias OP に登録されている 任意のユーザ
       として (rootoperator である) どんなコマンドでも 実行できる。

        jim            +biglab = ALL

       ユーザ jimbiglab ネットグループに属するマシンで どんなコマンドでも実行できる。sudo
       は、"biglab" に '+' の 接頭辞が付いているので、それをネットグループだと認識する。

        +secretaries   ALL = PRINTING, /usr/bin/adduser, /usr/bin/rmuser

       secretaries ネットグループのユーザは、ユーザの追加や削除は もちろん、プリンタの管理にも協
       力する必要がある。そこで、すべてのマシンで その種のコマンドの実行を認められている。

        fred           ALL = (DB) NOPASSWD: ALL

       ユーザ fred は Runas_Alias DB の 任意のユーザとして (oraclesybase だ) パスワードを 入
       力しないでもコマンドを実行することができる。

        john           ALPHA = /usr/bin/su [!-]*, !/usr/bin/su *root*

       ユーザ johnALPHA に属するマシンで su(1) を 使って root 以外の誰にでもなることができる
       が、su にオプションを 指定することは許されていない。

        jen            ALL, !SERVERS = ALL

       ユーザ jen は Host_Alias SERVERS に 属するマシン (master, mail, www, ns) を除くいかなるマ
       シンでも 任意のコマンドを実行できる。

        jill           SERVERS = /usr/bin/, !SU, !SHELLS

       jill は Host_Alias SERVERS の いかなるマシンでも /usr/bin/ ディレクトリにある任意のコマン
       ドを 実行できるが、SUSHELLS という Cmnd_Aliases に属するコマンドは実行できない。

        steve          CSNETS = (operator) /usr/local/op_commands/

       ユーザ steve はディレクトリ /usr/local/op_commands/ にある 任意のコマンドを実行できる
       が、operator というユーザとして実行できるだけだ。

        matt           valkyrie = KILL

       matt も自分用のワークステーション valkyrie で ハングしたプロセスの kill ぐらいはできる必要
       がある。

        WEBMASTERS     www = (www) ALL, (root) /usr/bin/su www

       ホスト www で User_Alias WEBMASTERS に 属するいかなるユーザも (will, wendy, wim だ)、ユー
       ザ www (web ページの 所有者) として任意のコマンドを実行することができる。 単に su(1) で
       www になってもよい。

        ALL            CDROM = NOPASSWD: /sbin/umount /CDROM,\
                       /sbin/mount -o nosuid\,nodev /dev/cd0a /CDROM

       いかなるユーザも Host_Alias が CDROM の マシンで (orion, perseus, hercules)、パスワードを
       入力することなく CD-ROM をマウント、アンマウントできる。上記のコマンドを打ち込むのは ユー
       ザにとっていささか面倒なので、シェルスクリプトとして カプセル化してしまうのがよいだろう。

       [訳注]: 当然と言えば当然だが、sudo は自ホストの /etc/sudoers しか読まない。 そこで、こうい
               うことになる。AAA というホストに aaa というユーザが いるとしよう。ホスト AAA の
               /etc/sudoers に「ホスト BBB でユーザ aaa は sudo を介して /bin/ls を実行できる」と
               いう記述があったとしても、 ユーザ aaa がホスト AAA から telnet や ssh を使ったと
               き、ホスト BBB 上で sudo 経由で ls を実行できるわけではない。それができるために
               は、 ホスト BBB の /etc/sudoers に「BBB でユーザ aaa は sudo を介して /bin/ls を
               実行できる」という記述がなければならないのだ。ホスト BBB で実行する sudo は BBB の
               sudo であり、BBB の sudo は BBB の /etc/sudoers しか 読まないのだから。

               それでは、何故、上記の「用例」で自ホスト以外の設定が行われて いるのか? そもそ
               も、sudoers の書式で自ホスト以外のホストを 指定できるのは、何故なのか? それは、管
               理しているサイトの すべてのホストの設定を記した sudoers ファイルを一つ作って、それ
               を すべてのホストにコピーして使う、そういった使い方を想定しているからだ。 もし、サ
               イト中のすべてのホストの設定を一ヶ所にまとめて置き、 それをすべてのホストに共有さ
               せたいのなら (すなわち、sudo の設定の 集中管理がしたいのなら)、LDAP の採用を考える
               べきである。

セキュリティに関する注意点

       一般的に言って、演算子 '!' を使用して ALL から コマンドの「引き算」をすることは、あまり効
       果がない。ユーザは実行したい コマンドを名前を変えてコピーし、それからそれを実行するすると
       いった ちょっとした手段で、裏をかくことができるからだ。たとえば、

           bill        ALL = ALL, !SU, !SHELLS

       という行は、SUSHELLS に列記されている コマンドの bill による実行を本当に阻止することに
       はならない。 なぜなら、bill としては、そうしたコマンドを単に名前を変えて コピーすればよい
       し、エディタやほかのプログラムからシェル・エスケープを 利用することもできるからだ。だか
       ら、この種の制限はやった方がまし程度に 考えておくべきだ (そして、しっかりした運用方針に
       よって制限の実効力を 上げるべきである)。

シェル・エスケープを防止する

       sudo があるプログラムを実行してしまうと、そのプログラムは、 ほかのプログラムの実行も含め
       て、何でも自由に好きなことができる。 このことがセキュリティ上の問題になりかねないのは、プ
       ログラムが シェル・エスケープを許しているのは珍しいことではなく、そのために ユーザが sudo
       のアクセス制御やロギングをすり抜けることが 可能になるからだ。よく使うプログラムでシェル・
       エスケープを 許しているものには、次のようなものがある。 (当然ながら) シェル、エディ
       タ、ページャ、メーラ、ターミナル。

       この問題に対処するには、基本的に二つの方法がある。

       制限      ユーザに任意のコマンドの実行を許すようなコマンドに対して、ユーザが アクセスでき
                 ないようにする。エディタの場合は、制限モードと称して、 シェル・エスケープが使え
                 ないモードを持っているものも多い。 もっとも、sudo 経由でエディタを使うのなら、
                 sudoedit を使用する方がよりすぐれた対策である。 シェル・エスケープを提供するプロ
                 グラムはたくさんあるので、 それを提供しないプログラムのみを使用するようにユーザ
                 を制限するのは、 たいてい実現不可能である。

       noexec    共有ライブラリをサポートしている多くのシステムには、環境変数 (たいていは
                 LD_PRELOAD) で別の共有ライブラリを指定することによって、 デフォルトのライブラリ
                 関数を置き換える能力がある。 そういったシステムでは、sudonoexec 機能を使え
                 ば、 sudo から実行されるプログラムが、何かほかのプログラムを実行するのを 防ぐこ
                 とができる。とは言え、これが当てはまるのは、動的にリンクされた ネイティブなプロ
                 グラムだけだということに気を付けてほしい。 静的にリンクされたプログラムや、バイ
                 ナリ・エミュレーションのもとで 動くほかの OS のプログラムには効果がない。

                 sudonoexec に対応しているかどうかを知りたかったら、 root ユーザになって次の
                 ように実行してみればよい。

                     sudo -V | grep "dummy exec"

                 その出力にこんなふうに始まる行があれば、

                     File containing dummy exec functions:

                 そのときは、たぶん sudo が標準ライブラリにある exec ファミリーの関数を、 単にエ
                 ラーを返すだけの自分自身の関数で置き換えられるということだ。 残念ながら、noexec
                 が有効かどうか、コンパイル時に確かめる 絶対確実な方法はない。noexec は SunOS,
                 Solaris, *BSD, Linux, IRIX, Tru64 UNIX, MacOS X, HP-UX 11.x で使えるはずだ。 AIX
                 と UnixWare では使えないことがわかっている。環境変数 LD_PRELOAD をサポートしてい
                 るたいていの OS なら、 noexec が使えると思う。使用しているオペレーティングシステ
                 ムの マニュアルページを調べて、ダイナミック・リンカについて (通例 ld.so,
                 ld.so.1, dyld, dld.sl, rld, loader といった名前になっている) LD_PRELOAD がサポー
                 トされているかどうか確認してほしい。

                 あるコマンドに対して noexec を有効にするには、 上記「ユーザの設定」セクションで
                 述べたように、NOEXEC タグを 使用する。そのときの例を再掲しよう。

                  aaron  shanty = NOEXEC: /usr/bin/more, /usr/bin/vi

                 この例では、ユーザ aaron 対して、noexec を有効にした上で、 /usr/bin/more/usr/bin/vi の実行を許可している。 このようにすれば、この二つのコマンドから
                 (シェルのような) ほかのコマンドを 実行することができなくなるわけだ。使用している
                 システムが noexec に 対応する能力があるかどうか、よくわからない場合は、取りあえ
                 ず noexec を試して、効果があるかどうか確かめてみればよい。それなら いつだってで
                 きるはずだ。

       注意してほしいが、シェル・エスケープの禁止は万能薬ではない。ルートの権限で 動いているプロ
       グラムには、ほかにも、危険性のあるさまざまな作業 (ファイルの 中身を入れ替えるとか、上書き
       するとか) が可能であり、思いがけずに 権限を拡大してしまうこともありえるのだ。特にエディタ
       について言うと、 ユーザには sudoedit を実行する許可を与えるのが、より安全な方法である。

関連項目

       rsh(1), su(1), fnmatch(3), glob(3), sudo(8), visudo(8)

警告

       sudoers ファイルの編集には、必ず visudo コマンドを 使うべきだ。そうすれば、visudo がファイ
       ルをロックし、文法のチェッ クをやってくれる。sudoers ファイルに文法的な間違いがあると、
       sudo が動かないので、sudoers ファイルには文法エラーが絶 対にあってはならないのだ。

       ネットグループを (ユーザについてではなく) マシンについて使用し、 netgroup ファイルに完全修
       飾ホスト名を記載する場合は (たいてい そうするものだが)、そのマシンのホスト名を hostname コ
       マンドが出力する通りの完全修飾名で書くか、さもなければ sudoers ファイルで fqdn オプション
       を使うかしなければなら ない。

バグ

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

サポート

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

免責

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