.\" Automatically generated by Pod::Man version 1.15 .\" Thu Apr 25 09:34:54 2002 .\" .\" Standard preamble: .\" ====================================================================== .de Sh \" Subsection heading .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Ip \" List item .br .ie \\n(.$>=3 .ne \\$3 .el .ne 3 .IP "\\$1" \\$2 .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. | will give a .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used .\" to do unbreakable dashes and therefore won't be available. \*(C` and .\" \*(C' expand to `' in nroff, nothing in troff, for use with C<> .tr \(*W-|\(bv\*(Tr .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` . ds C' 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' 'br\} .\" .\" If the F register is turned on, we'll generate index entries on stderr .\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and .\" index entries marked with X<> in POD. Of course, you'll have to process .\" the output yourself in some meaningful fashion. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . nr % 0 . rr F .\} .\" .\" For nroff, turn off justification. Always turn off hyphenation; it .\" makes way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. .bd B 3 . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ====================================================================== .\" .\" Japanese Version Copyright (c) 2000-2002 Yuichi SATO .\" all rights reserved. .\" Translated Sat Oct 14 19:24:27 JST 2000 .\" by Yuichi SATO .\" Updated & Modified Tue Nov 19 02:21:57 JST 2002 by Yuichi SATO .\" .\"WORD: .\"WORD: Backus Naur Form バッカス・ナウア記法 .\"WORD: definition 定義 .\"WORD: production rule 生成規則 .\"WORD: symbol シンボル .\"WORD: alias エイリアス .\"WORD: parentheses 括弧 .\"WORD: boolean 真偽値 .\"WORD: pound sign シャープ記号 .\"WORD: reserved word 予約語 .\"WORD: exclamation point 感嘆符 .\" .IX Title "sudoers 5" .TH sudoers 5 "1.6.6" "April 25, 2002" "MAINTENANCE COMMANDS" .UC .SH "名前" sudoers \- どのユーザが何を実行できるかのリスト .SH "説明" .IX Header "説明" \fIsudoers\fR ファイルは、2 つのタイプのエントリから構成される。 (基本的には変数である) エイリアスと (誰が何を実行できるかを指定する) ユーザ指定である。 \fIsudoers\fR の文法は、 Extended Backus-Naur Form (\s-1EBNF\s0) (拡張バッカス・ナウア記法) を用いたかたちで以下に記述する。 \&\s-1EBNF\s0 を知らなくても諦めないでほしい。 \&\s-1EBNF\s0 は割に簡単だし、以下の定義には注釈をつけてある。 .Sh "\s-1EBNF\s0 の簡単なガイド" .IX Subsection "\s-1EBNF\s0 の簡単なガイド" \&\s-1EBNF\s0 は言語の文法を記述する簡単で厳密な方法である。 \&\s-1EBNF\s0 の各定義は、\fI生成規則\fRからなっている。 .PP .Vb 1 \& シンボル ::= 定義 | 別の定義 1 | 別の定義 2 ... .Ve 各\fI生成規則\fRは他の生成規則を参照する。 このようにして言語の文法ができあがる。 \s-1EBNF\s0 は以下のようなオペレータを含む。 これは多くの人が正規表現でお馴染みだろう。 しかし、これとは異なる意味を持った、 \*(L"ワイルドカード\*(R" 文字と混同してはならない (訳注: 後者はシェルのワイルドカードパターンのことだろう。 .BR regex (7) と .BR glob (7) を参照のこと)。 .Ip "\f(CW\*(C`?\*(C'\fR" 8 .IX Item "?" 前に置かれたシンボル (または、シンボルのグループ) が 省略可能であることを意味する。 つまり、シンボルが 1 個登場するか、あるいは全然登場しないかである。 .Ip "\f(CW\*(C`*\*(C'\fR" 8 .IX Item "*" 前に置かれたシンボル (または、シンボルのグループ) が 0 個以上登場する。 .Ip "\f(CW\*(C`+\*(C'\fR" 8 .IX Item "+" 前に置かれたシンボル (または、シンボルのグループ) が 1 個以上登場する。 .PP 括弧を使うとシンボルをグループにまとめることができる。 以降の例では、(シンボル名ではない) 文字通りの文字列は シングルクオート ('') を使用して明示する。 .Sh "エイリアス" .IX Subsection "エイリアス" \&\f(CW\*(C`User_Alias\*(C'\fR, \f(CW\*(C`Runas_Alias\*(C'\fR, \&\f(CW\*(C`Host_Alias\*(C'\fR, \f(CW\*(C`Cmnd_Alias\*(C'\fR という 4 種類のエイリアスがある。 .PP .Vb 4 \& 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)* .Ve .Vb 1 \& User_Alias ::= NAME '=' User_List .Ve .Vb 1 \& Runas_Alias ::= NAME '=' Runas_List .Ve .Vb 1 \& Host_Alias ::= NAME '=' Host_List .Ve .Vb 1 \& Cmnd_Alias ::= NAME '=' Cmnd_List .Ve .Vb 1 \& NAME ::= [A-Z]([A-Z][0-9]_)* .Ve 各\fIエイリアス\fR定義は、次の形式をとる。 .PP .Vb 1 \& Alias_Type NAME = item1, item2, ... .Ve ここで \fIAlias_Type\fR は、 \f(CW\*(C`User_Alias\*(C'\fR, \&\f(CW\*(C`Runas_Alias\*(C'\fR, \f(CW\*(C`Host_Alias\*(C'\fR, \&\f(CW\*(C`Cmnd_Alias\*(C'\fR のうちの 1 つである。 \&\f(CW\*(C`NAME\*(C'\fR は、大文字・数字・ アンダースコア文字 ('_') から構成される文字列である。 \&\f(CW\*(C`NAME\*(C'\fR は大文字から始まっていなければ\fBならない\fR。 コロン (':') でつなげれば、 同一タイプの複数のエイリアス定義を 1 行に置くことができる。 例を挙げる。 .PP .Vb 1 \& Alias_Type NAME = item1, item2, item3 : NAME = item4, item5 .Ve 続けて、有効な\fIエイリアス\fRメンバを構成する要素の定義を記述する。 .PP .Vb 2 \& User_List ::= User | \& User ',' User_List .Ve .Vb 4 \& User ::= '!'* username | \& '!'* '%'group | \& '!'* '+'netgroup | \& '!'* User_Alias .Ve \&\f(CW\*(C`User_List\*(C'\fR には、ユーザ名・ユーザ ID ('#' を前に付ける)・ システムグループ ('%' を前に付ける) ・ ネットグループ ('+' を前に付ける)・ 別のエイリアス、が 1 個以上含まれる。 リストの各アイテムの前には、1 個以上の '!' オペレータを置いてもよい。 奇数個の '!' オペレータはアイテムの値を無効にする。 偶数個のオペレータは、互いに相殺されるだけである。 .PP .Vb 2 \& Runas_List ::= Runas_User | \& Runas_User ',' Runas_List .Ve .Vb 5 \& Runas_User ::= '!'* username | \& '!'* '#'uid | \& '!'* '%'group | \& '!'* +netgroup | \& '!'* Runas_Alias .Ve \&\f(CW\*(C`Runas_List\*(C'\fR は \f(CW\*(C`User_List\*(C'\fR と似ているが、 ('#' を前に付けた) uid を含めることもできる。 また \f(CW\*(C`User_Alias\*(C'\fRes ではなく、 \&\f(CW\*(C`Runas_Alias\*(C'\fRes を含めることができる。 .PP .Vb 2 \& Host_List ::= Host | \& Host ',' Host_List .Ve .Vb 5 \& Host ::= '!'* hostname | \& '!'* ip_addr | \& '!'* network(/netmask)? | \& '!'* '+'netgroup | \& '!'* Host_Alias .Ve \&\f(CW\*(C`Host_List\*(C'\fR には、ホスト名・\s-1IP\s0 アドレス・ ネットワーク番号・ネットグループ ('+' を前に付ける)・ その他のエイリアス、が 1 個以上含まれる。 ここでも、アイテムの値は '!' オペレータによって無効にされる。 ネットワーク番号にネットマスクを指定しない場合、 ホストのイーサネット\fIインターフェース\fRのネットマスクが マッチングの際に使われる。 ネットマスクは、ドットで 4 つに区切った表記 (例えば 255.255.255.0) と \s-1CIDR\s0 表記 (ビットの数、例えば 24) のどちらで指定してもよい。 ホスト名には、シェル形式のワイルドカード (以下の「ワイルドカード」のセクションを参照) を使ってもよい。 ただし、計算機の \f(CW\*(C`hostname\*(C'\fR コマンドが 完全なドメイン名付きのホスト名を返さない場合に ワイルドカードを使えるようにするには、 \fIfqdn\fR オプションを指定する必要があるだろう。 .PP .Vb 2 \& Cmnd_List ::= Cmnd | \& Cmnd ',' Cmnd_List .Ve .Vb 3 \& commandname ::= filename | \& filename args | \& filename '""' .Ve .Vb 3 \& Cmnd ::= '!'* commandname | \& '!'* directory | \& '!'* Cmnd_Alias .Ve \&\f(CW\*(C`Cmnd_List\*(C'\fR は、コマンド名・ディレクトリ・別のエイリアス、が 1 個以上含まれるリストである。 コマンド名は完全なファイル名で、シェル形式のワイルドカード (以下の「ワイルドカード」セクションを参照) を使うことができる。 単なるファイル名にすると、望みの引き数とともにコマンドを実行することができる。 しかし、さらに (ワイルドカードをも含む) コマンドライン引き数を指定することもできる。 反対に、コマンドライン引き数\fBなし\fRでコマンドを実行させるには、 \&\f(CW\*(C`""\*(C'\fR を指定すれば良い。 ディレクトリは '/' でおわる完全なパス名である。 \&\f(CW\*(C`Cmnd_List\*(C'\fR でディレクトリを指定すると、 ユーザはそのディレクトリにある全てのファイルを実行できる (しかし、そのサブディレクトリにあるファイルは実行できない)。 .PP \&\f(CW\*(C`Cmnd\*(C'\fR がコマンドライン引き数と関連づけられている場合、 \&\f(CW\*(C`Cmnd\*(C'\fR の中の引き数は、 ユーザがコマンドラインで指定した引き数と完全にマッチしなければならない (ワイルドカードがあった場合は、それと完全にマッチしなければならない)。 \&',', ':', '=', '\e' という文字を コマンドライン引き数として使う場合、 \&'\e' でエスケープしなければならない点に注意すること。 .Sh "デフォルト" .IX Subsection "デフォルト" ある設定オプションの値を、 1 行以上の \f(CW\*(C`Default_Entry\*(C'\fR 行を使って、 デフォルトの値から変更することができる。 この行が効果を持つ範囲は、全てのホスト上の全てのユーザにすることも、 指定したホスト上の全てのユーザにすることも、 指定したユーザにすることもできる。 複数のエントリがマッチする場合は、順番に適用される。 矛盾する値がある場合は、マッチする行の最後の値が効果を持つ。 .PP .Vb 3 \& Default_Type ::= 'Defaults' || \& 'Defaults' ':' User || \& 'Defaults' '@' Host .Ve .Vb 1 \& Default_Entry ::= Default_Type Parameter_List .Ve .Vb 4 \& Parameter ::= Parameter '=' Value || \& Parameter '+=' Value || \& Parameter '-=' Value || \& '!'* Parameter || .Ve Parameter は \fBフラグ\fR・\fB整数\fR・ \fB文字列\fR・\fBリスト\fRのいずれかである。 フラグは実は真偽値であり、'!' オペレータで off にできる。 整数・文字列・リストのパラメータのなかにも真偽値の意味で使えるものがあり、 それらは無効にできる。 値に複数のワードが含まれる場合は、 ダブルクオート (\f(CW\*(C`"\*(C'\fR) で囲まなければならない。 特殊文字はバックスラッシュ (\f(CW\*(C`\e\*(C'\fR) で エスケープしなければならない。 .PP リストにはその他に 2 つの代入オペレータ \&\f(CW\*(C`+=\*(C'\fR と \f(CW\*(C`\-=\*(C'\fR がある。 これらのオペレータはそれぞれリストの追加と削除を行う。 \&\f(CW\*(C`\-=\*(C'\fR オペレータを使って リストに存在しない要素を削除するとエラーになる。 .PP \fIsudoers\fR ファイルを順序正しく解析させるため、 デフォルトセクションは Host, User, Cmnd エイリアスより前で ユーザ指定より後にする点に注意すること。 .PP \&\fBフラグ\fR: .Ip "long_otp_prompt" 12 .IX Item "long_otp_prompt" (\fBS/Key\fR や \fB\s-1OPIE\s0\fR などの) ワンタイムパスワードを使用している場合にこのオプションが有効になっていると、 ローカルなウインドウに入力したパスワードを 簡単にカット&ペーストできるように、2 行のプロンプトが使われる。 これをデフォルトにするのは良くないが、便利だと言う人もいる。 このフラグはデフォルトでは \fIoff\fR である。 .Ip "ignore_dot" 12 .IX Item "ignore_dot" このフラグを設定すると、環境変数 \f(CW\*(C`PATH\*(C'\fR にある (カレントディレクトリを表す) '.' と '' が無視される。 \f(CW\*(C`PATH\*(C'\fR そのものは変更されない。 このフラグはデフォルトでは \fIoff\fR である。 .Ip "mail_always" 12 .IX Item "mail_always" ユーザが \fBsudo\fR を実行する度に、\fImailto\fR ユーザにメールが送られる。 このフラグはデフォルトでは \fIoff\fR である。 .Ip "mail_badpass" 12 .IX Item "mail_badpass" sudo を実行したユーザが正しいパスワードを入力しなかった場合、 \fImailto\fR ユーザにメールが送られる。 このフラグはデフォルトでは \fIoff\fR である。 .Ip "mail_no_user" 12 .IX Item "mail_no_user" このフラグを設定すると、 sudo を起動したユーザが \fIsudoers\fR ファイルにない場合、 \fImailto\fR ユーザにメールが送られる。 このフラグはデフォルトでは \fIon\fR である。 .Ip "mail_no_host" 12 .IX Item "mail_no_host" このフラグを設定すると、 sudo を起動したユーザが \fIsudoers\fR ファイルに存在するが、 現在のホストでコマンドを実行することが許可されていない場合、 \fImailto\fR ユーザにメールが送られる。 このフラグはデフォルトでは \fIoff\fR である。 .Ip "mail_no_perms" 12 .IX Item "mail_no_perms" このフラグを設定すると、 ユーザが \fBsudo\fR を使うことは許可されているが、 実行しようとしたコマンドが \fIsudoers\fR ファイルのエントリにない場合、 \fImailto\fR ユーザにメールが送られる。 このフラグはデフォルトでは \fIoff\fR である。 .Ip "tty_tickets" 12 .IX Item "tty_tickets" このフラグを設定すると、 ユーザは tty 毎に認証しなければならない。 通常、\fBsudo\fR はチケットディレクトリの中にある 実行しているユーザと同じ名前のディレクトリを使う。 このフラグが on になっていると、\fBsudo\fR は チケットディレクトリの中にある ユーザがログインしている tty に対応したファイル名を使う。 このフラグはデフォルトでは \fIoff\fR である。 .Ip "lecture" 12 .IX Item "lecture" このフラグを設定すると、 初めて \fBsudo\fR を実行したとき、ユーザは短いレクチャーを受け取る。 このフラグはデフォルトでは \fIon\fR である。 .Ip "authenticate" 12 .IX Item "authenticate" このフラグを設定すると、 ユーザはパスワード (もしくは、別の認証方法) で自分自身に対して 認証をしなければならない。 このデフォルトの値は \f(CW\*(C`PASSWD\*(C'\fR タグと \f(CW\*(C`NOPASSWD\*(C'\fR タグを使って変更できる。 このフラグはデフォルトでは \fIon\fR である。 .Ip "root_sudo" 12 .IX Item "root_sudo" このフラグを設定すると、root も \fBsudo\fR が実行できる。 このフラグを off にすると、 ユーザが \f(CW\*(C`"sudo sudo /bin/sh"\*(C'\fR のようにして root のシェルを入手しようと \*(L"挑戦する\*(R" ことが防止できる。 このフラグはデフォルトでは \fIon\fR である。 .Ip "log_host" 12 .IX Item "log_host" このフラグを設定すると、 ホスト名が (syslog ではない) \fBsudo\fR ログファイルに記録される。 このフラグはデフォルトでは \fIoff\fR である。 .Ip "log_year" 12 .IX Item "log_year" このフラグを設定すると、 4 桁の年が (syslog ではない) \fBsudo\fR ログファイルに記録される。 このフラグはデフォルトでは \fIoff\fR である。 .Ip "shell_noargs" 12 .IX Item "shell_noargs" このフラグが設定されている場合に \fBsudo\fR が引き数なしで起動されると、 \&\fB\-s\fR フラグが与えられた場合と同様に動作する。 つまり、sudo はシェルを root として実行する (環境変数 \f(CW\*(C`SHELL\*(C'\fR が設定されている場合、 シェルはその環境変数で決定される。 設定されていない場合、 起動したユーザの /etc/passwd のエントリにあるシェルを使う)。 このフラグはデフォルトでは \fIoff\fR である。 .Ip "set_home" 12 .IX Item "set_home" このフラグが設定されている場合に \fBsudo\fR が \fB\-s\fR フラグで起動されると、 環境変数 \f(CW\*(C`HOME\*(C'\fR が対象ユーザのホームディレクトリに設定される (この場合の対象ユーザは、\fB\-u\fR オプションで指定されない限り root である)。 このフラグは、\fB\-s\fR フラグが使われた場合に \fB\-H\fR を暗黙のうちに有効にする。 このフラグはデフォルトでは \fIoff\fR である。 .Ip "always_set_home" 12 .IX Item "always_set_home" このフラグを設定すると、\fBsudo\fR は環境変数 \f(CW\*(C`HOME\*(C'\fR を 対象ユーザ (\fB\-u\fR オプションを使わない限りは root) の ホームディレクトリに設定する。 このフラグは \fB\-H\fR を暗黙のうちに有効にする。 このフラグはデフォルトでは \fIoff\fR である。 .Ip "path_info" 12 .IX Item "path_info" 通常 \fBsudo\fR はコマンドが \f(CW\*(C`PATH\*(C'\fR 環境変数に見つからない場合ユーザに告知する。 通常のユーザが、アクセスできない実行ファイルの場所に関する 情報を収集できないように、 サイトによってはこの告知をユーザに行わないようにしたいことがあるかもしれない。 しかし告知を行わないと、 単に実行ファイルがユーザの \f(CW\*(C`PATH\*(C'\fR にないだけの場合でも、 \fBsudo\fR はユーザに「実行許可がない」と伝えてしまい、 紛らわしくなる。 このフラグはデフォルトでは \fIoff\fR である。 .Ip "preserve_groups" 12 .IX Item "preserve_groups" デフォルトでは、\fBsudo\fR はグループベクトルを 対象ユーザが所属するグループのリストで初期化する。 \fIpreserve_groups\fR が設定された場合、 ユーザが既に持っているグループベクトルは変更されない。 だだし実グループ ID と実効グループ ID は、 対象ユーザにマッチするように設定される。 このフラグはデフォルトでは \fIoff\fR である。 .Ip "fqdn" 12 .IX Item "fqdn" \fIsudoers\fR ファイルに完全なドメイン名付きのホスト名を入れたい場合は、 このフラグを設定する。 すなわち myhost ではなく myhost.mydomain.edu を使いたい場合である。 このフラグを設定しても、使いたければ短い形式を使うことができる (短い形式と完全な形式を混ぜて使うこともできる)。 \fIfqdn\fR を on にすると、\fBsudo\fR は \s-1DNS\s0 のルックアップが必要になることに注意すること。 \s-1DNS\s0 のルックアップをすると、 \s-1DNS\s0 が稼働していないとき (計算機がネットワークに接続されていない場合など) \fBsudo\fR は安全でなくなる。 \s-1DNS\s0 にあるホストの正式な名前を使わなければならない点にも注意すること。 つまり、パフォーマンスの問題と \s-1DNS\s0 から全てのエイリアスを取得できないという問題から、 ホスト名のエイリアス (\f(CW\*(C`CNAME\*(C'\fR エントリ) を使うことはできない。 (\f(CW\*(C`hostname\*(C'\fR コマンドで返される) 計算機のホスト名が 既にドメイン名付きの完全なものである場合、 \fIfqdn\fR を設定するべきではない。 このフラグはデフォルトでは \fIoff\fR である。 .Ip "insults" 12 .IX Item "insults" このフラグを設定すると、\fBsudo\fR は 不正なパスワードを入力したユーザを侮辱する。 このフラグはデフォルトでは \fIoff\fR である。 .Ip "requiretty" 12 .IX Item "requiretty" このフラグを設定すると、 ユーザが real tty からログインしているときのみ \fBsudo\fR が実行できる。 \fIrsh\fR\|(1) は tty を確保しないので、 \f(CW\*(C`"rsh somehost sudo ls"\*(C'\fR といったことが許可されなくなる。 tty がないとエコーが消せないので、 入力時にパスワードが現れてしまうのを防止するために、 このフラグを設定したいと思うサイトもあるだろう。 このフラグはデフォルトでは \fIoff\fR である。 .Ip "env_editor" 12 .IX Item "env_editor" このフラグを設定すると、\fBvisudo\fR は デフォルトのエディタリストを使う前に、 環境変数 \s-1EDITOR\s0 と \s-1VISUAL\s0 の値を使う。 ユーザはログに記録されることなく 任意のコマンドを root として実行できてしまうので、 セキュリティホールを作ってしまうことに注意すること。 安全な代替案としては、 コンマで区切ったエディタのリストを \f(CW\*(C`editor\*(C'\fR 変数に設定することである。 そうすると\fBvisudo\fR は、 \f(CW\*(C`editor\*(C'\fR に指定された値に \s-1EDITOR\s0 または \s-1VISUAL\s0 がマッチするときにのみ、 その環境変数を使う。 このフラグはデフォルトでは \fIoff\fR である。 .Ip "rootpw" 12 .IX Item "rootpw" このフラグを設定すると、\fBsudo\fR は 起動したユーザのパスワードではなく、 root のパスワードを要求する。 このフラグはデフォルトでは \fIoff\fR である。 .Ip "runaspw" 12 .IX Item "runaspw" このフラグを設定すると、\fBsudo\fR は 起動したユーザのパスワードではなく、 \fIrunas_default\fR オプションで定義されたユーザ (デフォルトでは \f(CW\*(C`root\*(C'\fR) のパスワードを要求する。 このフラグはデフォルトでは \fIoff\fR である。 .Ip "targetpw" 12 .IX Item "targetpw" このフラグを設定すると、\fBsudo\fR は 起動したユーザのパスワードではなく、 \fB\-u\fR フラグで指定されたユーザ (デフォルトでは \f(CW\*(C`root\*(C'\fR) のパスワードを要求する。 このフラグはデフォルトでは \fIoff\fR である。 .Ip "set_logname" 12 .IX Item "set_logname" 通常 \fBsudo\fR は環境変数 \f(CW\*(C`LOGNAME\*(C'\fR と \f(CW\*(C`USER\*(C'\fR を対象ユーザ (\fB\-u\fR フラグで指定されないければふつうは root) の名前に設定する。 しかし、実際のユーザの識別に \f(CW\*(C`LOGNAME\*(C'\fR を使うプログラム (\s-1RCS\s0 revision control system などが含まれる) があるので、 この挙動を変更したいこともある。 これには set_logname オプションを \fIoff\fR にすればよい。 .Ip "stay_setuid" 12 .IX Item "stay_setuid" 通常 \fBsudo\fR がコマンドを実行する場合、 実 UID と実行 UID は対象ユーザ (デフォルトは root) に設定される。 このオプションは実 \s-1UID\s0 を 起動したユーザの \s-1UID\s0 のままにするように動作を変更する。 言い換えると、このオプションは \fBsudo\fR を setuid ラッパーとして 動作させるということである。 これはプログラムが setuid されて実行されるときの 潜在的に危険な機能を無効にしているシステムで役立つ。 ただし \fBsudo\fR は起動したユーザーの実 UID で実行されるので、 \s-1OS\s0 におけるシグナルと setuid プロセスの相互作用の定義によっては、 \fBsudo\fR が失敗をログに記録する前にユーザが kill できる点に注意すること。 .Ip "env_reset" 12 .IX Item "env_reset" このフラグを設定すると、\fBsudo\fR は以下の変数のみを含むように 環境をリセットする: \f(CW\*(C`HOME\*(C'\fR, \f(CW\*(C`LOGNAME\*(C'\fR, \f(CW\*(C`PATH\*(C'\fR, \f(CW\*(C`SHELL\*(C'\fR, \f(CW\*(C`TERM\*(C'\fR, \f(CW\*(C`USER\*(C'\fR (\f(CW\*(C`SUDO_*\*(C'\fR 以外に)。 これらのうちで \f(CW\*(C`TERM\*(C'\fR だけが 以前の環境からコピーされる。 他の変数はデフォルトの値に設定される (\fIset_logname\fR オプションの値で変更可能)。 \fBsudo\fR が \f(CW\*(C`SECURE_PATH\*(C'\fR オプションを付けて コンパイルされている場合、 その値は環境変数 \f(CW\*(C`PATH\*(C'\fR に使われる。 他の変数は \fIenv_keep\fR オプションで保存することもできる。 .Ip "use_loginclass" 12 .IX Item "use_loginclass" このフラグを設定すると、\fBsudo\fR は、 対象ユーザのログインクラスがあれば、それに指定されたデフォルトの値を適用する。 \fBsudo\fR の (コンパイル時に) \-\-with-logincap オプションが 設定されている場合にのみ、有効である。 このフラグはデフォルトでは \fIoff\fR である。 .PP \fB整数\fR: .Ip "passwd_tries" 12 .IX Item "passwd_tries" \fBsudo\fR が失敗をログに記録して終了するまでに、 ユーザがパスワードを入力できる回数。 デフォルトは \f(CW\*(C`3\*(C'\fR。 .PP \fB真偽値としても使用される整数\fR: .Ip "loglinelen" 12 .IX Item "loglinelen" ファイルログの 1 行当たりの文字数。 この値は、ログファイルを見やすくするために、 行を何桁で折り返すかを決定するために使われる。 syslog ファイルには何も影響せず、ファイルログだけに影響する。 デフォルトは \&\f(CW\*(C`80\*(C'\fR (折り返しをしない場合は 0 を指定する)。 .Ip "timestamp_timeout" 12 .IX Item "timestamp_timeout" \fBsudo\fR が再度パスワードを尋ねるまでに経過する分数。 デフォルトは \f(CW\*(C`5\*(C'\fR。 常にパスワードを要求させるには \f(CW\*(C`0\*(C'\fR に設定する。 \f(CW\*(C`0\*(C'\fR より小さい値に設定すると、 ユーザのタイムスタンプは失効しない。 これはユーザが自身のタイムスタンプの作成・削除を \f(CW\*(C`sudo \-v\*(C'\fR や \f(CW\*(C`sudo \-k\*(C'\fR で可能にするために使う。 .Ip "passwd_timeout" 12 .IX Item "passwd_timeout" \fBsudo\fR のパスワード要求が時間切れになるまでの分数。 デフォルトは \f(CW\*(C`5\*(C'\fR。 パスワード要求の時間切れをなくすには \f(CW\*(C`0\*(C'\fR に設定する。 .Ip "umask" 12 .IX Item "umask" コマンドを実行する場合の umask。 ユーザの umask を上書きしないためには、 このオプションを無効にするか 0777 に設定すること。 デフォルトは \f(CW\*(C`0022\*(C'\fR。 .PP \&\fB文字列\fR: .Ip "mailsub" 12 .IX Item "mailsub" \fImailto\fR ユーザに送られるメールの Subject (題名)。 エスケープ \f(CW\*(C`%h\*(C'\fR は計算機のホスト名に展開される。 デフォルトは \f(CW\*(C`*** SECURITY information for %h ***\*(C'\fR。 .Ip "badpass_message" 12 .IX Item "badpass_message" ユーザが不正なパスワードを入力した場合に表示されるメッセージ。 insults が設定されていない限り、 デフォルトは \f(CW\*(C`Sorry, try again.\*(C'\fR。 .Ip "timestampdir" 12 .IX Item "timestampdir" \fBsudo\fR がタイムスタンプファイルを置くディレクトリ。 デフォルトは \fI/var/run/sudo\fR。 .Ip "passprompt" 12 .IX Item "passprompt" パスワードを尋ねるときに使われるデフォルトのプロンプト。 \fB\-p\fR オプションや環境変数 \f(CW\*(C`SUDO_PROMPT\*(C'\fR を使って変更できる。 2 つのエスケープがサポートされている。 \*(L"%u\*(R" はユーザのログイン名に展開され、 \*(L"%h\*(R" はローカルホスト名に展開される。 デフォルトの値は \f(CW\*(C`Password:\*(C'\fR。 .Ip "runas_default" 12 .IX Item "runas_default" \fB\-u\fR フラグがコマンドラインで指定されていない場合に、 コマンドを実行するデフォルトのユーザ。 デフォルトは \f(CW\*(C`root\*(C'\fR。 .Ip "syslog_goodpri" 12 .IX Item "syslog_goodpri" ユーザが認証に成功した場合に使われる syslog の priority。 デフォルトは \f(CW\*(C`notice\*(C'\fR。 .Ip "syslog_badpri" 12 .IX Item "syslog_badpri" ユーザが認証に失敗した場合に使われる syslog の priority。 デフォルトは \f(CW\*(C`alert\*(C'\fR。 .Ip "editor" 12 .IX Item "editor" \fBvisudo\fR で使用可能なエディタのリスト。 リストはコロン (':') で区切る。 \fBvisudo\fR はユーザーの \s-1USER\s0 環境変数が設定されている場合には、 それにマッチするエディタを選択する。 設定されていない場合は、リストの最初に書かれている エディタが存在して実行可能であれば、それを選択する。 デフォルトはシステム上の vi のパス。 .PP \fB真偽値としても使用される文字列\fR: .Ip "logfile" 12 .IX Item "logfile" (syslog ログファイルではなく) \fBsudo\fR ログファイルへのパス。 パスを設定すると、そのファイルへログが記録される。 設定しなければ、記録されない。 .Ip "syslog" 12 .IX Item "syslog" ログの記録に syslog が使われている場合の syslog の facility (syslog によるログの記録をしない場合は、設定しないこと)。 デフォルトは \f(CW\*(C`local2\*(C'\fR。 .Ip "mailerpath" 12 .IX Item "mailerpath" 警告メールを送るのに使われるメールプログラムのパス。 デフォルトは、設定時に見つかった sendmail のパス。 .Ip "mailerflags" 12 .IX Item "mailerflags" メーラーを起動するときに使われるフラグ。 デフォルトは \fB\-t\fR。 .Ip "mailto" 12 .IX Item "mailto" 警告メールとエラーメールを送るアドレス。 アドレスは、sudo が \f(CW\*(C`@\*(C'\fR 記号を解釈しないように、 ダブルクォート (\f(CW\*(C`"\*(C'\fR) で括らなければならない。 デフォルトは \f(CW\*(C`root\*(C'\fR。 .Ip "exempt_group" 12 .IX Item "exempt_group" このグループに属するユーザは、パスワードと \s-1PATH\s0 が必要ない。 デフォルトでは設定されていない。 .Ip "verifypw" 12 .IX Item "verifypw" このオプションは、ユーザが \fBsudo\fR を \fB\-v\fR オプションで実行したときに、 いつパスワードが必要とされるかを制御する。 このオプションには以下の値のいずれかを設定できる。 .RS 12 .Ip "all" 8 .IX Item "all" パスワードの入力をなしですませるためには、 現在のホストのすべてのユーザの \fIsudoers\fR エントリに \f(CW\*(C`NOPASSWD\*(C'\fR フラグが設定されていなければならない。 .Ip "any" 8 .IX Item "any" パスワードの入力をなしですませるためには、 現在のホストの少なくとも一人のユーザの \fIsudoers\fR エントリに \f(CW\*(C`NOPASSWD\*(C'\fR フラグが 設定されていなければならない。 .Ip "never" 8 .IX Item "never" ユーザは、\fB\-v\fR フラグを使う際にパスワードを必要としない。 .Ip "always" 8 .IX Item "always" ユーザは、\fB\-v\fR フラグを使う際に常にパスワードを入力しなければならない。 .RE .RS 12 .Sp デフォルトの値は `all' である。 .RE .Ip "listpw" 12 .IX Item "listpw" このオプションは、ユーザが \fBsudo\fR を \fB\-l\fR オプションで実行したときに、 いつパスワードが必要とされるかを制御する。 このオプションには以下の値のいずれかを設定できる。 .RS 12 .Ip "all" 8 .IX Item "all" パスワードの入力をなしですませるためには、 現在のホストのすべてのユーザの \fIsudoers\fR エントリに \f(CW\*(C`NOPASSWD\*(C'\fR フラグが設定されていなければならない。 .Ip "any" 8 .IX Item "any" パスワードの入力をなしですませるためには、 現在のホストの少なくとも一人のユーザの \fIsudoers\fR エントリに \f(CW\*(C`NOPASSWD\*(C'\fR フラグが設定されていなければならない。 .Ip "never" 8 .IX Item "never" ユーザは、\fB\-l\fR フラグを使う際にパスワードを必要としない。 .Ip "always" 8 .IX Item "always" ユーザは、\fB\-l\fR フラグを使う際に常にパスワードを入力しなければならない。 .RE .RS 12 .Sp デフォルトの値は `any' である。 .RE .PP \fB真偽値としても使用されるリスト\fR: .Ip "env_check" 12 .IX Item "env_check" 変数の値に \f(CW\*(C`%\*(C'\fR 文字または \f(CW\*(C`/\*(C'\fR 文字を 含んでいる場合に、ユーザーの環境から削除される環境変数。 これは良く考えずに書かれたプログラムにおける printf 形式の脆弱性を防ぐためにある。 引き数はダブルクォーテーションで囲んだスペース区切りのリスト、 またはクォートしない 1 個の値である。 リストの置換・追加・削除・無効化は、それぞれ \f(CW\*(C`=\*(C'\fR, \f(CW\*(C`+=\*(C'\fR, \f(CW\*(C`\-=\*(C'\fR, \f(CW\*(C`!\*(C'\fR オペレータで出来る。 チェックされる環境変数のデフォルトのリストは、 \fBsudo\fR に \fI\-V\fR をつけて実行すると表示される。 .Ip "env_delete" 12 .IX Item "env_delete" ユーザーの環境から削除される環境変数。 引き数はダブルクォーテーションで囲んだスペース区切りのリスト、 またはクォートしない 1 個の値である。 リストの置換・追加・削除・無効化は、それぞれ \f(CW\*(C`=\*(C'\fR, \f(CW\*(C`+=\*(C'\fR, \f(CW\*(C`\-=\*(C'\fR, \f(CW\*(C`!\*(C'\fR オペレータで出来る。 チェックされる環境変数のデフォルトのリストは、 \fBsudo\fR に \fI\-V\fR をつけて実行すると表示される。 .Ip "env_keep" 12 .IX Item "env_keep" \fIenv_reset\fR オプションが実行されるときに、 ユーザーの環境で保存される環境変数。 これにより \fBsudo\fR\ が起動したプロセスが受け取る環境を細かく制御できる。 引き数はダブルクォーテーションで囲んだスペース区切りのリスト、 またはクォートしない 1 個の値である。 リストの置換・追加・削除・無効化は、それぞれ \f(CW\*(C`=\*(C'\fR, \f(CW\*(C`+=\*(C'\fR, \f(CW\*(C`\-=\*(C'\fR, \f(CW\*(C`!\*(C'\fR オペレータで出来る。 このリストはデフォルトでは何も含まない。 .PP \fIsyslog\fR\|(3) でログを記録している場合、 \fBsudo\fR は syslog の facility (\fBsyslog\fR パラメータの値) として、 \fBauthpriv\fR (\s-1OS\s0 がサポートしている場合), \fBauth\fR, \fBdaemon\fR, \fBuser\fR, \fBlocal0\fR, \fBlocal1\fR, \fBlocal2\fR, \fBlocal3\fR, \fBlocal4\fR, \fBlocal5\fR, \fBlocal6\fR, \fBlocal7\fR を受け付ける。 syslog の priority としては、 \fBalert\fR, \fBcrit\fR, \fBdebug\fR, \fBemerg\fR, \fBerr\fR, \fBinfo\fR, \fBnotice\fR, \fBwarning\fR がサポートされている。 .Sh "ユーザ設定" .IX Subsection "ユーザ設定" .Vb 2 \& User_Spec ::= User_list Host_List '=' Cmnd_Spec_List \e \& (':' User_Spec)* .Ve .Vb 2 \& Cmnd_Spec_List ::= Cmnd_Spec | \& Cmnd_Spec ',' Cmnd_Spec_List .Ve .Vb 1 \& Cmnd_Spec ::= Runas_Spec? ('NOPASSWD:' | 'PASSWD:')? Cmnd .Ve .Vb 1 \& Runas_Spec ::= '(' Runas_List ')' .Ve \fBユーザ設定\fRは、指定したホスト上でユーザが (どのユーザとして) どのコマンドを実行できるかを決定する。 デフォルトではコマンドは \fBroot\fR として実行されるが、 これはコマンド毎に変更可能である。 .PP ユーザ設定を構成要素ごとに分けてみる。 .Sh "Runas_Spec" .IX Subsection "Runas_Spec" \f(CW\*(C`Runas_Spec\*(C'\fR は単に (上で定義した) \f(CW\*(C`Runas_List\*(C'\fR を括弧で括ったものである。 ユーザ設定で \f(CW\*(C`Runas_Spec\*(C'\fR を指定しないと、 \fBroot\fR のデフォルトの \f(CW\*(C`Runas_Spec\*(C'\fR が使われる。 \f(CW\*(C`Runas_Spec\*(C'\fR は、その後に続くコマンドのデフォルトを設定する。 つまり: .PP .Vb 1 \& dgb boulder = (operator) /bin/ls, /bin/kill, /usr/bin/who .Ve のようなエントリがある場合、 ユーザ \fBdgb\fR は、\fI/bin/ls\fR, \fI/bin/kill\fR, \fI/usr/bin/lprm\fR を 実行できる。\*(-- ただし \fBoperator\fR としてのみ。例えば: .PP .Vb 1 \& sudo -u operator /bin/ls. .Ve \f(CWRunas_Spec\fR を後からエントリの中で上書きすることも可能である。 .PP .Vb 1 \& dgb boulder = (operator) /bin/ls, (root) /bin/kill, /usr/bin/lprm .Ve のように修正すると、 ユーザ \fBdgb\fR は \fI/bin/ls\fR を \fBoperator\fR として、 また \fI/bin/kill\fR と \fI/usr/bin/lprm\fR を \fBroot\fR として 実行することが許可される。 .Sh "\s-1NOPASSWD\s0 と \s-1PASSWD\s0" .IX Subsection "NOPASSWD と PASSWD" デフォルトでは、\fBsudo\fR は コマンドを実行する前にユーザ自身の認証を必要とする。 この動作は \f(CW\*(C`NOPASSWD\*(C'\fR タグで変更することができる。 \f(CW\*(C`Runas_Spec\*(C'\fR と同様に、\f(CW\*(C`NOPASSWD\*(C'\fR タグは コマンドのデフォルトをその後に続く \f(CW\*(C`Cmnd_Spec_List\*(C'\fR に設定する。 逆に \f(CW\*(C`PASSWD\*(C'\fR はこれを元に戻すために使われる。 例えば: .PP .Vb 1 \& ray rushmore = NOPASSWD: /bin/kill, /bin/ls, /usr/bin/lprm .Ve とすると、ユーザ \fBray\fR は彼自身への認証なしで 計算機 rushmore の \fBroot\fR として \fI/bin/kill\fR, \fI/bin/ls\fR, \fI/usr/bin/lprm\fR を実行することができる。 \fBray\fR に \fI/bin/kill\fR だけを パスワードなしで実行させるようにしたい場合、エントリは次のようになる。 .PP .Vb 1 \& ray rushmore = NOPASSWD: /bin/kill, PASSWD: /bin/ls, /usr/bin/lprm .Ve ただし、\f(CW\*(C`PASSWD\*(C'\fR タグは exempt_group オプションで 指定されたグループに属しているユーザには効果がない点に注意すること。 .PP デフォルトでは、現在のホスト上のあるユーザのどれかのエントリに \f(CW\*(C`NOPASSWD\*(C'\fR タグが適用されていれば、 そのユーザは \f(CW\*(C`sudo \-l\*(C'\fR を パスワードなしに実行できるようになる。 さらに、あるユーザの現在のホストに関連する全てのエントリに \f(CW\*(C`NOPASSWD\*(C'\fR タグがある場合に限り、 そのユーザは \f(CW\*(C`sudo \-v\*(C'\fR を パスワードなしに実行できるようになる。 この動作は verifypw と listpw オプションを使って変更できる。 .Sh "ワイルドカード (別名、メタキャラクタ):" .IX Subsection "ワイルドカード (別名、メタキャラクタ):" \fBsudo\fR は \fIsudoers\fR ファイルにおいて、 コマンドライン引き数やパス名に対して シェル形式の\fIワイルドカード\fRを使うことができる。 ワイルドカードのマッチングは、 \fB\s-1POSIX\s0\fR の \f(CW\*(C`fnmatch(3)\*(C'\fR ルーチンを使って行われる。 正規表現\fIではない\fR点に注意すること。 .Ip "\f(CW\*(C`*\*(C'\fR" 8 .IX Item "*" 任意の 0 個以上の文字にマッチする。 .Ip "\f(CW\*(C`?\*(C'\fR" 8 .IX Item "?" 任意の 1 個の文字にマッチする。 .Ip "\f(CW\*(C`[...]\*(C'\fR" 8 .IX Item "[...]" 指定した範囲にある任意の文字にマッチする。 .Ip "\f(CW\*(C`[!...]\*(C'\fR" 8 .IX Item "[!...]" 指定した範囲に\fBない\fR任意の文字にマッチする。 .Ip "\f(CW\*(C`\ex\*(C'\fR" 8 .IX Item "x" \*(L"x\*(R" で評価される任意の文字 \*(L"x\*(R"。 これは、\*(L"*\*(R", \*(L"?\*(R", \*(L"[\*(R", \*(L"}\*(R" のような エスケープ文字に対して使われる。 .PP フォワードスラッシュ ('/') は、パス名で使われるワイルドカードに対しては マッチ\fBしない\fR点に注意すること。 コマンドライン引き数に対してマッチングをする場合、 スラッシュはワイルドカードにマッチ\fBする\fR。 これは .PP .Vb 1 \& /usr/bin/* .Ve のようなパスを、 \f(CW\*(C`/usr/bin/who\*(C'\fR にはマッチさせ、 \f(CW\*(C`/usr/bin/X11/xterm\*(C'\fR にはマッチさせないようにするためである。 .Sh "ワイルドカードの規則における例外:" .IX Subsection "ワイルドカードの規則における例外:" 上の規則に対して、次の例外が適用される。 .if n .Ip "\f(CW""""""""\fR" 8 .el .Ip "\f(CW``''\fR" 8 .IX Item """"" 空の文字列 \f(CW\*(C`""\*(C'\fR が \fIsudoers\fR エントリの 唯一のコマンドライン引き数である場合、 「コマンドに引き数を\fBつけた\fRときは、実行することが許可されない」 ということを意味する。 .Sh "その他の特殊文字と予約語:" .IX Subsection "その他の特殊文字と予約語:" シャープ記号 ('#') はコメントを表すために使われる。 (ユーザ名で使われている場合は除く。 また、1 個以上の数字が続いていて、ユーザ ID として扱われる場合も除く。) コメント文字とそれ以降のテキストは、行末まで無視される。 .PP 予約語 \fB\s-1ALL\s0\fR は組込みの\fIエイリアス\fRで、 常にマッチを成功させる。 この予約語はどこでも使える。 これを使いたくない場合は、 \f(CW\*(C`Cmnd_Alias\*(C'\fR, \f(CW\*(C`User_Alias\*(C'\fR, \f(CW\*(C`Runas_Alias\*(C'\fR, \f(CW\*(C`Host_Alias\*(C'\fR を使うこと。 \fB\s-1ALL\s0\fR という \fIエイリアス\fR を自分で定義しようとしてはならない。 組込みのエイリアスが優先されるからである。 \fB\s-1ALL\s0\fR を使うと危険になる可能性がある点に注意すること。 なぜなら、これをコマンドの指定で使うと、 ユーザはシステム上の\fB全ての\fRコマンドを実行できるからである。 .PP 感嘆符 ('!') は、\fIエイリアス\fRの中と \f(CW\*(C`Cmnd\*(C'\fR の前で、 論理学の \fInot\fR オペレータとして使うことができる。 これにより、ある値を排除できる。 しかし \f(CW\*(C`!\*(C'\fR を 組込みの \f(CW\*(C`ALL\*(C'\fR エイリアスと組み合わせて、 ユーザが \*(L"全てではなく一部の\*(R" コマンドを実行できるように しようとしても、意図したように動作することは稀である点に注意すること (以下の\s-1「セキュリティ上の注意」\s0を参照)。 .PP 長い行は、バックスラッシュ ('\e') を行の最後の文字にすれば 続けることができる。 .PP リストにおける構成要素間の空白や、 \fIユーザ設定\fRにおける特殊な構文文字 ('=', ':', '(', ')') は、なくてもよい。 .PP \&'@', '!', '=', ':', ',', '(', ')', '\e' という文字をワード (例えば、ユーザ名やホスト名) の一部として使う場合は、 バックスラッシュ ('\e') でエスケープしなければならない。 .SH "例" .IX Header "例" 以下は \fIsudoers\fR エントリの例である。 正直なところ、いくつかは少しわざとらしい。 始めに\fIエイリアス\fRを定義する。 .PP .Vb 4 \& # User alias specification \& User_Alias FULLTIMERS = millert, mikef, dowdy \& User_Alias PARTTIMERS = bostley, jwfox, crawl \& User_Alias WEBMASTERS = will, wendy, wim .Ve .Vb 3 \& # Runas alias specification \& Runas_Alias OP = root, operator \& Runas_Alias DB = oracle, sybase .Ve .Vb 9 \& # Host alias specification \& Host_Alias SPARC = bigtime, eclipse, moet, anchor :\e \& SGI = grolsch, dandelion, black :\e \& ALPHA = widget, thalamus, foobar :\e \& 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 .Ve .Vb 12 \& # Cmnd alias specification \& Cmnd_Alias DUMPS = /usr/bin/mt, /usr/sbin/dump, /usr/sbin/rdump,\e \& /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, /usr/sbin/fasthalt \& Cmnd_Alias REBOOT = /usr/sbin/reboot, /usr/sbin/fastboot \& Cmnd_Alias SHELLS = /usr/bin/sh, /usr/bin/csh, /usr/bin/ksh, \e \& /usr/local/bin/tcsh, /usr/bin/rsh, \e \& /usr/local/bin/zsh \& Cmnd_Alias SU = /usr/bin/su .Ve 以下の設定では、コンパイル時のデフォルト値のいくつかを上書きする。 \fBsudo\fR に \fIsyslog\fR\|(3) を使って 全ての場合について \fIauth\fR facility でログを記録させる。 フルタイムのスタッフには、\fBsudo\fR のレクチャーを受ける必要をなくす。 またユーザ \fBmillert\fR はパスワードを入力しなくてよいようにする。 さらに \f(CW\*(C`Host_Alias\*(C'\fR の \fI\s-1SERVERS\s0\fR にある計算機に (syslog とは別に) ローカルのログファイルを保存し、 長いログエントリを数年に渡り保存するためにログの各行に年を記録する。 .PP .Vb 5 \& # Override built in defaults \& Defaults syslog=auth \& Defaults:FULLTIMERS !lecture \& Defaults:millert !authenticate \& Defaults@SERVERS log_year, logfile=/var/log/sudo.log .Ve \fIユーザ設定\fRは、誰が何を実行できるかを実際に決定している部分である。 .PP .Vb 2 \& root ALL = (ALL) ALL \& %wheel ALL = (ALL) ALL .Ve \fBroot\fR と \fBwheel\fR グループのユーザに、 全てのユーザとして、全てのホスト上のコマンドを実行できるようにしている。 .PP .Vb 1 \& FULLTIMERS ALL = NOPASSWD: ALL .Ve フルタイムのシステム管理者 (\fBmillert\fR, \fBmikef\fR, \fBdowdy\fR) は、 自分自身の認証をすることなく、全てのホスト上で全てのコマンドが実行できる。 .PP .Vb 1 \& PARTTIMERS ALL = ALL .Ve パートタイムのシステム管理者 (\fBbostley\fR, \fBjwfox\fR, \fBcrawl\fR) は、 全てのホスト上で全てのコマンドが実行できるが、 (エントリに \f(CW\*(C`NOPASSWD\*(C'\fR タグがないので) 最初に自分自身の認証が必要である。 .PP .Vb 1 \& jack CSNETS = ALL .Ve ユーザ \fBjack\fR は、\fI\s-1CSNETS\s0\fR エイリアス (ネットワーク \f(CW\*(C`128.138.243.0\*(C'\fR, \f(CW\*(C`128.138.204.0\*(C'\fR, \f(CW\*(C`128.138.242.0\*(C'\fR) にある計算機上で、全てのコマンドを実行できる。 これらのネットワークのうち、 ネットワーク \f(CW\*(C`128.138.204.0\*(C'\fR だけに クラス C ネットワークを示す明示的な (\s-1CIDR\s0 表記の) ネットマスクがある。 \fI\s-1CSNETS\s0\fR にある他のネットワークについては、 マッチングの際にローカルの計算機のネットマスクが使われる。 .PP .Vb 1 \& lisa CUNETS = ALL .Ve ユーザ \fBlisa\fR は、\fI\s-1CUNETS\s0\fR エイリアス (クラス B ネットワーク \f(CW\*(C`128.138.0.0\*(C'\fR) にある 全てのホストで、全てのコマンドを実行できる。 .PP .Vb 2 \& operator ALL = DUMPS, KILL, PRINTING, SHUTDOWN, HALT, REBOOT,\e \& /usr/oper/bin/ .Ve ユーザ \fBoperator\fR は、 簡単なメンテナンス用のコマンドに限って実行することができる。 これらはディレクトリ \fI/usr/oper/bin/\fR にあるコマンド全てで、 バックアップ・プロセスの kill・印刷システム・システムのシャットダウン、 といったことに関連したものである。 .PP .Vb 1 \& joe ALL = /usr/bin/su operator .Ve ユーザ \fBjoe\fR は、operator になるための \fIsu\fR\|(1) しか実行できない。 .PP .Vb 1 \& pete HPPA = /usr/bin/passwd [A-z]*, !/usr/bin/passwd root .Ve ユーザ \fBpete\fR は、\fI\s-1HPPA\s0\fR 計算機上で root 以外の全てのユーザのパスワードを変更することが許可されている。 ここでは、\fIpasswd\fR\|(1) がコマンドラインから 複数のユーザ名を受け付けないことを仮定している点に注意すること。 .PP .Vb 1 \& bob SPARC = (OP) ALL : SGI = (OP) ALL .Ve ユーザ \fBbob\fR は、\fI\s-1SPARC\s0\fR と \fI\s-1SGI\s0\fR 計算機上で、 \f(CW\*(C`Runas_Alias\*(C'\fR の \fI\s-1OP\s0\fR にリストされたユーザ (\fBroot\fR と \fBoperator\fR) として、全てのコマンドを実行できる。 .PP .Vb 1 \& jim +biglab = ALL .Ve ユーザ \fBjim\fR は、\fIbiglab\fR ネットグループにある全ての計算機で、 全てのコマンドを実行できる。 \fBsudo\fR は、\*(L"biglab\*(R" がネットグループであることを プレフィックス '+' によって知る。 .PP .Vb 1 \& +secretaries ALL = PRINTING, /usr/bin/adduser, /usr/bin/rmuser .Ve \fBsecretaries\fR ネットグループに属するユーザは、 ユーザの追加・削除だけでなくプリンタ管理の補助をする必要があるので、 これらのコマンドを全ての計算機上で実行することが許可されている。 .PP .Vb 1 \& fred ALL = (DB) NOPASSWD: ALL .Ve ユーザ \fBfred\fR は、\f(CW\*(C`Runas_Alias\*(C'\fR の \fI\s-1DB\s0\fR にあるユーザ (\fBoracle\fR と \fBsybase\fR) として、パスワードなしでコマンドを実行できる。 .PP .Vb 1 \& john ALPHA = /usr/bin/su [!-]*, !/usr/bin/su *root* .Ve \fIALPHA\fR 計算機上で、ユーザ \fBjohn\fR は、 su で root 以外の全てのユーザになれる。 しかし \fIsu\fR\|(1) にフラグを指定することはできない。 .PP .Vb 1 \& jen ALL, !SERVERS = ALL .Ve ユーザ \fBjen\fR は、\f(CW\*(C`Host_Alias\*(C'\fR の \fI\s-1SERVERS\s0\fR にある計算機 (master, mail, www, ns) 以外で、全てのコマンドを実行できる。 .PP .Vb 1 \& jill SERVERS = /usr/bin/, !SU, !SHELLS .Ve \f(CW\*(C`Host_Alias\*(C'\fR の \fI\s-1SERVERS\s0\fR にある計算機で、 \fBjill\fR は /usr/bin ディレクトリにある全てのコマンドを実行できる。 ただし、\f(CW\*(C`Cmnd_Aliases\*(C'\fR の \fI\s-1SU\s0\fR と \fI\s-1SHELLS\s0\fR に属しているコマンドは除く。 .PP .Vb 1 \& steve CSNETS = (operator) /usr/local/op_commands/ .Ve ユーザ \fBsteve\fR は、ディレクトリ /usr/local/op_commands/ にある 全てのコマンドを実行できる。ただし、ユーザ operator としてのみ実行できる。 .PP .Vb 1 \& matt valkyrie = KILL .Ve \fBmatt\fR は、彼の個人のワークステーション valkyrie で、 ハングしたプロセスを kill できる必要がある。 .PP .Vb 1 \& WEBMASTERS www = (www) ALL, (root) /usr/bin/su www .Ve ホスト www で、\f(CW\*(C`User_Alias\*(C'\fR の \fI\s-1WEBMASTERS\s0\fR にあるユーザ (will, wendy, wim) は、(web ページを所有している) ユーザ www として 全てのコマンドを実行できる。 また、単に \fIsu\fR\|(1) で www になれる。 .PP .Vb 2 \& ALL CDROM = NOPASSWD: /sbin/umount /CDROM,\e \& /sbin/mount -o nosuid\e,nodev /dev/cd0a /CDROM .Ve 全てのユーザは、\f(CW\*(C`Host_Alias\*(C'\fR の \s-1CD-ROM\s0 にある計算機 (orion, perseus, hercules) で パスワードなしで \s-1CD-ROM\s0 のマウントとアンマウントができる。 このコマンドをユーザが入力するのは長くて大変なので、 シェルスクリプトに書いてカプセル化してしまう方がよい。 .SH "セキュリティ上の注意" .IX Header "セキュリティ上の注意" \&'!' オペレータを使って \f(CW\*(C`ALL\*(C'\fR から コマンドを \*(L"差し引く\*(R" ことは、一般に有効でない。 ユーザは、欲しいコマンドを別な名前でコピーして実行すれば、 これを簡単に回避できてしまう。 例を挙げる。 .PP .Vb 1 \& bill ALL = ALL, !SU, !SHELLS .Ve 上の例では、実際には \fI\s-1SU\s0\fR と \fI\s-1SHELLS\s0\fR にリストされているコマンドを \fBbill\fR に実行させないようにすることができない。 なぜなら、bill は、これらのコマンドを別な名前にコピーしたり、 エディタや他のコマンドのシェルエスケープから使えるからである。 よって、このような制限は、せいぜい補助的なものと考えるべきである (さらにポリシーで強化すべきである)。 .SH "警告" .IX Header "警告" \fIsudoers\fR ファイルは、\fB常に\fR \fBvisudo\fR コマンドで編集すべきである。 このコマンドは、ファイルをロックし、文法チェックをする。 \fBsudo\fR は \fIsudoers\fR ファイルが文法的に間違っていると実行できないので、 \fIsudoers\fR にはエラーがひとつも無いようにしなければならない。 .PP (ユーザのではなく) 計算機のネットグループを使う場合、 (よくあるように) ネットグループに 完全なドメイン名付きのホスト名を入れる場合、 ホスト名は \f(CW\*(C`hostname\*(C'\fR コマンドで返される 完全なドメイン名付きのものである必要がある。 また \fIsudoers\fR に \fIfqdn\fR オプションを指定する必要がある。 .SH "ファイル" .IX Header "ファイル" .Vb 3 \& /etc/sudoers 誰が何を実行できるかのリスト \& /etc/group ローカルのグループファイル \& /etc/netgroup ネットワークグループのリスト .Ve .SH "関連項目" .IX Header "関連項目" \&\fIrsh\fR\|(1), \fIsudo\fR\|(8), \fIvisudo\fR\|(8), \fIsu\fR\|(1), \fIfnmatch\fR\|(3).