OSDN Git Service

ae0bc2e2c269ff4c44363ec8c230060d9ce44abe
[linuxjm/jm.git] / manual / sudo / release / man5 / sudoers.5
1 .\" Copyright (c) 1994-1996, 1998-2005, 2007-2012
2 .\"     Todd C. Miller <Todd.Miller@courtesan.com>
3 .\" 
4 .\" Permission to use, copy, modify, and distribute this software for any
5 .\" purpose with or without fee is hereby granted, provided that the above
6 .\" copyright notice and this permission notice appear in all copies.
7 .\" 
8 .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15 .\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
16 .\" 
17 .\" Sponsored in part by the Defense Advanced Research Projects
18 .\" Agency (DARPA) and Air Force Research Laboratory, Air Force
19 .\" Materiel Command, USAF, under agreement number F39502-99-1-0512.
20 .\" 
21 .\" Japanese Version Copyright (c) 2000-2002 Yuichi SATO
22 .\"   and 2009 Yoichi Chonan
23 .\"         all rights reserved.
24 .\" Translated Sat Oct  7 14:39:18 JST 2000
25 .\"         by Yuichi SATO <ysato444@yahoo.co.jp>
26 .\" Updated & Modified Fri Dec  6 04:40:44 JST 2002 by Yuichi SATO
27 .\" New Translation (sudo-1.6.9p17) Fri Jan 23 10:31:17 JST 2009
28 .\"         by Yoichi Chonan <cyoichi@maple.ocn.ne.jp>
29 .\" Updated & Modified (sudo-1.7.2p1) Sat Nov 14 21:15:16 JST 2009
30 .\"         by Yoichi Chonan
31 .\" Modified Tue Nov 24 20:00:00 JST 2009 by Yoichi Chonan
32 .\" Updated & Modified (sudo-1.8.4p4) Wed May  9 12:26:33 JST 2012
33 .\"         by Yoichi Chonan
34 .\"
35 .nr SL 0
36 .nr BA 0
37 .nr LC 0
38 .\"
39 .\" Automatically generated by Pod::Man 2.23 (Pod::Simple 3.14)
40 .\"
41 .\" Standard preamble:
42 .\" ========================================================================
43 .de Sp \" Vertical space (when we can't use .PP)
44 .if t .sp .5v
45 .if n .sp
46 ..
47 .de Vb \" Begin verbatim text
48 .ft CW
49 .nf
50 .ne \\$1
51 ..
52 .de Ve \" End verbatim text
53 .ft R
54 .fi
55 ..
56 .\" Set up some character translations and predefined strings.  \*(-- will
57 .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
58 .\" double quote, and \*(R" will give a right double quote.  \*(C+ will
59 .\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
60 .\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
61 .\" nothing in troff, for use with C<>.
62 .tr \(*W-
63 .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
64 .ie n \{\
65 .    ds -- \(*W-
66 .    ds PI pi
67 .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
68 .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
69 .    ds L" ""
70 .    ds R" ""
71 .    ds C` 
72 .    ds C' 
73 'br\}
74 .el\{\
75 .    ds -- \|\(em\|
76 .    ds PI \(*p
77 .    ds L" ``
78 .    ds R" ''
79 'br\}
80 .\"
81 .\" Escape single quotes in literal strings from groff's Unicode transform.
82 .ie \n(.g .ds Aq \(aq
83 .el       .ds Aq '
84 .\"
85 .\" If the F register is turned on, we'll generate index entries on stderr for
86 .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
87 .\" entries marked with X<> in POD.  Of course, you'll have to process the
88 .\" output yourself in some meaningful fashion.
89 .ie \nF \{\
90 .    de IX
91 .    tm Index:\\$1\t\\n%\t"\\$2"
92 ..
93 .    nr % 0
94 .    rr F
95 .\}
96 .el \{\
97 .    de IX
98 ..
99 .\}
100 .\"
101 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
102 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
103 .    \" fudge factors for nroff and troff
104 .if n \{\
105 .    ds #H 0
106 .    ds #V .8m
107 .    ds #F .3m
108 .    ds #[ \f1
109 .    ds #] \fP
110 .\}
111 .if t \{\
112 .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
113 .    ds #V .6m
114 .    ds #F 0
115 .    ds #[ \&
116 .    ds #] \&
117 .\}
118 .    \" simple accents for nroff and troff
119 .if n \{\
120 .    ds ' \&
121 .    ds ` \&
122 .    ds ^ \&
123 .    ds , \&
124 .    ds ~ ~
125 .    ds /
126 .\}
127 .if t \{\
128 .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
129 .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
130 .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
131 .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
132 .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
133 .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
134 .\}
135 .    \" troff and (daisy-wheel) nroff accents
136 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
137 .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
138 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
139 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
140 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
141 .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
142 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
143 .ds ae a\h'-(\w'a'u*4/10)'e
144 .ds Ae A\h'-(\w'A'u*4/10)'E
145 .    \" corrections for vroff
146 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
147 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
148 .    \" for low resolution devices (crt and lpr)
149 .if \n(.H>23 .if \n(.V>19 \
150 \{\
151 .    ds : e
152 .    ds 8 ss
153 .    ds o a
154 .    ds d- d\h'-1'\(ga
155 .    ds D- D\h'-1'\(hy
156 .    ds th \o'bp'
157 .    ds Th \o'LP'
158 .    ds ae ae
159 .    ds Ae AE
160 .\}
161 .rm #[ #] #H #V #F C
162 .\" ========================================================================
163 .\"
164 .IX Title "SUDOERS 5"
165 .TH SUDOERS 5 "February  5, 2012" "1.8.4" "MAINTENANCE COMMANDS"
166 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
167 .\" way too many mistakes in technical documents.
168 .if n .ad l
169 .nh
170 .SH "名前"
171 sudoers \- デフォルトの sudo 用セキュリティ・ポリシー・モジュール
172 .SH "説明"
173 .IX Header "DESCRIPTION"
174 \&\fIsudoers\fR ポリシー・モジュールは、デフォルトの \fBsudo\fR
175 用ポリシー・プラグインであり、このモジュールによってユーザがどんな
176 \&\fBsudo\fR 権限を持っているかの判定が行われる。ポリシーの運用は
177 \&\fI/etc/sudoers\fR ファイルによって行われるが、
178 \&\s-1LDAP\s0 を使用することも可能である。ポリシーを設定するときの書式は、
179 「SUDOERS ファイルの書式」セクションで詳しく説明している。
180 \&\fIsudoers\fR ポリシーの情報を \s-1LDAP\s0 に格納することについては、
181 \&\fIsudoers.ldap\fR\|(5) をご覧になるとよい。
182 .SS "認証とロギング"
183 .IX Subsection "Authentication and Logging"
184 \&\fIsudoers\fR セキュリティ・ポリシーでは、ユーザはたいていの場合、
185 \&\fBsudo\fR を使用できるようになる前に、本人であることを証明する必要がある。ただし、
186 \&\fBsudo\fR を実行するユーザが root だったり、変身対象ユーザが
187 \&\fBsudo\fR を実行するユーザと同一であったり、
188 ポリシーによってそのユーザやコマンドに対する認証が免除されている場合は、
189 パスワードは要求されない。\fIsu\fR\|(1) とは違って、
190 \&\fIsudoers\fR  ポリシーによる認証でチェックされるのは、
191 \&\fBsudo\fR を実行するユーザの認証情報 (訳注: 通常はパスワード)
192 であって、変身対象ユーザの (あるいは、root の) 認証情報ではない。
193 この動作は、後述する \fIrootpw\fR, \fItargetpw\fR, \fIrunaspw\fR
194 フラグによって変更することができる。
195 .PP
196 ポリシーに登録されていないユーザが \fBsudo\fR
197 を使ってコマンドを実行しようとすると、しかるべき権威者にメールが送付される。
198 そうしたメールの宛先は、
199 後述する「デフォルト設定」の \fImailto\fR によって設定できるが、
200 デフォルトでは \f(CW\*(C`root\*(C'\fR になっている。
201 .PP
202 \&\fBsudo\fR を使用する権限のないユーザが、\fB\-l\fR や \fB\-v\fR
203 オプションを付けて \fBsudo\fR の実行を試みても、
204 メールは送付されないことに注意してほしい。これによって、
205 自分が \fBsudo\fR を使用できるかどうか、
206 ユーザが自分で判断できるようになっているのである。
207 .PP
208 \&\fBsudo\fR が root によって実行されたとき、環境変数
209 \&\f(CW\*(C`SUDO_USER\*(C'\fR が設定されていると、
210 \&\fIsudoers\fR ポリシーは実際のユーザが誰かを判定するのに、
211 その値を使用する。ユーザとしては、この動作を利用することで、
212 すでに root シェルが起動されている場合でも、
213 自分が \fBsudo\fR を介して実行したコマンドのログを取ることができる。
214 また、この動作のおかげで、
215 \&\fBsudo\fR で実行したスクリプトやプログラムから呼び出される場合でさえ、
216 \&\fB\-e\fR オプションが役に立つものになっている。とは言え、そうした場合でも、
217 \&\fIsudoers\fR の参照はやはり root に対してなされるのであって、
218 \&\f(CW\*(C`SUDO_USER\*(C'\fR が指定しているユーザに対してではないことに気をつけてほしい。
219 .PP
220 \&\fIsudoers\fR は認証情報の一時保存 (credential caching) のために
221 タイムスタンプ・ファイルを使用する。ユーザの認証が済むと、
222 タイムスタンプが更新され、ユーザはしばらくの間 (\fItimeout\fR
223 オプションによって変更されていなければ、\f(CW\*(C`5\*(C'\fR 分間)
224 パスワードなしで \fBsudo\fR を使うことができる。デフォルトでは、
225 \&\fIsudoers\fR は tty ごとのタイムスタンプを使用する。すなわち、
226 ユーザの各ログイン・セッションごとに別のタイムスタンプが存在するわけだ。
227 \&\fItty_tickets\fR オプションを無効にすれば、
228 あるユーザのすべてのセッションに対して、
229 単一のタイムスタンプの使用を強制することができる。
230 .PP
231 \&\fIsudoers\fR は \fBsudo\fR の実行が成功したときも失敗したときも、
232 その事実を (エラー内容とともに)  \fIsyslog\fR\|(3) や 独自のログファイル、
233 あるいはその両方に記録することができる。\fIsudoers\fR はデフォルトでは、
234 \&\fIsyslog\fR\|(3) 経由でログを記録することになっているが、
235 この動作はデフォルト設定の \fIsyslog\fR と \fIlogfile\fR
236 を使って変更することが可能だ。
237 .PP
238 \&\fIsudoers\fR はコマンドの入出力ストリームのロギングもサポートしている。
239 入出力ロギングは、デフォルトでは ON になっていないが、デフォルト設定の
240 \&\fIlog_input\fR や \fIlog_output\fR フラグを使って有効にすることができる。
241 コマンド・タグの \f(CW\*(C`LOG_INPUT\*(C'\fR や \f(CW\*(C`LOG_OUTPUT\*(C'\fR
242 を使って有効にすることも可能だ。
243 .SS "コマンド環境"
244 .IX Subsection "Command Environment"
245 環境変数はプログラムの動作に影響を与えることがあるので、\fIsudoers\fR は、
246 実行されるコマンドがユーザの環境からどんな変数を引き継ぐかについて、
247 制御する手段を用意している。すなわち、\fIsudoers\fR は二つの異なった方法で、
248 環境変数を処理することができる。
249 .PP
250 デフォルトでは \fIenv_reset\fR オプションが有効になっている。
251 この場合、コマンドは最小限の環境で実行されることになるが、その環境には、
252 \&\f(CW\*(C`TERM\*(C'\fR, \f(CW\*(C`PATH\*(C'\fR, \f(CW\*(C`HOME\*(C'\fR,
253 \&\f(CW\*(C`MAIL\*(C'\fR, \f(CW\*(C`SHELL\*(C'\fR, \f(CW\*(C`LOGNAME\*(C'\fR,
254 \&\f(CW\*(C`USER\*(C'\fR, \f(CW\*(C`USERNAME\*(C'\fR、
255 及び \f(CW\*(C`SUDO_*\*(C'\fR という変数、
256 それに、呼び出し側のプロセスから来た変数で、\fIenv_check\fR や
257 \&\fIenv_keep\fR オプションによって許可されたものが含まれている。
258 これは、言わば、環境変数のホワイトリストである。
259 .PP
260 これに対して、\fIenv_reset\fR オプションが無効になっている場合は、
261 \&\fIenv_check\fR や \fIenv_delete\fR オプションによって明示的に拒否されていないかぎり、
262 いかなる環境変数も呼び出し側のプロセスから継承される。この場合、
263 \&\fIenv_check\fR や \fIenv_delete\fR はブラックリストのように振舞うわけだ。
264 危険性のある環境変数のすべてをブラックリストに載せることは不可能なので、
265 \&\fIenv_reset\fR を有効にしておくデフォルトの動作を採用することをお勧めする。
266 .PP
267 どんな場合でも、値が \f(CW\*(C`()\*(C'\fR で始まる変数は除去されるが、
268 それは \fBbash\fR の関数として解釈される恐れがあるからである。
269 \&\fBsudo\fR が許可、または拒否する環境変数のリストは、
270 \&\f(CW\*(C`sudo \-V\*(C'\fR を root の資格で実行したときの出力中に表示される。
271 .PP
272 たいていのオペレーティングシステムのダイナミック・リンカは、
273 ダイナミック・リンキングを制御する働きがある環境変数を、\fBsudo\fR もその一つである
274 setuid プログラムの環境から除去するようになっていることに注意してほしい。
275 オペレーティングシステムによって名前は様々だが、
276 \&\f(CW\*(C`_RLD*\*(C'\fR, \f(CW\*(C`DYLD_*\*(C'\fR, \f(CW\*(C`LD_*\*(C'\fR, 
277 \&\f(CW\*(C`LDR_*\*(C'\fR, \f(CW\*(C`LIBPATH\*(C'\fR,
278 \&\f(CW\*(C`SHLIB_PATH\*(C'\fR などが、この範疇に含まれるだろう。
279 こうした変数は、\fBsudo\fR の実行が始まるよりも前に、環境から除去されるので、
280 \&\fBsudo\fR がそうした変数を保持することは不可能である。
281 .PP
282 特例として、\fBsudo\fR に \fB\-i\fR オプション (initial login)
283 が指定されている場合は、\fIsudoers\fR は \fIenv_reset\fR
284 の有効・無効にかかわらず、環境を初期化する。
285 環境変数 \fI\s-1DISPLAY\s0\fR, \fI\s-1PATH\s0\fR,
286 \&\fI\s-1TERM\s0\fR は変更されないが、\fI\s-1HOME\s0\fR, \fI\s-1MAIL\s0\fR,
287 \&\fI\s-1SHELL\s0\fR, \fI\s-1USER\s0\fR, \fI\s-1LOGNAME\s0\fR は、
288 変身対象ユーザのそれにセットされるのである。Linux や \s-1AIX\s0 システムでは、
289 \&\fI/etc/environment\fR の内容も取り込まれる。
290 それ以外の環境変数はすべて捨てられる。
291 .PP
292 最後に。\fIenv_file\fR が設定されている場合は、
293 そのファイルに記載されたいかなる変数も、そこで指定されている値にセットされることになる。
294 .SH "SUDOERS ファイルの書式"
295 .IX Header "SUDOERS FILE FORMAT"
296 \&\fIsudoers\fR ファイルは二種類のエントリから構成されている。
297 (要するに変数である) エイリアスと (誰が何を実行できるかを指定している)
298 ユーザ設定だ。
299 .IP "[\fB訳注\fR]:" 8
300 .IX Item "footnote1"
301 訳者としては、「エイリアス、デフォルト設定、ユーザ設定の三種類の
302 エントリから構成されている」と言った方が実態に合っているのではないかと思う。
303 .PP
304 一人のユーザに複数のエントリがマッチするときは、順番に適用される。
305 複数の指定がマッチしている箇所については、最後にマッチしたものが使用される
306 (それが一番明示的なマッチだとはかぎらないが)。
307 .PP
308 以下では \fIsudoers\fR の文法を拡張 Backus-Naur 記法 (\s-1EBNF\s0)
309 を用いて記述する。\s-1EBNF\s0 がどんなものか御存じないからといって、
310 あきらめないでいただきたい。わりと簡単なものだし、
311 以下に出てくる定義には詳しい説明を付けておきますから。
312 .SS "\s-1EBNF\s0 の基礎の基礎"
313 .IX Subsection "Quick guide to EBNF"
314 \&\s-1EBNF\s0 は言語の文法を記述する簡潔で厳密な方法である。
315 \&\s-1EBNF\s0 の個々の定義は生成規則からできている。たとえば、
316 .PP
317 .Vb 1
318 \& シンボル ::= 定義 | 別の定義 1 | 別の定義 2 ...
319 .Ve
320 .PP
321 個々の生成規則は、ほかの生成規則を参照し、そのようにして言語の文法を作り上げている。
322 また \s-1EBNF\s0 には以下の演算子が含まれるが、
323 正規表現で御存じの読者も多いだろう。
324 だが、いわゆる「ワイルドカード」文字と混同しないでいただきたい。
325 あれは別の意味を持っている。
326 .ie n .IP "\*(C`?\*(C'" 4
327 .el .IP "\f(CW\*(C`?\*(C'\fR" 4
328 .IX Item "?"
329 直前のシンボル (または、シンボルのグループ) が、あってもなくてもよいことを意味する。
330 すなわちそのシンボルは、1 回現れてもよいし、1 回も現れないでもよい。
331 .ie n .IP "\*(C`*\*(C'" 4
332 .el .IP "\f(CW\*(C`*\*(C'\fR" 4
333 .IX Item "*"
334 直前のシンボル (または、シンボルのグループ) が 0 回以上現れる。
335 .ie n .IP "\*(C`+\*(C'" 4
336 .el .IP "\f(CW\*(C`+\*(C'\fR" 4
337 .IX Item "+"
338 直前のシンボル (または、シンボルのグループ) が 1 回以上現れる。
339 .PP
340 丸カッコを使うと、複数のシンボルをグループにまとめることができる。
341 なお混乱を避けるため、以下の定義で (シンボル名ではなく)
342 文字どおりの文字列や記号を示す場合は、それをシングルクォート ('')
343 で囲むことにする。
344 .SS "エイリアス"
345 .IX Subsection "Aliases"
346 エイリアスには四種類ある。\f(CW\*(C`User_Alias\*(C'\fR,
347 \&\f(CW\*(C`Runas_Alias\*(C'\fR, \f(CW\*(C`Host_Alias\*(C'\fR,
348 \&\f(CW\*(C`Cmnd_Alias\*(C'\fR である。
349 .PP
350 .Vb 4
351 \& Alias ::= \*(AqUser_Alias\*(Aq  User_Alias (\*(Aq:\*(Aq User_Alias)* |
352 \&           \*(AqRunas_Alias\*(Aq Runas_Alias (\*(Aq:\*(Aq Runas_Alias)* |
353 \&           \*(AqHost_Alias\*(Aq  Host_Alias (\*(Aq:\*(Aq Host_Alias)* |
354 \&           \*(AqCmnd_Alias\*(Aq  Cmnd_Alias (\*(Aq:\*(Aq Cmnd_Alias)*
355 \&
356 \& User_Alias ::= NAME \*(Aq=\*(Aq User_List
357 \&
358 \& Runas_Alias ::= NAME \*(Aq=\*(Aq Runas_List
359 \&
360 \& Host_Alias ::= NAME \*(Aq=\*(Aq Host_List
361 \&
362 \& Cmnd_Alias ::= NAME \*(Aq=\*(Aq Cmnd_List
363 \&
364 \& NAME ::= [A\-Z]([A\-Z][0\-9]_)*
365 .Ve
366 .PP
367 個々のエイリアスの定義は、次の形をとる。
368 .PP
369 .Vb 1
370 \& Alias_Type NAME = item1, item2, ...
371 .Ve
372 .PP
373 上記において、\fIAlias_Type\fR は \f(CW\*(C`User_Alias\*(C'\fR,
374 \&\f(CW\*(C`Runas_Alias\*(C'\fR, \f(CW\*(C`Host_Alias\*(C'\fR,
375 \&\f(CW\*(C`Cmnd_Alias\*(C'\fR のうちの一つである。
376 \&\f(CW\*(C`NAME\*(C'\fR はアルファベットの大文字、数字、
377 アンダースコア ('_') からなる文字列であるが、
378 \&\fB先頭の文字は大文字\fRでなければならない。同じタイプのエイリアス定義を、
379 コロンで (':') つないで、
380 一行に複数書くこともできる。たとえば、
381 .PP
382 .Vb 1
383 \& Alias_Type NAME = item1, item2, item3 : NAME = item4, item5
384 .Ve
385 .PP
386 以下では、エイリアスの有効な要素となるものを定義する。
387 .PP
388 .Vb 2
389 \& User_List ::= User |
390 \&               User \*(Aq,\*(Aq User_List
391 \&
392 \& User ::= \*(Aq!\*(Aq* user name |
393 \&          \*(Aq!\*(Aq* #uid |
394 \&          \*(Aq!\*(Aq* %group |
395 \&          \*(Aq!\*(Aq* %#gid |
396 \&          \*(Aq!\*(Aq* +netgroup |
397 \&          \*(Aq!\*(Aq* %:nonunix_group |
398 \&          \*(Aq!\*(Aq* %:#nonunix_gid |
399 \&          \*(Aq!\*(Aq* User_Alias
400 .Ve
401 .PP
402 \&\f(CW\*(C`User_List\*(C'\fR を構成するのは、一個以上の次のものである。
403 ユーザ名、ユーザ ID (接頭辞 '#' が付く)、システムグループ名やその ID
404 (それぞれ、接頭辞 '%' と '%#' が付く)、ネットグループ名 (接頭辞 '+' が付く)、
405 非 Unix グループ名やその ID (それぞれ、接頭辞 '%:' と '%:#' が付く)、
406 それに \f(CW\*(C`User_Alias\*(C'\fR。
407 リストの各項目の前には一個以上の '!' 演算子を付けてもよい。 
408 奇数個の '!' はその項目の値を否定する。偶数個の場合は互い相殺されるだけだ。
409 .PP
410 ユーザ名、\f(CW\*(C`uid\*(C'\fR、グループ名、\f(CW\*(C`gid\*(C'\fR、
411 ネットグループ名、非 Unix グループ名、非 Unix グループ の
412 \&\f(CW\*(C`gid\*(C'\fR は、ダブルクォートで囲めば、
413 特殊文字をエスケープしないですむ。
414 ダブルクォートで囲まずに特殊文字を使いたいなら、
415 エスケープした 16 進数を指定してやればよい。たとえば、
416 スペースなら \ex20 という具合だ。ダブルクォートを使用する場合は、
417 接頭辞があれば、それをダブルクォートの内側に入れなければならない。
418 .PP
419 非 Unix グループやその \f(CW\*(C`gid\*(C'\fR の書式が、
420 実際にどんなものになるかは、利用するグループ・プロバイダ・プラグイン
421 (group provider plugin) 次第である (後述する \fIgroup_plugin\fR
422 オプションの説明も見てほしい)。たとえば、
423 \&\s-1QAS\s0 (\s-1Quest Authentication Services\s0) の \s-1AD\s0 プラグインは、
424 以下の書式をサポートしている。
425 .IP "\(bu" 4
426 同じドメインのグループ: \*(L"Group Name\*(R"
427 .IP "\(bu" 4
428 任意のドメインのグループ: \*(L"Group Name@FULLY.QUALIFIED.DOMAIN\*(R"
429 .IP "\(bu" 4
430 グループ \s-1SID:\s0 \*(L"S\-1\-2\-34\-5678901234\-5678901234\-5678901234\-567\*(R"
431 .PP
432 グループ名を囲む引用符は任意であることに注意してほしい。
433 文字列を引用符で囲まない場合は、スペースや特殊文字をエスケープするために、
434 バックスラッシュ (\e) を使わなければならない。
435 エスケープする必要がある文字のリストについては、
436 「ほかの特殊文字と予約語」のセクションをご覧になってほしい。
437 .PP
438 .Vb 2
439 \& Runas_List ::= Runas_Member |
440 \&                Runas_Member \*(Aq,\*(Aq Runas_List
441 \&
442 \& Runas_Member ::= \*(Aq!\*(Aq* user name |
443 \&                  \*(Aq!\*(Aq* #uid |
444 \&                  \*(Aq!\*(Aq* %group |
445 \&                  \*(Aq!\*(Aq* %#gid |
446 \&                  \*(Aq!\*(Aq* %:nonunix_group |
447 \&                  \*(Aq!\*(Aq* %:#nonunix_gid |
448 \&                  \*(Aq!\*(Aq* +netgroup |
449 \&                  \*(Aq!\*(Aq* Runas_Alias
450 .Ve
451 .PP
452 \&\f(CW\*(C`Runas_List\*(C'\fR は \f(CW\*(C`User_List\*(C'\fR に似ている。
453 違うのは、\f(CW\*(C`User_Alias\*(C'\fR ではなく、
454 \&\f(CW\*(C`Runas_Alias\*(C'\fR が使えることだ。
455 ユーザ名やグループ名のマッチは文字列として行われることに気を付けてほしい。
456 言い換えると、二つのユーザ名 (あるいはグループ名) は、かりに同じ uid (gid)
457 を持っていても、別個のものと見なされるのである。
458 だから、もし同じ uid を持ったすべてのユーザ名にマッチさせたかったら 
459 (たとえば、root と toor がそうだとしよう)、ユーザ名の代わりに
460 uid を使えばよい (この例なら、#0 である)。
461 .PP
462 .Vb 2
463 \& Host_List ::= Host |
464 \&               Host \*(Aq,\*(Aq Host_List
465 \&
466 \& Host ::= \*(Aq!\*(Aq* host name |
467 \&          \*(Aq!\*(Aq* ip_addr |
468 \&          \*(Aq!\*(Aq* network(/netmask)? |
469 \&          \*(Aq!\*(Aq* +netgroup |
470 \&          \*(Aq!\*(Aq* Host_Alias
471 .Ve
472 .PP
473 \&\f(CW\*(C`Host_List\*(C'\fR は一個以上の、ホスト名、\s-1IP\s0 アドレス、
474 ネットワークアドレス、ネットグループ名 (接頭辞 '+' が付く)、
475 および他のエイリアスからなる。ここでもまた、'!' 演算子を付けて、
476 項目の値を否定することができる。
477 ネットワークアドレスにネットマスクを指定しなかった場合は、
478 \&\fBsudo\fR がローカルホストのネットワークインターフェースを一つ一つ参照し、
479 指定されたネットワークアドレスと同じアドレスを持つインターフェースがあれば、
480 そのネットマスクを使用することになる。ネットマスクの指定は、
481 標準の \s-1IP\s0 アドレス表記 (たとえば 255.255.255.0 とか 
482 ffff:ffff:ffff:ffff:: とか) でもよく、\&\s-1CIDR\s0 表記 (ビット数、
483 たとえば 24 とか 64 とか) でもよい。
484 ホスト名の一部にシェル風のワイルドカードを使用することができるが
485 (下記の「ワイルドカード」セクションを参照)、使用マシンの
486 \&\f(CW\*(C`hostname\*(C'\fR コマンドが完全修飾ドメイン名 (FQDN) を返さない場合、
487 ワイルドカードを利用するには \fIfqdn\fR オプションを使う必要がある。
488 なお、\fBsudo\fR がチェックするのは、
489 実在のネットワークインターフェースだけだということに留意してほしい。
490 すなわち、\s-1IP\s0 アドレス 127.0.0.1 (localhost)
491 がマッチすることは、絶対にないのである。
492 また、\*(L"localhost\*(R" というホスト名がマッチするのは、
493 それが実際のホスト名であるときだけであり、
494 それは通常、ネットワークにつながっていないシステムの場合にしか当てはまらない。
495 .PP
496 .Vb 2
497 \& Cmnd_List ::= Cmnd |
498 \&               Cmnd \*(Aq,\*(Aq Cmnd_List
499 \&
500 \& commandname ::= file name |
501 \&                 file name args |
502 \&                 file name \*(Aq""\*(Aq
503 \&
504 \& Cmnd ::= \*(Aq!\*(Aq* commandname |
505 \&          \*(Aq!\*(Aq* directory |
506 \&          \*(Aq!\*(Aq* "sudoedit" |
507 \&          \*(Aq!\*(Aq* Cmnd_Alias
508 .Ve
509 .PP
510 \&\f(CW\*(C`Cmnd_List\*(C'\fR は一個以上の、コマンド名、ディレクトリ、
511 他のエイリアスからなるリストである。コマンド名は絶対パスのファイル名であり、
512 シェル風のワイルドカードを含んでいても構わない
513 (下記の「ワイルドカード」セクションを参照)。単にファイル名だけ指定した場合、
514 ユーザはお望みのどんな引き数でも付けてそのコマンドを実行することができる。
515 とは言え、コマンドライン引き数を (ワイルドカードを含めて)
516 指定しても構わないし、また、引き数に \f(CW""\fR を指定して、そのコマンドは
517 \&\fBコマンドライン引き数なし\fRの実行のみが可能だと指示することもできる。
518 ディレクトリは '/' で終わる絶対パス名である。
519 \&\f(CW\*(C`Cmnd_List\*(C'\fR にディレクトリを指定すると、
520 ユーザーはそのディレクトリ内の任意のファイルを実行できるようになる
521 (だが、そのサブディレクトリにあるファイルは実行できない)。
522 .PP
523 \&\f(CW\*(C`Cmnd\*(C'\fR がコマンドライン引き数を伴っている場合は、
524 \&\f(CW\*(C`Cmnd\*(C'\fR 中の引き数は、
525 ユーザがコマンドラインに打ち込む引き数と正確に一致しなければならない
526 (Cmnd 中の引き数にワイルドカードがあるならば、
527 それがコマンドラインの引き数とマッチしなければならない)。
528 以下に挙げる文字をコマンド引き数の中で用いるときは、
529 \&'\e' によってエスケープしなければならないことに注意してほしい。
530 \&',', ':', '=', '\e' がそれである。
531 \&\f(CW"sudoedit"\fR という特別なコマンド名は、ユーザが \fBsudo\fR を
532 \&\fB-e\fR オプション付きで (あるいは、\fBsudoedit\fR というコマンド名で)
533 実行することを許可するために使用される。この場合、
534 コマンドライン引き数を取ることができるのは、普通のコマンドとまったく同様である。
535 .SS "デフォルト設定 (Defaults)"
536 .IX Subsection "Defaults"
537 かなりの設定オプションが、一行以上の \f(CW\*(C`Default_Entry\*(C'\fR
538 行を使うことで実行時にデフォルトの値から変更可能だ。その効果の及ぶ範囲は、
539 任意のホストのすべてのユーザにすることもできるし、
540 ある特定のホストのすべてのユーザ、ある特定のユーザ、ある特定のコマンド、
541 ある特定のユーザとして実行するコマンドなどに限定することもできる。
542 気を付けてほしいのは、コマンドに限定した
543 Defaults 行にコマンドライン引き数まで書くことができないことだ。
544 引き数を指定する必要がある場合は、\f(CW\*(C`Cmnd_Alias\*(C'\fR を定義して、
545 代わりにそれを参照すればよい。
546 .PP
547 .Vb 5
548 \& Default_Type ::= \*(AqDefaults\*(Aq |
549 \&                  \*(AqDefaults\*(Aq \*(Aq@\*(Aq Host_List |
550 \&                  \*(AqDefaults\*(Aq \*(Aq:\*(Aq User_List |
551 \&                  \*(AqDefaults\*(Aq \*(Aq!\*(Aq Cmnd_List |
552 \&                  \*(AqDefaults\*(Aq \*(Aq>\*(Aq Runas_List
553 \&
554 \& Default_Entry ::= Default_Type Parameter_List
555 \&
556 \& Parameter_List ::= Parameter |
557 \&                    Parameter \*(Aq,\*(Aq Parameter_List
558 \&
559 \& Parameter ::= Parameter \*(Aq=\*(Aq Value |
560 \&               Parameter \*(Aq+=\*(Aq Value |
561 \&               Parameter \*(Aq\-=\*(Aq Value |
562 \&               \*(Aq!\*(Aq* Parameter
563 .Ve
564 .PP
565 パラメータは\fBフラグ\fR、\fB整数値\fR、\fB文字列\fR、
566 \&\fBリスト\fRのどれでもよい。フラグは要するにブーリアン (真偽値) であり、
567 \&'!' 演算子で off にできる。整数値、文字列、リストのパラメータにも、
568 真偽値として使用して、それを無効にできるものがいくつか存在する。
569 パラメータの値が複数の単語を含むときは、値をダブルクオート
570 (\f(CW\*(C`"\*(C'\fR) で囲むとよい。特殊文字はバックスラッシュ
571 (\f(CW\*(C`\e\*(C'\fR) でエスケープすることができる。
572 .PP
573 リストには代入演算子が \f(CW\*(C`\=\*(C'\fR のほかにもう二つある。
574 \&\f(CW\*(C`+=\*(C'\fR と \f(CW\*(C`\-=\*(C'\fR である。こうした演算子は、
575 それぞれ、リストに付け加えたり、リストから削除したりするのに使用する。
576 \&\f(CW\*(C`\-=\*(C'\fR 演算子を使って、
577 リストに存在しない要素を消去しようとしても、エラーにはならない。
578 .PP
579 Defaults 行の解析は、次の順序で行われる。最初に汎用、Host、
580 User の Defaults が解析され、それから Runas の Defaults、最後にコマンドの
581 Defaults の順番になる。
582 .PP
583 Defaults 行で使用できるパラメータのリストについては、
584 「SUDOERS のオプション」を御覧いただきたい。
585 .SS "ユーザ設定 (User Specification)"
586 .IX Subsection "User Specification"
587 .Vb 2
588 \& User_Spec ::= User_List Host_List \*(Aq=\*(Aq Cmnd_Spec_List \e
589 \&               (\*(Aq:\*(Aq Host_List \*(Aq=\*(Aq Cmnd_Spec_List)*
590 \&
591 \& Cmnd_Spec_List ::= Cmnd_Spec |
592 \&                    Cmnd_Spec \*(Aq,\*(Aq Cmnd_Spec_List
593 \&
594 .ie \n(SL \& Cmnd_Spec ::= Runas_Spec? SELinux_Spec? Tag_Spec* Cmnd
595 .el \& Cmnd_Spec ::= Runas_Spec? Tag_Spec* Cmnd
596 \&
597 \& Runas_Spec ::= \*(Aq(\*(Aq Runas_List? (\*(Aq:\*(Aq Runas_List)? \*(Aq)\*(Aq
598 \&
599 .if \n(SL \{\
600 \& SELinux_Spec ::= (\*(AqROLE=role\*(Aq | \*(AqTYPE=type\*(Aq)
601 \&
602 \}
603 \& Tag_Spec ::= (\*(AqNOPASSWD:\*(Aq | \*(AqPASSWD:\*(Aq | \*(AqNOEXEC:\*(Aq | \*(AqEXEC:\*(Aq |
604 \&               \*(AqSETENV:\*(Aq | \*(AqNOSETENV:\*(Aq | \*(AqLOG_INPUT:\*(Aq | \*(AqNOLOG_INPUT:\*(Aq |
605 \&               \*(AqLOG_OUTPUT:\*(Aq | \*(AqNOLOG_OUTPUT:\*(Aq)
606 .Ve
607 .PP
608 \&\fBユーザ設定\fRは、あるユーザが、指定されたホストで (どのユーザに変身して)
609 どのコマンドを実行できるかを決定する。デフォルトでは、コマンドは \fBroot\fR
610 に変身して実行されるが、これはコマンドごとに変更することができる。
611 .PP
612 ユーザ設定の基本構造は、
613 .PP
614 .Vb 2
615 \&      who     where     = (as_whom)      what 
616 \&     [誰が どのホストで = (誰に変身して) 何を]
617 .Ve
618 .PP
619 である。構成部分に分けて説明しよう。
620 .SS "Runas_Spec (どのユーザやグループに変身できるか)"
621 .IX Subsection "Runas_Spec"
622 \&\f(CW\*(C`Runas_Spec\*(C'\fR は変身の対象となるユーザやグループを規定している。
623 完全な形の \f(CW\*(C`Runas_Spec\*(C'\fR は、(上で定義しているように)
624 コロン (':') で区切られ、
625 カッコで囲まれた、二つの \f(CW\*(C`Runas_List\*(C'\fR からなっている。
626 一つ目の \f(CW\*(C`Runas_List\*(C'\fR は、\fBsudo\fR で
627 \&\fB\-u\fR オプションを使ったときに変身できるユーザを指している。
628 二番目の方が規定しているのは、\fBsudo\fR の \fB\-g\fR
629 オプションによって指定できるグループのリストだ。
630 両方の \f(CW\*(C`Runas_List\*(C'\fR が指定されている場合は、
631 それぞれの \f(CW\*(C`Runas_List\*(C'\fR
632 にリストされているユーザとグループの任意の組み合わせで、
633 コマンドを実行することができる。
634 一つ目の \f(CW\*(C`Runas_List\*(C'\fR だけが指定されているときは、
635 リスト中のいかなるユーザにでも変身してコマンドを実行できるが、
636 \&\fB\-g\fR オプションを指定することはできない。
637 一つ目の \f(CW\*(C`Runas_List\*(C'\fR が空で、二番目だけ指定されている場合は、
638 \&\fBsudo\fR を実行するユーザの資格で、グループを
639 \&\f(CW\*(C`Runas_List\*(C'\fR にリストされている任意のグループに設定して、
640 コマンドを実行することができる。
641 \&\f(CW\*(C`Runas_Spec\*(C'\fR がまったく指定されていないときは、
642 \&\fBroot\fR としてコマンドを実行できるが、グループを指定することはできない。
643 .PP
644 \&\f(CW\*(C`Runas_Spec\*(C'\fR は、
645 それに続くコマンドに対してデフォルトを定める。それはどういうことかと言うと、
646 次のようなエントリがあったとしよう。
647 .PP
648 .Vb 1
649 \& dgb    boulder = (operator) /bin/ls, /bin/kill, /usr/bin/lprm
650 .Ve
651 .PP
652 ユーザ \fBdgb\fR は \fI/bin/ls\fR, \fI/bin/kill\fR,
653 \&\fI/usr/bin/lprm\fR を実行することができる。ただし、\fBoperator\fR 
654 として実行できるだけだ。たとえば、次のようにである。
655 .PP
656 .Vb 1
657 \& $ sudo \-u operator /bin/ls
658 .Ve
659 .PP
660 エントリの後ろの方の \f(CW\*(C`Runas_Spec\*(C'\fR を変更することも可能だ。
661 上のエントリをこんなふうに書き変えたとしよう。
662 .PP
663 .Vb 1
664 \& dgb    boulder = (operator) /bin/ls, (root) /bin/kill, /usr/bin/lprm
665 .Ve
666 .PP
667 すると、ユーザ \fBdgb\fR は、\fI/bin/ls\fR こそ \fBoperator\fR としてだが、
668 \&\fI/bin/kill\fR や \fI/usr/bin/lprm\fR は
669 \&\fBroot\fR の資格で実行できるようになる。
670 .PP
671 \&\fBdgb\fR が \f(CW\*(C`/bin/ls\*(C'\fR を実行するとき、
672 変身対象ユーザとグループのどちらでも \fBoperator\fR にできるように、
673 この記述を拡張することもできる。
674 .PP
675 .Vb 2
676 \& dgb    boulder = (operator : operator) /bin/ls, (root) /bin/kill, \e
677 \&        /usr/bin/lprm
678 .Ve
679 .PP
680 注意してほしいが、\f(CW\*(C`Runas_Spec\*(C'\fR のグループの部分は、
681 コマンドをそのグループとして実行することをユーザに許可しているのであって、
682 そうすることをユーザに強制しているのではない。コマンドラインで
683 グループを指定しない場合は、コマンドは、パスワード・データベースにある
684 変身対象ユーザのエントリに登録されているグループとして
685 実行されることになるのだ。以下のコマンドはすべて、上記の sudoers
686 エントリによって許可されることになるだろう。
687 .PP
688 .Vb 3
689 \& $ sudo \-u operator /bin/ls
690 \& $ sudo \-u operator \-g operator /bin/ls
691 \& $ sudo \-g operator /bin/ls
692 .Ve
693 .PP
694 次の例では、ユーザ \fBtcm\fR が
695 モデムのデバイスファイルにアクセスするコマンドを
696 dialer グループとして実行できるようにしている。
697 .PP
698 .Vb 2
699 \& tcm    boulder = (:dialer) /usr/bin/tip, /usr/bin/cu, \e
700 \&        /usr/local/bin/minicom
701 .Ve
702 .PP
703 この例では、グループしか指定できないことに注意してほしい。コマンドは
704 ユーザ \fBtcm\fR の資格のまま実行されるのである。たとえば、次のように。
705 .PP
706 .Vb 1
707 \& $ sudo \-g dialer /usr/bin/cu
708 .Ve
709 .PP
710 \&\f(CW\*(C`Runas_Spec\*(C'\fR には複数のユーザやグループが存在してもよい。
711 その場合、ユーザは \fB\-u\fR や \fB\-g\fR オプションを使って、
712 ユーザとグループのどんな組み合わせでも選択することができる。
713 .PP
714 .Vb 1
715 \& alan   ALL = (root, bin : operator, system) ALL
716 .Ve
717 .PP
718 この例では、ユーザ \fBalan\fR は root と bin ユーザのどちらに変身して、
719 任意のコマンドを実行することもできる。また、グループを
720 operator や system に設定することも自由である。
721 .if \n(SL \{\
722 .SS "SELinux_Spec"
723 .IX Subsection "SELinux_Spec"
724 SELinux をサポートするシステムでは、\fIsudoers\fR のエントリで
725 SELinux の role や type をコマンドに関連付けることも可能である。
726 コマンドについて指定した role や type は、\fIsudoers\fR 中で
727 role や type にデフォルトの値が設定されていても、それよりも優先される。
728 もっとも、role や type をコマンドラインで指定すれば、
729 そちらが \fIsudoers\fR 中の値よりさらに優先されることになる。
730 \}
731 .SS "Tag_Spec"
732 .IX Subsection "Tag_Spec"
733 コマンドは 0 個以上のタグを伴うことができる。使用できるタグの値は 10 個あり、 
734 \&\f(CW\*(C`NOPASSWD\*(C'\fR, \f(CW\*(C`PASSWD\*(C'\fR,
735 \&\f(CW\*(C`NOEXEC\*(C'\fR, \f(CW\*(C`EXEC\*(C'\fR,
736 \&\f(CW\*(C`SETENV\*(C'\fR, \f(CW\*(C`NOSETENV\*(C'\fR,
737 \&\f(CW\*(C`LOG_INPUT\*(C'\fR, \f(CW\*(C`NOLOG_INPUT\*(C'\fR,
738 \&\f(CW\*(C`LOG_OUTPUT\*(C'\fR, \f(CW\*(C`NOLOG_OUTPUT\*(C'\fR
739 が、それである。ある \f(CW\*(C`Cmnd\*(C'\fR にタグをセットすると、
740 \&\f(CW\*(C`Cmnd_Spec_List\*(C'\fR 中のそれ以後の 
741 \&\f(CW\*(C`Cmnd\*(C'\fR は、反対の意味を持つタグによって変更されないかぎり、
742 そのタグを継承することになる (すなわち、\f(CW\*(C`PASSWD\*(C'\fR は 
743 \&\f(CW\*(C`NOPASSWD\*(C'\fR を上書きし、\f(CW\*(C`NOEXEC\*(C'\fR は 
744 \&\f(CW\*(C`EXEC\*(C'\fR を上書きする)。
745 .PP
746 \fI\s-1NOPASSWD\s0 と \s-1PASSWD\s0\fR
747 .IX Subsection "NOPASSWD and PASSWD"
748 .PP
749 デフォルトでは、\fBsudo\fR はコマンドを実行する前に、
750 ユーザが本人であることを証明するように求める。この振舞いは 
751 \&\f(CW\*(C`NOPASSWD\*(C'\fR タグによって変更することができる。
752 \&\f(CW\*(C`Runas_Spec\*(C'\fR と同様、\f(CW\*(C`NOPASSWD\*(C'\fR タグも 
753 \&\f(CW\*(C`Cmnd_Spec_List\*(C'\fR 中のそれに続くコマンドに対して
754 デフォルトを定める。
755 \&\f(CW\*(C`PASSWD\*(C'\fR の働きは反対であり、
756 振舞いを元に戻したいときに使える。たとえば、
757 .PP
758 .Vb 1
759 \& ray    rushmore = NOPASSWD: /bin/kill, /bin/ls, /usr/bin/lprm
760 .Ve
761 .PP
762 とすれば、ユーザ \fBray\fR はマシン rushmore 上で認証をしないでも 
763 \&\fBroot\fR として \fI/bin/kill\fR, \fI/bin/ls\fR,
764 \&\fI/usr/bin/lprm\fR を実行できるようになる。もし \fBray\fR
765 がパスワードなしで実行できるコマンドを \fI/bin/kill\fR だけに絞りたいのなら、
766 エントリはこうなるだろう。
767 .PP
768 .Vb 1
769 \& ray    rushmore = NOPASSWD: /bin/kill, PASSWD: /bin/ls, /usr/bin/lprm
770 .Ve
771 .PP
772 ただし、ユーザが \fIexempt_group\fR オプションで指定されているグループに属する場合は、
773 \&\f(CW\*(C`PASSWD\*(C'\fR タグが効果を持たないことに注意してほしい。
774 .PP
775 デフォルトでは、現在使用中のホストに関するユーザのエントリのうちに 
776 \&\f(CW\*(C`NOPASSWD\*(C'\fR タグが指定されているものが一つでもあれば、
777 そのユーザはパスワードなしで \f(CW\*(C`sudo \-l\*(C'\fR を実行できる。
778 なお、ユーザがパスワードなしで \f(CW\*(C`sudo \-v\*(C'\fR を実行できるのは、
779 現在使用中のホストに関するそのユーザのエントリのすべてで
780 \&\f(CW\*(C`NOPASSWD\*(C'\fR タグが生きているときのみである。この動作は、
781 \&\fIverifypw\fR や \fIlistpw\fR オプションによって変更できる。
782 .PP
783 \fI\s-1NOEXEC\s0 と \s-1EXEC\s0\fR
784 .IX Subsection "NOEXEC and EXEC"
785 .PP
786 \&\fBsudo\fR が \fInoexec\fR サポートつきでコンパイルされ、
787 使用しているオペレーティングシステムがそれに対応している場合、
788 \&\f(CW\*(C`NOEXEC\*(C'\fR タグを利用すれば、動的にリンクされた実行ファイルが
789 そこからさらにコマンドを実行するのを防ぐことができる。
790 .PP
791 次の例では、ユーザ \fBaaron\fR は \fI/usr/bin/more\fR と 
792 \&\fI/usr/bin/vi\fR を実行できるが、シェル・エスケープは利用できない。
793 .PP
794 .Vb 1
795 \& aaron  shanty = NOEXEC: /usr/bin/more, /usr/bin/vi
796 .Ve
797 .PP
798 \&\f(CW\*(C`NOEXEC\*(C'\fR がどんなふうに働くのか、お使いのシステムで利用できるかどうか、
799 などについてさらに詳しく知りたかったら、
800 「シェル・エスケープを防止する」のセクションを御覧になるとよい。
801 .PP
802 \fI\s-1SETENV\s0 と \s-1NOSETENV\s0\fR
803 .IX Subsection "SETENV and NOSETENV"
804 .PP
805 上記のタグは \fIsetenv\fR オプションの値をコマンドごとに変更する。
806 あるコマンドに対して \f(CW\*(C`SETENV\*(C'\fR を設定すると、
807 ユーザがコマンドラインから \fB\-E\fR オプションを使用して、
808 \fIenv_reset\fR オプションを無効にできるようになることに注意してほしい。
809 それだけではない。コマンドラインから設定する環境変数が \fIenv_check\fR,
810 \&\fIenv_delete\fR, \fIenv_keep\fR による規制を受けないようにもなる。
811 それ故、こうした形で環境変数を設定することを許可するのは、
812 信用できるユーザだけに限るべきである。なお、マッチするコマンドが
813 \&\fB\s-1ALL\s0\fR だった場合は、暗黙のうちに \f(CW\*(C`SETENV\*(C'\fR
814 タグがそのコマンドに付けられるが、このデフォルトの動作は
815 \&\f(CW\*(C`UNSETENV\*(C'\fR タグを使えば打ち消すことができる。
816 .PP
817 \fI\s-1LOG_INPUT\s0 と \s-1NOLOG_INPUT\s0\fR
818 .IX Subsection "LOG_INPUT and NOLOG_INPUT"
819 .PP
820 この二つのタグは \fIlog_input\fR オプションの値をコマンドごとに変更する。
821 詳しい情報については、後述する「SUDOERS のオプション」セクションの
822 \&\fIlog_input\fR の説明をご覧になっていただきたい。
823 .PP
824 \fI\s-1LOG_OUTPUT\s0 と \s-1NOLOG_OUTPUT\s0\fR
825 .IX Subsection "LOG_OUTPUT and NOLOG_OUTPUT"
826 .PP
827 この二つのタグは \fIlog_output\fR オプションの値をコマンドごとに変更する。
828 詳しい情報については、後述する「SUDOERS のオプション」セクションの
829 \&\fIlog_output\fR の説明をご覧になっていただきたい。
830 .SS "ワイルドカード"
831 .IX Subsection "Wildcards"
832 \&\fIsudoers\fR ファイルでは、ホスト名、コマンドラインのパス名、
833 コマンドラインの引き数にシェル形式のワイルドカード (メタ文字とか
834 glob キャラクタとも言う) が使用できる。ワイルドカードのマッチングは
835 \&\fB\s-1POSIX\s0\fR の \fIglob\fR\|(3) と \fIfnmatch\fR\|(3)
836 ルーティンを用いて行われる。
837 \&\fB以下のものは正規表現ではない\fRことに注意してほしい。
838 .ie n .IP "\*(C`*\*(C'" 8
839 .el .IP "\f(CW\*(C`*\*(C'\fR" 8
840 .IX Item "*"
841 ゼロ個以上の任意の文字にマッチする。
842 .ie n .IP "\*(C`?\*(C'" 8
843 .el .IP "\f(CW\*(C`?\*(C'\fR" 8
844 .IX Item "?"
845 任意の一文字にマッチする。
846 .ie n .IP "\*(C`[...]\*(C'" 8
847 .el .IP "\f(CW\*(C`[...]\*(C'\fR" 8
848 .IX Item "[...]"
849 指定された範囲の任意の一文字にマッチする。
850 .ie n .IP "\*(C`[!...]\*(C'" 8
851 .el .IP "\f(CW\*(C`[!...]\*(C'\fR" 8
852 .IX Item "[!...]"
853 指定された範囲\fB以外\fRの任意の一文字にマッチする。
854 .ie n .IP "\*(C`\ex\*(C'" 8
855 .el .IP "\f(CW\*(C`\ex\*(C'\fR" 8
856 .IX Item "x"
857 \&\*(L"x\*(R" がどんな文字であっても、\*(L"x\*(R" そのものとして評価する。
858 この表記法は \*(L"*\*(R", \*(L"?\*(R", \*(L"[\*(R", \*(L"}\*(R"
859 といった特殊文字をエスケープするために使用される。
860 .PP
861 使用システムの \fIglob\fR\|(3) や \fIfnmatch\fR\|(3) 関数が
862 \&\s-1POSIX\s0 の文字クラスに対応しているなら、文字クラスも使用できる。
863 ただし、\f(CW\*(Aq:\*(Aq\fR 文字は、
864 \&\fIsudoers\fR で特別な意味を持っているので、エスケープしなければならない。
865 一例を上げると、
866 .PP
867 .Vb 1
868 \&    /bin/ls [[\e:alpha\e:]]*
869 .Ve
870 .PP
871 上記は、文字で始まるどんなファイル名にもマッチするだろう。
872 .PP
873 コマンドのパス名に使われたワイルドカードはフォワードスラッシュ ('/') 
874 に\fBマッチしない\fRことに注意してほしい。
875 だが、コマンドライン引き数とのマッチングでは、
876 ワイルドカードはスラッシュと\fBしっかりマッチする\fR。そこで、
877 .PP
878 .Vb 1
879 \&    /usr/bin/*
880 .Ve
881 .PP
882 というコマンドパスは、\fI/usr/bin/who\fR とマッチするが、
883 \&\fI/usr/bin/X11/xterm\fR とはマッチしないことになる。
884 .SS "ワイルドカード・ルールの例外"
885 .IX Subsection "Exceptions to wildcard rules"
886 上記ルールには次の例外がある。
887 .ie n .IP """""" 8
888 .el .IP "\f(CW``''\fR" 8
889 .IX Item """"""
890 \&\fIsudoers\fR ファイルのエントリにおいて、空文字列 \f(CW""\fR
891 が唯一のコマンドライン引き数だった場合は、
892 そのコマンドは引数を\fB付けずに\fR実行しなければならないことを意味する。
893 .SS "sudoers に他のファイルをインクルードする"
894 .IX Subsection "Including other files from within sudoers"
895 \&\f(CW\*(C`#include\*(C'\fR 命令や \f(CW\*(C`#includedir\*(C'\fR
896 命令を使えば、現在解析中の \fIsudoers\fR ファイルに、外部にあるほかの
897 \&\fIsudoers\fR ファイルをインクルードすることができる。
898 .PP
899 この方法を使えば、たとえば、
900 サイト全体で使用する \fIsudoers\fR ファイルのほかに、
901 マシンごとのローカルな \fIsudoers\fR ファイルを持つことができる。
902 ここでは、サイト全体の \fIsudoers\fR を \fI/etc/sudoers\fR とし、
903 マシンごとの方は \fI/etc/sudoers.local\fR とすることにしよう。
904 \&\fI/etc/sudoers\fR に \fI/etc/sudoers.local\fR をインクルードするには、
905 \&\fI/etc/sudoers\fR 中に次の行を書き込む。
906 .Sp
907 .RS 4
908 \&\f(CW\*(C`#include /etc/sudoers.local\*(C'\fR
909 .RE
910 .PP
911 \&\fBsudo\fR は解析中この行に出会うと、カレントファイル
912 (\fI/etc/sudoers\fR だ) の処理を一時中止し、処理の対象を
913 \&\fI/etc/sudoers.local\fR に切り替える。そして、
914 \&\fI/etc/sudoers.local\fR の末尾まで達したら、\fI/etc/sudoers\fR
915 の残りを処理するのだ。
916 インクルードされたファイルがさらに他のファイルをインクルードしてもよい。
917 インクルートのネストには 128 ファイルまでというハード・リミットがあって、
918 インクルードファイルのループが起きないようになっている。
919 .PP
920 インクルードファイルのパスが絶対パスでない場合は (すなわち、パスが
921 \&\fI/\fR で始まっていない場合は)、インクルードする側の sudoers
922 ファイルと同じディレクトリに、インクルードされるファイルも存在しなければならない。
923 たとえば、
924 \&\fI/etc/sudoers\fR に次のような行があったら、
925 .Sp
926 .RS 4
927 \&\f(CW\*(C`#include sudoers.local\*(C'\fR
928 .RE
929 .PP
930 インクルードされるファイルは、\fI/etc/sudoers.local\fR である。
931 (訳注: インクルードファイルのディレクトリ部分を省略できるのは、
932 sudo-1.8.4 以上である。sudo-1.8.3 以前では、絶対パスで指定しなければならない。) 
933 .PP
934 なお、ファイル名には \f(CW%h\fR エスケープが使える。
935 これはホスト名の短縮形を示している。
936 たとえば、マシンのホスト名が \*(L"xerxes\*(R" のとき、
937 .Sp
938 .RS 4
939 \&\f(CW\*(C`#include /etc/sudoers.%h\*(C'\fR
940 .RE
941 .PP
942 と書けば、\fBsudo\fR はファイル \fI/etc/sudoers.xerxes\fR
943 をインクルードすることになる。
944 .PP
945 \&\f(CW\*(C`#includedir\*(C'\fR 命令を使えば、
946 \&\fIsudo.d\fR ディレクトリを作っておいて、
947 システムのパッケージ管理者がパッケージをインストールする際に
948 \&\fIsudoers\fR のルールを記したファイルをそこに入れてやる、
949 といったことが可能になる。たとえば、
950 次のように書くと、
951 .Sp
952 .RS 4
953 \&\f(CW\*(C`#includedir /etc/sudoers.d\*(C'\fR
954 .RE
955 .PP
956 \&\fBsudo\fR は \fI/etc/sudoers.d\fR にあるファイルを一つづつ読み込む。
957 ただし、末尾が \f(CW\*(C`~\*(C'\fR だったり、
958 \&\f(CW\*(C`.\*(C'\fR 文字を含んでいたりするファイル名はスキップするが、
959 これは、パッケージマネージャやエディタが作った、
960 テンポラリファイルやバックアップファイルを読み込むような問題を起こさないためである。
961 ファイルは辞書順にソートされて、解析される。
962 すなわち、\fI/etc/sudoers.d/01_first\fR は \fI/etc/sudoers.d/10_second\fR
963 より前に解析されるということだ。ソートは辞書順であって、数値の順ではないので、
964 \&\fI/etc/sudoers.d/1_whoops\fR というファイルがあっても、
965 \&\fI/etc/sudoers.d/10_second\fR
966 \&\fBより後で\fRロードされることに注意してほしい。
967 ファイル名の先頭を 0 で埋めて数字の桁を揃えれば、
968 こうした問題を回避することができる。
969 .PP
970 気を付けてほしいが、
971 \&\f(CW\*(C`#include\*(C'\fR でインクルードされたファイルとは違って
972 (訳注: \fBvisudo\fR は \fI/etc/sudoers\fR を編集するとき、
973 \&\f(CW\*(C`#include\*(C'\fR で指定したファイルがあれば、続けてそれも編集する)、
974 \&\fBvisudo\fR が \f(CW\*(C`#includedir\*(C'\fR
975 で指定したディレクトリのファイルまで編集するのは、
976 シンタクスエラーを含むものがあるときだけである。
977 とは言え、\fBvisudo\fR を \f(CW\*(C`\-f\*(C'\fR オプション付きで実行して、
978 ディレクトリ中のファイルを直接編集することは可能だ。
979 .SS "ほかの特殊文字と予約語"
980 .IX Subsection "Other special characters and reserved words"
981 パウンド記号 ('#') はコメントを示すのに使用される
982 (例外は、#include 命令の一部であるときや、ユーザ名に関連して現れ、
983 その後に一個以上の数字が続くときであり、後者の場合は uid と見なされる)。
984 コメント記号とそれに続くテキストは、行末にいたるまで無視される。
985 .PP
986 予約語 \fB\s-1ALL\s0\fR は組込みのエイリアスであり、何に対してでもマッチする。
987 \&\fB\s-1ALL\s0\fR は、\f(CW\*(C`Cmnd_Alias\*(C'\fR,
988 \&\f(CW\*(C`User_Alias\*(C'\fR, \f(CW\*(C`Runas_Alias\*(C'\fR,
989 \&\f(CW\*(C`Host_Alias\*(C'\fR を代わりに使えるところなら、
990 どこでも使用できる。\fB\s-1ALL\s0\fR
991 という名前のエイリアスを自分で定義しようとしてはいけない。
992 組込みのエイリアスの方が、自分で作ったエイリアスより優先して使われるからだ。
993 \&\fB\s-1ALL\s0\fR の使用には危険が伴うことがあるのを忘れないでいただきたい。
994 なぜなら、\fB\s-1ALL\s0\fR をコマンドに関して使うと、
995 ユーザにシステム上の\fBどんな\fRコマンドでも実行することを許してしまうからである。
996 .PP
997 エクスクラメーションマーク ('!') は、エイリアスでも 
998 \&\f(CW\*(C`Cmnd\*(C'\fR の前でも論理 \fInot\fR 演算子として使用できる。
999 これによってある値を除外することが可能だ。しかしながら、
1000 組込みエイリアス \f(CW\*(C`ALL\*(C'\fR と \f(CW\*(C`!\*(C'\fR
1001 を組み合わせて、「二三のコマンド以外のすべての」コマンドの実行を
1002 あるユーザに許可しようとしても、
1003 思いどおりの動きになることはめったにないことに気を付けてほしい
1004 (下記の「セキュリティに関する注意点」を参照)。
1005 .PP
1006 長い行は、行末にバックスラッシュ ('\e') を置けば、継続することができる。
1007 .PP
1008 リストにおける要素間やユーザ設定における構文用特殊文字 
1009 ('=', ':', '(', ')') の前後に空白文字 (whitespace)を入れることは、
1010 任意である。
1011 .PP
1012 次の文字を単語 (ユーザ名とかホスト名とか) の一部として使うときは、
1013 バックスラッシュ ('\e') でエスケープしなければならない。
1014 \&'!', '=', ':', ',', '(', ')', '\e' がそれである。
1015 .SH "SUDOERS のオプション"
1016 .IX Header "SUDOERS OPTIONS"
1017 すでに説明したように、\fBsudo\fR の動作は 
1018 \&\f(CW\*(C`Default_Entry\*(C'\fR 行によって変更することができる。
1019 Defaults に与えることのできるパラメータについて、
1020 サポートされているもののすべてを、タイプ別にまとめて以下に列挙する。
1021 .PP
1022 \&\fBフラグ (真偽値)\fR:
1023 .IP "always_set_home" 16
1024 .IX Item "always_set_home"
1025 これを有効にすると、\fBsudo\fR は環境変数 \f(CW\*(C`HOME\*(C'\fR
1026 を変身対象ユーザの (\fB\-u\fR オプションが使用されないかぎり、root である)
1027 ホームディレクトリに設定する。事実上、暗黙のうちに
1028 \&\fBsudo\fR に \fB\-H\fR オプションが常に指定されることになるわけだ。
1029 気をつけてほしいのは、\fIenv_reset\fR オプションが有効になっている場合、
1030 \&\f(CW\*(C`HOME\*(C'\fR の値は (訳注: 変身対象ユーザのホームディレクトリに)
1031 すでに設定済みだということだ。だから、
1032 \&\fIalways_set_home\fR の指定に効果があるのは、
1033 \&\fIenv_reset\fR を無効に設定している場合か、
1034 \&\fIenv_keep\fR のリストに \f(CW\*(C`HOME\*(C'\fR が存在する場合のみである。
1035 このフラグはデフォルトでは \fIoff\fR である。
1036 .IP "authenticate" 16
1037 .IX Item "authenticate"
1038 これをセットすると、ユーザはコマンドの実行を許可される前に、パスワードで
1039 (あるいは、ほかの認証方法で) 自分が本人であることを証明しなければならなくなる。
1040 このデフォルト値は
1041 \&\f(CW\*(C`PASSWD\*(C'\fR や \f(CW\*(C`NOPASSWD\*(C'\fR タグで変更できる。
1042 このフラグはデフォルトでは \fIon\fR である。
1043 .IP "closefrom_override" 16
1044 .IX Item "closefrom_override"
1045 これをセットすると、ユーザが \fBsudo\fR の \fB\-C\fR
1046 オプションを使用できるようになる。\fB\-C\fR オプションというのは、
1047 \&\fBsudo\fR が開いているファイルを閉じていくとき、
1048 どのファイル・ディスクリプタから閉じていくかという、
1049 デフォルトの始点を変更するものだ。このフラグはデフォルトでは \fIoff\fR である。
1050 .IP "compress_io" 16
1051 .IX Item "compress_io"
1052 これをセットすると、
1053 \&\fBsudo\fR がコマンドの入出力のログを取るように設定されている場合に、
1054 入出力のログを \fBzlib\fR を使って、圧縮することになる。
1055 \&\fBsudo\fR が \fBzlib\fR をサポートするようにコンパイルされている場合、
1056 このフラグはデフォルトで \fIon\fR である。
1057 .IP "env_editor" 16
1058 .IX Item "env_editor"
1059 これをセットすると、
1060 \&\fBvisudo\fR はデフォルトのエディタ・リストを利用する前に、
1061 環境変数 \s-1EDITOR\s0 や \s-1VISUAL\s0 の値を使用するようになる。
1062 これがセキュリティホールになりかねないことに注意してほしい。
1063 ユーザが root として任意のコマンドを、
1064 ログに記録されることなく実行できるようになるからだ。
1065 こうした環境変数を利用するときの、
1066 \&\fIenv_editor\fR を有効にするよりも安全な方法は、
1067 \&\fIsudoers\fR ファイルの \f(CW\*(C`editor\*(C'\fR オプションに
1068 コロンで区切ったエディタのリストを書いておくことだ。そうすれば、
1069 \&\fBvisudo\fR が \s-1EDITOR\s0 や \s-1VISUAL\s0 を使うのは、それが
1070 \&\f(CW\*(C`editor\*(C'\fR オプションに指定した値とマッチしたときだけになる。
1071 このフラグはデフォルトでは \fIoff\fR である。
1072 .IP "env_reset" 16
1073 .IX Item "env_reset"
1074 これをセットすると、\fBsudo\fR は最小限の環境でコマンドを実行することになる。
1075 その環境には、以下の変数が含まれる。すなわち、
1076 \&\f(CW\*(C`TERM\*(C'\fR, \f(CW\*(C`PATH\*(C'\fR, \f(CW\*(C`HOME\*(C'\fR,
1077 \&\f(CW\*(C`MAIL\*(C'\fR, \f(CW\*(C`SHELL\*(C'\fR, \f(CW\*(C`LOGNAME\*(C'\fR,
1078 \&\f(CW\*(C`USER\*(C'\fR, \f(CW\*(C`USERNAME\*(C'\fR、
1079 及び \f(CW\*(C`SUDO_*\*(C'\fR という変数。
1080 これに、\fBsudo\fR を起動するユーザの環境にある変数のうち、
1081 \&\f(CW\*(C`env_keep\*(C'\fR や \f(CW\*(C`env_check\*(C'\fR
1082 のリストにマッチするものが加わり、さらに、
1083 \&\fIenv_file\fR オプションによって指定されたファイルがあれば、
1084 そのファイルに記載されたすべての変数が追加される。
1085 \&\f(CW\*(C`env_keep\*(C'\fR や \f(CW\*(C`env_check\*(C'\fR
1086 のリストにデフォルトでどんな変数が存在するかは、root ユーザが
1087 \&\fBsudo\fR に \fI\-V\fR オプションを付けて実行すれば、見ることができる。
1088 なお、\fIsecure_path\fR オプションが設定されているときは、
1089 その値が環境変数 \f(CW\*(C`PATH\*(C'\fR として使用される。
1090 このフラグはデフォルトで \fIon\fR である。
1091 .IP "fast_glob" 16
1092 .IX Item "fast_glob"
1093 通常 \fBsudo\fR はパス名のマッチングをするとき、\fIglob\fR\|(3)
1094 関数を使用して、シェル・スタイルのワイルドカード展開 (glob) を行う。
1095 しかし、\fIglob\fR\|(3) はファイルシステムにアクセスするので、
1096 指定パターンによっては、作業を完了するまでに時間がかかることがある。
1097 必要な時にマウントするようになっている (つまりオートマウントの)
1098 ネットワーク・ファイル・システムを参照するときは、とりわけ時間がかかる。
1099 \&\fIfast_glob\fR オプションを指定すると、
1100 \&\fBsudo\fR が \fIfnmatch\fR\|(3) 関数を使うようになるが、
1101 こちらの関数はマッチングの際にファイルシステムにアクセスしない。
1102 \&\fIfast_glob\fR の欠点は、\fI./ls\fR や \fI../bin/ls\fR
1103 のような相対パスに対するマッチができないことである。
1104 そのため、ワイルドカードを含むパス名が、否定演算子 \f(CW\*(Aq!\*(Aq\fR
1105 と一緒に使われている場合に、セキュリティ上の問題が生じるおそれがある。
1106 そうしたルールは簡単に迂回できるからだ。それ故、\fIsudoers\fR
1107 にワイルドカードを含むパス名を否定するルールが存在する場合は、
1108 このオプションを使ってはいけない。このフラグはデフォルトでは \fIoff\fR である。
1109 .IP "fqdn" 16
1110 .IX Item "fqdn"
1111 \&\fIsudoers\fR ファイルで完全修飾ホスト名を使用したかったら、
1112 このフラグをセットするとよい。すなわち、myhost ではなく、
1113 myhost.mydomain.edu を使いたい場合だ。そのときでも、そうしたければ、
1114 短縮形も使える (両方を混ぜて使うこともできる)。気を付けてほしいのは、
1115 \&\fIfqdn\fR を 有効にすると、
1116 \&\fBsudo\fR は \s-1DNS\s0 へ問い合わせをしなければならないので、
1117 \&\s-1DNS\s0 サービスが稼働していない場合、
1118 \&\fBsudo\fR が使えなくなるかもしれないということだ
1119 (たとえば、マシンがネットワークに接続していない場合)。
1120 もう一つ気を付けるべきことがある。
1121 \&\s-1DNS\s0 が知っているホストの正式名を使わなければならないということだ。
1122 言い換えれば、ホストのエイリアス (\f(CW\*(C`CNAME\*(C'\fR のエントリ)
1123 を使ってはいけない。パフォーマンスの問題もあるし、
1124 \&\s-1DNS\s0 からエイリアスをすべて取得する方法はないからでもある。
1125 マシンのホスト名が (\f(CW\*(C`hostname\*(C'\fR コマンドで返ってくるものが)
1126 すでに完全修飾名になっているならば、\fIfqdn\fR をセットする必要はないだろう。
1127 このフラグはデフォルトでは \fIoff\fR である。
1128 .IP "ignore_dot" 16
1129 .IX Item "ignore_dot"
1130 これをセットすると、環境変数 \f(CW\*(C`PATH\*(C'\fR 中に '.' や ''
1131 (カレントディレクトリを意味する) があっても、\fBsudo\fR はそれを無視する。
1132 \&\f(CW\*(C`PATH\*(C'\fR そのものは変更されない。このフラグは
1133 デフォルトでは \fIoff\fR である。
1134 .IP "ignore_local_sudoers" 16
1135 .IX Item "ignore_local_sudoers"
1136 \&\s-1LDAP\s0 の方でこのフラグをセットすると、
1137 \&\fI/etc/sudoers\fR の解析がスキップされる。
1138 このフラグは、ローカルにある sudoers ファイルの使用を禁じて、
1139 \&\s-1LDAP\s0 のみを使うようにしたい企業のためにある。
1140 たちの悪いオペレータが \fI/etc/sudoers\fR に手を加えて、
1141 自分の権限を増やそうとしても、そうした悪だくみは阻止されるわけだ。
1142 このオプションが設定されているときは、
1143 \&\fI/etc/sudoers\fR ファイルは存在する必要すらない。このオプションは、
1144 \&\s-1LDAP\s0 中に、マッチする特定のエントリが存在しなかったときに、
1145 いかに振舞うべきかを \fBsudo\fR に指示するものだから、
1146 これを指定する sudoOption は、
1147 \&\f(CW\*(C`cn=defaults\*(C'\fR のセクションになければ意味がない。
1148 このフラグはデフォルトでは \fIoff\fR である。
1149 .IP "insults" 16
1150 .IX Item "insults"
1151 これをセットすると、不正なパスワードが入力されたとき、
1152 \&\fBsudo\fR がユーザに悪態をつく。このフラグはデフォルトでは \fIoff\fR
1153 である。
1154 .IP "log_host" 16
1155 .IX Item "log_host"
1156 これをセットすると、ホスト名が (syslog 経由ではない) \fBsudo\fR の
1157 ログファイルに記録されることになる。このフラグはデフォルトでは \fIoff\fR
1158 である。
1159 .IP "log_input" 16
1160 .IX Item "log_input"
1161 これをセットすると、\fBsudo\fR は \fI擬似 tty\fR でコマンドを実行し、
1162 ユーザの入力をすべてログに取ることになる。入出力がリダイレクトされているとか、
1163 コマンドがパイプラインの一部だとかいう理由で、標準入力がユーザの tty
1164 に結びつけられていない場合も、その入力がキャプチャーされて、
1165 独立したログファイルに書き込まれることに変わりはない。
1166 .Sp
1167 入力は、\fIiolog_dir\fR オプションで指定したディレクトリに
1168 (デフォルトでは \fI/var/log/sudo-io\fR)、一意なセッション \s-1ID\s0
1169 を使って記録される。このセッション \s-1ID\s0 は \fBsudo\fR
1170 の通常のログのエントリに、\fITSID=\fR に続く値として書き込まれているものだ。
1171 \&\fIiolog_file\fR オプションを使えば、
1172 セッション \s-1ID\s0 の形式を変更することができる。
1173 .Sp
1174 ユーザの入力には、パスワードのような (たとえ、
1175 画面にエコーされることはないにしても) 秘密情報が含まれていることがある。
1176 そういった情報も、暗号化されずに、
1177 ログファイルに記録されることに注意してほしい。
1178 たいていの場合、\fIlog_output\fR を使って、
1179 コマンドの出力をログに記録するだけで十分用が足りる。
1180 .IP "log_output" 16
1181 .IX Item "log_output"
1182 これをセットすると、\fBsudo\fR は \fI擬似 tty\fR でコマンドを実行し、
1183 スクリーンに送られたすべての出力をログに取ることになる。
1184 \&\fIscript\fR\|(1) コマンドと似たことをやるわけだ。
1185 入出力がリダイレクトされているとか、
1186 コマンドがパイプラインの一部だとかいう理由で、標準出力や標準エラーがユーザの
1187 tty に結びつけられていない場合も、その出力がキャプチャーされて、
1188 それぞれ独立したログファイルに書き込まれることに変わりはない。
1189 .Sp
1190 出力は、\fIiolog_dir\fR オプションで指定したディレクトリに
1191 (デフォルトでは \fI/var/log/sudo-io\fR)、一意なセッション \s-1ID\s0
1192 を使って記録される。このセッション \s-1ID\s0 は \fBsudo\fR
1193 の通常のログのエントリに 、\fITSID=\fR に続く値として書き込まれているものだ。
1194 \&\fIiolog_file\fR オプションを使えば、
1195 セッション \s-1ID\s0 の形式を変更することができる。
1196 .Sp
1197 出力のログは \fIsudoreplay\fR\|(8) コマンドを使って、見ることができる。
1198 また、このコマンドは、利用できるログをリストしたり、
1199 検索したりするのにも使用できる。
1200 .IP "log_year" 16
1201 .IX Item "log_year"
1202 これをセットすると、四桁の年が (syslog 経由ではない) \fBsudo\fR
1203 のログファイルに記入されることになる。このフラグはデフォルトでは \fIoff\fR 
1204 である。
1205 .IP "long_otp_prompt" 16
1206 .IX Item "long_otp_prompt"
1207 \&\fBS/Key\fR や \fB\s-1OPIE\s0\fR のような One Time Password
1208 (\s-1OTP\s0) スキームを採用しているときにこれを有効にすると、
1209 チャレンジをローカルウィンドウにカット・アンド・ペーストしやすいように、
1210 二行のプロンプトが使用される。デフォルトのプロンプトほど見栄えはよくないが、
1211 こちらの方が便利だと思う人もいる。デフォルトではこのフラグは \fIoff\fR である。
1212 .IP "mail_always" 16
1213 .IX Item "mail_always"
1214 ユーザが \fBsudo\fR を実行するたびに、\fImailto\fR ユーザにメールを送る。
1215 このフラグはデフォルトでは \fIoff\fR である。
1216 .IP "mail_badpass" 16
1217 .IX Item "mail_badpass"
1218 \&\fBsudo\fR を実行するユーザが正しいパスワードを入力しないと、
1219 \&\fImailto\fR ユーザにメールを送る。このフラグはデフォルトでは 
1220 \&\fIoff\fR である。
1221 .IP "mail_no_host" 16
1222 .IX Item "mail_no_host"
1223 これをセットすると、\fBsudo\fR を起動したユーザが \fIsudoers\fR
1224 ファイルに記載されているものの、
1225 使用中のホストでコマンドの実行を許可されていない場合、
1226 \&\fImailto\fR ユーザにメールを送付する。このフラグはデフォルトでは 
1227 \&\fIoff\fR である。
1228 .IP "mail_no_perms" 16
1229 .IX Item "mail_no_perms"
1230 これをセットすると、\fBsudo\fR を起動したユーザが
1231 \&\fBsudo\fR の使用を許可されているが、
1232 実行しようとしているコマンドが \fIsudoers\fR ファイルの
1233 そのユーザのエントリに登録されていないか、明示的に禁止されている場合、
1234 \&\fImailto\fR ユーザにメールを送付する。このフラグはデフォルトでは 
1235 \&\fIoff\fR である。
1236 .IP "mail_no_user" 16
1237 .IX Item "mail_no_user"
1238 これをセットすると、\fBsudo\fR を起動したユーザが \fIsudoers\fR
1239 ファイルに記載されていない場合、\fImailto\fR ユーザにメールを送付する。
1240 このフラグはデフォルトでは \fIon\fR である。
1241 .IP "noexec" 16
1242 .IX Item "noexec"
1243 これをセットすると、\fBsudo\fR を通して実行されるすべてのコマンドが、
1244 \&\f(CW\*(C`EXEC\*(C'\fR タグで無効にされないかぎり、あたかも 
1245 \&\f(CW\*(C`NOEXEC\*(C'\fR タグが設定されているかのごとく振舞うようになる。
1246 前述の「\fI\s-1NOEXEC\s0 と \s-1EXEC\s0\fR」の説明、
1247 および、このマニュアルの終わりの方にある「シェル・エスケープを防止する」
1248 というセクションを参照してほしい。
1249 このフラグはデフォルトでは \fIoff\fR である。
1250 .IP "path_info" 16
1251 .IX Item "path_info"
1252 通常 \fBsudo\fR は、環境変数 \f(CW\*(C`PATH\*(C'\fR
1253 中にコマンドが見付からないと、ユーザにそのことを知らせる。これを利用すれば、
1254 一般ユーザにアクセス権のない実行ファイルのありかについて
1255 情報を収集できるという理由から、
1256 この動作を無効にしたいサイトもあるかもしれない。
1257 その場合の欠点は、実行ファイルが単にユーザの \f(CW\*(C`PATH\*(C'\fR
1258 中になかっただけの場合でも、実行の許可がないと \fBsudo\fR
1259 がユーザに告げることになって、実情がわかりにくいかもしれないことである。
1260 このフラグはデフォルトでは \fIon\fR である。
1261 .IP "passprompt_override" 16
1262 .IX Item "passprompt_override"
1263 通常、\fIpassprompt\fR
1264 オプションによって指定されたパスワードプロンプトが使用されるのは、
1265 \&\s-1PAM\s0 のようなシステムが用意しているパスワードプロンプトが、
1266 \&\*(L"Password:\*(R" という文字列にマッチしているときだけである。
1267 \&\fIpassprompt_override\fR をセットすると、
1268 \&\fIpassprompt\fR が無条件で使われることになる。
1269 このフラグはデフォルトでは \fIoff\fR である。
1270 .IP "preserve_groups" 16
1271 .IX Item "preserve_groups"
1272 デフォルトでは、\fBsudo\fR は所属グループの初期値として、
1273 変身対象ユーザが所属しているグループのリストを設定する。
1274 \&\fIpreserve_groups\fR をセットすると、
1275 \&\fBsudo\fR を実行するユーザの所属グループのリストが、
1276 変更されずにそのまま維持される。とは言え、実グループ ID や実効グループ ID
1277 が変身対象ユーザのそれに設定されることに変わりはない。
1278 このフラグはデフォルトでは \fIoff\fR である。
1279 .IP "pwfeedback" 16
1280 .IX Item "pwfeedback"
1281 ほかのたいていの Unix プログラムと同様、
1282 \&\fBsudo\fR はパスワードを読み込むとき、デフォルトでは、ユーザが Return
1283 (または Enter) キーを押すまで、エコーを off にする。
1284 この動作にとまどうユーザが存在する。
1285 彼らには \fBsudo\fR が急に反応しなくなったように見えるのだ。
1286 \&\fIpwfeedback\fR をセットすると、ユーザがキーを押すたびに、
1287 \&\fBsudo\fR が目に見える反応を返すようになる。
1288 これには、セキュリティ上の問題があることに注意してほしい。側で見ている人が、
1289 打ち込まれたパスワードの文字数を特定できてしまうかもしれないのだ。
1290 このフラグはデフォルトでは \fIoff\fR である。
1291 .IP "requiretty" 16
1292 .IX Item "requiretty"
1293 これをセットすると、\fBsudo\fR が実行されるのは、ユーザが実際の tty
1294 にログインしたときだけになる。すなわち、\fBsudo\fR を実行できるのは、
1295 ログイン・セッションからだけであって、
1296 \&\fIcron\fR\|(8) や cgi-bin スクリプトといった、
1297 ほかの方法を介して実行することはできないということだ。このフラグは、
1298 デフォルトでは \fIoff\fR である。
1299 .IP "root_sudo" 16
1300 .IX Item "root_sudo"
1301 これをセットすると、root も \fBsudo\fR を実行できるようになる。
1302 このフラグを無効にすると、ユーザがたとえば \f(CW"sudo sudo /bin/sh"\fR
1303 といったように \fBsudo\fR コマンドを\fB連鎖的に\fR使って、
1304 ルートシェルを獲得することができなくなる。ところで、
1305 \&\fIroot_sudo\fR が off だと、root が \fBsudoedit\fR
1306 まで実行できなくなることに注意してほしい。
1307 \&\fIroot_sudo\fR を無効にしても、セキュリティが実際に向上するわけではない。
1308 このフラグが存在しているのは、もっぱら歴史的な理由からなのだ。
1309 このフラグはデフォルトでは \fIon\fR である。
1310 .IP "rootpw" 16
1311 .IX Item "rootpw"
1312 これをセットすると、\fBsudo\fR はプロンプトで、起動したユーザのパスワードではなく、
1313 root のパスワードを要求するようになる。
1314 このフラグはデフォルトでは \fIoff\fR である。
1315 .IP "runaspw" 16
1316 .IX Item "runaspw"
1317 これをセットすると、\fBsudo\fR はプロンプトで、起動したユーザのパスワードではなく、
1318 \&\fIsudoers\fR ファイルの
1319 \&\fIrunas_default\fR オプションで指定しているユーザーの
1320 (デフォルトでは \f(CW\*(C`root\*(C'\fR である) パスワードを要求する。
1321 このフラグはデフォルトでは \fIoff\fR である。
1322 .IP "set_home" 16
1323 .IX Item "set_home"
1324 これが有効なときに \fBsudo\fR を \fB\-s\fR オプション付きで起動すると、
1325 環境変数 \f(CW\*(C`HOME\*(C'\fR が変身対象ユーザの 
1326 (\fB\-u\fR オプションが使用されないかぎり、それは root である)
1327 ホームディレクトリに設定される。すなわち、 \fB\-s\fR オプションが
1328 \&\fB\-H\fR オプションを事実上兼ねることになるわけだ。
1329 気をつけてほしいのは、\fIenv_reset\fR が有効な場合、\f(CW\*(C`HOME\*(C'\fR
1330 はすでに (訳注: 変身対象ユーザのホームディレクトリに) 設定済みだということだ。
1331 だから、\fIset_home\fR の効果があるのは、
1332 \&\fIenv_reset\fR が無効に設定されているか、 \fIenv_keep\fR のリストに
1333 \&\f(CW\*(C`HOME\*(C'\fR が存在する場合のみである。
1334 このフラグはデフォルトでは \fIoff\fR である。
1335 .IP "set_logname" 16
1336 .IX Item "set_logname"
1337 通常 \fBsudo\fR は環境変数 \f(CW\*(C`LOGNAME\*(C'\fR,
1338 \&\f(CW\*(C`USER\*(C'\fR, \f(CW\*(C`USERNAME\*(C'\fR
1339 を変身対象ユーザの名前 (\fB-u\fR オプションが指定されていない場合、
1340 普通は root) にセットする。しかし、プログラムによっては (たとえば、
1341 \&\s-1RCS\s0 リビジョンコントロールシステムがその一つだが)
1342 ユーザが実際には誰であるかを判定するのに \f(CW\*(C`LOGNAME\*(C'\fR
1343 を使用していることがあり、そのために、この振舞いを変更したい場合もある。
1344 set_logname オプションに '!' を付けて否定することで、それができる。
1345 なお \fIenv_reset\fR オプションを無効にしていない場合、
1346 \&\fIenv_keep\fR リストの項目が \fIset_logname\fR
1347 による値を上書きすることになるので、注意してほしい。
1348 このフラグはデフォルトでは \fIon\fR である。
1349 .IP "set_utmp" 16
1350 .IX Item "set_utmp"
1351 これが有効になっていると、\fBsudo\fR は擬似 tty を割り当てるときに、
1352 utmp (または utmpx) ファイルにエントリを作成する。
1353 \&\fBsudo\fR によって擬似 tty の割り当てが行われるのは、
1354 \&\fIlog_input\fR, \fIlog_output\fR, \fIuse_pty\fR
1355 といったフラグが有効になっているときである。
1356 デフォルトでは、新しいエントリは、そのユーザの utmp エントリが存在すれば、
1357 そのコピーであり、tty, time, type, pid フィールドが更新される。
1358 このフラグはデフォルトでは \fIon\fR である。
1359 .IP "setenv" 16
1360 .IX Item "setenv"
1361 これをセットすると、ユーザがコマンドラインで \fB\-E\fR オプションを指定して、
1362 \&\fIenv_reset\fR オプションを無効にできるようになる。
1363 さらに、コマンドラインから設定する環境変数が 
1364 \&\fIenv_check\fR, \fIenv_delete\fR, \fIenv_keep\fR による制限を受けなくなる。
1365 それ故、そのようなやり方で変数を設定することを許可するのは、
1366 信用できるユーザのみに限るべきだ。このフラグはデフォルトでは \fIoff\fR である。
1367 .IP "shell_noargs" 16
1368 .IX Item "shell_noargs"
1369 これがセットされているとき、\fBsudo\fR を引き数なしで起動すると、
1370 \&\fBsudo\fR は \fB\-s\fR オプションが指定されたかのように振舞う。
1371 すなわち、root ユーザとしてシェルを実行するわけだ (シェルは、環境変数
1372 \f(CW\*(C`SHELL\*(C'\fR がセットされていれば、それによって決まるし、
1373 セットされていなければ、\fBsudo\fR を起動したユーザの
1374 /etc/passwd エントリに登録されたものになる)。このフラグはデフォルトでは
1375 \&\fIoff\fR である。
1376 .IP "stay_setuid" 16
1377 .IX Item "stay_setuid"
1378 通常 \fBsudo\fR がコマンドを実行するとき、実 UID と実効 UID
1379 は変身対象ユーザ (デフォルトでは root) のものにセットされる。
1380 このオプションは、その振舞いを変更して、\fBsudo\fR を起動したユーザの
1381 \&\s-1UID\s0 が、そのまま実 \s-1UID\s0 として残るようにする。言い換えると、
1382 \&\fBsudo\fR が setuid ラッパーとして動作するようになるわけだ。
1383 プログラムを setuid で動かすと、危険をもたらしかねないという理由から、
1384 ある種の機能を使えないようにしているシステムでは、
1385 このオプションが役に立つかもしれない。このオプションは、\fIsetreuid()\fR
1386 関数や \fIsetresuid()\fR 関数を持っているシステムでのみ有効である。
1387 このフラグはデフォルトでは \fIoff\fR である。
1388 .IP "targetpw" 16
1389 .IX Item "targetpw"
1390 これをセットすると、\fBsudo\fR はプロンプトで、
1391 起動したユーザのパスワードではなく、
1392 \&\fB\-u\fR オプションで指定されたユーザ (デフォルトでは root)
1393 のパスワードを要求することになる。それに加えて、
1394 タイムスタンプ・ファイルの名前に変身対象ユーザの名前が含まれるようになる。
1395 このフラグを設定をすると、\fB\-u\fR オプションの引き数として、
1396 passwd データベースに登録されていない uid が使えなくなることに注意してほしい。
1397 このフラグはデフォルトでは \fIoff\fR である。
1398 .IP "tty_tickets" 16
1399 .IX Item "tty_tickets"
1400 これをセットすると、ユーザは tty ごとに認証をしなければならなくなる。
1401 このフラグが有効な場合、
1402 \&\fBsudo\fR はユーザのタイムスタンプ・ディレクトリにある、
1403 ユーザがログインしている tty
1404 に対応する名前のファイルをタイムスタンプに使用する。
1405 それに対して、このフラグが無効な場合は、
1406 ユーザのタイムスタンプ・ディレクトリそのもののタイムスタンプが使用されるのである。
1407 このフラグはデフォルトでは \fIon\fR である。
1408 .IP "umask_override" 16
1409 .IX Item "umask_override"
1410 これをセットすると、\fBsudo\fR は umask を \fIsudoers\fR の
1411 umask オプションで指定されたとおりの値に、変更を加えることなく設定する。
1412 このことによって、ユーザ自身の umask 値よりもっと緩やかな umask 値を
1413 \&\fIsudoers\fR で指定することが可能になる。
1414 \&\fBsudo\fR の昔の動作と同じになるわけだ。
1415 \&\fIumask_override\fR をセットしない場合、
1416 現在の \fBsudo\fR は umask を、ユーザの umask 値と \fIsudoers\fR で指定した
1417 umask 値とのビット和に設定することになっている。
1418 このフラグはデフォルトでは \fIoff\fR である。
1419 .if \n(LC \{\
1420 .IP "use_loginclass" 16
1421 .IX Item "use_loginclass"
1422 これをセットすると、\fBsudo\fR は、
1423 変身対象ユーザのログインクラスが存在するならば、
1424 それに対して指定されたデフォルトの値を使うことになる。
1425 このフラグは、\fBsudo\fR を \-\-with\-logincap オプションを付けて 
1426 configure したときのみ利用することができる。このフラグはデフォルトでは 
1427 \&\fIoff\fR である。
1428 \}
1429 .IP "use_pty" 16
1430 .IX Item "use_pty"
1431 これをセットすると、\fBsudo\fR は入出力のロギングが行われていないときでも、
1432 擬似 tty でコマンドを実行することになる。
1433 \&\fBsudo\fR によって実行された悪意のあるプログラムが、
1434 バックグラウンド・プロセスをフォークし、
1435 そのプロセスが、メインプログラムの実行が終了した後でも、
1436 ユーザのターミナルデバイスを握って離さないといったことが考えられる。
1437 このオプションを使えば、そういったことが不可能になる。
1438 このフラグはデフォルトでは \fIoff\fR である。
1439 .IP "utmp_runas" 16
1440 .IX Item "utmp_runas"
1441 これをセットすると、\fBsudo\fR は utmp (または utmpx) ファイルを更新するとき、
1442 変身対象ユーザの名前を記録するようになる。\fBsudo\fR はデフォルトでは、
1443 \&\fBsudo\fR を実行したユーザの名前を記録するのだ。
1444 このフラグはデフォルトでは \fIoff\fR である。
1445 .IP "visiblepw" 16
1446 .IX Item "visiblepw"
1447 デフォルトでは、ユーザがパスワードを入力しなければならないときに、
1448 使用しているターミナルでエコーの抑制ができなかったら、
1449 \&\fBsudo\fR は実行を拒否するようになっている。
1450 これに対し、\fIvisiblepw\fR フラグが設定されていると、
1451 パスワードがスクリーンに表示されてしまう場合でも、
1452 \&\fBsudo\fR はプロンプトを出して、パスワードを求める。この動作によって、
1453 \&\fIrsh\fR\|(1) は tty を割り当てないにもかかわらず、
1454 \&\f(CW"rsh somehost sudo ls"\fR といった操作の実行が可能になるわけだ。
1455 このフラグはデフォルトでは \fIoff\fR である。
1456 .PP
1457 \&\fB整数\fR:
1458 .IP "closefrom" 16
1459 .IX Item "closefrom"
1460 \&\fBsudo\fR はコマンドを実行する前に、標準入力、標準出力、標準エラー
1461 (すなわち、ファイルディスクリプタ 0\-2 である) を除いて、
1462 開いているすべてのファイル・ディスクリプタをクローズする。
1463 \&\fIclosefrom\fR オプションを使用すると、
1464 0\-2 以外のどのファイル・ディスクリプタから閉じて行くかを指定することができる。
1465 デフォルトは \f(CW3\fR である。
1466 .IP "passwd_tries" 16
1467 .IX Item "passwd_tries"
1468 \&\fBsudo\fR が「失敗」をログに記録して終了する前に、
1469 ユーザがパスワードを入力できる回数。デフォルトは \f(CW\*(C`3\*(C'\fR。
1470 .PP
1471 \&\fB真偽値としても使用できる整数\fR:
1472 .IP "loglinelen" 16
1473 .IX Item "loglinelen"
1474 \&\fBsudo\fR 用ログファイルの一行あたりの文字数。
1475 この値は、ログファイルを見やすくするために改行する位置を決めるのに使用される。
1476 この値は、syslog 経由のログファイルには影響せず、
1477 直接ファイルにログを書き出すときのみ効果がある。デフォルトは
1478 \&\f(CW\*(C`80\*(C'\fR である (改行をしないようにするには、値を 0 にするか、
1479 頭に '!' を付けて、このオプションを否定する)。
1480 .IP "passwd_timeout" 16
1481 .IX Item "passwd_timeout"
1482 \&\fBsudo\fR のパスワードプロンプトが時間切れになるまでの分単位の時間。
1483 \&\f(CW0\fR を指定すると、時間切れなしになる。
1484 分よりももっと細かい時間を指定したいときは、(\f(CW2.5\fR のように)
1485 小数点以下を付けることもできる。デフォルトは \f(CW\*(C`5\*(C'\fR である。
1486 .IP "timestamp_timeout" 16
1487 .IX Item "timestamp_timeout"
1488 \&\fBsudo\fR がパスワードを再び要求するようになるまでの時間を
1489 分単位で指定する。分よりももっと細かい時間を指定したいときは、
1490 (\f(CW2.5\fR のように) 小数点以下を付けることもできる。
1491 デフォルトでは \f(CW\*(C`5\*(C'\fR である。
1492 これを \f(CW0\fR にセットすると、毎回パスワードを要求するようになる。
1493 \&\f(CW0\fR より小さい値にセットした場合は、
1494 ユーザのタイムスタンプが期限切れになることがない。
1495 ユーザが \f(CW\*(C`sudo \-v\*(C'\fR と \f(CW\*(C`sudo \-k\*(C'\fR
1496 を実行することによって、タイムスタンプを自分で作ったり、
1497 消したりできるようにしたかったら、この手を使えばよい。
1498 .IP "umask" 16
1499 .IX Item "umask"
1500 コマンドを実行するときに使用する umask 値。
1501 ユーザの umask 値をそのまま使いたかったら、'!' を頭に付けて、
1502 このオプションを否定するか、0777 にセットすればよい。
1503 このオプションの値が 0777 以外の場合、実際に使用される umask 値は、
1504 ユーザの umask 値と \fIumask\fR オプションの値とのビット和であり、
1505 後者のデフォルトは \f(CW\*(C`0022\*(C'\fR である。
1506 このことによって、\fBsudo\fR がコマンドを実行するときの umask 値が、
1507 ユーザの umask 値より低くならないようになっているわけだ。
1508 \&\s-1PAM\s0 を使用しているシステムでは、 \s-1PAM\s0 のデフォルト設定で
1509 umask 値を指定することができるが、その場合は、それが \fIsudoers\fR
1510 で指定した値を上書きすることに注意してほしい。
1511 .PP
1512 \&\fB文字列\fR:
1513 .IP "badpass_message" 16
1514 .IX Item "badpass_message"
1515 ユーザが不正なパスワードを入力したときに表示するメッセージ。
1516 \&\fIinsults\fR フラグが有効になっていないかぎり、
1517 デフォルトは「\f(CW\*(C`Sorry, try again.\*(C'\fR」である。
1518 .IP "editor" 16
1519 .IX Item "editor"
1520 \&\fBvisudo\fR で使用できるエディタをコロン (':') で区切ったリスト。
1521 \&\fBvisudo\fR は、可能ならば、
1522 ユーザの \s-1EDITOR\s0 環境変数と一致したエディタを選択する。
1523 それができないときは、このリストにあるエディタで、
1524 実際に存在し、かつ実行可能な最初のエディタを使用する。デフォルトは
1525 \&\f(CW"/usr/bin/vi"\fR である。
1526 .IP "iolog_dir" 16
1527 .IX Item "iolog_dir"
1528 このオプションの値をトップレベル・ディレクトリにして、
1529 入出力ログを格納するディレクトリのパス名が構成される。
1530 この値が使用されるのは、\fIlog_input\fR や
1531 \&\fIlog_output\fR オプションが有効になっているときや、
1532 \&\f(CW\*(C`LOG_INPUT\*(C'\fR や \f(CW\*(C`LOG_OUTPUT\*(C'\fR
1533 タグがコマンドに付いているときだけである。このディレクトリ以下に、
1534 (セッション ID が連番ならば) セッションの連番が格納されることになるわけだ。
1535 デフォルトは \f(CW"/var/log/sudo-io"\fR である。
1536 .Sp
1537 以下のパーセント (`\f(CW\*(C`%\*(C'\fR') エスケープシーケンスが使用できる。
1538 .RS 16
1539 .ie n .IP "\*(C`%{seq}\*(C'" 4
1540 .el .IP "\f(CW\*(C`%{seq}\*(C'\fR" 4
1541 .IX Item "%{seq}"
1542 単純に増加する 36 進数の連続番号に展開される。たとえば、0100A5 といった番号であり、
1543 二桁づつ使って新しいディレクトリを作っていく。この場合なら、
1544 \&\fI01/00/A5\fR といった具合だ。
1545 .ie n .IP "\*(C`%{user}\*(C'" 4
1546 .el .IP "\f(CW\*(C`%{user}\*(C'\fR" 4
1547 .IX Item "%{user}"
1548 \&\fBsudo\fR を実行するユーザーのログイン名に展開される。
1549 .ie n .IP "\*(C`%{group}\*(C'" 4
1550 .el .IP "\f(CW\*(C`%{group}\*(C'\fR" 4
1551 .IX Item "%{group}"
1552 \&\fBsudo\fR を実行するユーザーの実グループ \s-1ID\s0 の名前に展開される。
1553 .ie n .IP "\*(C`%{runas_user}\*(C'" 4
1554 .el .IP "\f(CW\*(C`%{runas_user}\*(C'\fR" 4
1555 .IX Item "%{runas_user}"
1556 変身対象ユーザのログイン名に展開される (たとえば root)。
1557 .ie n .IP "\*(C`%{runas_group}\*(C'" 4
1558 .el .IP "\f(CW\*(C`%{runas_group}\*(C'\fR" 4
1559 .IX Item "%{runas_group}"
1560 変身対象ユーザのグループ名に展開される (たとえば wheel)。
1561 .ie n .IP "\*(C`%{hostname}\*(C'" 4
1562 .el .IP "\f(CW\*(C`%{hostname}\*(C'\fR" 4
1563 .IX Item "%{hostname}"
1564 ドメイン名なしのローカル・ホスト名に展開される。
1565 .ie n .IP "\*(C`%{command}\*(C'" 4
1566 .el .IP "\f(CW\*(C`%{command}\*(C'\fR" 4
1567 .IX Item "%{command}"
1568 実行されるコマンドのベースネームに展開される。
1569 .RE
1570 .RS 16
1571 .Sp
1572 このほか、システムの \fIstrftime()\fR
1573 関数がサポートしているエスケープシーケンスは、
1574 いかなるものでも展開の対象になる。
1575 .Sp
1576 \&`\f(CW\*(C`%\*(C'\fR' 文字そのものを使いたかったら、文字列
1577 \&`\f(CW\*(C`%%\*(C'\fR' を使用すればよい。
1578 .RE
1579 .IP "iolog_file" 16
1580 .IX Item "iolog_file"
1581 \&\fIiolog_dir\fR を基点とする相対パス名であり、\fIlog_input\fR や
1582 \&\fIlog_output\fR オプションが有効になっていたり、
1583 \&\f(CW\*(C`LOG_INPUT\*(C'\fR や \f(CW\*(C`LOG_OUTPUT\*(C'\fR
1584 タグがコマンドに付いている場合に、入出力ログがこの中に格納される。
1585 \&\fIiolog_file\fR の値がディレクトリ構成をなしていることがあるのに注意すること。
1586 デフォルトは \f(CW"%{seq}"\fR である。
1587 .Sp
1588 使用できるパーセント (`\f(CW\*(C`%\*(C'\fR') エスケープシーケンスのリストについては、
1589 上記の \fIiolog_dir\fR オプションを参照してほしい。
1590 .Sp
1591 エスケープシーケンスの展開とは別に、パス名が六個以上の \f(CW\*(C`X\*(C'\fR
1592 で終わっている場合、\f(CW\*(C`X\*(C'\fR の部分が、
1593 他と重複しない英数字の組み合わせに置き換えられる。
1594 \&\fImktemp()\fR 関数の場合と同様である。
1595 .IP "mailsub" 16
1596 .IX Item "mailsub"
1597 \&\fImailto\fR ユーザに送付するメールの件名。エスケープ文字 \f(CW%h\fR 
1598 はマシンのホスト名に展開される。デフォルトは「\f(CW\*(C`*** SECURITY
1599 information for %h ***\*(C'\fR」である。
1600 .IP "noexec_file" 16
1601 .IX Item "noexec_file"
1602 このオプションはもうサポートされていない。現在では、
1603 noexec ファイルのパスは \fI/etc/sudo.conf\fR ファイルで設定するべきである。
1604 (訳注: sudo-1.8.3 では、まだこのオプションが有効かもしれない。
1605 しかし、そこでも \fI/etc/sudo.conf\fR を使用することが推奨されている。)
1606 .IP "passprompt" 16
1607 .IX Item "passprompt"
1608 パスワードを要求するときに使用するデフォルトのプロンプト。
1609 \&\fB-p\fR オプションや環境変数 \f(CW\*(C`SUDO_PROMPT\*(C'\fR
1610 によって変更することができる。以下のパーセント (`\f(CW\*(C`%\*(C'\fR')
1611 エスケープシーケンスが使用できる。
1612 .RS 16
1613 .ie n .IP "%H" 4
1614 .el .IP "\f(CW%H\fR" 4
1615 .IX Item "%H"
1616 ドメイン名付きのローカルホスト名に展開 (マシンのホスト名が完全修飾名か、
1617 \&\fIfqdn\fR オプションがセットされている場合のみ)
1618 .ie n .IP "%h" 4
1619 .el .IP "\f(CW%h\fR" 4
1620 .IX Item "%h"
1621 ドメイン名なしのローカルホスト名に展開
1622 .ie n .IP "%p" 4
1623 .el .IP "\f(CW%p\fR" 4
1624 .IX Item "%p"
1625 パスワードを要求されているユーザ名に展開 (\fIsudoers\fR ファイルの 
1626 \&\fIrootpw\fR, \fItargetpw\fR, \fIrunaspw\fR フラグを尊重する)
1627 .ie n .IP "%U" 4
1628 .el .IP "\f(CW%U\fR" 4
1629 .IX Item "%U"
1630 変身対象ユーザの (デフォルトでは root) ログイン名に展開
1631 .ie n .IP "%u" 4
1632 .el .IP "\f(CW%u\fR" 4
1633 .IX Item "%u"
1634 \&\fBsudo\fR を起動するユーザのログイン名に展開
1635 .ie n .IP "\*(C`%%\*(C'" 4
1636 .el .IP "\f(CW\*(C`%%\*(C'\fR" 4
1637 .IX Item "%%"
1638 連続した二個の \f(CW\*(C`%\*(C'\fR は、一個の \f(CW\*(C`%\*(C'\fR
1639 文字そのものを意味する
1640 .RE
1641 .RS 16
1642 .Sp
1643 デフォルトの値は「\f(CW\*(C`Password:\*(C'\fR」である。
1644 .RE
1645 .if \n(SL \{\
1646 .IP "role" 16
1647 .IX Item "role"
1648 コマンドを実行するために
1649 SELinux の新しいセキュリティ・コンテキストを構成するときに使用する、
1650 デフォルトのロール。デフォルトのロールは、
1651 \&\fIsudoers\fR ファイルや、コマンドラインオプションを使って、
1652 コマンドごとに変更することができる。このオプションが利用できるのは、
1653 \&\fBsudo\fR が SELinux サポートつきで作成されたときだけである。
1654 \}
1655 .IP "runas_default" 16
1656 .IX Item "runas_default"
1657 コマンドラインで \fB-u\fR オプションが指定されていないときの、
1658 デフォルトの変身対象ユーザ。デフォルトでは \f(CW\*(C`root\*(C'\fR
1659 になっている。
1660 .IP "syslog_badpri" 16
1661 .IX Item "syslog_badpri"
1662 ユーザが認証に失敗したときに使用する syslog の重大度 (priority)。
1663 デフォルトでは \f(CW\*(C`alert\*(C'\fR になっている。
1664 .Sp
1665 syslog の重大度には、次のものが指定できる。\fBalert\fR, \fBcrit\fR,
1666 \&\fBdebug\fR, \fBemerg\fR, \fBerr\fR, \fBinfo\fR, \fBnotice\fR,
1667 \&\fBwarning\fR。
1668 .IP "syslog_goodpri" 16
1669 .IX Item "syslog_goodpri"
1670 ユーザが認証に成功したときに使用する syslog の重大度 (priority)。
1671 デフォルトでは \f(CW\*(C`notice\*(C'\fR になっている。
1672 .Sp
1673 どんな syslog の重大度が指定できるかについては、
1674 syslog_badpri を参照。
1675 .IP "sudoers_locale" 16
1676 .IX Item "sudoers_locale"
1677 sudoers ファイルを解析したり、コマンドのログを記録したり、
1678 email を送付したりするときに使用するロケール。ロケールの変更は、
1679 sudoers の解釈に影響があるかもしれないので、気をつけてほしい。
1680 デフォルトでは \f(CW"C"\fR になっている。
1681 .IP "timestampdir" 16
1682 .IX Item "timestampdir"
1683 \&\fBsudo\fR がタイムスタンプ・ファイルを置くディレクトリ。
1684 デフォルトは \fI/var/lib/sudo\fR である。
1685 .IP "timestampowner" 16
1686 .IX Item "timestampowner"
1687 タイムスタンプ・ディレクトリとそこに置かれるタイムスタンプの所有者。
1688 デフォルトは \f(CW\*(C`root\*(C'\fR である。
1689 .if \n(SL \{\
1690 .IP "type" 16
1691 .IX Item "type"
1692 コマンドを実行するために SELinux の新しいセキュリティ・コンテキストを
1693 構成するとき、使用するデフォルトのタイプ。デフォルトのタイプは、
1694 \&\fIsudoers\fR ファイルや、コマンドラインオプションを使って、コマンド
1695 ごとに変更することができる。このオプションが利用できるのは、\fBsudo\fR 
1696 が SELinux サポートつきで作成されたときだけである。
1697 \}
1698 .PP
1699 \&\fB真偽値としても使用できる文字列\fR:
1700 .IP "env_file" 12
1701 .IX Item "env_file"
1702 \&\fIenv_file\fR オプションでファイルの絶対パスを指定すると、
1703 実行するプログラムの環境として設定する変数を、そのファイルに格納しておくことができる。
1704 このファイルのエントリは \f(CW\*(C`VARIABLE=value\*(C'\fR
1705 か \f(CW\*(C`export VARIABLE=value\*(C'\fR の形でなければならない。
1706 変数の値をシングルクォートやダブルクォートで囲んでもよい。
1707 このファイルに含まれる変数は、\fIenv_keep\fR や \fIenv_check\fR のような
1708 \&\fBsudo\fR のほかの環境設定の影響を受ける。
1709 .IP "exempt_group" 12
1710 .IX Item "exempt_group"
1711 このグループのユーザはパスワードの入力や \fIsecure_path\fR による
1712 \&\s-1PATH\s0 の限定を免除されている。
1713 指定するグループ名に接頭辞の \f(CW\*(C`%\*(C'\fR を付けてはいけない。
1714 このオプションはデフォルトではセットされていない。
1715 .IP "group_plugin" 12
1716 .IX Item "group_plugin"
1717 このオプションの値となる文字列には、\fIsudoers\fR
1718 が使用するグループ・プラグインと、必要ならその引き数を指定する。
1719 このオプションを使えば、前述した (訳注: 「エイリアス」セクション参照)
1720 非 Unix グループの書式を使えるようにすることも可能だ。
1721 値となる文字列は、プラグインのパスに続けて、その設定に必要な引き数があれば、
1722 それを付け加えたものだが、パスは絶対パスか、
1723 \&\fI/usr/local/libexec\fR を基点とする相対パスにするべきである。
1724 指定した引き数は (もし存在するなら) プラグインの初期化関数に渡される。
1725 引き数が存在する場合は、
1726 文字列をダブルクォート (\f(CW\*(C`"\*(C'\fR) で囲まなければならない。 
1727 .Sp
1728 たとえば、\fI/etc/sudo\-group\fR という
1729 Unix グループの書式で書いたグループファイルがあるとしよう。
1730 次のようにすれば、sample group plugin を使用することができる。
1731 .Sp
1732 .Vb 1
1733 \&    Defaults group_plugin="sample_group.so /etc/sudo\-group"
1734 .Ve
1735 .Sp
1736 詳細に付いては、\fIsudo_plugin\fR\|(5) をご覧いただきたい。
1737 .IP "lecture" 12
1738 .IX Item "lecture"
1739 \&\fBsudo\fR はパスワードプロンプトに添えて簡単な訓戒を表示することができる。
1740 このオプションはその訓戒をいつ表示するかを決定する。
1741 以下の値が可能である。
1742 .RS 12
1743 .IP "always" 8
1744 .IX Item "always"
1745 いつでも必ず訓戒を表示する。
1746 .IP "never" 8
1747 .IX Item "never"
1748 訓戒をまったく表示しない。
1749 .IP "once" 8
1750 .IX Item "once"
1751 ユーザがはじめて \fBsudo\fR を実行したときだけ表示する。
1752 .RE
1753 .RS 12
1754 .Sp
1755 値を指定しないと、\fIonce\fR を指定したことになる。頭に '!' を付けて、
1756 このオプションを否定すると、値に \fInever\fR が使用される。
1757 デフォルトの値は \fIonce\fR である。
1758 .RE
1759 .IP "lecture_file" 12
1760 .IX Item "lecture_file"
1761 標準の訓戒の代わりに使用する \fBsudo\fR の訓戒を書き込んだファイルがあるなら、
1762 \&\fIlecture_file\fR でそのパスを指定する。\fBsudo\fR はデフォルトでは、
1763 プログラムに埋め込まれた訓戒を使用する。
1764 .IP "listpw" 12
1765 .IX Item "listpw"
1766 このオプションは、\fBsudo\fB を\fB\ -l\fR オプション付きで実行したとき、
1767 ユーザがパスワードを要求されるのは、どんな場合かを決定する。
1768 以下の値が可能である。
1769 .RS 12
1770 .IP "all" 8
1771 .IX Item "all"
1772 パスワードを入力しないですむためには、
1773 \&\fIsudoers\fR ファイルの使用中のホストに対する当該ユーザのエントリのすべてに
1774 \&\f(CW\*(C`NOPASSWD\*(C'\fR タグが設定されていなければならない。
1775 .IP "always" 8
1776 .IX Item "always"
1777 ユーザは \fB\-l\fR オプションを使用する際に
1778 必ずパスワードを入力しなければならない。
1779 .IP "any" 8
1780 .IX Item "any"
1781 パスワードを入力しないですむためには、\fIsudoers\fR ファイルの
1782 使用中のホストに対する当該ユーザのエントリの少なくとも一つに 
1783 \&\f(CW\*(C`NOPASSWD\*(C'\fR タグが設定されていなければならない。
1784 .IP "never" 8
1785 .IX Item "never"
1786 ユーザは \fB\-l\fR オプションを使用する際に
1787 パスワードを入力する必要がまったくない。
1788 .RE
1789 .RS 12
1790 .Sp
1791 値を指定しないと、値は \fIany\fR だと見なされる。'!' を頭に付けて、
1792 このオプションを否定すると、値に \fInever\fR が使われることになる。
1793 デフォルトは \fIany\fR である。
1794 .RE
1795 .IP "logfile" 12
1796 .IX Item "logfile"
1797 \&\fBsudo\fR 独自のログファイルのパス (syslog 経由のログファイルではない)。
1798 パスを指定すると、独自ファイルへのロギングが on になり、 '!' を頭に付けて、
1799 このオプションを否定すると、off になる。デフォルトでは、\fBsudo\fR は 
1800 syslog 経由でログを取る。
1801 .IP "mailerflags" 12
1802 .IX Item "mailerflags"
1803 メーラを起動するときに使用するフラグ。デフォルトは \fB\-t\fR になっている。
1804 .IP "mailerpath" 12
1805 .IX Item "mailerpath"
1806 警告メールの送信に使うメール・プログラムのパス。デフォルトは configure 
1807 したときに見つかった sendmail のパス。
1808 .IP "mailfrom" 12
1809 .IX Item "mailfrom"
1810 警告メールやエラー・メールを送るとき、差出人として使用するアドレス。
1811 \&\fBsudo\fR が \f(CW\*(C`@\*(C'\fR 記号を解釈しないように、
1812 アドレスはダブルクォート (\f(CW\*(C`"\*(C'\fR) で囲むべきである。デフォルトは、
1813 \&\fBsudo\fR を実行するユーザの名前。
1814 .IP "mailto" 12
1815 .IX Item "mailto"
1816 警告メールやエラー・メールを送付する宛先のアドレス。\fBsudo\fR が 
1817 \&\f(CW\*(C`@\*(C'\fR 記号を解釈しないように、
1818 アドレスはダブルクォート (\f(CW\*(C`"\*(C'\fR) で囲むべきである。
1819 デフォルトは root になっている。
1820 .IP "secure_path" 12
1821 .IX Item "secure_path"
1822 \&\fBsudo\fR から実行されるあらゆるコマンドが使用するパス。
1823 \&\fBsudo\fR を実行するユーザが、無難な環境変数 \f(CW\*(C`PATH\*(C'\fR
1824 を使っているかどうか確信が持てないなら、このオプションを使用するとよいだろう。
1825 もう一つの使用法は、「root のパス」と「一般ユーザのパス」を別のものにしておきたい場合だ。
1826 ユーザが \fIexempt_group\fR オプションで指定したグループに属していると、
1827 そのユーザは \fIsecure_path\fR の影響を受けない。
1828 このオプションは、デフォルトではセットされていない。
1829 .IP "syslog" 12
1830 .IX Item "syslog"
1831 syslog を使ってログを取っている場合の syslog のファシリティ
1832 (syslog 経由でログを取らないなら、'!' を頭に付けて、このオプションを否定する)。
1833 デフォルトでは \f(CW\*(C`authpriv\*(C'\fR になっている。
1834 .Sp
1835 syslog のファシリティには、次のものが指定できる。
1836 \&\fBauthpriv\fR (\s-1OS\s0 が対応している場合), \fBauth\fR, \fBdaemon\fR,
1837 \&\fBuser\fR, \fBlocal0\fR, \fBlocal1\fR, \fBlocal2\fR, \fBlocal3\fR,
1838 \&\fBlocal4\fR, \fBlocal5\fR, \fBlocal6\fR, \fBlocal7\fR。
1839 .IP "verifypw" 12
1840 .IX Item "verifypw"
1841 このオプションは、\fBsudo\fR を \fB\-v\fR オプション付きで実行したとき、
1842 ユーザがパスワードを要求されるのは、どんな場合かを決定する。
1843 次のような値が可能である。
1844 .RS 12
1845 .IP "all" 8
1846 .IX Item "all"
1847 パスワードを入力しないですむためには、
1848 \&\fIsudoers\fR ファイルの使用中のホストに対する当該ユーザのエントリのすべてに
1849 \&\f(CW\*(C`NOPASSWD\*(C'\fR タグが設定されていなければならない。
1850 .IP "always" 8
1851 .IX Item "always"
1852 ユーザは \fB\-v\fR オプションを使用する際に
1853 必ずパスワードを入力しなければならない。
1854 .IP "any" 8
1855 .IX Item "any"
1856 パスワードを入力しないですむためには、\fIsudoers\fR ファイルの
1857 使用中のホストに対する当該ユーザのエントリの少なくとも一つに 
1858 \f(CW\*(C`NOPASSWD\*(C'\fR タグが設定されていなければならない。
1859 .IP "never" 8
1860 .IX Item "never"
1861 ユーザは \fB\-v\fR オプションを使用する際に
1862 パスワードを入力する必要がまったくない。
1863 .RE
1864 .RS 12
1865 .Sp
1866 値を指定しないと、値は \fIall\fR だと見なされる。'!' を頭に付けて、
1867 このオプションを否定すると、値に \fInever\fR が使われることになる。
1868 デフォルトは \fIall\fR である。
1869 .RE
1870 .PP
1871 \&\fB真偽値としても使用できるリスト\fR:
1872 .IP "env_check" 16
1873 .IX Item "env_check"
1874 変数の値に \f(CW\*(C`%\*(C'\fR や \f(CW\*(C`/\*(C'\fR が含まれる場合に、
1875 ユーザの環境から取り除かれる環境変数。
1876 この機能は、出来のよくないプログラムに見られる
1877 printf 形式のフォーマットの脆弱性に対処するために利用できる。
1878 このオプションの引き数は、ダブルクォートで囲まれ、
1879 スペースで区切られたリストでもよく、
1880 ダブルクォートなしの単一の値でもよい。リストは、\f(CW\*(C`=\*(C'\fR,
1881 \&\f(CW\*(C`+=\*(C'\fR, \f(CW\*(C`\-=\*(C'\fR, \f(CW\*(C`!\*(C'\fR
1882 演算子を使って、それぞれ置き換えたり、追加したり、削除したり、
1883 無効にしたりすることができる。
1884 \&\fIenv_check\fR で指定された変数は、
1885 \&\fIenv_reset\fR オプショの有効・無効にかかわらず、
1886 上記のチェックにパスすれば、環境に保存されることになる。
1887 チェックされる環境変数のデフォルトのリストは、root ユーザが \fBsudo\fR に
1888 \&\fI\-V\fR オプションを付けて実行したときに表示される。
1889 .IP "env_delete" 16
1890 .IX Item "env_delete"
1891 \&\fIenv_reset\fR オプションが無効になっているときに、
1892 ユーザの環境から取り除かれる環境変数。このオプションの引き数は、
1893 ダブルクォートで囲まれ、スペースで区切られたリストでもよく、
1894 ダブルクォートなしの単一の値でもよい。
1895 リストは、\f(CW\*(C`=\*(C'\fR, \f(CW\*(C`+=\*(C'\fR, \f(CW\*(C`\-=\*(C'\fR,
1896 \&\f(CW\*(C`!\*(C'\fR 演算子を使って、それぞれ置き換えたり、追加したり、
1897 削除したり、無効にしたりすることができる。
1898 取り除かれる環境変数のデフォルトのリストは、root ユーザが \fBsudo\fR に
1899 \&\fI\-V\fR オプションを付けて実行したときに表示される。
1900 留意すべきは、オペレーティングシステムには、
1901 危険をもたらしかねない変数をいかなる setuid プロセス (\fBsudo\fR もその一つ)
1902 の環境からも取り除くことにしているものが多いということである。
1903 .IP "env_keep" 16
1904 .IX Item "env_keep"
1905 \&\fIenv_reset\fR オプションが有効になっているときでも、
1906 ユーザの環境にそのまま保存される環境変数。このオプションによって、
1907 \&\fBsudo\fR から生み出されるプロセスが受け取る環境を、
1908 きめ細かく制御することが可能になる。このオプションの引き数は、
1909 ダブルクォートで囲まれ、スペースで区切られたリストでもよく、
1910 ダブルクォートなしの単一の値でもよい。リストは、
1911 \&\f(CW\*(C`=\*(C'\fR, \f(CW\*(C`+=\*(C'\fR, \f(CW\*(C`\-=\*(C'\fR,
1912 \&\f(CW\*(C`!\*(C'\fR 演算子を使って、それぞれ置き換えたり、
1913 追加したり、削除したり、無効にしたりすることができる。
1914 保存される変数のデフォルトのリストは、root ユーザが \fBsudo\fR に
1915 \&\fI\-V\fR オプションを付けて実行したときに表示される。
1916 .SH "ファイル"
1917 .IX Header "FILES"
1918 .ie n .IP "\fI/etc/sudoers\fR" 24
1919 .el .IP "\fI/etc/sudoers\fR" 24
1920 .IX Item "/etc/sudoers"
1921 誰が何を実行できるかのリスト
1922 .IP "\fI/etc/group\fR" 24
1923 .IX Item "/etc/group"
1924 ローカルのグループファイル
1925 .IP "\fI/etc/netgroup\fR" 24
1926 .IX Item "/etc/netgroup"
1927 ネットワークグループのリスト
1928 .ie n .IP "\fI/var/log/sudo-io\fR" 24
1929 .el .IP "\fI/var/log/sudo-io\fR" 24
1930 .IX Item "/var/log/sudo-io"
1931 入出力のログファイル (訳注: 厳密には、
1932 入出力のログを記録するファイル群をその下に格納するトップディレクトリ)
1933 .ie n .IP "\fI/var/lib/sudo\fR" 24
1934 .el .IP "\fI/var/lib/sudo\fR" 24
1935 .IX Item "/var/lib/sudo"
1936 \&\fIsudoers\fR セキュリティ・ポリシーが使用するタイムスタンプを格納するディレクトリ。
1937 .IP "\fI/etc/environment\fR" 24
1938 .IX Item "/etc/environment"
1939 Linux や \s-1AIX\s0 で \fB\-i\fR モードを使用するときの初期環境
1940 .SH "用例"
1941 .IX Header "EXAMPLES"
1942 以下は \fIsudoers\fR エントリの見本である。
1943 正直なところ、いささか凝りすぎの部分もある。
1944 まず最初に継承を許可する環境変数をいくつか指定し、
1945 続いて \fIaliases\fR の定義をする。
1946 .PP
1947 .Vb 4
1948 \& # sudo 経由で X アプリケーションを実行するとき、HOME は
1949 \& # .Xauthority ファイルを探すために使用される。ほかのプログラムも
1950 \& # 設定ファイルを探すのに HOME を使用するので、この指定が
1951 \& # 権限の昇格を引き起こしかねないことに注意してほしい。
1952 \& Defaults env_keep += "DISPLAY HOME"
1953 \&
1954 \& # User alias の指定
1955 \& User_Alias     FULLTIMERS = millert, mikef, dowdy
1956 \& User_Alias     PARTTIMERS = bostley, jwfox, crawl
1957 \& User_Alias     WEBMASTERS = will, wendy, wim
1958 \&
1959 \& # Runas alias の指定
1960 \& Runas_Alias    OP = root, operator
1961 \& Runas_Alias    DB = oracle, sybase
1962 \& Runas_Alias    ADMINGRP = adm, oper
1963 \&
1964 \& # Host alias の指定
1965 \& Host_Alias     SPARC = bigtime, eclipse, moet, anchor :\e
1966 \&                SGI = grolsch, dandelion, black :\e
1967 \&                ALPHA = widget, thalamus, foobar :\e
1968 \&                HPPA = boa, nag, python
1969 \& Host_Alias     CUNETS = 128.138.0.0/255.255.0.0
1970 \& Host_Alias     CSNETS = 128.138.243.0, 128.138.204.0/24, 128.138.242.0
1971 \& Host_Alias     SERVERS = master, mail, www, ns
1972 \& Host_Alias     CDROM = orion, perseus, hercules
1973 \&
1974 \& # Cmnd alias の指定
1975 \& Cmnd_Alias     DUMPS = /usr/bin/mt, /usr/sbin/dump, /usr/sbin/rdump,\e
1976 \&                        /usr/sbin/restore, /usr/sbin/rrestore
1977 \& Cmnd_Alias     KILL = /usr/bin/kill
1978 \& Cmnd_Alias     PRINTING = /usr/sbin/lpc, /usr/bin/lprm
1979 \& Cmnd_Alias     SHUTDOWN = /usr/sbin/shutdown
1980 \& Cmnd_Alias     HALT = /usr/sbin/halt
1981 \& Cmnd_Alias     REBOOT = /usr/sbin/reboot
1982 \& Cmnd_Alias     SHELLS = /usr/bin/sh, /usr/bin/csh, /usr/bin/ksh, \e
1983 \&                         /usr/local/bin/tcsh, /usr/bin/rsh, \e
1984 \&                         /usr/local/bin/zsh
1985 \& Cmnd_Alias     SU = /usr/bin/su
1986 \& Cmnd_Alias     PAGERS = /usr/bin/more, /usr/bin/pg, /usr/bin/less
1987 .Ve
1988 .PP
1989 以下では、コンパイル時に埋め込まれたデフォルト値のいくつかを変更している。
1990 \&\fBsudo\fR には \fIsyslog\fR\|(3) 経由でログを記録し、
1991 ファシリティにはすべての場合に \fIauth\fR を使用させたい。
1992 フルタイムのスタッフには \fBsudo\fR の訓戒を出さないようにしたい。
1993 ユーザ \fBmillert\fR はパスワードを入力しないでよい。
1994 コマンドを root として実行するときは、
1995 環境変数 \f(CW\*(C`LOGNAME\*(C'\fR, \f(CW\*(C`USER\*(C'\fR,
1996 \&\f(CW\*(C`USERNAME\*(C'\fR を変更したくない。さらに、
1997 \&\fI\s-1SERVERS\s0\fR という \f(CW\*(C`Host_Alias\*(C'\fR に属するマシンでは、
1998 ローカルなログファイルを副本として作り、
1999 ログの記入事項は数年に渡って保存されるので、
2000 ログの各行に間違いなく年度が入るようにする。
2001 最後に \s-1PAGERS\s0 という \f(CW\*(C`Cmnd_Alias\*(C'\fR に属するコマンド
2002 (\fI/usr/bin/more\fR, \fI/usr/bin/pg\fR, \fI/usr/bin/less\fR) については、
2003 シェル・エスケープを無効にする。
2004 .PP
2005 .Vb 7
2006 \& # built-in defaults の変更
2007 \& Defaults               syslog=auth
2008 \& Defaults>root          !set_logname
2009 \& Defaults:FULLTIMERS    !lecture
2010 \& Defaults:millert       !authenticate
2011 \& Defaults@SERVERS       log_year, logfile=/var/log/sudo.log
2012 \& Defaults!PAGERS        noexec
2013 .Ve
2014 .PP
2015 ユーザ設定が、誰が何を実行できるかを実際に決めている部分だ。
2016 .PP
2017 .Vb 2
2018 \& root           ALL = (ALL) ALL
2019 \& %wheel         ALL = (ALL) ALL
2020 .Ve
2021 .PP
2022 \&\fBroot\fR と \fBwheel\fR グループのすべてのユーザには、
2023 どのホストでも任意のユーザとしていかなるコマンドでも実行することを認める。
2024 .PP
2025 .Vb 1
2026 \& FULLTIMERS     ALL = NOPASSWD: ALL
2027 .Ve
2028 .PP
2029 フルタイムのシステム管理者 (\fBmillert\fR, \fBmikef\fR, \fBdowdy\fR) 
2030 は、どのホストでも任意のコマンドを認証なしで実行できる。
2031 .PP
2032 .Vb 1
2033 \& PARTTIMERS     ALL = ALL
2034 .Ve
2035 .PP
2036 パートタイムのシステム管理者 ((\fBbostley\fR, \fBjwfox\fR,
2037 \&\fBcrawl\fR) は、どのホストでも任意のコマンドを実行できるが、
2038 その際に認証をしなければならない (このエントリには 
2039 \&\f(CW\*(C`NOPASSWD\*(C'\fR タグが指定されていないので)。
2040 .PP
2041 .Vb 1
2042 \& jack           CSNETS = ALL
2043 .Ve
2044 .PP
2045 ユーザ \fBjack\fR は、\fI\s-1CSNETS\s0\fR
2046 というエイリアスに属するマシンで、任意のコマンドを実行できる
2047 (すなわち、ネットワークが \f(CW128.138.243.0\fR, \f(CW128.138.204.0\fR,
2048 \&\f(CW128.138.242.0\fR のマシンだ)。この内、\f(CW128.138.204.0\fR にのみ
2049 class C のネットワークであることを示す明示的な (\s-1CIDR\s0 表記の)
2050 netmask がある。\fI\s-1CSNETS\s0\fR のほかのネットワークについては、
2051 ローカルマシンの netmask がマッチングの際に使われることになる。
2052 .PP
2053 .Vb 1
2054 \& lisa           CUNETS = ALL
2055 .Ve
2056 .PP
2057 ユーザ \fBlisa\fR は、エイリアスが \fI\s-1CUNETS\s0\fR のいかなるホストでも、
2058 任意のコマンドを実行することができる (すなわち、
2059 \f(CW128.138.0.0\fR という class B ネットワークのマシンだ)。
2060 .PP
2061 .Vb 2
2062 \& operator       ALL = DUMPS, KILL, SHUTDOWN, HALT, REBOOT, PRINTING,\e
2063 \&                sudoedit /etc/printcap, /usr/oper/bin/
2064 .Ve
2065 .PP
2066 ユーザ \fBoperator\fR は、
2067 用途が簡単な保守管理に限定されたコマンドを実行できる。この場合それは、
2068 バックアップしたり、プロセスを kill したり、印刷システムを操作したり、
2069 システムをシャットダウンしたりするのに関係するコマンドと、
2070 \&\fI/usr/oper/bin/\fR ディレクトリにある任意のコマンドである。
2071 .PP
2072 .Vb 1
2073 \& joe            ALL = /usr/bin/su operator
2074 .Ve
2075 .PP
2076 ユーザ \fBjoe\fR は、\fIsu\fR\|(1) を使って operator になることしかできない。
2077 .PP
2078 .Vb 1
2079 \& %opers         ALL = (: ADMINGRP) /usr/sbin/
2080 .Ve
2081 .PP
2082 \&\fBopers\fR グループのユーザは、\fI/usr/sbin/\fR にあるコマンドを、
2083 自分自身の資格で、
2084 \&\f(CW\*(C`Runas_Alias\*(C'\fR \fI\s-1ADMINGRP\s0\fR
2085 に属する任意のグループ (すなわち、\fBadm\fR か \fBoper\fR グループ)
2086 として実行できる。
2087 .PP
2088 .Vb 1
2089 \& pete           HPPA = /usr/bin/passwd [A\-Za\-z]*, !/usr/bin/passwd root
2090 .Ve
2091 .PP
2092 ユーザ \fBpete\fR は、\fI\s-1HPPA\s0\fR に属するマシンで
2093 root 以外なら誰のパスワードでも変更することを許されている。
2094 上記の指定は、\fIpasswd\fR\|(1) がコマンドラインで複数のユーザ名を
2095 受け付けないことを前提としている点に注意してほしい。
2096 .PP
2097 .Vb 1
2098 \& bob            SPARC = (OP) ALL : SGI = (OP) ALL
2099 .Ve
2100 .PP
2101 ユーザ \fBbob\fR は、\fI\s-1SPARC\s0\fR や \fI\s-1SGI\s0\fR に属するマシンで
2102 \&\f(CW\*(C`Runas_Alias\*(C'\fR \fI\s-1OP\s0\fR
2103 に登録されている任意のユーザとして (\fBroot\fR と \fBoperator\fR である)
2104 どんなコマンドでも実行できる。
2105 .PP
2106 .Vb 1
2107 \& jim            +biglab = ALL
2108 .Ve
2109 .PP
2110 ユーザ \fBjim\fR は、\fIbiglab\fR ネットグループに属するマシンで、
2111 どんなコマンドでも実行できる。
2112 \&\fBsudo\fR は、\*(L"biglab\*(R" に '+' の接頭辞が付いているので、
2113 それをネットグループだと認識する。
2114 .PP
2115 .Vb 1
2116 \& +secretaries   ALL = PRINTING, /usr/bin/adduser, /usr/bin/rmuser
2117 .Ve
2118 .PP
2119 \&\fBsecretaries\fR ネットグループのユーザは、ユーザの追加や削除はもちろん、
2120 プリンタの管理にも協力する必要がある。
2121 そこで、すべてのマシンでその種のコマンドの実行を認められている。
2122 .PP
2123 .Vb 1
2124 \& fred           ALL = (DB) NOPASSWD: ALL
2125 .Ve
2126 .PP
2127 ユーザ \fBfred\fR は、\f(CW\*(C`Runas_Alias\*(C'\fR \fI\s-1DB\s0\fR
2128 の任意のユーザとして (\fBoracle\fR か \fBsybase\fR だ)
2129 パスワードを入力しないでもコマンドを実行することができる。
2130 .PP
2131 .Vb 1
2132 \& john           ALPHA = /usr/bin/su [!\-]*, !/usr/bin/su *root*
2133 .Ve
2134 .PP
2135 ユーザ \fBjohn\fR は、\fI\s-1ALPHA\s0\fR に属するマシンで \fIsu\fR\|(1)
2136 を使って root 以外の誰にでもなることができるが、
2137 su にオプションを指定することは許されていない。
2138 .PP
2139 .Vb 1
2140 \& jen            ALL, !SERVERS = ALL
2141 .Ve
2142 .PP
2143 ユーザ \fBjen\fR は、\f(CW\*(C`Host_Alias\*(C'\fR \fI\s-1SERVERS\s0\fR
2144 に属するマシン (master, mail, www, ns) を除くいかなるマシンでも、
2145 任意のコマンドを実行できる。
2146 .PP
2147 .Vb 1
2148 \& jill           SERVERS = /usr/bin/, !SU, !SHELLS
2149 .Ve
2150 .PP
2151 \&\fBjill\fR は、\f(CW\*(C`Host_Alias\*(C'\fR \fI\s-1SERVERS\s0\fR のいかなるマシンでも
2152 \&\fI/usr/bin/\fR ディレクトリにある任意のコマンドを実行できるが、
2153 \&\fI\s-1SU\s0\fR や \fI\s-1SHELLS\s0\fR という
2154 \&\f(CW\*(C`Cmnd_Aliases\*(C'\fR に属するコマンドは実行できない。
2155 .PP
2156 .Vb 1
2157 \& steve          CSNETS = (operator) /usr/local/op_commands/
2158 .Ve
2159 .PP
2160 ユーザ \fBsteve\fR は、ディレクトリ \fI/usr/local/op_commands/\fR
2161 にある任意のコマンドを実行できるが、
2162 operator というユーザとして実行できるだけだ。
2163 .PP
2164 .Vb 1
2165 \& matt           valkyrie = KILL
2166 .Ve
2167 .PP
2168 \&\fBmatt\fR も、自分用のワークステーション valkyrie で、ハングしたプロセスの
2169 kill ぐらいはできる必要がある。
2170 .PP
2171 .Vb 1
2172 \& WEBMASTERS     www = (www) ALL, (root) /usr/bin/su www
2173 .Ve
2174 .PP
2175 ホスト www で \f(CW\*(C`User_Alias\*(C'\fR \fI\s-1WEBMASTERS\s0\fR
2176 に属するいかなるユーザも (will, wendy, wim だ)、ユーザ www
2177 (web ページの所有者) として任意のコマンドを実行することができる。
2178 単に \fIsu\fR\|(1) で www になってもよい。
2179 .PP
2180 .Vb 2
2181 \& ALL            CDROM = NOPASSWD: /sbin/umount /CDROM,\e
2182 \&                /sbin/mount \-o nosuid\e,nodev /dev/cd0a /CDROM
2183 .Ve
2184 .PP
2185 いかなるユーザも、\f(CW\*(C`Host_Alias\*(C'\fR が \s-1CDROM\s0 のマシンで
2186 (orion, perseus, hercules)、パスワードを入力することなく 
2187 CD-ROM をマウント、アンマウントできる。
2188 上記のコマンドを打ち込むのはユーザにとっていささか面倒なので、
2189 シェルスクリプトとしてカプセル化してしまうのがよいだろう。
2190 .IP "[\fB訳注\fR]:" 8
2191 .IX Item "footnote2"
2192 当然と言えば当然だが、sudo は自ホストの /etc/sudoers しか読まないし、
2193 制御の及ぶ範囲も自ホストだけである。そこで、こういうことになる。
2194 AAA というホストに aaa というユーザがいるとしよう。
2195 ホスト AAA の /etc/sudoers に「ホスト BBB でユーザ aaa は
2196 sudo を介して /bin/ls を実行できる」という記述があったとしても、
2197 ユーザ aaa がホスト AAA から telnet や ssh でホスト BBB にログインし、
2198 BBB 上で sudo を使って ls を実行できるわけではない。それができるためには、
2199 ホスト BBB の /etc/sudoers に「BBB でユーザ aaa は sudo を介して
2200 /bin/ls を実行できる」という記述がなければならないのだ。
2201 ホスト BBB で実行する sudo は BBB の sudo であり、
2202 BBB の sudo は BBB の /etc/sudoers しか読まないのだから。
2203 .Sp
2204 それでは、何故、上記の「用例」で自ホスト以外の設定が行われているのか?
2205 そもそも、sudoers の書式で自ホスト以外のホストを指定できるのは、
2206 何故なのか? ホストに ALL を指定できるのは、何故なのか?
2207 それは、管理しているサイトのすべてのホストの設定を記した
2208 sudoers ファイルを一つ作って、それをすべてのホストにコピーして使う、
2209 そういった使い方を想定しているからだ。
2210 もし、サイト中のすべてのホストの設定を一ヶ所にまとめて置き、
2211 それをすべてのホストに共有させたいのなら
2212 (すなわち、sudo の設定の集中管理がしたいのなら)、
2213 LDAP の採用を考えるべきである。
2214 .SH "セキュリティに関する注意点"
2215 .IX Header "SECURITY NOTES"
2216 一般的に言って、演算子 '!' を使用して \f(CW\*(C`ALL\*(C'\fR
2217 からコマンドの「引き算」をするのは、あまり有力な方法ではない。
2218 ユーザは実行したいコマンドを名前を変えてコピーし、
2219 それからそれを実行するといった簡単な方法で、裏をかくことができるからだ。
2220 たとえば、
2221 .PP
2222 .Vb 1
2223 \&    bill        ALL = ALL, !SU, !SHELLS
2224 .Ve
2225 .PP
2226 という行は、\fI\s-1SU\s0\fR や \fI\s-1SHELLS\s0\fR
2227 に列記されているコマンドの \fBbill\fR による実行を、
2228 本当に阻止することにはならない。なぜなら、
2229 \&\fBbill\fR としては、そうしたコマンドを単に名前を変えてコピーすればよいし、
2230 エディタやほかのプログラムからシェル・エスケープを利用することもできるからだ。
2231 だから、この種の制限はやった方がまし程度に考えておくべきである
2232 (そして、しっかりした運用方針によって制限の実効力を上げるべきだ)。
2233 .PP
2234 さらに言うと、\fIfast_glob\fR オプションが使われている場合、
2235 パス名に glob 文字 (ワイルドカードとも言う)
2236 が含まれるコマンドを間違いなく無効にすることは不可能である。
2237 その理由は、C ライブラリの
2238 \&\fIfnmatch\fR\|(3) 関数が相対パスを解決することができないからだ。
2239 このことは、権限を許可するルールにとっては、
2240 たいていの場合不便なだけにすぎないが、権限を減らしたり、
2241 取り消したりするルールにとっては、セキュリティ上の問題をもたらしかねない。
2242 .PP
2243 たとえば、\fIsudoers\fR に以下のエントリがあるとしよう。 
2244 .PP
2245 .Vb 2
2246 \& john   ALL = /usr/bin/passwd [a\-zA\-Z0\-9]*, /usr/bin/chsh [a\-zA\-Z0\-9]*,
2247 \&      /usr/bin/chfn [a\-zA\-Z0\-9]*, !/usr/bin/* root
2248 .Ve
2249 .PP
2250 \&\fIfast_glob\fR が有効になっていると、\fBjohn\fR はこれでも
2251 \&\f(CW\*(C`/usr/bin/passwd root\*(C'\fR を実行できてしまう。
2252 \&\fI/usr/bin\fR にカレント・ディレクトリを移動して、
2253 \&\f(CW\*(C`./passwd root\*(C'\fR と打ち込めばよいのだ。 
2254 .SH "シェル・エスケープを防止する"
2255 .IX Header "PREVENTING SHELL ESCAPES"
2256 \&\fBsudo\fR があるプログラムを実行した場合、そのプログラムは、
2257 ほかのプログラムの実行も含めて、何でも自由に好きなことができる。
2258 このことがセキュリティ上の問題になりかねないのは、
2259 プログラムがシェル・エスケープを許しているのは珍しいことではなく、
2260 そのために、ユーザが \fBsudo\fR
2261 のアクセス制御やロギングをすり抜けることが可能になるからだ。
2262 よく使うプログラムでシェル・エスケープを許しているものには、
2263 次のようなものがある。
2264 (当然ながら) シェル、エディタ、ページャ、メーラ、ターミナルなど。
2265 .PP
2266 この問題に対処するには、基本的に二つの方法がある。
2267 .IP "制限" 10
2268 .IX Item "restrict"
2269 ユーザに任意のコマンドの実行を許すようなコマンドに対して、
2270 ユーザがアクセスできないようにする。エディタの場合は、制限モードと称して、
2271 シェル・エスケープが使えないモードを持っているものも多い。
2272 とは言え、\fBsudo\fR 経由でエディタを使うのなら、
2273 \&\fBsudoedit\fR を使用する方がより優れた対策である。
2274 シェル・エスケープを提供するプログラムはたくさんあるので、
2275 それを提供しないプログラムのみを使用するようにユーザを制限するのは、
2276 たいてい実現不可能である。
2277 .IP "noexec" 10
2278 .IX Item "noexec"
2279 共有ライブラリをサポートしている多くのシステムには、環境変数 (たいていは 
2280 \&\f(CW\*(C`LD_PRELOAD\*(C'\fR) で別の共有ライブラリを指定することによって、
2281 デフォルトのライブラリ関数を置き換える能力がある。
2282 そういったシステムでは、\fBsudo\fR の \fInoexec\fR 機能を使えば、
2283 \&\fBsudo\fR から実行されるプログラムが、
2284 何かほかのプログラムを実行するのを防ぐことができる。
2285 とは言え、これが当てはまるのは、
2286 動的にリンクされたネイティブなプログラムだけだということに留意してほしい。
2287 静的にリンクされたプログラムや、
2288 バイナリ・エミュレーションのもとで動くほかの OS のプログラムには効果がない。
2289 .Sp
2290 \&\fInoexec\fR 機能は SunOS, Solaris, *BSD, Linux, \s-1IRIX\s0, 
2291 Tru64 \s-1UNIX\s0, MacOS X, HP-UX 11.x、それに 5.3 以上の \s-1AIX\s0
2292 で使えることがわかっている。環境変数 \f(CW\*(C`LD_PRELOAD\*(C'\fR
2293 をサポートしているたいていのオペレーティングシステムが、
2294 この機能に対応しているはずだ。
2295 使用しているオペレーティングシステムのマニュアルページを調べて、
2296 ダイナミック・リンカについて (通例 ld.so, ld.so.1, dyld, dld.sl, rld,
2297 loader といった名前になっている) \f(CW\*(C`LD_PRELOAD\*(C'\fR
2298 がサポートされているかどうか確認していただきたい。
2299 .Sp
2300 Solaris 10 以上の場合、\fInoexec\fR は 環境変数 \f(CW\*(C`LD_PRELOAD\*(C'\fR
2301 ではなく、Solaris 特権を使用している。
2302 .Sp
2303 あるコマンドに対して \fInoexec\fR を有効にするには、
2304 上記「ユーザ設定」セクションで述べたように、
2305 \&\f(CW\*(C`NOEXEC\*(C'\fR タグを使用する。そのときの例を再掲しよう。
2306 .Sp
2307 .Vb 1
2308 \& aaron  shanty = NOEXEC: /usr/bin/more, /usr/bin/vi
2309 .Ve
2310 .Sp
2311 この例では、ユーザ \fBaaron\fR 対して、\fInoexec\fR を有効にした上で、
2312 \&\fI/usr/bin/more\fR と \fI/usr/bin/vi\fR の実行を許可している。
2313 このようにすれば、この二つのコマンドから
2314 (シェルのような) ほかのコマンドを実行することができなくなるわけだ。
2315 使用しているシステムが \fInoexec\fR に対応する能力があるかどうか
2316 よくわからない場合でも、取りあえず試してみることなら、いつだってできる。
2317 \&\fInoexec\fR を有効にして、
2318 シェル・エスケープが可能かどうか確かめてみればよいのだ。
2319 .PP
2320 注意してほしいが、シェル・エスケープの禁止は万能薬ではない。
2321 ルートの権限で動いているプログラムには、ほかにも、危険性のあるさまざまな作業
2322 (ファイルの中身を変更するとか、上書きしてしまうとか) が可能であり、
2323 思いがけずに権限を拡大してしまうこともありえるのだ。特にエディタについて言うと、
2324 ユーザには \fBsudoedit\fR を実行する許可を与えるのが、より安全な方法である。
2325 .SH "デバッグ・フラグ (sudo-1.8.4 の新機能)"
2326 .IX Header "DEBUG FLAGS"
2327 バージョン 1.8.4 以上の \fIsudoers\fR プラグインは、
2328 デバッグのための枠組みに対応しており、
2329 問題が発生したとき、プラグインの内部で何が起きているかを突き止めるために、
2330 それを利用することができる。
2331 その設定は、\fIsudo\fR\|(8) のマニュアルでも説明したように、
2332 \&\fI/etc/sudo.conf\fR ファイルで行うことが可能だ。
2333 .PP
2334 \&\fIsudoers\fR プラグインは、
2335 \&\fBsudo\fR そのものと同じデバッグ・フラグの書式を使用する。
2336 すなわち、\fIsubsystem\fR@\fIpriority\fR である。
2337 .PP
2338 \&\fIsudoers\fR が使用する priority (重大度) を深刻なものから挙げると、
2339 \fIcrit\fR, \fIerr\fR, \fIwarn\fR, \fInotice\fR, \fIdiag\fR, \fIinfo\fR,
2340 \&\fItrace\fR, \fIdebug\fR である。ある priority を指定すると、
2341 それより深刻なすべての priority も併せて指定したことになる。
2342 たとえば、\fInotice\fR という priority を指定すれば、
2343 \&\fInotice\fR レベル以上のデバッグメッセージがログに記録されるわけである。
2344 .PP
2345 \&\fIsudoers\fR では以下のサブシステムが使用できる。
2346 .IP "\fIalias\fR" 10
2347 .IX Item "alias"
2348 \&\f(CW\*(C`User_Alias\*(C'\fR, \f(CW\*(C`Runas_Alias\*(C'\fR,
2349 \&\f(CW\*(C`Host_Alias\*(C'\fR, \f(CW\*(C`Cmnd_Alias\*(C'\fR の処理
2350 .IP "\fIall\fR" 10
2351 .IX Item "all"
2352 あらゆるサブシステムにマッチする
2353 .IP "\fIaudit\fR" 10
2354 .IX Item "audit"
2355 Solaris \s-1BSM\s0 (Basic Security Module) と Linux の監査コード
2356 .IP "\fIauth\fR" 10
2357 .IX Item "auth"
2358 ユーザの認証
2359 .IP "\fIdefaults\fR" 10
2360 .IX Item "defaults"
2361 \&\fIsudoers\fR の \fIDefaults\fR 設定
2362 .IP "\fIenv\fR" 10
2363 .IX Item "env"
2364 環境の取扱い
2365 .IP "\fIldap\fR" 10
2366 .IX Item "ldap"
2367 LDAP を使用する sudoers
2368 .IP "\fIlogging\fR" 10
2369 .IX Item "logging"
2370 ロギングのサポート
2371 .IP "\fImatch\fR" 10
2372 .IX Item "match"
2373 \&\fIsudoers\fR におけるユーザ、グループ、ホスト、
2374 ネットグループのマッチング
2375 .IP "\fInetif\fR" 10
2376 .IX Item "netif"
2377 ネットワークインターフェースの取扱い
2378 .IP "\fInss\fR" 10
2379 .IX Item "nss"
2380 \&\fIsudoers\fR におけるネームサービス・スイッチの取扱い
2381 .IP "\fIparser\fR" 10
2382 .IX Item "parser"
2383 \&\fIsudoers\fR ファイルの解析
2384 .IP "\fIperms\fR" 10
2385 .IX Item "perms"
2386 パーミッションの設定
2387 .IP "\fIplugin\fR" 10
2388 .IX Item "plugin"
2389 プラグインにとって \fImain\fR に相当する
2390 .IP "\fIpty\fR" 10
2391 .IX Item "pty"
2392 擬似 tty に関連したコード
2393 .IP "\fIrbtree\fR" 10
2394 .IX Item "rbtree"
2395 赤黒木 (redblack tree) の内部情報
2396 .IP "\fIutil\fR" 10
2397 .IX Item "util"
2398 ユーティリティ関数群
2399 .SH "セキュリティに関する注意点"
2400 .IX Header "SECURITY NOTES"
2401 \&\fIsudoers\fR はタイムスタンプ・ディレクトリ (デフォルトでは
2402 \&\fI/var/lib/sudo\fR) の所有者を調べて、所有者が root でなかったり、
2403 root 以外のユーザにも書き込み可能だったりする場合には、
2404 そのディレクトリの内容を無視する。root 以外のユーザでも \fIchown\fR\|(2)
2405 を利用して、ファイルの所有者を変えられるシステムでは、
2406 タイムスタンプ・ディレクトリが (たとえば、\fI/tmp\fR といった)
2407 誰にでも書き込めるディレクトリにあると、一般ユーザが、\fBsudo\fR
2408 を実行する前にタイムスタンプ・ディレクトリを作成することが可能になる。もっとも、
2409 \&\fIsudoers\fR はタイムスタンプ・ディレクトリとその中身の、
2410 所有者とモードをチェックするので、起こりえる唯一の被害は、
2411 ファイルを「隠匿」する目的でそのディレクトリに入れておかれることぐらいだ。
2412 これはあまりありそうにないことである。
2413 なぜなら、タイムスタンプ・ディレクトリが root の所有になり、
2414 ほかのユーザによるアクセスが禁じられてしまうと、
2415 ファイルをそこに置いたユーザは、それを回収できなくなるからだ。
2416 .PP
2417 \&\fIsudoers\fR はあまりにも未来に設定されたタイムスタンプを認めない。
2418 タイムスタンプが「現在時 + 2 * \f(CW\*(C`TIMEOUT\*(C'\fR」
2419 より新しい日時だった場合、そのタイムスタンプは無視され、
2420 \&\fBsudo\fR がログに記録して、警告を発する。このようになっているのは、
2421 一般ユーザがファイルの所有者を変えられるシステムで、
2422 タイムスタンプ・ディレクトリが誰にでも書き込めるディレクトリにある場合に、
2423 ユーザがいい加減な日付を付けて勝手に自分のタイムスタンプを作れないようにするためである。
2424 .PP
2425 ブートタイムを参照できるシステムでは、
2426 タイムスタンプがマシンがブートするよりも前の日時になっている場合、
2427 \&\fIsudoers\fR はそれを無視する。
2428 .PP
2429 タイムスタンプ・ファイルはファイルシステム中に作られるので、
2430 ユーザのログイン・セッションが終わっても、残っている。
2431 そのため、次のようなことが起こりえる。ユーザがログインし、
2432 認証してから \fBsudo\fR を使ってコマンドを実行して、ログアウトする。
2433 再びログインして、認証なしで \fBsudo\fR を実行する。
2434 タイムスタンプ・ファイルの内容更新日時 (modification time) が
2435 \&\f(CW\*(C`5\*(C'\fR 分以内であれば
2436 (あるいは、\fIsudoers\fR で設定されたタイムアウト時間以内であれば)、
2437 そういうことが可能になってしまうのだ。
2438 \&\fItty_tickets\fR オプションが有効になっている場合、
2439 タイムスタンプは tty ごとに別々に作られるが、
2440 それでも、ユーザセッションが終わった後まで生き残ってしまう。devpts
2441 ファイルシステムを使用している Linux や、devices ファイルシステムを持つ Solaris、
2442 それに、デバイスを作成するごとに、その inode 番号をひたすら増やしていく
2443 devfs ファイルシステムを利用しているシステム (たとえば、Mac \s-1OS\s0 X) では、
2444 tty ごとのタイムスタンプ・ファイルがいつ用済みになるかを判定することができるので、
2445 \&\fIsudoers\fR はそうしたタイムスタンプ・ファイルを無視することになる。
2446 だが、システムの管理者はこの機能を当てにしない方がよい。
2447 どのシステムでも利用できるとはかぎらないからだ。
2448 .PP
2449 もし ユーザに許可するコマンドが \f(CW\*(C`ALL\*(C'\fR になっているならば、
2450 ユーザが自分でプログラムを作って
2451 (あるいは、シェルを自分専用に別の名前でコピーして)、
2452 ルート・シェルを獲得するのを防ぐことはできない。
2453 ユーザ設定でどんな項目に '!'  を付けようとも防止不可能である。
2454 .SH "関連項目"
2455 .IX Header "SEE ALSO"
2456 \&\fIrsh\fR\|(1), \fIsu\fR\|(1), \fIfnmatch\fR\|(3), \fIglob\fR\|(3), \fImktemp\fR\|(3), \fIstrftime\fR\|(3),
2457 \&\fIsudoers.ldap\fR\|(5), \fIsudo_plugin\fR\|(8), \fIsudo\fR\|(8), \fIvisudo\fR\|(8)
2458 .SH "警告"
2459 .IX Header "CAVEATS"
2460 \&\fIsudoers\fR ファイルの編集には、\fB必ず\fR \fBvisudo\fR
2461 コマンドを使うべきだ。
2462 そうすれば、\fBvisudo\fR がファイルをロックし、文法のチェックをやってくれる。
2463 \&\fIsudoers\fR ファイルに文法的な間違いがあると、\fBsudo\fR が動かないので、
2464 \&\fIsudoers\fR ファイルには文法エラーが絶対にあってはならないのだ。
2465 .PP
2466 ネットグループを (ユーザについてではなく) マシンについて使用し、
2467 \&\fInetgroup\fR ファイルに完全修飾ホスト名を記載する場合は
2468 (たいていそうするものだが)、そのマシンのホスト名を
2469 \&\f(CW\*(C`hostname\*(C'\fR コマンドが出力する通りの完全修飾名で書くか、
2470 さもなければ、\fIsudoers\fR ファイルで
2471 \&\fIfqdn\fR オプションを使うかしなければならない。
2472 .SH "バグ"
2473 .IX Header "BUGS"
2474 \&\fBsudo\fR にバグを発見したと思ったら、下記のページにアクセスして、
2475 バグレポートを提出していただきたい。
2476 .br
2477 http://www.sudo.ws/sudo/bugs/
2478 .SH "サポート"
2479 .IX Header "SUPPORT"
2480 ある程度の無料サポートが sudo-users メーリングリストを通して利用できる。
2481 購読やアーカイブの検索には下記 URL を御覧になること。
2482 .br
2483 http://www.sudo.ws/mailman/listinfo/sudo\-users
2484 .SH "免責"
2485 .IX Header "DISCLAIMER"
2486 \&\fBsudo\fR は「現状のまま」提供される。
2487 明示的な、あるいは黙示的ないかなる保証も、
2488 商品性や特定目的への適合性についての黙示的な保証を含め、
2489 またそれのみに止まらず、これを否認する。詳細な全文については、
2490 \&\fBsudo\fR と一緒に配布されている \s-1LICENSE\s0 ファイルや、
2491 下記 Web ページを御覧いただきたい。
2492 .br
2493 http://www.sudo.ws/sudo/license.html