bionic (5) sudoers.5.gz

Provided by: manpages-ja_0.5.0.0.20161015+dfsg-1_all bug

名前

       sudoers - sudo のデフォルトのセキュリティポリシー・プラグイン

説明

       sudoers ポリシー・プラグインは、ユーザにどんな sudo 権限があるかを決定する。 このプラグインが sudo のデ
       フォルトのポリシー・プラグインである。 ポリシーの運用は /etc/sudoers ファイルによって行われるが、 LDAP を
       使用することも可能である。ポリシーを設定するときの書式は、 「SUDOERS ファイルの書式」セクションで詳しく説
       明している。 sudoers ポリシーの情報を LDAP に格納することについては、 sudoers.ldap(5) をご覧いただきた
       い。

   sudoers ポリシー・プラグインを使うための sudo.conf の設定
       sudosudo.conf(5) ファイルを参照して、 どのポリシー・プラグインと入出力ロギング・プラグインをロードす
       るかを決める。 sudo.conf(5) ファイルが存在しない場合や、存在しても Plugin 行を含まない場合は、 sudoers プ
       ラグインがポリシーの決定や 入出力ロギングに使用されることになる。 sudoers プラグインを使用するように明示
       的に設定するには、 sudo.conf(5) に次のよう書き込めばよい。

             Plugin sudoers_policy sudoers.so
             Plugin sudoers_io sudoers.so

       sudo 1.8.5 以来、sudoers プラグインに対する任意の引き数を sudo.conf(5) で指定することが可能になっている。
       そうした引き数が存在する場合は、プラグインのパスの後ろに続けることになる (すなわち、sudoers.so の後ろ
       だ)。 引き数がいくつもあるときは、ホワイトスペースで区切って指定すればよい。 一例を挙げる。

             Plugin sudoers_policy sudoers.so sudoers_mode=0400

       以下のプラグインに対する引き数が使用できる。

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

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

       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 セキュリティポリシーでは、ユーザはたいていの場合、 本人であることを証明してからでなければ。sudo
       を使用できない。ただし、 sudo の実行者が root だったり、変身対象ユーザが sudo の実行者と同一であったり、
       ポリシーがその実行者やコマンドに対して認証を免除している場合は、パスワードが要求されることはない。 su(1)
       とは違って、sudoers ポリシーが認証に当たってチェックするのは、 sudo を実行するユーザの認証情報 (訳注: 通
       常はパスワード) であって、 変身対象ユーザの (あるいは、root の) 認証情報ではない。この動作は、後述する
       rootpw, targetpw, runaspw フラグによって変更することができる。

       ポリシーに登録されていないユーザが sudo を使って、コマンドを実行しようとすると、 しかるべき権威者にメール
       が送付される。そうしたメールの宛先は、 後述する「デフォルト設定」の mailto 行によって設定できるが、 デ
       フォルトでは root になっている。

       sudo を使用する権限のないユーザが、-l-v オプションを付けて sudo の実行を試みても、認証に失敗し、しか
       も mail_always または mail_badpass フラグが有効になっている場合を除いて、 メールは送付されないことに注意
       していただきたい。 そうした動作になっていることで、ユーザとしては、 自分が sudo を使用できるかどうか、自
       分で判断できるわけである。 sudo 実行の試みは (成功、失敗にかかわらず)、すべてログに記録される。 メールが
       送られるかどうかには関係がない。

       sudo が root によって実行されたとき、環境変数 SUDO_USER が設定されていると、 sudoers ポリシーは、実際の
       ユーザが誰かを判断するのに、その値を使用することになる。 ユーザとしては、この動作を利用することで、すでに
       ルートシェルを起動している場合でも、 自分が sudo を介して実行したコマンドのログを取ることができる。 ま
       た、この動作のおかげで、sudo で実行するスクリプトやプログラムから呼び出される場合でさえ、 -e オプションが
       役に立つものになっている。ただし、そうした場合でも、 sudoers ファイルの参照はやはり root に対してなされる
       のであって、 SUDO_USER が指定しているユーザに対してではないことに注意していただきたい。

       sudoers は、認証情報の一時保存 (credential caching) にユーザごとのタイムスタンプ・ファイルを使用する。
       ユーザの認証が済むと、記録が書き込まれるが、それには、認証に使用された uid、 端末セッション ID、タイムス
       タンプ (利用できるならば、単調増加時計 (monotonic clock) を使用する) が含まれている。ユーザは、その後しば
       らくの間 (timestamp_timeout オプションによって変更されていなければ、5 分間)、パスワードなしで sudo を使う
       ことができる。 sudoers はデフォルトでは、各 tty ごとに別の記録を使用する。 そこで、認証は、ユーザのログイ
       ン・セッションごとに独立して行われることになる。 tty_tickets オプションを無効にすれば、あるユーザのすべて
       のセッションに対して、 単一のタイムスタンプの使用を強制することができる。

   ロギング
       sudoerssudo の実行が成功したときも失敗したときも、 その旨を (エラーの内容とともに) syslog(3) や独自の
       ファイル、 あるいはその両方に記録することができる。sudoers はデフォルトでは、 syslog(3) 経由でログを記録
       することになっているが、この動作はデフォルト設定の sysloglogfile を使って変更することができる。 ログ
       ファイルの書式については、「ログの書式」セクションの説明をご覧いただきたい。

       また sudoers は、擬似 tty でコマンドを実行して、 すべての入力や出力をログに記録することもできる。 標準入
       力、標準出力、標準エラーが端末と結びついていない場合でさえ、 それをログに記録することができるのだ。入出力
       ロギングは、デフォルトでは ON になっていないが、 log_inputlog_output オプションを使って有効にすること
       ができる。 コマンド・タグの LOG_INPUT や LOG_OUTPUT を使用して有効にすることも可能だ。 入出力ログファイル
       がどんなふうに格納されるかについては、 「入出力ログファイル」セクションに詳細な説明がある。

   コマンド環境
       環境変数はプログラムの動作に影響を与えることがあるので、sudoers は、 実行されるコマンドがユーザの環境から
       どんな変数を引き継ぐかについて、 制御する手段を用意している。すなわち、sudoers は二つの異なった方法で、
       環境変数を処理することができる。

       デフォルトでは env_reset オプションが有効になっている。 この場合、コマンドは新しい、最小の環境で実行され
       ることになる。 ATX (及び PAM を使用していない Linux システム) では、/etc/environment ファイルの内容で環境
       が初期化される。新しい環境には、TERM, PATH, HOME, MAIL, SHELL, LOGNAME, USER, USERNAME, 及び SUDO_* とい
       う変数、 それに、呼び出し側のプロセスから来た変数で、env_checkenv_keep オプションによって許可されたも
       のが含まれている。これは、言わば、 環境変数のホワイトリストである。値が () で始まる環境変数は、 変数名と
       値の両方が env_keepenv_check の指定にマッチしないかぎり、 除去されるが、それは、bash シェルの古いバー
       ジョンでは関数と解釈されることになるからである。 1.8.11 より前のバージョンでは、そうした変数は無条件で除
       去されていた。

       これに対して、env_reset オプションが無効になっている場合は、 env_checkenv_delete オプションによって明
       示的に拒否されていないかぎり、 いかなる環境変数も呼び出し側のプロセスから継承される。 この場合、env_checkenv_delete は、ブラックリストのように振る舞うわけだ。 値が () で始まる環境変数は、ブラックリストの一つ
       にマッチしない場合でも、 必ず除去される。危険性のある環境変数のすべてをブラックリストに載せることは不可能
       なので、 env_reset を有効にしておくデフォルトの動作を採用することをお勧めする。

       デフォルトでは、環境変数のマッチは変数名によって行われる。 しかしながら、マッチに使われるパターンに等号
       ('=') が含まれる場合は、 変数名と値の両方がマッチしなければならない。たとえば、旧式の (shellshock 問題以
       前の export 方法による) bash のシェル関数にマッチさせるならば、次のように指定すればよいだろう。

           env_keep += "my_func=()*"

       旧式の bash のシェル関数は、デフォルトでは保存されないので、 "=()*" という後続部分がなかったら、こうした
       環境変数はマッチしないことになる。

       [訳注]: shellshock 以前の bash では、たとえば "my_func='() { ls -F; }'" といったシェル変数を export する
               ことで、 my_func という関数をサブシェルに渡すことができた。 shellshock 以後の bash では、この方法
               による関数の継承はできなくなり、 値が "() { ls -F; }" である my_func という変数が、 渡されるだけ
               になっている。だから、 sudoers ファイルの Defaults 行に上のように書いても、 shellshock 以後の
               bash を使っているかぎり、 my_func という環境変数が保存されるだけで、関数が渡されるわけではない。

       sudo が許可、または拒否する環境変数すべてのリストは、"sudo -V" を root の資格で実行したときの出力中に含ま
       れている。このリストは、 sudo が実行されるオペレーティングシステムによって異なることに気をつけていただき
       たい。

       PAM をサポートしているシステムで、pam_env モジュールが sudo に対して有効になっていると、 PAM の管理する環
       境にある変数が、環境にマージされることになるだろう。 ただし、PAM 環境にある変数がユーザの環境にすでに存在
       している場合に、 その値が上書きされることになるのは、 その変数が sudoers によって保存されていないときだけ
       である。 すなわち、env_reset が有効になっているときは、 env_keep のリストによって sudo を実行するユーザの
       環境から保存された変数が、 PAM 環境にある変数より優先される。また、 env_reset が無効になっているときは、
       sudo を実行するユーザの環境にある変数が、 env_delete のリストのパターンにマッチしていないかぎり、 PAM 環
       境にある変数よりも優先されるのである。

       たいていのオペレーティングシステムのダイナミック・リンカは、 ダイナミック・リンキングを制御する働きがある
       環境変数を、 sudo もその一つである setuid 実行ファイルの環境から除去するようになっていることに注意してい
       ただきたい。 オペレーティングシステムによって名前は様々だが、_RLD*, DYLD_*, LD_*, LDR_*, LIBPATH,
       SHLIB_PATH などが、この範疇に含まれるだろう。 そうした変数は、sudo の実行が始まるよりも前に、環境から除去
       されるので、 sudo がそうした変数を保存することは不可能である。

       特例として、sudo-i (initial login) オプションが指定されている場合は、 sudoersenv_reset の有効・無
       効にかかわらず、環境を初期化する。 環境変数 DISPLAY, PATH, TERM は変更されないが、HOME, MAIL, SHELL,
       USER, LOGNAME は、変身対象ユーザのそれにセットされる。ATX (及び PAM を使用していない Linux システム) で
       は、/etc/environment の内容も取り込まれる。 それ以外の環境変数はすべて捨てられる。

       最後に、env_file オプションが設定されている場合は、 そのファイルに記載されたいかなる変数も、 すでに存在し
       ている環境変数と衝突しないかぎり、 そこで指定されている値にセットされることになる。

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 ::= '!'* user name |
                '!'* #uid |
                '!'* %group |
                '!'* %#gid |
                '!'* +netgroup |
                '!'* %:nonunix_group |
                '!'* %:#nonunix_gid |
                '!'* User_Alias

       User_List を構成するのは、一個以上の次のものである。 ユーザ名、ユーザID (接頭辞 '#' が付く)、 システムグ
       ループ名やその ID (それぞれ、接頭辞 '%' と '%#' が付く)、 ネットグループ名 (接頭辞 '+' が付く)、 non-Unix
       グループ名やその ID (それぞれ、接頭辞 '%:' と '%:#' が付く)、 それに User_Alias。 リストの各項目の前には
       一個以上の '!' 演算子を付けてもよい。 奇数個の '!' はその項目の値を否定する。偶数個の場合は互い相殺される
       だけだ。 なお、ユーザのネットグループについては、 ネットグループの成員中のユーザとドメインの要素のみを
       使って、マッチングが行われる。 ホストの要素はマッチングに使用されない。

       ユーザ名、uid、グループ名、gid、ネットグループ名、non-Unix グループ名、 non-Unix グループ の gid は、ダブ
       ルクォートで囲めば、特殊文字をエスープしないですむ。 ダブルクォートで囲まずに特殊文字を使いたいなら、エス
       ケープした 16 進数を指定してやればよい。 たとえば、スペースなら \x20 という具合だ。 ダブルクォートを使用
       する場合は、接頭辞があれば、それをダブルクォートの内側に入れなければならない。

       non-Unix グループやその gid を指定するときのの書式が、 実際にどんなものになるかは、 利用するグループ・プ
       ロバイダー・プラグイン (group provider plugin) 次第である。 たとえば、QAS (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 ::= '!'* user name |
                        '!'* #uid |
                        '!'* %group |
                        '!'* %#gid |
                        '!'* %:nonunix_group |
                        '!'* %:#nonunix_gid |
                        '!'* +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 ::= '!'* host name |
                '!'* 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) を返さない場合、 ワイルドカードを利用
       するには fqdn オプションを使う必要がある。 なお、sudo がチェックするのは、 実在のネットワークインター
       フェースだけだということに留意してほしい。 すなわち、IP アドレス 127.0.0.1 (localhost) がマッチすること
       は、絶対にないのである。 また、"localhost" というホスト名がマッチするのは、 それが実際のホスト名であると
       きだけであり、 それは通常、ネットワークにつながっていないシステムの場合にしか当てはまらない。

       digest ::= [A-Fa-f0-9]+ |
               [[A-Za-z0-9+/=]+

       Digest_Spec ::= "sha224" ':' digest |
                 "sha256" ':' digest |
                 "sha384" ':' digest |
                 "sha512" ':' digest

       Cmnd_List ::= Cmnd |
                     Cmnd ',' Cmnd_List

       command name ::= file name |
                        file name args |
                        file name '""'

       Cmnd ::= Digest_Spec? '!'* command name |
                '!'* directory |
                '!'* "sudoedit" |
                '!'* Cmnd_Alias

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

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

       コマンド名の前に Digest_Spec が付いている場合、コマンドのマッチに成功するのは、 指定された SHA-2 ダイジェ
       ストを使って照合できたときだけである。 ダイジェストのフォーマットとしては、 sha224, sha256, sha384,
       sha512 をサポートしている。 文字列は、16 進数形式でも base64 形式でも指定できる (base64 の方が短くて済
       む)。 SHA-2 ダイジェストを 16 進数形式で生成できるユーティリティはいくつかある。 openssl, shasum,
       sha224sum, sha256sum, sha384sum, sha512sum といったものがそうだ。

       たとえば、openssl を使うなら、

       $ openssl dgst -sha224 /bin/ls
       SHA224(/bin/ls)= 118187da8364d490b4a7debbf483004e8f3e053ec954309de2c41a25

       openssl を使って、base64 の出力を生成することもできる。

       $ openssl dgst -binary -sha224 /bin/ls | openssl base64
       EYGH2oNk1JC0p9679IMATo8+BT7JVDCd4sQaJQ==

       注意: もしユーザがコマンドそのものに対して (直接であれ、sudo コマンドを通してであれ) 書き込み権限を持って
       いるならば、そのユーザは、ダイジェストチェックが済み、 コマンドが実行されるまでの間に、コマンドを別のもの
       に置き換えることができるかもしれない。 同様の競合状態が、fexecve(2) システムコールを持っていないシステム
       では、 コマンドが存在するディレクトリがユーザによって書き込み可能であるときに起こりえる。

       コマンド・ダイジェストをサポートしているのは、バージョン 1.8.7 以上だけである。

   デフォルト設定 (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 の順番になる。

       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? SELinux_Spec? Tag_Spec* Cmnd

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

       SELinux_Spec ::= ('ROLE=role' | 'TYPE=type')

       Tag_Spec ::= ('EXEC:' | 'NOEXEC:' | 'FOLLOW:' | 'NOFOLLOW' |
                     'LOG_INPUT:' | 'NOLOG_INPUT:' | 'LOG_OUTPUT:' |
                     'NOLOG_OUTPUT:' | 'MAIL:' | 'NOMAIL:' | 'PASSWD:' |
                     'NOPASSWD:' | '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_Lists が両方とも空の場合は、 sudo を実行するユーザの資格でしかコマン
       ドを実行できない。 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

       注意してほしいが、Runas_Spec のグループの部分は、 コマンドをそのグループとして実行することをユーザに許可
       しているのであって、 そうすることをユーザに強制しているのではない。 コマンドラインでグループを指定しない
       場合は、コマンドは、 パスワード・データベースにある変身対象ユーザのエントリに登録されているグループとして
       実行されることになるのだ。 以下のコマンドはすべて、上記の sudoers エントリによって許可されることになるだ
       ろう。

       $ sudo -u operator /bin/ls
       $ sudo -u operator -g operator /bin/ls
       $ sudo -g operator /bin/ls

       次の例では、ユーザ tcm がモデムのデバイスファイルにアクセスするコマンドを dialer グループとして実行できる
       ようにしている。

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

       この例では、グループしか指定できないことに注意してほしい。コマンドは、 ユーザ tcm の資格のまま実行される
       のである。たとえば、次のように。

       $ sudo -g dialer /usr/bin/cu

       Runas_Spec には複数のユーザやグループが存在してもよい。 その場合、ユーザは -u-g オプションを使って、
       ユーザとグループのどんな組み合わせでも選択することができる。

       alan ALL = (root, bin : operator, system) ALL

       この例では、ユーザ alan は root と bin のどちらのユーザにでも変身して、 任意のコマンドを実行することがで
       きる。また、グループを operator や system に設定することも自由である。

   SELinux_Spec
       SELinux をサポートするシステムでは、sudoers ファイルのエントリで SELinux の role や type をコマンドに関連
       付けることも可能である。 role や type を特定のコマンドについて指定すると、 sudoers 中でデフォルトとして設
       定されている role や type があっても、 それよりも優先される。もっとも、role や type をコマンドラインで指
       定すれば、 そちらが sudoers 中の値よりさらに優先されることになる。

   Tag_Spec
       コマンドは 0 個以上のタグを伴うことができる。使用できるタグの値は 14 個あり、 EXEC, NOEXEC, FOLLOW,
       NOFOLLOW, LOG_INPUT, NOLOG_INPUT, LOG_OUTPUT, NOLOG_OUTPUT, MAIL, NOMAIL, PASSWD, NOPASSWD, SETENV,
       NOSETENV が、それである。 ある Cmnd にタグをセットすると、 Cmnd_Spec_List 中のそれ以後の Cmnd は、 反対の
       意味を持つタグによって変更されないかぎり、そのタグを継承することになる (すなわち、PASSWD は NOPASSWD を無
       効にし、NOEXEC は EXEC を無効にする)。

       EXECNOEXEC

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

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

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

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

       FOLLOWNOFOLLOW
         バージョン 1.8.15 以来、sudoedit は、 sudoedit_follow オプションが有効になっていないかぎり、 ファイルが
         シンボリックリンクならば、それを開かないようになっている。 FOLLOWNOFOLLOW タグは、sudoedit_follow
         の値を上書きするので、 これを使用すれば、シンボリックリンクの編集をコマンドごとに許可したり、 禁止した
         りすることができる。 この二つのタグが効果があるのは、sudoedit コマンドに対してのみであり、 他のどんなコ
         マンドに対しても無視される。

       LOG_INPUTNOLOG_INPUT

         この二つのタグは log_input オプションの値をコマンドごとに変更する。 詳しい情報については、後述する
         「SUDOERS のオプション」セクションの log_input の説明をご覧になっていただきたい。

       LOG_OUTPUTNOLOG_OUTPUT

         この二つのタグは log_output オプションの値をコマンドごとに変更する。 詳しい情報については、後述する
         「SUDOERS のオプション」セクションの log_output の説明をご覧になっていただきたい。

       MAILNOMAIL

         この二つのタグを使えば、 mail_all_cmnds オプションの値をコマンドごとに上書きすることによって、 ユーザが
         コマンドを実行したときにメールを送付するかどうかについて、 きめ細かな制御を行うことができる。 sudo-l-v オプションを付けて実行されたときには、効果がない。 NOMAIL は、mail_alwaysmail_no_perms オ
         プションも上書きする。 詳細については、後述の「SUDOERS のオプション」セクションにある mail_all_cmnds,
         mail_always, mail_no_perms の説明をご覧いただきたい。

       PASSWDNOPASSWD

         デフォルトでは、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 オプションによって変更できる。

       SETENVNOSETENV

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

   ワイルドカード
       sudoers ファイルでは、ホスト名、コマンドのパス名、 コマンドライン引き数にシェル形式のワイルドカード (メタ
       文字とか glob キャラクタとも言う) が使用できる。ワイルドカードのマッチングは、 IEEE Std 1003.1
       ("POSIX.1") で規定されている glob(3) や fnmatch(3) 関数を用いて行われる。

       *         0 個以上の任意の文字 (ホワイトスペースも含む) にマッチする。

       ?         任意の 1 文字 (ホワイトスペースも含む) にマッチする。

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

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

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

       上記のものは正規表現ではないことに注意していただきたい。 正規表現とは違って、範囲内の文字一つ以上にマッチ
       させる方法は存在しない。

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

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

       sudoers 中で上のように書けば、アルファベットの文字で始まるどんなファイル名にもマッチするだろう。

       コマンドのファイル名の部分で使われたワイルドカードはフォワードスラッシュ ('/') にマッチしないことに注意し
       ていただきたい。そこで、次のようなパスは、

           /usr/bin/*

       /usr/bin/who にマッチするが、/usr/bin/X11/xterm にはマッチしない。

       だが、コマンドライン引き数の部分のマッチングでは、 ワイルドカードはスラッシュにしっかりマッチする。 コマ
       ンドライン引き数には、任意の文字列を含むことが認められており、 パス名しか許されていないわけではないから
       だ。

       sudoers 中でコマンドライン引き数にワイルドカードを使用するときは、 注意しなければならない。
       コマンドライン引き数は、結合して一つの文字列にした上で、マッチングを行う。 そのため、'?' や '*' といった
       ワイルドカード文字が、 ユーザが指定したコマンドライン引き数と、 単語の境界をまたいでマッチしてしまうこと
       になるのだ。 これは想定外のことかもしれない。たとえば、sudoers に次のような行があると、

           %operator ALL = /bin/cat /var/log/messages*

       以下のコマンドが実行できることになるが、

           $ sudo cat /var/log/messages.1

       また、以下のコマンドの実行も可能になってしまう。

           $ sudo cat /var/log/messages /etc/shadow

       後者は、おそらく意図に反しているだろう。たいていの場合、 コマンドラインの処理は、sudoers ファイルの中では
       なく、 スクリプト言語中で行った方が間違いがない。

   ワイルドカード・ルールの例外
       上記ルールには以下の例外がある。

       ""        sudoers ファイルのエントリにおいて、空文字列 "" が唯一のコマンドライン引き数だった場合は、 その
                 コマンドは引き数を付けずに実行しなければならないことを意味している。

       sudoedit  組み込みコマンド sudoedit にコマンドラインで渡す引き数は、 常にパス名であるはずだ。そこで、ワイ
                 ルドカードはフォワードスラッシュ ('/') にマッチしないようになっている (訳注: sudoers 中で
                 sudoedit に対して引き数を指定する場合、 それは一般のコマンドライン引き数と同じ扱いではなく、パ
                 ス名扱いになるということ)。

   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 ファイルまでというハード・リミットがあって、 インクルードファイルのループが起きな
       いようになっている。

       インクルードファイルのパスが絶対パスでない場合は (すなわち、パスが '/' で始まっていない場合は)、インク
       ルードする側の sudoers ファイルと同じディレクトリに、インクルードされるファイルも存在しなければならない。
       たとえば、/etc/sudoers に次のような行があったら、

           #include sudoers.local

       インクルードされるファイルは、/etc/sudoers.local である。

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

           #include /etc/sudoers.%h

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

       #includedir 命令を使えば、sudoers.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 演算子として
       使用することができる。 これによってある値を除外することが可能になるわけだ。 ただし、'!' 演算子が効果を持
       つためには、 そこから除外する対象が存在しなければならない。 たとえば、root 以外のすべてのユーザにマッチさ
       せたい場合は、 次の表現を使用する。

           ALL,!root

       次のように ALL の記述を省くと、

           !root

       確かに root を明示的に否定することにはなるが、 他のどんなユーザともマッチすることがない。 この点が、正真
       の「否定」演算子とは違っている。

       とは言え、組込みエイリアス ALL と '!' を組み合わせて、 「二三のコマンド以外のすべての」コマンドの実行をあ
       るユーザに許可しようとしても、 意図どおりの動きになることはめったにないことに気をつけていただきたい (下記
       の「セキュリティに関する注意点」を参照)。

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

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

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

SUDOERS のオプション

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

       ブーリアン・フラグ (真偽値)

       always_query_group_plugin
                         group_plugin の設定がなされている場合に、 %group の形式のグループを解決するのに、 同名
                         のシステム・グループが同時に存在しないかぎり、 指定された group_plugin を使用する。
                         always_query_group_plugin が設定されていない通常の状態では、 %:group の形式のグループの
                         みが group_plugin に渡されるのである。 このフラグはデフォルトでは off である。

       always_set_home   これを有効にすると、sudo は環境変数 HOME を変身対象ユーザの (-u オプションが使用されて
                         いないかぎり、root の) ホームディレクトリに設定することになる。事実上、 暗黙のうちに
                         sudo-H オプションが常に指定されることになるわけだ。 気をつけていただきたいが、デ
                         フォルトでは、 env_reset オプションが有効になっている場合は、 HOME の値は、変身対象ユー
                         ザのホームディレクトリに設定されることになる。 だから、always_set_home の指定に効果があ
                         るのは、env_reset を無効に設定している場合か、 env_keep のリストに HOME が存在する場合
                         だけである。 このフラグはデフォルトでは off である。

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

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

       compress_io       これをセットすると、 sudo がコマンドの入出力のログを取るように設定されている場合に、 入
                         出力のログを zlib を使って、圧縮することになる。 sudozlib をサポートするようにコン
                         パイルされている場合、 このフラグのデフォルトは on である。

       exec_background   デフォルトでは、sudo 自体がフォアグラウンドで実行されているかぎり、 コマンドは sudo に
                         よってフォアグラウンド・プロセスとして実行される。それに対して、 exec_background フラグ
                         が有効になっている場合は、 コマンドが (入出力ロギングや use_pty フラグのために) pty で
                         実行されていると、 そのコマンドはバックグラウンド・プロセスとして実行されることになる。
                         このとき、そのコマンドが制御ターミナルから読み込みを行おうとすると (あるいは、ターミナ
                         ルの設定を変更しようとすると)、 コマンドは SIGTTIN シグナル (ターミナル設定の場合は
                         SIGTTOU シグナル) によってサスペンドされる。そうしたことが起きても、 sudo がフォアグラ
                         ウンド・プロセスならば、 そのコマンドは制御ターミナルの使用を許可され、 ユーザが何の操
                         作をしないでも、フォアグラウンドで実行が再開される。 コマンドの実行をバックグラウンドで
                         始めることの利点は、 そうすれば、コマンドが明示的に要求しないかぎり、 sudo はターミナル
                         から読み込みを行う必要がないということである。 そうしない場合は、コマンドが入力を要求し
                         ているか否かに関わりなく、 いかなる入力もコマンドに渡さなければならないのだ (カーネルが
                         ターミナルのバッファリングをしているので、 コマンドが本当にその入力を必要としているかど
                         うかを、 判断することはできないのである)。 この動作は、従来の sudo の動作とは異なってい
                         る。 また、コマンドが pty で実行されていないときの動作とも異なっている。

                         この動作がシームレスに行われるためには、オペレーティングシステムが、 システムコールの自
                         動的な再スタートをサポートしていなければならない。 残念なことに、すべてのオペレーティン
                         グシステムが、 デフォルトでそれを行ってくれるわけではなく、 それを行ってくれるオペレー
                         ティングシステムにも、バグがあることがある。たとえば、 Mac OS X は、tcgetattr() や
                         tcsetattr() システムコールの再スタートに失敗する (これは Mac OS X のバグである)。それだ
                         けではなく、この動作は、 コマンドが SIGTTIN や SIGTTOU シグナルで停止することを当てにし
                         ているので、 そうしたシグナルは捕獲し、別のシグナル (たいていは SIGSTOP) で自分を停止さ
                         せるプログラムは、自動的にフォアグラウンド化できない。 linux の su(1) コマンドの動作
                         が、系統によっては、そんなふうになっている。 このフラグはデフォルトでは off である。

                         この設定は、バージョン 1.8.7 以上でのみサポートされている。 また、入出力ロギングが有効
                         になっている場合や、 use_pty フラグが有効になっている場合以外、この設定には効果がない。

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

       env_reset         これをセットすると、sudo は最小限の環境でコマンドを実行することになる。 その環境に
                         は、以下の変数が含まれている。TERM, PATH, HOME, MAIL, SHELL, LOGNAME, USER,
                         USERNAME、及び SUDO_* という変数。 それに、sudo を起動するユーザの環境にある変数のう
                         ち、 env_keepenv_check のリストにマッチするものが加わり、 さらに、env_file オプショ
                         ンによって指定されたファイルがあれば、 そのファイルに記載されたすべての変数が追加され
                         る。 env_keepenv_check のリストにどんな変数が存在するかについては、 root ユーザとし
                         て sudo-V オプションを付けて実行すれば、 sudoers 中でグローバルな Defaults パラメー
                         タによって変更された結果を、 見ることができる。 なお、secure_path オプションが設定され
                         ているときは、 その値が環境変数 PATH の値として使用される。 このフラグはデフォルトでは
                         on である。

       fast_glob         通常 sudo はパス名のマッチングをするとき、glob(3)関数を使用して、 シェル・スタイルのワ
                         イルドカード展開 (glob) を行う。 しかし、glob(3) はファイルシステムにアクセスするので、
                         指定パターンによっては、作業を完了するまでに時間がかかることがある。 必要な時にマウント
                         するようになっている (つまりオートマウントの) ネットワーク・ファイル・システムを参照す
                         るときは、とりわけ時間がかかる。 fast_glob オプションを指定すると、sudofnmatch(3)
                         関数を使うようになるが、 こちらの関数はマッチングを行う際にファイルシステムにアクセスし
                         ない。 fast_glob の欠点は、./ls../bin/ls のような相対パスに対するマッチができないこ
                         とである。そのため、 ワイルドカードを含むパス名が、否定演算子 '!' と一緒に使われている
                         場合に、セキュリティ上の問題が生じるおそれがある。 そうしたルールは簡単に迂回できるから
                         だ。 従って、sudoers ファイルに、ワイルドカードを含むパス名を否定するルールが存在する場
                         合は、 このオプションを使ってはいけない。このフラグはデフォルトでは off である。

       fqdn              ローカル・ホスト名 (hostname コマンドが返すもの) がドメイン名を含まないとき、 sudoers
                         ファイルで完全修飾ホスト名を使用したかったら、 このフラッグをセットするとよい。すなわ
                         ち、myhost ではなく、 myhost.mydomain.edu を使いたい場合だ。そのときでも、 そうしたけれ
                         ば、短縮形も使用できる (両方を混ぜて使うこともできる)。 このオプションに効果があるの
                         は、getaddrinfo() や gethostbyname() 関数が返すホストの「正規名 (canonical name)」が、
                         完全修飾ドメイン名であるときだけである。 システムがホスト名の解決に DNS を使用するよう
                         に設定されているときは、普通そうなる。

                         システムが DNS よりも優先して /etc/hosts を使用するように設定されている場合、 ホストの
                         正規名は完全修飾名ではないかもしれない。 ホスト名解決のために問い合わせる情報源の順番
                         は、普通 /etc/nsswitch.conf, /etc/netsvc.conf, /etc/host.conf ファイルで指定されてい
                         る。 /etc/resolv.conf のこともある。/etc/hosts ファイルでは、 エントリの最初のホスト名
                         が正規名と見なされる。後に続く名前はエイリアスであり、 sudoers によって使用されることは
                         ない。たとえば、hosts ファイルに "xyzzy" というマシンについて下記の行があるとき、 完全
                         修飾ドメイン名がホストの正規名であり、短い方の名前はエイリアスである。

                               192.168.1.1    xyzzy.sudo.ws xyzzy

                         hosts ファイルにおけるマシンのエントリの書式が不適切だと、 hosts ファイルへの問い合わせ
                         が DNS より前に行われる場合、fqdn オプションを指定しても、効果がない。

                         気を付けてほしいのは、ホスト名の解決に DNS を使用する場合、 fqdn 有効にすると、sudoers
                         は DNS に問い合わせをしなければならないので、 DNS が稼働していないと (たとえば、マシン
                         がネットワークから切り離されていると)、 sudo が使えなくなるということである。 もう一つ
                         気を付けるべきことがある。hosts ファイルを使用する場合と同じことだが、 DNS が知っている
                         ホストの正規名を使わなければならない。 言い換えれば、ホストのエイリアス (CNAME のエント
                         リ) を使ってはいけない。 パフォーマンスの問題もあるし、DNS からエイリアスをすべて取得す
                         る方法はないからでもある。

                         このフラグはデフォルトでは 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_input         これをセットすると、sudo は、擬似 tty でコマンドを実行し、 ユーザの入力をすべてログに取
                         ることになる。入出力がリダイレクトされているとか、 コマンドがパイプラインの一部だとかい
                         う理由で、標準入力がユーザの tty に結びつけられていない場合でも、その入力はやはりキャプ
                         チャーされ、 独立したログファイルに書き込まれる。 より詳しい情報については、「入出力ロ
                         グファイル」セクションをご覧になるとよい。 このフラグはデフォルトでは off である。

       log_output        これをセットすると、sudo は、擬似 tty でコマンドを実行し、 スクリーンに送られたすべての
                         出力をログに取ることになる。 script(1) コマンドと似たことをやるわけだ。 より詳しい情報
                         については、「入出力ログファイル」セクションをご覧になるとよい。 このフラグはデフォルト
                         では off である。

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

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

       mail_all_cmnds    ユーザが sudo 経由でコマンドの実行を試みるたびに (sudoedit の実行も含む)、mailto ユーザ
                         にメールを送付する。 ただし、ユーザが sudo-l-v オプションを付けて実行したとき
                         は、 認証エラーがあり、しかも mail_badpass フラグがセットされていないかぎり、 メールを
                         送付することはない。このフラグはデフォルトでは off である。

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

       mail_badpass      sudo を実行するユーザが正しいパスワードを入力しなかったら、 mailto ユーザにメールを送付
                         する。ユーザが実行しようとしているコマンドが sudoers によって許可されていない場合
                         に、mail_all_cmnds, mail_always, mail_no_host, mail_no_perms, mail_no_user フラグのどれ
                         かがセットされていると、このフラグは効果を持たないことになる。 このフラグはデフォルトで
                         は off である。

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

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

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

       netgroup_tuple    これをセットすると、 ネットグループの検索がネットグループのタプル全部を使って行われるこ
                         とになる (すなわち、ホスト名、ユーザ名、ドメインの三つが、それぞれ設定されているなら
                         ば、 使用される)。従来の sudo では、 User_List で使用されるネットグループについては、
                         ユーザ名とドメインだけを照合し、Host_List で使用されるネットグループについては、 ホスト
                         名とドメインだけを照合していた。このフラグはデフォルトでは off である。

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

       pam_session       認証に PAM を使用するシステムでは、sudo は新しい PAM セッションを作成し、 その中でコマ
                         ンドを実行する。PAM の実装が古い場合や、 PAM セッションの開始が utmp や wtmp ファイルを
                         変更するオペレーティングシステムでは、 pam_session を無効にする必要があるかもしれない。
                         ただし、PAM セッションのサポートを無効にすると、 実行されるコマンドに対するリソースの上
                         限が更新されないかもしれない。 なお、pam_session, pam_setcred, use_pty が無効になってい
                         て、 しかも 入出力ロギングが設定されていない場合は、 sudo はコマンドを子プロセスとして
                         ではなく、 直接実行する。このフラグはデフォルトでは on である。

                         この設定は、バージョン 1.8.7 以上でのみサポートされている。

       pam_setcred       認証に PAM を使用するシステムでは、sudo はデフォルトでは、 使用している認証システムがサ
                         ポートしているなら、変身対象ユーザの認証情報 (credential) が有効であることを確認しよう
                         とする。認証情報の例を一つ挙げれば、 Kerberos のチケットがそれである。pam_session,
                         pam_setcred, use_pty が無効になっていて、しかも 入出力ロギングが設定されていない場合
                         は、 sudo はコマンドを子プロセスとしてではなく、直接実行する。 このフラグはデフォルトで
                         は on である。

                         この設定は、バージョン 1.8.8 以上でのみサポートされている。

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

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

       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 オプションを事実上兼ねることになるわけだ。 気をつ
                         けてほしいのは、env_reset が有効な場合、HOME はすでに (訳注: 変身対象ユーザのホームディ
                         レクトリに) 設定済みだということだ。 だから、set_home の効果があるのは、env_reset が無
                         効に設定されているか、 env_keep のリストに HOME が存在する場合だけである。 このフラグは
                         デフォルトでは off である。

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

       set_utmp          これが有効になっていると、sudo は擬似 tty を割り当てるときに、 utmp (または utmpx) ファ
                         イルにエントリを作成する。 sudo によって擬似 tty の割り当てが行われるのは、log_input,
                         log_output, use_pty といったフラグが有効になっているときである。 デフォルトでは、新しい
                         エントリは、そのユーザの utmp エントリが存在すれば、 そのコピーであり、tty, time, type,
                         pid フィールドが更新される。 このフラグはデフォルトでは on である。

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

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

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

       sudoedit_checkdir
                         これをセットすると、 sudoedit は、編集対象ファイルのパス中にあるディレクトリ部分のすべ
                         てについて、 sudoedit を実行するユーザとって書き込み可能かどうかを、チェックすることに
                         なる。 ユーザに書き込み可能なディレクトリに存在するいかなるシンボリックリンクも、 たど
                         られることがなく、また、ユーザに書き込み可能なディレクトリにあるファイルの編集は、 拒否
                         されることになる。 ただし、こうした制限は、sudoedit を実行するユーザが root の場合に
                         は、行われない。 システムによっては、編集対象ファイルのパス中にあるディレクトリ部分のす
                         べてが、 変身対象ユーザにとって読み込み可能でないかぎり、 sudoedit でファイルを編集でき
                         ないものもある。 このフラグはデフォルトでは on である。

                         この設定が最初に導入されたのは、バージョン 1.8.15 だったが、 当初のものには競合状態を引
                         き起こす欠陥があった。 編集対象ファイルのパスの途中に書き込み可能なディレクトリがあり、
                         そこにシンボリックリンクが存在する場合のチェックは、バージョン 1.8.16 で追加された。

       sudoedit_follow   sudoedit はデフォルトでは、ファイルをオープンするときにシンボリックリンクをたどらない。
                         sudoedit_follow オプションを有効にすると、 sudoedit がシンボリックリンクをオープンでき
                         るようになる。 そうした動作は FOLLOWNOFOLLOW タグを使えば、 コマンドごとに変更する
                         ことができる。このフラグはデフォルトでは off である。

                         この設定は、バージョン 1.8.15 以上でのみサポートされている。

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

       tty_tickets       これをセットすると、ユーザは tty ごとに認証をしなければならなくなる。 このフラグが有効
                         な場合、sudo は、各 tty に対して、 タイムスタンプ・ファイル中の、それぞれ別個に記録され
                         る情報を使用することになる。 それに対して、このフラグが無効な場合は、すべてのログイン・
                         セッションに対して、 単一の記録が使用されるのである。このフラグはデフォルトでは on であ
                         る。

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

       use_netgroups     これをセットすると、ユーザやホストを指定する場所でネットグループ (接頭辞 '+' が付く) が
                         使えるようになる。LDAP を使用する sudoers では、 ネットグループをサポートする
                         と、/etc/ldap.conf ファイルで NETGROUP_BASE 設定オプションを指定していない場合に、 サー
                         バ側で負荷の高い部分文字列 (substring) のマッチングを行う必要が生じる。 そこで、ネット
                         グループを使用する必要がない場合は、 このオプションを off にすれば、LDAP サーバの負荷を
                         減らすことができる。 このフラグはデフォルトでは on である。

       use_pty           これをセットすると、sudo は入出力のロギングが行われていないときでも、 擬似 tty でコマン
                         ドを実行することになる。 sudo によって実行された悪意のあるプログラムが、 バックグラウン
                         ド・プロセスをフォークし、 そのプロセスが、メインプログラムの実行が終了した後でも、
                         ユーザのターミナルデバイスを握って離さないといったことが考えられる。 このオプションを使
                         えば、そういったことが不可能になる。 このフラグはデフォルトでは off である。

       utmp_runas        これをセットすると、sudo は utmp (または utmpx) ファイルを更新するとき、 変身対象ユーザ
                         の名前を記録するようになる。sudo はデフォルトでは、 sudo を実行したユーザの名前を記録す
                         るのだ。 このフラグはデフォルトでは off である。

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

       整数:

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

       maxseq            入出力ログファイルで "%{seq}" エスケープシーケンスに置き換えられる連続番号の最大値 (詳
                         細については、後述の iolog_dir オプションの説明を参照すること)。 "%{seq}" に置き換えら
                         れる値は 36 進数だが、maxseq そのものは 10 進数で指定するべきである。2176782336 (38 進
                         数の連続番号では、 "ZZZZZZ" に相当する) より大きい値は 、暗黙のうちに 2176782336 に縮小
                         される。デフォルトの値は 2176782336 である。

                         使用している連続番号が maxseq の値に達したら、最初の値の 0 に戻る。 それ以後は、sudoers
                         は存在している入出力ログファイルをサイズ 0 に短縮して、 そのパス名を再利用することにな
                         る。

                         この設定は、バージョン 1.8.7 以上でのみサポートされている。

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

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

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

       passwd_timeout    sudo のパスワードプロンプトが時間切れになるまでの分単位の時間。 0 を指定すると、時間切
                         れなしになる。 分よりももっと細かい時間を指定したかったら、2.5 のように、 小数点以下を
                         付けることもできる。デフォルトは 5 分。

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

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

       文字列:

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

       editor            visudo で使用できるエディタをコロン (':') で区切ったリスト。visudo は、 可能なら
                         ば、ユーザの EDITOR 環境変数や VISUAL 環境変数とマッチしたリスト中のエディタを選択す
                         る。 それができないときは、このリストにあるエディタで、実際に存在し、 かつ実行可能な最
                         初のエディタを使用する。 環境変数 EDITOR や VISUAL は、env_reset オプションが有効な場
                         合、 デフォルトでは保存されないことに注意していただきたい。 デフォルトは vi である。

       iolog_dir         このオプションの値をトップレベル・ディレクトリにして、 入出力ログを置くディレクトリのパ
                         ス名が構成される。この値が使用されるのは、 log_inputlog_output オプションが有効に
                         なっているときや、 LOG_INPUT や LOG_OUTPUT タグがコマンドに付いているときだけである。
                         このディレクトリ以下に、セッション ID が連番ならば、 セッションの連番が (訳注: 以下の
                         "%{seq}" の説明にあるような形で)  格納されることになるわけだ。デフォルトは
                         /var/log/sudo-io である。

                         以下のパーセント ('%') エスケープシーケンスが使用できる。

                         %{seq}
                               単調に増加する 36 進数の連続番号に展開される。たとえば、0100A5 といった番号であ
                               り、二桁づつ使って新しいディレクトリを作っていく。 この場合なら、01/00/A5 といっ
                               た具合だ。

                         %{user}
                               sudo を実行するユーザーのログイン名に展開される。

                         %{group}
                               sudo を実行するユーザーの実グループ ID の名前に展開される。

                         %{runas_user}
                               変身対象ユーザのログイン名に展開される (たとえば root)。

                         %{runas_group}
                               変身対象ユーザのグループ名に展開される (たとえば wheel)。

                         %{hostname}
                               ドメイン名なしのローカル・ホスト名に展開される。

                         %{command}
                               実行されるコマンドのベースネームに展開される。

                         このほか、システムの strftime(3) 関数がサポートしているエスケープシーケンスは、 いかな
                         るものでも展開の対象になる。

                         '%' 文字そのものを使いたかったら、文字列 '%%' を使用すればよい。

       iolog_file        iolog_dir を基点とする相対パス名であり、log_inputlog_output オプションが有効になっ
                         ていたり、LOG_INPUT や LOG_OUTPUT タグがコマンドに付いている場合に、入出力ログがこの中
                         に格納される。 iolog_file の値が複数のディレクトリ構成要素を含んでいることがあるのに注
                         意していただきたい。 デフォルトは "%{seq}" である。

                         使用できるパーセント ('%') エスケープシーケンスのリストについては、 上記の iolog_dir オ
                         プションを参照。

                         エスケープシーケンスの展開とは別に、パス名が六個以上の X で終わっている場合は、 X の部
                         分が、他と重複しない英数字の組み合わせに置き換えられる。 mktemp(3) 関数の場合と同様であ
                         る。

                         iolog_diriolog_file を結合して作られるパスがすでに存在している場合は、 iolog_file
                         が 6 個以上の X で終わっていないかぎり、 既存の入出力ログファイルは、サイズ 0 に短縮さ
                         れた上で、上書きされることになる。

       lecture_status_dir
                         sudo はこのディレクトリに、 ユーザが訓戒を受けたかどうかを示すファイルを、ユーザごとに
                         入れておく。 ユーザが訓戒を受けると、サイズ 0 のファイルがこのディレクトリに作成され、
                         sudo はそのユーザに再び訓戒を行わなくなる。このディレクトリは、 システムのブート時に
                         去すべきではない。 デフォルトは /var/lib/sudo/lectured である。

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

       noexec_file       sudo バージョン 1.8.1 以来、このオプションはサポートされていない。 現在では、noexec
                         ファイルのパスは sudo.conf(5) ファイルで設定するべきである。

       pam_login_service
                         PAM を認証に使用しているシステムでは、このオプションの値が、 sudo コマンドに -i オプ
                         ションが指定されたとき使用されるサービス名になる。 デフォルトの値は、 "sudo" であ
                         る。pam_service の説明もご覧いただきたい。

                         この設定は、バージョン 1.8.8 以上でのみサポートされている。

       pam_service       PAM を使用しているシステムでは、このオプションで指定するサービス名が、 適用される PAM
                         ポリシーを指定することになる。サービス名は pam.conf ファイル中のエントリ名
                         や、/etc/pam.d にあるファイル名に対応している。 デフォルトの値は "sudo" である。

                         この設定は、バージョン 1.8.8 以上でのみサポートされている。

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

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

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

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

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

                         %u    sudo を実行するユーザーのログイン名に展開される。

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

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

       role              コマンドの実行に当たって SELinux の新しいセキュリティ・コンテキストを構成するときに使用
                         する、 デフォルトのロール。デフォルトのロールは、 sudoers ファイルや、コマンドラインオ
                         プションを使って、 コマンドごとに変更することができる。このオプションが利用できるのは、
                         sudo が SELinux サポートつきでビルドされたときだけである。

       runas_default     コマンドラインで -u オプションが指定されていないときの、 デフォルトの変身対象ユーザ。デ
                         フォルトでは root になっている。

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

                         syslog の重大度には、次のものが指定できる。emerg, alert, crit, err, warning, notice,
                         info, debug。

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

                         どんな syslog の重大度が指定できるかについては、 syslog_badpri を参照。

       sudoers_locale    sudoers ファイルを解析したり、コマンドのログを記録したり、 email を送付したりするときに
                         使用するロケール。 ロケールの変更は、sudoers の解釈に影響があるかもしれないので、 気を
                         つけていただきたい。デフォルトでは "C" になっている。

       timestampdir      sudo がタイムスタンプ・ファイルを置くディレクトリ。 このディレクトリは、システムがリ
                         ブートするとき、クリアされるべきである。 デフォルトは /var/run/sudo/ts になっている。

       timestampowner    ユーザが訓戒を受けたかどうかを示すファイルを入れておくディレクトリや、 タイムスタンプ・
                         ディレクトリ、 及びそうしたディレクトリに置かれるすべてのファイルの所有者。 デフォルト
                         は root である。

       type              コマンドの実行に当たって SELinux の新しいセキュリティ・コンテキストを構成するときに使用
                         する、 デフォルトのタイプ。デフォルトのタイプは、 sudoers ファイルや、コマンドラインオ
                         プションを使って、 コマンドごとに変更することができる。このオプションが利用できるのは、
                         sudo が SELinux サポートつきでビルドされたときだけである。

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

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

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

       group_plugin  このオプションの値となる文字列には、 sudoers が使用するグループ・プラグインと、必要ならその
                     引き数を指定する。 値となる文字列は、プラグインのパスに続けて、その設定に必要な引き数があれ
                     ば、 それを付け加えたものだが、パスは絶対パスか、 /usr/local/libexec/sudo を基点とする相対
                     パスにするべきである。 引き数が存在するなら、それはプラグインの初期化関数に渡される。 引き
                     数が存在する場合は、文字列全体をダブルクォート ("") で囲まなければならない。

                     詳細については、 「グループ・プロバイダー・プラグイン」セクションををご覧いただきたい。

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

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

                     never   訓戒をまったく表示しない。

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

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

       lecture_file  標準の訓戒とは別の sudo の訓戒を書き込んだファイルのパス。 指名したファイルが存在すれ
                     ば、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 経由でログを取らないな
                     ら、'!' を頭に付けて、 このオプションを否定する)。デフォルトでは authpriv になっている。

                     syslog のファシリティには、次のものが指定できる。 authpriv (使用 OS が対応している場合),
                     auth, daemon, user, local0, local1, local2, local3, local4, local5, local6, local7。

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

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

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

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

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

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

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

       env_check         「安全」だと見なされない場合に、ユーザの環境から取り除かれる環境変数。 TZ 以外のすべて
                         の環境変数について、「安全」というのは、変数の値に '%' や '/' という文字を一つも含まな
                         いことである。この動作を利用すれば、 出来のよくないプログラムに見られる printf 形式の
                         フォーマットの脆弱性に対処することが可能になる。 TZ 変数については、以下のどれかが真な
                         らば、安全ではないと見なされる。

                            変数の値が絶対パス名であり (コロン (':') が先頭に付いていることもある)、 それが
                             zoneinfo ディレクトリの位置にマッチしない。

                            変数の値に .. というパスの要素が存在する。

                            変数の値にホワイトスペースや表示不能文字が存在する。

                            変数の値が PATH_MAX の値より長い。

                         このオプションの引き数は、ダブルクォートで囲まれ、 スペースで区切られたリストでもよく、
                         ダブルクォートなしの単一の値でもよい。リストは、=, +=, -=, !  演算子を使って、それぞれ
                         置き換えたり、追加したり、削除したり、 無効にしたりすることができる。env_check で指定さ
                         れた変数は、 env_reset オプショの有効・無効にかかわらず、上記のチェックにパスすれば、
                         環境に保存されることになる。チェックされる環境変数のグローバルなリストは、 root ユーザ
                         が sudo-V オプションを付けて実行したときに表示される。

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

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

グループ・プロバイダー・プラグイン

       sudoers プラグインは、non-Unix グループの検索を可能にするために、 補助的なプラグインに対するインター
       フェースを備えており、それによって、 標準的な Unix グループ・データベース以外のグループ情報源に対する問い
       合わせができるようになっている。 先に述べたような、non-Unix グループを指定する書式の使用を可能にしたかっ
       たら、 この仕組みが使用できる。

       グループ・プロバイダー・プラグインは、デフォルト設定の group_plugin によって指定する。group_plugin に対す
       る引き数は、プラグインのパスに続けて、 その設定に必要なオプションがあれば、それを付け加えたものだが、 パ
       スは絶対パスか、/usr/local/libexec/sudo を基点とする相対パスにするべきである。そうしたオプションは (指定
       されていれば) プラグインの初期化関数に渡されることになる。オプションがある場合は、 文字列全体をダブル
       クォート ("") で囲まなければならない。

       以下のグループ・プロバイダー・プラグインがデフォルトでインストールされている。

       group_file
                 group_file プラグインは、/etc/group の代わりに、 /etc/group と同じ書式を使用する別のグループ
                 ファイルを使えるようにする。 プラグインに対するオプションとして、グループファイルのパスを指定す
                 るべきである。 たとえば、使用するグループファイルが /etc/sudo-group ならば、 次のように書くこと
                 になる。

                 Defaults group_plugin="group_file.so /etc/sudo-group"

       system_group
                 system_group プラグインは、標準 C ライブラリの関数 getgrnam() と getgrid() によるグループ検索を
                 サポートしている。このプラグインは、 ユーザがそのユーザの補助グループのリストに存在しないグルー
                 プに所属しているといった場合にも使用できる。 このプラグインはオプションを取らないので、書式は次
                 のようになる。

                 Defaults group_plugin=system_group.so

       グループ・プロバイダー・プラグインの API については、sudo_plugin(5) に詳細な説明がある。

ログの書式

       sudoers は、何が起きたかを記録するのに、suslog(3) を使用することもできるし、 単独のログ・ファイルを使用す
       ることもできる。 どちらの場合も、ログの書式はほとんど同じである。

   実行を許可されたコマンドに関するログ記載事項
       sudo が実行したコマンドは、次の書式を使って記録される (読みやすいように、ここでは複数行に分けている)。

           date hostname progname: username : TTY=ttyname ; PWD=cwd ; \
               USER=runasuser ; GROUP=runasgroup ; TSID=logid ; \
               ENV=env_vars COMMAND=command

       各フィールドは以下のようになっている。

       date          コマンドが実行された日時。たいていは、"MMM, DD, HH:MM:SS" の形式である。 syslog(3) 経由でロ
                     ギングしている場合に、 日時が実際にどんな形式になるかを決めるのは、syslog デーモンである。
                     sudo 独自のファイルにロギングしているとき、 log_year オプションが有効だと、日時に年度も含ま
                     れることになる。

       hostname      sudo が実行されたホストの名前。このフィールドは、 syslog(3) 経由でロギングしているときにの
                     み存在する。

       progname      プログラム名。普通は、sudosudoedit。このフィールドは、 syslog(3) 経由でロギングしている
                     ときのみ存在する。

       username      sudo を実行したユーザのログイン名。

       ttyname       sudo が実行された端末の短縮名 (たとえば、"console", "tty01", "pts/0" など)。端末が存在しな
                     かった場合は、 "unknown" になる。

       cwd           sudo が実行されたカレント・ワーキング・ディレクトリ。

       runasuser     変身対象ユーザ。

       runasgroup    変身対象グループがコマンドラインで指定されていれば、そのグループ。

       logid         入出力ログの識別名。コマンドの出力を再生するときに使用できる。 このフィールドは、log_inputlog_output オプションが有効なときにのみ存在する。

       env_vars      環境変数がコマンドラインで指定された場合、そのリスト。

       command       実行された実際のコマンド。

       メッセージは sudoers_locale で指定されたロケールを使って記録される。 デフォルトは "C" である。

   実行を拒否されたコマンドに関するログ記載事項
       ユーザがコマンドの実行を認められなかった場合、 拒否された理由が、ユーザ名の後に記録されることになる。 理
       由として挙げられるものには、次のようなものがある。

       user NOT in sudoers
          そのユーザに関する記載が sudoers ファイルに存在しない。

       user NOT authorized on host
          そのユーザに関する記載が sudoers ファイルに存在するが、 このホストではコマンドの実行を許可されていな
          い。

       command not allowed
          このホストに対するそのユーザの記載が sudoers ファイルに存在するが、 指定されたコマンドの実行を許可され
          ていない。

       3 incorrect password attempts
          ユーザがパスワードの入力に 3 回失敗した。実際に書き込まれる試行回数は、 失敗した回数と passwd_tries オ
          プションの値によって様々である。

       a password is required
          sudo-n オプションを指定したが、パスワードが必要だった。

       sorry, you are not allowed to set the following environment variables
          ユーザがコマンドラインで環境変数を指定したが、 それは sudoers によって許可されていない。

   エラーに関するログ記載事項
       エラーが起きると、sudoers はメッセージをログに記録し、たいていの場合は、 管理者に email で報告する。起き
       るかもしれないエラーには次のものがある。

       parse error in /etc/sudoers near line N
          sudoers が上記ファイルの解析中にエラーに出会った。 エラーのタイプによっては、実際のエラーは、記載され
          た行番号より 1 行上、 あるいは、1 行下にあることもある。

       problem with defaults entries
          sudoers ファイル中に意味不明なデフォルト設定 (Defaults setting) が、 一つ以上ある。このエラーがあって
          も、sudo が実行できなくなることはないが、 visudo を使って sudoers ファイルをチェックするべきである。

       timestamp owner (username): No such user
          timestampowner オプションで指定されたタイムスタンプ・ディレクトリの所有者が、 パスワード・データベース
          に存在しなかった。

       unable to open/read /etc/sudoers
          sudoers ファイルを読み込もうとしたが、オープンできなかった。 そうしたことは、sudoers ファイルがリモー
          ト・ファイルシステムに存在して、 そこではユーザ ID 0 を別の値にマップしている場合に起きることがある
          (訳注: たとえば、NFS で root_squash が有効な場合)。 通常 sudoers は、この問題を回避するために、グルー
          プのパーミッションを使って sudoers ファイルをオープンしようとする。 /etc/sudoers の所有権を変更するな
          り、 sudo.conf(5) ファイルの sudoers Plugin 行の末尾に "sudoers_uid=N" ('N' は、sudoers ファイルの所有
          者のユーザ ID) といった引き数を追加するなりを、考慮すべきである。

       unable to stat /etc/sudoers
          /etc/sudoers ファイルが見つからない。

       /etc/sudoers is not a regular file
          /etc/sudoers は存在するが、通常ファイルでもシンボリック・リンクでもない。

       /etc/sudoers is owned by uid N, should be 0
          sudoers ファイルの所有者が適切ではない。 sudoers ファイルの所有者を変更したい場合には、sudo.conf(5)
          ファイルの sudoers Plugin 行に "sudoers_uid=N" ('N' は、 sudoers ファイルの所有者のユーザ ID) を付け加
          えていただきたい。

       /etc/sudoers is world writable
          sudoers ファイルのパーミッションがすべてのユーザに書き込みを許している。 sudoers ファイルは、誰にでも
          書き込み可であってはならず、 デフォルトのファイルモードは 0440 である (所有者とグループのみ読むことが
          でき、 書き込み権限は誰にもない)。デフォルトのモードは、sudo.conf(5) ファイルの sudoers Plugin 行に
          "sudoers_mode" オプションを指定することで変更することができる。

       /etc/sudoers is owned by gid N, should be 1
          sudoers ファイルの所有グループが適切ではない。 sudoers ファイルの所有グループを変更したい場合には、
          sudo.conf(5) ファイルの sudoers Plugin 行に "sudoers_gid=N" ('N' は、sudoers ファイルの所有グループ
          ID) を付け加えていただきたい。

       unable to open /var/run/sudo/ts/username
          sudoers がユーザのタイムスタンプ・ファイルを読み込んだり、 作成したりすることができなかった。そうした
          ことは、 timestampowner が root 以外のユーザに設定されていて、 しかも /var/run/sudo のモードが、 グ
          ループやその他のユーザに対して検索不可になっている場合に起きることがある。 /var/run/sudo のデフォルト
          のモードは、0711 である。

       unable to write to /var/run/sudo/ts/username
          sudoers がユーザのタイムスタンプ・ファイルに書き込むことができなかった。

       /var/run/sudo/ts is owned by uid X, should be Y
          タイムスタンプ・ディレクトリの所有者が timestampowner 以外のユーザである。 そうしたこと
          は、timestampowner の値を変更した時に起きることがある。 sudoers は、ディレクトリの所有者が訂正されるま
          で、 タイムスタンプ・ディレクトリを無視することになる。

       /var/run/sudo/ts is group writable
          タイムスタンプ・ディレクトリがグループによって書き込み可能になっている。 書き込みが可能なの
          は、timestampowner のみにするべきだ。 タイムスタンプ・ディレクトリのデフォルトのモードは、700 である。
          sudoers は、ディレクトリのモードが訂正されるまで、 タイムスタンプ・ディレクトリを無視することになる。

   syslog 経由でロギングするときの注意点
       デフォルトでは、sudoerssyslog(3) 経由でメッセージをログに記録する。 その場合、date, hostname,
       progname フィールドをログに付加するのは、 syslog デーモンであって、sudoers ではない。 従って、そうした
       フィールドは、システムが違えば書式も違うかもしれない。

       ほとんどのシステムで、syslog(3) は、かなり小さなログ・バッファしか持っていない。 そこで、コマンドライン引
       き数の後ろの方が切り捨てられたりしないように、 sudoers は、(date, hostname, 及び "sudo" という文字列を別
       にして) ログ・メッセージが 960 字以上になると、それを分割するようになっている。 メッセージが分割される場
       合、後続部分では、 ユーザ名の後ろに "(command continued)" という文字列が続き、 その後にコマンドライン引き
       数の残りが続くことになる。

   ファイルにロギングするときの注意点
       logfile オプションを設定すると、sudoers/var/log/sudo といったローカルなファイルにログを記録するように
       なる。ファイルにロギングする場合も、 sudoerssyslog(3) とほとんど同じ書式を使用するが、 いつくかの重要
       な違いがある。

       1.   prognamehostname フィールドは存在しない。

       2.   log_year オプションが有効な場合、日付には年度も含まれることになる。

       3.   loglinelen (デフォルトでは 80) 文字よりも長い行は改行され、 4 文字分のインデントを付けて次の行に続く
            ことになる。 そうすることで、記述情報が人間に読みやすくなるが、 ログファイルに対して grep(1) を使用
            することは難しくなる。 loglinelen オプションに 0 を指定すると (あるいは、頭に '!' をつけて、否定する
            と)、改行は行われなくなる。

入出力ログファイル

       入出力ロギングを有効にすると、sudo は擬似 tty でコマンドを実行して、 ユーザのすべての入力や出力のログを取
       ることになる。 入出力は、iolog_dir オプションで指定したディレクトリに (デフォルトでは /var/log/sudo-io)、
       一意なセッション ID を使って記録される。 このセッション ID は、(訳注: syslog 経由であれ、独自ファイルであ
       れ) sudo に関するログの行に、"TSID=" に続く値として書き込まれているものだ。 iolog_file オプションを使え
       ば、 セッション ID の形式を変更することができる。

       各入出力ログは、独立したディレクトリに収納される。 そうしたディレクトリには、次のようなファイルが入ってい
       る。

       log       次のような情報を含むテキストファイル。コマンドが実行された日時、 sudo を実行したユーザの名
                 前、変身対象ユーザ名、変身対象グループ名 (ないこともある)、 sudo が実行された端末、その端末の縦
                 横のサイズ (何行何桁か)、 コマンドがそこから実行されたカレントディレクトリ、 それに、コマンドそ
                 のもののパス名 (引き数があれば、それも)

       timing    入出力ログに記録される各事項間の時間間隔と各事項の入出力バイト数のログ (セッションの再生で使用
                 される)

       ttyin     ユーザが使用している端末からの入力 (ユーザがタイプしたこと)。

       stdin     パイプやファイルからの入力

       ttyout    擬似 tty の出力 (コマンドがスクリーンに書き出したこと)

       stdout    パイプへ出力されたり、ファイルにリダイレクトされた標準出力

       stderr    パイプへ出力されたり、ファイルへリダイレクトされた標準エラー

       log 以外のすべてのファイルは、compress_io オプションが無効になっていないかぎり、 gzip 形式で圧縮され
       る。バッファリングを行うので、入出力のデータは、 sudo コマンドが完了するまで、完全なものにはならない。 入
       出力ログファイルの出力の部分は、sudoreplay(8) を使って再生することができる。 また、sudoreplay(8) ユーティ
       リティは、利用できるログをリスト表示したり、 検索したりするのに使うこともできる。

       ユーザの入力には、パスワードのような (たとえ、 画面にエコーされることはないにしても) 秘密情報が含まれてい
       ることがある。 そういった情報も、暗号化されずに、ログファイルに記録されることに注意していただきたい。 た
       いていの場合、log_output や LOG_OUTPUT を使って、 コマンドの出力をログに記録するだけで十分用が足りる。

       入出力ログは、セッションごとに独立したディレクトリに収納される。 そのため、従来からあるログローテーショ
       ン・ユーティリティを使用して、 保存しておく入出力ログ数を制限することはできない。 保存する入出力ログ数を
       制限する最も簡単な方法は、 maxseq オプションで保存したいログの最大数を指定することである。 入出力ログの連
       番が maxseq に達すると、連番は 0 にリセットされ、 sudoers は既存の入出力ログファイルをサイズ 0 に短縮し
       て、再利用することになる。

ファイル

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

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

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

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

       /var/log/sudo-io          入出力のログファイル (訳注: 厳密には、 入出力のログを記録するファイル群をその下
                                 に格納するトップディレクトリ)

       /var/run/sudo/ts          sudoers セキュリティポリシーが使用するタイムスタンプを格納するディレクトリ

       /var/lib/sudo/lectured    sudoers セキュリティポリシーが使用する訓戒状態ファイルを格納するディレクトリ

       /etc/environment          Linux や AIX で -i モードを使用するときの初期環境

用例

       以下は sudoers ファイルの記載例である。 正直なところ、いささか凝りすぎの部分もある。 まず最初に継承を許可
       する環境変数をいくつか指定し、 続いて aliases の定義をする。

       # sudo 経由で X アプリケーションを実行するとき、HOME は
       # .Xauthority ファイルを探すために使用される。ほかのプログラムも
       # 設定ファイルを探すのに HOME を使用するので、この指定が
       # 権限の昇格を引き起こしかねないことに注意してほしい。
       Defaults env_keep += "DISPLAY HOME"

       # 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,\
                      sha224:0GomF8mNN3wlDt1HD9XldjJ3SNgpFdbjO1+NsQ== \
                      /home/operator/bin/start_backups
       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) については、 シェル・エスケープを無効にする。なお、最後の設定は、 許可するコ
       マンドが ALL になっているユーザに対しては、 効果的な抑制にはならないことに注意していただきたい。

       # 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/ ディレクトリにある任意のコマンドである。 注意: DUMPS という Cmnd_Alias に属す
       るコマンドのひとつ、すなわち /home/operator/bin/start_backups は、sha224 ダイジェスト付きである。 そうし
       ているのは、そのスクリプトが置かれているディレクトリが operator ユーザによって書き込み可能だからだ。スク
       リプトが変更された場合 (その結果、ダイジェストが一致しないことになる)、 sudo 経由でそのスクリプトを実行す
       ることはもはや不可能になる。

       joe       ALL = /usr/bin/su operator

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

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

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

       opers グループのユーザは、/usr/sbin/ にあるコマンドを、 自分自身の資格で、Runas_Alias ADMINGRP に属する任
       意のグループ (すなわち、admoper グループ) として実行できる。

       ユーザ pete は、HPPA に属するマシンで root 以外なら誰のパスワードでも変更することを許されている。 コマン
       ドライン引き数は、結合して一つの文字列にした上で、マッチングを行うので、 ワイルドカード '*' は、複数の単
       語とマッチすることになる。だから、 この例は、passwd(1) がコマンドラインで複数のユーザ名を受け付けないこと
       を前提としているのである。 GNU のシステムでは、 passwd(1) に対するオプションをユーザ引き数の後ろに置くこ
       とができるのに注意していただきたい。 そのため、このルールは次のようなコマンドも許可してしまうことになる。

           passwd username --expire

       これは、望ましくないことかもしれない。

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

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

       jim       +biglab = ALL

       ユーザ jim は、biglab ネットグループに属するマシンで、 どんなコマンドでも実行できる。 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*

       ユーザ john は、ALPHA に属するマシンで 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_Alias に属するコマンドは実行できない。 ルールのこのくだりでは特に言っていな
       いが、 Cmnd_Alias PAGER のコマンドはすべて /usr/bin にあり、 noexec オプションが設定されている。

       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 をマウント、アンマウントできる。 上記のコマンドを打ち込むのはユーザにとっていささか面倒なので、
       シェルスクリプトとしてカプセル化してしまうのがよいだろう。

       [訳注]: 注意していただきたいが、 /etc/sudoers ファイルに「user1 ALL = (ALL) ALL」といった設定を書いても、
               user1 が sudo 経由であらゆるコマンドを実行できるようになるのは、 自ホスト、すなわち、その
               /etc/sudoers が存在するホストだけであって、 telnet や ssh で接続したホストで sudo 経由でコマンド
               を実行できるとはかぎらない。 他ホストの sudo は、自分のところにある /etc/sudoers ファイルしか参照
               しないからである。

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

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

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

       bill ALL = ALL, !SU, !SHELLS

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

       一般に、もし ユーザに許可するコマンドに ALL が入っているならば、 ユーザが自分でプログラムを作って (あるい
       は、シェルを自分専用に別の名前でコピーして)、 ルート・シェルを獲得するのを防ぐことはできない。 ユーザ設定
       でどんな項目に '!'  を付けようとも防止不可能である。

   fast_glob の持つセキュリティ上の問題
       fast_glob オプションが使われている場合、 パス名に glob 文字 (ワイルドカードとも言う) が含まれるコマンドを
       確実に無効にすることは不可能である。その理由は、 C ライブラリの fnmatch(3) 関数は、相対パスのパス名展開が
       できないからだ。 このことは、権限を許可するルールにとっては、 たいていの場合不便なだけにすぎないが、権限
       を減らしたり、 取り消したりするルールにとっては、セキュリティ上の問題をもたらしかねない。

       たとえば、sudoers ファイルに次のエントリがあったとしよう。

       john ALL = /usr/bin/passwd [a-zA-Z0-9]*, /usr/bin/chsh [a-zA-Z0-9]*,\
                     /usr/bin/chfn [a-zA-Z0-9]*, !/usr/bin/* root

       それでも、fast_glob が有効になっていれば、john は "/usr/bin/passwd root" を実行できてしまう。 /usr/bin に
       移動して、"./passwd root" を実行すればよいのだ。

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

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

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

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

                 noexec 機能は SunOS, Solaris, *BSD, Linux, IRIX, Tru64 UNIX, MacOS X, HP-UX 11.x、それに 5.3 以
                 上の AIX で使えることがわかっている。 環境変数 LD_PRELOAD をサポートしているたいていのオペレー
                 ティングシステムが、 この機能に対応しているはずだ。 使用しているオペレーティングシステムのマ
                 ニュアルページを調べて、 ダイナミック・リンカについて (通例 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 を有効にして、 シェ
                 ル・エスケープが可能かどうか確かめてみればよいのだ。

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

   安全な編集作業
       sudoers プラグインでは sudoedit が使用できるようになっており、 ユーザは好みのエディタを使って、安全にファ
       イルを編集することができる。 sudoeditsudo の組み込みコマンドなので、 sudoers ファイル中で指定するとき
       は、 頭にパスを付けてはいけない。ただし、コマンドライン引き数については、 通常のコマンドと全く同じように
       指定することができる。 sudoedit のコマンドライン引き数にワイルドカードを使用した場合は、 sudoedit の引き
       数にはパス名が来るはずなので、 ワイルドカードはフォワードスラッシュ ('/') にマッチしないようになってい
       る。

       sudo 経由で実行される他のコマンドとは違って、エディターは sudo を起動するユーザの資格で、環境を変更せずに
       実行される。 詳しくは、sudo(8) のマニュアルの -e オプションの説明をご覧になるとよい。

       たとえば、ユーザ operator が "message of the day" ファイルを編集できるようにするには、sudoers で次のよう
       に指定する。

             operator  ALL = sudoedit /etc/motd

       そして、ユーザ operator は、sudoedit を次のように実行する。

             $ sudoedit /etc/motd

       エディタは、root ではなく、ユーザ operator の資格で、/etc/motd の作業用コピーに対して実行される。ファイル
       の編集が済むと、 /etc/motd は作業用コピーの内容で更新されることになる。

       ユーザが書き込み権限を持っているディレクトリに存在するファイルに対して、 ファイル名を直接指定してであ
       れ、ワイルドカードによって指定してであれ、 sudoedit を使って編集する許可をそのユーザに与えてはいけない。
       もし、ユーザがディレクトリに対して書き込み権限を持っているならば、編集を許可されたファイルを、 別のファイ
       ルに対するリンクで置き換えることができるわけで、そうすることによって、 任意のどんなファイルでも編集できる
       ようになってしまうからだ。 そうした事態を防ぐために、バージョン 1.8.16 以降の sudoedit では、
       sudoedit_checkdir オプションが無効になっている場合や、 sudoedit を実行するユーザが root である場合を除い
       て、 ユーザが書き込み権限を持っているディレクトリに存在するいかなるシンボリックリンクも、 たどらないよう
       になっている。 また、書き込み権限があるディレクトリに存在するファイルの編集を行うことも拒否する。 さら
       に、バージョン 1.8.15 以降の sudoedit では、 sudoers ファイルで sudoedit_follow オプションが有効になって
       いるか、 sudoedit コマンドの前に FOLLOW タグが指定してあるかのどちらかでないかぎり、 シンボリックリンクを
       オープンしないようになっている。

   タイムスタンプ・ファイルのチェック
       sudoers は、タイムスタンプ・ディレクトリ (デフォルトでは /var/run/sudo/ts) の所有者を調べて、所有者が
       root でなかったり、 root 以外のユーザにも書き込み可能であったりすると、 そのディレクトリの中身を無視す
       る。古いバージョンの sudo は、 タイムスタンプ・ファイルを /tmp に置いていたが、 そうしたことは今では推奨
       できない。 特権を持たないユーザが自分の作ったファイルの所有者を変更できるシステムでは、 ユーザがタイムス
       タンプを自分で作成することが可能になるかもしれないからだ。

       タイムスタンプ・ディレクトリは、 リブートしたときにその中身を消去されるべきだが、 すべてのシステムに
       /var/run ディレクトリが存在するとはかぎらない。 問題が起きるのを避けるために、sudoers は、 ブートタイムを
       参照できるシステムでは、 マシンがブートした時刻よりも古い日時を持つタイムスタンプ・ファイルを無視する。

       グラフィカルなデスクトップ環境を持っているシステムの中には、 特権を持たないユーザにシステム・クロックの変
       更を許しているものがある。 sudoers は、タイムスタンプが有効か否を確認するのに、 システム・クロックを拠り
       所にしている。そこで、そうしたシステムでは、 ユーザがクロックを後戻りさせることで、timestamp_timeout より
       も長い時間 sudo を実行することが可能になるかもしれない。そうした事態に対抗するため、 sudoers は、システム
       がサポートしているならば、 タイムスタンプに単調増加時計 (monotonic clock) を使用する (単調増加時計は後戻
       りすることがないからだ)。

       sudoers はあまりにも未来に設定されたタイムスタンプを認めない。 タイムスタンプが「現在時 + 2 * TIMEOUT」よ
       り新しい日時だった場合、 そのタイムスタンプは無視され、sudoers はログに記録して、警告を発する。

       タイムスタンプ・ファイルはファイルシステム中に作られるものだから、 ユーザのログイン・セッションが終わって
       も残っている。 そのため、ユーザがログインし、認証を行ってから sudo を使ってコマンドを実行し、一旦ログアウ
       トして、再度ログインしたとき、 認証なしで sudo を実行することが可能になってしまうかもしれない。 タイムス
       タンプ・ファイルに記録されているタイムスタンプが 5 分以内のものであれば (あるいは、sudoers ファイルで設定
       されているタイムアウト時間以内のものであれば)、 そういうことが可能かもしれないのだ。 tty_tickets オプショ
       ンが有効な場合は、タイムスタンプの記録に、 ユーザが認証するときに使った端末のデバイス番号が含まれる。それ
       よって、 tty ごとのきめ細かな管理が可能になるが、それでもタイムスタンプの記録が、 ユーザのセッションが終
       わった後まで有効である可能性もある。また、 タイムスタンプの記録には、最後に認証を行ったプロセスのセッショ
       ン ID も含まれている。 別の端末セッションのプロセスが、同じタイムスタンプの記録を使えないようにしているの
       だ。 それはまた、ユーザがログアウトし、再度同じ端末にログインしたときに、 パスワードを入力することなしに
       sudo を実行できる可能性を減少させる役にも立っている。

デバッギング

       バージョン 1.8.4 以上の sudoers プラグインは、 デバッグのための柔軟な枠組みをサポートしており、問題が発生
       したときに、 プラグインの内部で何が起きているかを突き止めるために、 それを利用することができる。設定は
       sudo.conf(5) ファイルで行うことが可能だ。

       sudoers プラグインは、 フロントエンドである sudo と同じデバッグ・フラグの書式を使用する。 すなわ
       ち、subsystem@priority である。

       sudoers が使用する priority (重大度) を深刻なものから挙げると、 crit, err, warn, notice, diag, info,
       trace, debug である。ある priority を指定すると、 それより深刻なすべての priority も併せて指定したことに
       なる。 たとえば、notice という priority を指定すれば、 notice レベル以上のデバッグメッセージがログに記録
       される。

       sudoers では以下のサブシステムが使用できる。

       alias     User_Alias, Runas_Alias, Host_Alias and Cmnd_Alias の処理

       all       すべてのサブシステムにマッチする

       audit     Solaris BSM (Basic Security Module) と Linux の監査コード

       auth      ユーザの認証

       defaults  sudoers ファイルの Defaults 設定

       env       環境の取扱い

       ldap      LDAP を使用する sudoers

       logging   ロギングのサポート

       match     sudoers ファイルにおけるユーザ、グループ、ホスト、ネットグループのマッチング

       netif     ネットワークインターフェースの取扱い

       nss       sudoers におけるネームサービス・スイッチの取扱い

       parser    sudoers ファイルの解析

       perms     パーミッションの設定

       plugin    プラグインにとって main に相当する

       pty       擬似 tty 関連コード

       rbtree    赤黒木 (redblack tree) の内部情報

       sssd      SSSD を使用する sudoers

       util      ユーティリティ関数群
       一例を挙げておく。

       Debug sudoers.so /var/log/sudo_debug match@info,nss@info

       より詳しい情報については、sudo.conf(5) マニュアルをご覧いただきたい。

関連項目

       ssh(1), su(1), fnmatch(3), glob(3), mktemp(3), strftime(3), sudo.conf(5), sudoers.ldap(5), sudo(8),
       sudo_plugin(5), visudo(8)

作者

       多数の人々が長年に渡って sudo の開発に携わってきた。 当バージョンは主として次の者が書いたコードからできて
       いる。

             Todd C. Miller

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

警告

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

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

バグ

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

サポート

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

免責

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