Provided by: manpages-ja_0.5.0.0.20140515+dfsg-2_all bug

名前

       sudoers - デフォルトの sudo 用セキュリティ・ポリシー・モジュール

説明

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

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

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

       sudo を使用する権限のないユーザが、-l-v オプションを付けて sudo の実行を試みても、
       メールは送付されないことに注意してほしい。これによって、 自分が sudo を使用できるかどう
       か、 ユーザが自分で判断できるようになっているのである。

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

       sudoers は認証情報の一時保存 (credential caching) のために タイムスタンプ・ファイルを使用
       する。ユーザの認証が済むと、 タイムスタンプが更新され、ユーザはしばらくの間 (timeout オプ
       ションによって変更されていなければ、5 分間) パスワードなしで sudo を使うことができる。デ
       フォルトでは、 sudoers は tty ごとのタイムスタンプを使用する。すなわち、 ユーザの各ログイ
       ン・セッションごとに別のタイムスタンプが存在するわけだ。 tty_tickets オプションを無効にす
       れば、 あるユーザのすべてのセッションに対して、 単一のタイムスタンプの使用を強制することが
       できる。

       sudoerssudo の実行が成功したときも失敗したときも、 その事実を (エラー内容とともに)
       syslog(3) や 独自のログファイル、 あるいはその両方に記録することができる。sudoers はデフォ
       ルトでは、 syslog(3) 経由でログを記録することになっているが、 この動作はデフォルト設定の
       sysloglogfile を使って変更することが可能だ。

       sudoers はコマンドの入出力ストリームのロギングもサポートしている。 入出力ロギングは、デ
       フォルトでは ON になっていないが、デフォルト設定の log_inputlog_output フラグを使って
       有効にすることができる。 コマンド・タグの LOG_INPUT や LOG_OUTPUT を使って有効にすることも
       可能だ。

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

       デフォルトでは env_reset オプションが有効になっている。 この場合、コマンドは最小限の環境で
       実行されることになるが、その環境には、 TERM, PATH, HOME, MAIL, SHELL, LOGNAME, USER,
       USERNAME、 及び SUDO_* という変数、 それに、呼び出し側のプロセスから来た変数で、env_checkenv_keep オプションによって許可されたものが含まれている。 これは、言わば、環境変数のホ
       ワイトリストである。

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

       どんな場合でも、値が () で始まる変数は除去されるが、 それは bash の関数として解釈される恐
       れがあるからである。 sudo が許可、または拒否する環境変数のリストは、 sudo -V を root の資
       格で実行したときの出力中に表示される。

       たいていのオペレーティングシステムのダイナミック・リンカは、 ダイナミック・リンキングを制
       御する働きがある環境変数を、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 は、 変身対象ユーザのそれにセットされるのであ
       る。Linux や AIX システムでは、 /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 (それぞれ、接頭辞 '%' と '%#' が付く)、ネットグループ名
       (接頭辞 '+' が付く)、 非 Unix グループ名やその ID (それぞれ、接頭辞 '%:' と '%:#' が付
       く)、 それに User_Alias。 リストの各項目の前には一個以上の '!' 演算子を付けてもよい。 奇数
       個の '!' はその項目の値を否定する。偶数個の場合は互い相殺されるだけだ。

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

       非 Unix グループやその gid の書式が、 実際にどんなものになるかは、利用するグループ・プロバ
       イダ・プラグイン (group provider plugin) 次第である (後述する group_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" というホスト名がマッチするのは、 それが実際のホスト名であるときだけであ
       り、 それは通常、ネットワークにつながっていないシステムの場合にしか当てはまらない。

        Cmnd_List ::= Cmnd |
                      Cmnd ',' Cmnd_List

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

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

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

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

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

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

        Default_Entry ::= Default_Type Parameter_List

        Parameter_List ::= Parameter |
                           Parameter ',' Parameter_List

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

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

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

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

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

   ユーザ設定 (User Specification)
        User_Spec ::= User_List Host_List '=' Cmnd_Spec_List \
                      (':' Host_List '=' Cmnd_Spec_List)*

        Cmnd_Spec_List ::= Cmnd_Spec |
                           Cmnd_Spec ',' Cmnd_Spec_List

        Cmnd_Spec ::= Runas_Spec? Tag_Spec* Cmnd

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

        Tag_Spec ::= ('NOPASSWD:' | 'PASSWD:' | 'NOEXEC:' | 'EXEC:' |
                      'SETENV:' | 'NOSETENV:' | 'LOG_INPUT:' | 'NOLOG_INPUT:' |
                      'LOG_OUTPUT:' | 'NOLOG_OUTPUT:')

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

       ユーザ設定の基本構造は、

             who     where     = (as_whom)      what
            [誰が どのホストで = (誰に変身して) 何を]

       である。構成部分に分けて説明しよう。

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

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

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

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

        $ sudo -u operator /bin/ls

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

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

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

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

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

       注意してほしいが、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 に設定することも自由である。

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

       NOPASSWD  PASSWD

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

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

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

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

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

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

       NOEXEC  EXEC

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

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

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

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

       SETENV  NOSETENV

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

       LOG_INPUT  NOLOG_INPUT

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

       LOG_OUTPUT  NOLOG_OUTPUT

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

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

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

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

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

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

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

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

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

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

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

           /usr/bin/*

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

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

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

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

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

           #include /etc/sudoers.local

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

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

           #include sudoers.local

       インクルードされるファイルは、/etc/sudoers.local である。 (訳注: インクルードファイルの
       ディレクトリ部分を省略できるのは、 sudo-1.8.4 以上である。sudo-1.8.3 以前では、絶対パスで
       指定しなければならない。)

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

           #include /etc/sudoers.%h

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

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

           #includedir /etc/sudoers.d

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

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

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

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

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

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

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

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

SUDOERS のオプション

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

       フラグ (真偽値):

       always_set_home これを有効にすると、sudo は環境変数 HOME を変身対象ユーザの (-u オプション
                       が使用されないかぎり、root である) ホームディレクトリに設定する。事実
                       上、暗黙のうちに sudo-H オプションが常に指定されることになるわけだ。
                       気をつけてほしいのは、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
                       である。

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

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

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

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

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

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

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

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

       log_input       これをセットすると、sudo擬似 tty でコマンドを実行し、 ユーザの入力をす
                       べてログに取ることになる。入出力がリダイレクトされているとか、 コマンドが
                       パイプラインの一部だとかいう理由で、標準入力がユーザの tty に結びつけられ
                       ていない場合も、その入力がキャプチャーされて、 独立したログファイルに書き
                       込まれることに変わりはない。

                       入力は、iolog_dir オプションで指定したディレクトリに (デフォルトでは
                       /var/log/sudo-io)、一意なセッション ID を使って記録される。このセッション
                       ID は sudo の通常のログのエントリに、TSID= に続く値として書き込まれている
                       ものだ。 iolog_file オプションを使えば、 セッション ID の形式を変更するこ
                       とができる。

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

       log_output      これをセットすると、sudo擬似 tty でコマンドを実行し、 スクリーンに送ら
                       れたすべての出力をログに取ることになる。 script(1) コマンドと似たことをや
                       るわけだ。 入出力がリダイレクトされているとか、 コマンドがパイプラインの一
                       部だとかいう理由で、標準出力や標準エラーがユーザの tty に結びつけられてい
                       ない場合も、その出力がキャプチャーされて、 それぞれ独立したログファイルに
                       書き込まれることに変わりはない。

                       出力は、iolog_dir オプションで指定したディレクトリに (デフォルトでは
                       /var/log/sudo-io)、一意なセッション ID を使って記録される。このセッション
                       ID は sudo の通常のログのエントリに 、TSID= に続く値として書き込まれている
                       ものだ。 iolog_file オプションを使えば、 セッション ID の形式を変更するこ
                       とができる。

                       出力のログは sudoreplay(8) コマンドを使って、見ることができる。 また、この
                       コマンドは、利用できるログをリストしたり、 検索したりするのにも使用でき
                       る。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

       set_home        これが有効なときに sudo-s オプション付きで起動すると、 環境変数 HOME
                       が変身対象ユーザの (-u オプションが使用されないかぎり、それは root である)
                       ホームディレクトリに設定される。すなわち、 -s オプションが -H オプションを
                       事実上兼ねることになるわけだ。 気をつけてほしいのは、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 リストの項目が 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 である。

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

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

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

       整数:

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

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

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

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

       passwd_timeout  sudo のパスワードプロンプトが時間切れになるまでの分単位の時間。 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 環境変数と一致したエディタを選択する。 それがで
                       きないときは、このリストにあるエディタで、 実際に存在し、かつ実行可能な最
                       初のエディタを使用する。デフォルトは "/usr/bin/vi" である。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

       noexec_file     このオプションはもうサポートされていない。現在では、 noexec ファイルのパス
                       は /etc/sudo.conf ファイルで設定するべきである。 (訳注: sudo-1.8.3 で
                       は、まだこのオプションが有効かもしれない。 しかし、そこでも /etc/sudo.conf
                       を使用することが推奨されている。)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

       group_plugin
                   このオプションの値となる文字列には、sudoers が使用するグループ・プラグイン
                   と、必要ならその引き数を指定する。 このオプションを使えば、前述した (訳注: 「
                   エイリアス」セクション参照) 非 Unix グループの書式を使えるようにすることも可能
                   だ。 値となる文字列は、プラグインのパスに続けて、その設定に必要な引き数があれ
                   ば、 それを付け加えたものだが、パスは絶対パスか、 /usr/local/libexec を基点と
                   する相対パスにするべきである。 指定した引き数は (もし存在するなら) プラグイン
                   の初期化関数に渡される。 引き数が存在する場合は、 文字列をダブルクォート (")
                   で囲まなければならない。

                   たとえば、/etc/sudo-group という Unix グループの書式で書いたグループファイルが
                   あるとしよう。 次のようにすれば、sample group plugin を使用することができる。

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

                   詳細に付いては、sudo_plugin(5) をご覧いただきたい。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ファイル

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

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

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

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

       /var/lib/sudo           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
        Cmnd_Alias     KILL = /usr/bin/kill
        Cmnd_Alias     PRINTING = /usr/sbin/lpc, /usr/bin/lprm
        Cmnd_Alias     SHUTDOWN = /usr/sbin/shutdown
        Cmnd_Alias     HALT = /usr/sbin/halt
        Cmnd_Alias     REBOOT = /usr/sbin/reboot
        Cmnd_Alias     SHELLS = /usr/bin/sh, /usr/bin/csh, /usr/bin/ksh, \
                                /usr/local/bin/tcsh, /usr/bin/rsh, \
                                /usr/local/bin/zsh
        Cmnd_Alias     SU = /usr/bin/su
        Cmnd_Alias     PAGERS = /usr/bin/more, /usr/bin/pg, /usr/bin/less

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

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

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

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

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

        FULLTIMERS     ALL = NOPASSWD: ALL

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

        PARTTIMERS     ALL = ALL

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

        jack           CSNETS = ALL

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

        lisa           CUNETS = ALL

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

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

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

        joe            ALL = /usr/bin/su operator

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

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

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

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

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

        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_Aliases に属するコマンドは実行できない。

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

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

        matt           valkyrie = KILL

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

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

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

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

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

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

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

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

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

           bill        ALL = ALL, !SU, !SHELLS

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

       さらに言うと、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 のア
       クセス制御やロギングをすり抜けることが可能になるからだ。 よく使うプログラムでシェル・エス
       ケープを許しているものには、 次のようなものがある。 (当然ながら) シェル、エディタ、ペー
       ジャ、メーラ、ターミナルなど。

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

       制限      ユーザに任意のコマンドの実行を許すようなコマンドに対して、 ユーザがアクセスでき
                 ないようにする。エディタの場合は、制限モードと称して、 シェル・エスケープが使え
                 ないモードを持っているものも多い。 とは言え、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 がサポートされているかどうか確認していただきたい。

                 Solaris 10 以上の場合、noexec は 環境変数 LD_PRELOAD ではなく、Solaris 特権を使
                 用している。

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

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

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

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

デバッグ・フラグ (sudo-1.8.4 の新機能)

       バージョン 1.8.4 以上の sudoers プラグインは、 デバッグのための枠組みに対応しており、 問題
       が発生したとき、プラグインの内部で何が起きているかを突き止めるために、 それを利用すること
       ができる。 その設定は、sudo(8) のマニュアルでも説明したように、 /etc/sudo.conf ファイルで
       行うことが可能だ。

       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, Cmnd_Alias の処理

       all       あらゆるサブシステムにマッチする

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

       auth      ユーザの認証

       defaults  sudoersDefaults 設定

       env       環境の取扱い

       ldap      LDAP を使用する sudoers

       logging   ロギングのサポート

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

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

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

       parser    sudoers ファイルの解析

       perms     パーミッションの設定

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

       pty       擬似 tty に関連したコード

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

       util      ユーティリティ関数群

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

       sudoers はタイムスタンプ・ディレクトリ (デフォルトでは /var/lib/sudo) の所有者を調べて、所
       有者が root でなかったり、 root 以外のユーザにも書き込み可能だったりする場合には、 その
       ディレクトリの内容を無視する。root 以外のユーザでも chown(2) を利用して、ファイルの所有者
       を変えられるシステムでは、 タイムスタンプ・ディレクトリが (たとえば、/tmp といった) 誰にで
       も書き込めるディレクトリにあると、一般ユーザが、sudo を実行する前にタイムスタンプ・ディレ
       クトリを作成することが可能になる。もっとも、 sudoers はタイムスタンプ・ディレクトリとその
       中身の、 所有者とモードをチェックするので、起こりえる唯一の被害は、 ファイルを「隠匿」する
       目的でそのディレクトリに入れておかれることぐらいだ。 これはあまりありそうにないことであ
       る。 なぜなら、タイムスタンプ・ディレクトリが root の所有になり、 ほかのユーザによるアクセ
       スが禁じられてしまうと、 ファイルをそこに置いたユーザは、それを回収できなくなるからだ。

       sudoers はあまりにも未来に設定されたタイムスタンプを認めない。 タイムスタンプが「現在時 +
       2 * TIMEOUT」 より新しい日時だった場合、そのタイムスタンプは無視され、 sudo がログに記録し
       て、警告を発する。このようになっているのは、 一般ユーザがファイルの所有者を変えられるシス
       テムで、 タイムスタンプ・ディレクトリが誰にでも書き込めるディレクトリにある場合に、 ユーザ
       がいい加減な日付を付けて勝手に自分のタイムスタンプを作れないようにするためである。

       ブートタイムを参照できるシステムでは、 タイムスタンプがマシンがブートするよりも前の日時に
       なっている場合、 sudoers はそれを無視する。

       タイムスタンプ・ファイルはファイルシステム中に作られるので、 ユーザのログイン・セッション
       が終わっても、残っている。 そのため、次のようなことが起こりえる。ユーザがログインし、 認証
       してから sudo を使ってコマンドを実行して、ログアウトする。 再びログインして、認証なしで
       sudo を実行する。 タイムスタンプ・ファイルの内容更新日時 (modification time) が 5 分以内で
       あれば (あるいは、sudoers で設定されたタイムアウト時間以内であれば)、 そういうことが可能に
       なってしまうのだ。 tty_tickets オプションが有効になっている場合、 タイムスタンプは tty ご
       とに別々に作られるが、 それでも、ユーザセッションが終わった後まで生き残ってしまう。devpts
       ファイルシステムを使用している Linux や、devices ファイルシステムを持つ Solaris、 それ
       に、デバイスを作成するごとに、その inode 番号をひたすら増やしていく devfs ファイルシステム
       を利用しているシステム (たとえば、Mac OS X) では、 tty ごとのタイムスタンプ・ファイルがい
       つ用済みになるかを判定することができるので、 sudoers はそうしたタイムスタンプ・ファイルを
       無視することになる。 だが、システムの管理者はこの機能を当てにしない方がよい。 どのシステム
       でも利用できるとはかぎらないからだ。

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

関連項目

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

警告

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

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

バグ

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

サポート

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

免責

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