OSDN Git Service

Convert release and draft pages to UTF-8.
[linuxjm/jm.git] / manual / sudo / release / man5 / sudoers.5
1 .\" Copyright (c) 1994-1996, 1998-2005, 2007-2009
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 .\"
33 .\" $Sudo: sudoers.man.in,v 1.80 2009/06/30 12:41:09 millert Exp $
34 .\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05)
35 .\"
36 .\" Standard preamble:
37 .\" ========================================================================
38 .de Sh \" Subsection heading
39 .br
40 .if t .Sp
41 .ne 5
42 .PP
43 \fB\\$1\fR
44 .PP
45 ..
46 .de Sp \" Vertical space (when we can't use .PP)
47 .if t .sp .5v
48 .if n .sp
49 ..
50 .de Vb \" Begin verbatim text
51 .ft CW
52 .nf
53 .ne \\$1
54 ..
55 .de Ve \" End verbatim text
56 .ft R
57 .fi
58 ..
59 .\" Set up some character translations and predefined strings.  \*(-- will
60 .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
61 .\" double quote, and \*(R" will give a right double quote.  \*(C+ will
62 .\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
63 .\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
64 .\" nothing in troff, for use with C<>.
65 .tr \(*W-
66 .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
67 .ie n \{\
68 .    ds -- \(*W-
69 .    ds PI pi
70 .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
71 .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
72 .    ds L" ""
73 .    ds R" ""
74 .    ds C` 
75 .    ds C' 
76 'br\}
77 .el\{\
78 .    ds -- \|\(em\|
79 .    ds PI \(*p
80 .    ds L" ``
81 .    ds R" ''
82 'br\}
83 .\"
84 .\" Escape single quotes in literal strings from groff's Unicode transform.
85 .ie \n(.g .ds Aq \(aq
86 .el       .ds Aq '
87 .\"
88 .\" If the F register is turned on, we'll generate index entries on stderr for
89 .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
90 .\" entries marked with X<> in POD.  Of course, you'll have to process the
91 .\" output yourself in some meaningful fashion.
92 .ie \nF \{\
93 .    de IX
94 .    tm Index:\\$1\t\\n%\t"\\$2"
95 ..
96 .    nr % 0
97 .    rr F
98 .\}
99 .el \{\
100 .    de IX
101 ..
102 .\}
103 .\"
104 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
105 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
106 .    \" fudge factors for nroff and troff
107 .if n \{\
108 .    ds #H 0
109 .    ds #V .8m
110 .    ds #F .3m
111 .    ds #[ \f1
112 .    ds #] \fP
113 .\}
114 .if t \{\
115 .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
116 .    ds #V .6m
117 .    ds #F 0
118 .    ds #[ \&
119 .    ds #] \&
120 .\}
121 .    \" simple accents for nroff and troff
122 .if n \{\
123 .    ds ' \&
124 .    ds ` \&
125 .    ds ^ \&
126 .    ds , \&
127 .    ds ~ ~
128 .    ds /
129 .\}
130 .if t \{\
131 .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
132 .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
133 .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
134 .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
135 .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
136 .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
137 .\}
138 .    \" troff and (daisy-wheel) nroff accents
139 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
140 .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
141 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
142 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
143 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
144 .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
145 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
146 .ds ae a\h'-(\w'a'u*4/10)'e
147 .ds Ae A\h'-(\w'A'u*4/10)'E
148 .    \" corrections for vroff
149 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
150 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
151 .    \" for low resolution devices (crt and lpr)
152 .if \n(.H>23 .if \n(.V>19 \
153 \{\
154 .    ds : e
155 .    ds 8 ss
156 .    ds o a
157 .    ds d- d\h'-1'\(ga
158 .    ds D- D\h'-1'\(hy
159 .    ds th \o'bp'
160 .    ds Th \o'LP'
161 .    ds ae ae
162 .    ds Ae AE
163 .\}
164 .rm #[ #] #H #V #F C
165 .\" ========================================================================
166 .\"
167 .IX Title "SUDOERS 5"
168 .TH SUDOERS 5 "June 30, 2009" "1.7.2p1" "MAINTENANCE COMMANDS"
169 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
170 .\" way too many mistakes in technical documents.
171 .if n .ad l
172 .nh
173 .SH "名前"
174 sudoers \- どのユーザが何を実行できるかのリスト
175 .SH "説明"
176 .IX Header "DESCRIPTION"
177 \&\fIsudoers\fR ファイルは二種類のエントリから構成されている。
178 (要するに変数である) エイリアスと (誰が何を実行できるかを
179 指定している) ユーザ設定だ。
180 .IP "[\fB訳注\fR]:" 8
181 .IX Item "footnote1"
182 訳者としては、「エイリアス、デフォルト指定、ユーザ設定の三種類の
183 エントリから構成されている」と言った方が実態に合っているのではないかと思う。
184 .PP
185 一人のユーザに複数のエントリがマッチするときは、順番に適用される。
186 複数の指定がマッチしている箇所については、最後にマッチしたものが
187 使用される (それが一番明示的なマッチだとはかぎらないが)。
188 .PP
189 以下では \fIsudoers\fR の文法を拡張 Backus-Naur 記法 (\s-1EBNF\s0) を
190 使って記述する。\s-1EBNF\s0 がどんなものか知らないからといって、
191 あきらめないでいただきたい。わりと簡単なものだし、以下に出てくる定義には
192 詳しい説明を付けておきますから。
193 .Sh "\s-1EBNF\s0 早わかり"
194 .IX Subsection "Quick guide to EBNF"
195 \&\s-1EBNF\s0 は言語の文法を記述する簡潔で厳密な方法である。
196 \&\s-1EBNF\s0 の個々の定義は生成規則からできている。たとえば、
197 .PP
198 .Vb 1
199 \& シンボル ::= 定義 | 別の定義 1 | 別の定義 2 ...
200 .Ve
201 .PP
202 個々の生成規則は、ほかの生成規則を参照し、そのようにして言語の文法を
203 作り上げている。また \s-1EBNF\s0 には以下の演算子が含まれるが、
204 正規表現で御存じの読者も多いだろう。だが、いわゆる「ワイルドカード」文字と
205 混同しないでいただきたい。あれは別の意味を持っている。
206 .ie n .IP "\*(C`?\*(C'" 4
207 .el .IP "\f(CW\*(C`?\*(C'\fR" 4
208 .IX Item "?"
209 直前のシンボル (または、シンボルのグループ) が、あってもなくてもよいことを
210 意味する。すなわちそのシンボルは、1 回現れてもよいし、1 回も現れないでもよい。
211 .ie n .IP "\*(C`*\*(C'" 4
212 .el .IP "\f(CW\*(C`*\*(C'\fR" 4
213 .IX Item "*"
214 直前のシンボル (または、シンボルのグループ) が 0 回以上現れる。
215 .ie n .IP "\*(C`+\*(C'" 4
216 .el .IP "\f(CW\*(C`+\*(C'\fR" 4
217 .IX Item "+"
218 直前のシンボル (または、シンボルのグループ) が 1 回以上現れる。
219 .PP
220 丸カッコを使うと、複数のシンボルをグループにまとめることができる。
221 なお混乱を避けるため、以下の定義で (シンボル名ではなく) 文字どおりの
222 文字列や記号を示す場合は、それをシングルクォート ('') で囲むことにする。
223 .Sh "エイリアス"
224 .IX Subsection "Aliases"
225 エイリアスには四種類ある。\f(CW\*(C`User_Alias\*(C'\fR,
226 \&\f(CW\*(C`Runas_Alias\*(C'\fR, \f(CW\*(C`Host_Alias\*(C'\fR,
227 \&\f(CW\*(C`Cmnd_Alias\*(C'\fR である。
228 .PP
229 .Vb 4
230 \& Alias ::= \*(AqUser_Alias\*(Aq  User_Alias (\*(Aq:\*(Aq User_Alias)* |
231 \&           \*(AqRunas_Alias\*(Aq Runas_Alias (\*(Aq:\*(Aq Runas_Alias)* |
232 \&           \*(AqHost_Alias\*(Aq  Host_Alias (\*(Aq:\*(Aq Host_Alias)* |
233 \&           \*(AqCmnd_Alias\*(Aq  Cmnd_Alias (\*(Aq:\*(Aq Cmnd_Alias)*
234 \&
235 \& User_Alias ::= NAME \*(Aq=\*(Aq User_List
236 \&
237 \& Runas_Alias ::= NAME \*(Aq=\*(Aq Runas_List
238 \&
239 \& Host_Alias ::= NAME \*(Aq=\*(Aq Host_List
240 \&
241 \& Cmnd_Alias ::= NAME \*(Aq=\*(Aq Cmnd_List
242 \&
243 \& NAME ::= [A\-Z]([A\-Z][0\-9]_)*
244 .Ve
245 .PP
246 個々のエイリアスの定義は、次の形をとる。
247 .PP
248 .Vb 1
249 \& Alias_Type NAME = item1, item2, ...
250 .Ve
251 .PP
252 上記において、\fIAlias_Type\fR は \f(CW\*(C`User_Alias\*(C'\fR,
253 \&\f(CW\*(C`Runas_Alias\*(C'\fR, \f(CW\*(C`Host_Alias\*(C'\fR,
254 \&\f(CW\*(C`Cmnd_Alias\*(C'\fR のうちの一つである。
255 \&\f(CW\*(C`NAME\*(C'\fR はアルファベットの大文字、数字、
256 アンダースコア ('_') からなる文字列であるが、\fB先頭の文字は大文字\fRで
257 なければならない。同じタイプのエイリアス定義を、コロンで (':') つないで、
258 一行に複数書くこともできる。たとえば、
259 .PP
260 .Vb 1
261 \& Alias_Type NAME = item1, item2, item3 : NAME = item4, item5
262 .Ve
263 .PP
264 以下では、エイリアスの有効な要素となるものを定義する。
265 .PP
266 .Vb 2
267 \& User_List ::= User |
268 \&               User \*(Aq,\*(Aq User_List
269 \&
270 \& User ::= \*(Aq!\*(Aq* username |
271 \&          \*(Aq!\*(Aq* \*(Aq#\*(Aquid |
272 \&          \*(Aq!\*(Aq* \*(Aq%\*(Aqgroup |
273 \&          \*(Aq!\*(Aq* \*(Aq+\*(Aqnetgroup |
274 \&          \*(Aq!\*(Aq* \*(Aq%:\*(Aqnonunix_group |
275 \&          \*(Aq!\*(Aq* User_Alias
276 .Ve
277 .PP
278 \&\f(CW\*(C`User_List\*(C'\fR は一個以上の、ユーザ名、uid ('#' が
279 頭に付く)、システムグループ名 ('%' が頭に付く) 、ネットグループ名
280 ('+' が頭に付く)、非 UNIX グループ名 ('%:' が頭に付く)、
281 \&\f(CW\*(C`User_Alias\*(C'\fR からなる。
282 リストの各項目の前には一個以上の '!' 演算子を付けてもよい。
283 奇数個の '!' はその項目の値を否定する。偶数個の場合は互い相殺するだけだ。
284 .PP
285 ユーザ名、グループ名、ネットグループ名、非 UNIX グループ名は、
286 ダブルクォートで囲めば、特殊文字をエスケープしないですむ。
287 ダブルクォートで囲まずに特殊文字を使いたいなら、エスケープした 16 進数を
288 指定してやればよい。たとえば、スペースなら \ex20 という具合だ。
289 .PP
290 非 UNIX グループ名の書式は、利用するサービスの実装によって決まる。たとえば、
291 \&\s-1Quest Authentication Services\s0 の \s-1AD\s0 バックエンドは、
292 以下の書式をサポートしている。
293 .IP "\(bu" 4
294 同じドメインのグループ:  \*(L"Group Name\*(R"
295 .IP "\(bu" 4
296 任意のドメインのグループ:  \*(L"Group Name@FULLY.QUALIFIED.DOMAIN\*(R"
297 .IP "\(bu" 4
298 グループ \s-1SID:\s0 \*(L"S\-1\-2\-34\-5678901234\-5678901234\-5678901234\-567\*(R"
299 .PP
300 グループ名を囲む引用符は任意であることに注意してほしい。文字列を
301 引用符で囲まない場合は、スペースや '@' 記号をエスケープするために、
302 バックスラッシュ (\e) を使わなければならない。
303 .PP
304 .Vb 2
305 \& Runas_List ::= Runas_Member |
306 \&                Runas_Member \*(Aq,\*(Aq Runas_List
307 \&
308 \& Runas_Member ::= \*(Aq!\*(Aq* username |
309 \&                  \*(Aq!\*(Aq* \*(Aq#\*(Aquid |
310 \&                  \*(Aq!\*(Aq* \*(Aq%\*(Aqgroup |
311 \&                  \*(Aq!\*(Aq* +netgroup |
312 \&                  \*(Aq!\*(Aq* Runas_Alias
313 .Ve
314 .PP
315 \&\f(CW\*(C`Runas_List\*(C'\fR は \f(CW\*(C`User_List\*(C'\fR に似ている。
316 違うのは、\f(CW\*(C`User_Alias\*(C'\fR ではなく、
317 \&\f(CW\*(C`Runas_Alias\*(C'\fR が使えることだ。ユーザ名やグループ名の
318 マッチは文字列として行われることに気を付けてほしい。言い換えると、
319 二つのユーザ名 (あるいはグループ名) は、かりに同じ uid (gid) を
320 持っていても、別個のものと見なされるのである。
321 だから、もし同じ uid を持ったすべてのユーザ名にマッチさせたかったら 
322 (たとえば、root と toor がそうだとしよう)、ユーザ名の代わりに uid を
323 使えばよい (この例なら、#0 である)。
324 .PP
325 .Vb 2
326 \& Host_List ::= Host |
327 \&               Host \*(Aq,\*(Aq Host_List
328 \&
329 \& Host ::= \*(Aq!\*(Aq* hostname |
330 \&          \*(Aq!\*(Aq* ip_addr |
331 \&          \*(Aq!\*(Aq* network(/netmask)? |
332 \&          \*(Aq!\*(Aq* \*(Aq+\*(Aqnetgroup |
333 \&          \*(Aq!\*(Aq* Host_Alias
334 .Ve
335 .PP
336 \&\f(CW\*(C`Host_List\*(C'\fR は一個以上の、ホスト名、\s-1IP\s0 アドレス、
337 ネットワークアドレス、ネットグループ名 (頭に '+' が付く)、および
338 他のエイリアスからなる。ここでもまた、'!' 演算子を付けて、項目の値を
339 否定することができる。ネットワークアドレスにネットマスクを
340 指定しなかった場合は、\fBsudo\fR がローカルホストの
341 ネットワークインターフェースを一つ一つ参照し、指定された
342 ネットワークアドレスと同じアドレスを持つインターフェースがあれば、
343 そのネットマスクを使用することになる。ネットマスクの指定は、
344 標準の \s-1IP\s0 アドレス表記 (たとえば 255.255.255.0 とか 
345 ffff:ffff:ffff:ffff:: とか) でもよく、\&\s-1CIDR\s0 表記 (ビット数、
346 たとえば 24 とか 64 とか) でもよい。ホスト名の一部にシェル風の
347 ワイルドカードを使用することができるが (下記のワイルドカードのセクションを
348 参照)、使用マシンの \f(CW\*(C`hostname\*(C'\fR コマンドが
349 完全修飾ドメイン名を返さない場合、ワイルドカードを
350 利用するには \fIfqdn\fR オプションを使う必要がある。
351 .PP
352 .Vb 2
353 \& Cmnd_List ::= Cmnd |
354 \&               Cmnd \*(Aq,\*(Aq Cmnd_List
355 \&
356 \& commandname ::= filename |
357 \&                 filename args |
358 \&                 filename \*(Aq""\*(Aq
359 \&
360 \& Cmnd ::= \*(Aq!\*(Aq* commandname |
361 \&          \*(Aq!\*(Aq* directory |
362 \&          \*(Aq!\*(Aq* "sudoedit" |
363 \&          \*(Aq!\*(Aq* Cmnd_Alias
364 .Ve
365 .PP
366 \&\f(CW\*(C`Cmnd_List\*(C'\fR は一個以上の、コマンド名、ディレクトリ、
367 他のエイリアスからなるリストである。コマンド名は絶対パスのファイル名で
368 あり、シェル風のワイルドカードを含んでいても構わない (下記のワイルドカードの
369 セクションを参照)。単にファイル名だけ指定した場合、ユーザはお望みの
370 どんな引き数でも付けてそのコマンドを実行することができる。とは言え、
371 コマンドライン引き数を (ワイルドカードを含めて) 指定しても構わないし、
372 また、引き数に \f(CW""\fR を指定して、そのコマンドは
373 \&\fBコマンドライン引き数なし\fRの実行のみが可能だと指示することもできる。
374 ディレクトリは '/' で終わる絶対パス名である。
375 \&\f(CW\*(C`Cmnd_List\*(C'\fR に
376 ディレクトリを指定すると、ユーザーはそのディレクトリ内の任意のファイルを
377 実行できるようになる (だが、そのサブディレクトリにあるファイルは実行できない)。
378 .PP
379 \&\f(CW\*(C`Cmnd\*(C'\fR がコマンドライン引き数を伴っている場合は、
380 \&\f(CW\*(C`Cmnd\*(C'\fR 中の引き数は、ユーザがコマンドラインに打ち込む
381 引き数と正確に一致しなければならない (Cmnd 中の引き数にワイルドカードが
382 あるならば、それがコマンドラインの引き数とマッチしなければならない)。
383 以下に挙げる文字をコマンド引き数の中で用いるときは、'\e' によって
384 エスケープしなければならないことに注意してほしい。 ',', ':', '=', '\e' が
385 それである。スペシャルコマンド \f(CW"sudoedit"\fR は、ユーザが 
386 \&\fBsudo\fR を \fB-e\fR オプション付きで (あるいは、\fBsudoedit\fR という
387 コマンド名で) 実行することを許可するために使用する。この場合、
388 コマンドライン引き数を取ることができるのは、普通のコマンドとまったく
389 同様である。
390 .Sh "デフォルトの指定 (Defaults)"
391 .IX Subsection "Defaults"
392 かなりの設定オプションが、一行以上の \f(CW\*(C`Default_Entry\*(C'\fR 行を
393 使うことで実行時にデフォルトの値から変更可能だ。その効果の及ぶ範囲は、
394 任意のホストのすべてのユーザにすることもできるし、ある特定のホストの
395 すべてのユーザ、ある特定のユーザ、ある特定のコマンド、
396 ある特定のユーザとして実行するコマンドに限定することもできる。
397 気を付けてほしいのは、コマンドに限定した Defaults 行に
398 コマンドライン引き数まで書くことができないことだ。引き数を指定する必要が
399 ある場合は、\f(CW\*(C`Cmnd_Alias\*(C'\fR を定義して、代わりにそれを
400 参照すればよい。
401 .PP
402 .Vb 5
403 \& Default_Type ::= \*(AqDefaults\*(Aq |
404 \&                  \*(AqDefaults\*(Aq \*(Aq@\*(Aq Host_List |
405 \&                  \*(AqDefaults\*(Aq \*(Aq:\*(Aq User_List |
406 \&                  \*(AqDefaults\*(Aq \*(Aq!\*(Aq Cmnd_List |
407 \&                  \*(AqDefaults\*(Aq \*(Aq>\*(Aq Runas_List
408 \&
409 \& Default_Entry ::= Default_Type Parameter_List
410 \&
411 \& Parameter_List ::= Parameter |
412 \&                    Parameter \*(Aq,\*(Aq Parameter_List
413 \&
414 \& Parameter ::= Parameter \*(Aq=\*(Aq Value |
415 \&               Parameter \*(Aq+=\*(Aq Value |
416 \&               Parameter \*(Aq\-=\*(Aq Value |
417 \&               \*(Aq!\*(Aq* Parameter
418 .Ve
419 .PP
420 パラメータは\fBフラグ\fR、\fB整数値\fR、\fB文字列\fR、\fBリスト\fR の
421 どれでもよい。フラグは要するにブーリアン (真偽値) であり、'!' 演算子で 
422 off にできる。整数値、文字列、リストのパラメータにも、真偽値として使用して、
423 それを無効にできるものがいくつか存在する。パラメータの値が複数の単語を
424 含むときは、値をダブルクオート (\f(CW\*(C`"\*(C'\fR) で囲むとよい。
425 特殊文字はバックスラッシュ (\f(CW\*(C`\e\*(C'\fR) でエスケープすることが
426 できる。
427 .PP
428 リストには代入演算子が \f(CW\*(C`\=\*(C'\fR のほかにもう二つある。
429 \&\f(CW\*(C`+=\*(C'\fR と \f(CW\*(C`\-=\*(C'\fR である。こうした演算子は
430 それぞれリストに付け加えたり、リストから削除したりするのに使用する。
431 \&\f(CW\*(C`\-=\*(C'\fR 演算子を使って、リストに存在しない要素を
432 消去しようとしても、エラーにはならない。
433 .PP
434 Defaults 行の解析は、次の順序で行われる。最初に汎用、Host、User の
435 Defaults が解析され、それから Runas、最後にコマンドの Defaults の順番になる。
436 .PP
437 Defaults 行で使用できるパラメータのリストについては、
438 「SUDOERS のオプション」を御覧いただきたい。
439 .Sh "ユーザの設定 (User Specification)"
440 .IX Subsection "User Specification"
441 .Vb 2
442 \& User_Spec ::= User_List Host_List \*(Aq=\*(Aq Cmnd_Spec_List \e
443 \&               (\*(Aq:\*(Aq Host_List \*(Aq=\*(Aq Cmnd_Spec_List)*
444 \&
445 \& Cmnd_Spec_List ::= Cmnd_Spec |
446 \&                    Cmnd_Spec \*(Aq,\*(Aq Cmnd_Spec_List
447 \&
448 \& Cmnd_Spec ::= Runas_Spec? Tag_Spec* Cmnd
449 \&
450 \& Runas_Spec ::= \*(Aq(\*(Aq Runas_List? (\*(Aq:\*(Aq Runas_List)? \*(Aq)\*(Aq
451 \&
452 \& Tag_Spec ::= (\*(AqNOPASSWD:\*(Aq | \*(AqPASSWD:\*(Aq | \*(AqNOEXEC:\*(Aq | \*(AqEXEC:\*(Aq |
453 \&               \*(AqSETENV:\*(Aq | \*(AqNOSETENV:\*(Aq )
454 .Ve
455 .PP
456 \&\fBユーザの設定\fRは、あるユーザが指定されたホストで (どのユーザに
457 変身して) どのコマンドを実行できるかを決定する。デフォルトでは、
458 コマンドは \fBroot\fR に変身して実行されるが、これはコマンドごとに
459 変更することができる。
460 .PP
461 ユーザの設定の基本構造は、「誰が どこで = (誰に変身して) 何を」
462 である (who where = (as_whom) what)。
463 構成部分に分けて説明しよう。
464 .Sh "Runas_Spec (どのユーザやグループに変身できるか)"
465 .IX Subsection "Runas_Spec"
466 \&\f(CW\*(C`Runas_Spec\*(C'\fR は変身の対象となるユーザやグループを
467 規定している。完全な形の  \f(CW\*(C`Runas_Spec\*(C'\fR は、(上で定義して
468 いるように) コロン (':') で区切られ、カッコで囲まれた、二つの 
469 \&\f(CW\*(C`Runas_List\*(C'\fR からなっている。
470 一つ目の \f(CW\*(C`Runas_List\*(C'\fR は、
471 \&\fBsudo\fR で \fB\-u\fR オプションを使ったときに変身できるユーザを
472 指している。二番目の方が規定しているのは、\fBsudo\fR の \fB\-g\fR
473 オプションによって指定できるグループのリストだ。
474 両方の \f(CW\*(C`Runas_List\*(C'\fR が指定されている場合は、
475 それぞれの \f(CW\*(C`Runas_List\*(C'\fR にリストされているユーザと
476 グループの任意の組み合わせで、コマンドを実行することが可能である。
477 一つ目の \f(CW\*(C`Runas_List\*(C'\fR だけが指定されているときは、
478 リスト中のいかなるユーザにでも変身してコマンドを実行できるが、
479 \&\fB\-g\fR オプションを指定することはできない。
480 一つ目の \f(CW\*(C`Runas_List\*(C'\fR が空で、二番目だけ指定されている場合は、
481 \&\fBsudo\fR を実行するユーザの資格で、グループを
482 \&\f(CW\*(C`Runas_List\*(C'\fR にリストされている任意のグループに設定して、
483 コマンドを実行することができる。\f(CW\*(C`Runas_Spec\*(C'\fR がまったく
484 指定されていないときは、
485 \&\fBroot\fR としてコマンドを実行できるが、グループを指定することはできない。
486 .PP
487 \&\f(CW\*(C`Runas_Spec\*(C'\fR は、それに続くコマンドに対してデフォルトを
488 定める。それはどういうことかと言うと、次のようなエントリがあったとしよう。
489 .PP
490 .Vb 1
491 \& dgb    boulder = (operator) /bin/ls, /bin/kill, /usr/bin/lprm
492 .Ve
493 .PP
494 ユーザ \fBdgb\fR は \fI/bin/ls\fR, \fI/bin/kill\fR,
495 \&\fI/usr/bin/lprm\fR を実行することができる。ただし、\&\fBoperator\fR 
496 として実行できるだけだ。たとえば、次のようにである。
497 .PP
498 .Vb 1
499 \& $ sudo \-u operator /bin/ls
500 .Ve
501 .PP
502 エントリの後ろの方の \f(CW\*(C`Runas_Spec\*(C'\fR を変更することも可能だ。
503 上のエントリをこんなふうに書き変えたとしよう。
504 .PP
505 .Vb 1
506 \& dgb    boulder = (operator) /bin/ls, (root) /bin/kill, /usr/bin/lprm
507 .Ve
508 .PP
509 すると、ユーザ \fBdgb\fR は、\fI/bin/ls\fR こそ \fBoperator\fR としてだが、
510 \&\fI/bin/kill\fR や \fI/usr/bin/lprm\fR は \fBroot\fR の資格で
511 実行できるようになる。
512 .PP
513 \&\fBdgb\fR が \f(CW\*(C`/bin/ls\*(C'\fR を実行するとき、
514 変身対象ユーザとグループのどちらでも \fBoperator\fR にできるように、
515 この記述を拡張することもできる。
516 .PP
517 .Vb 2
518 \& dgb    boulder = (operator : operator) /bin/ls, (root) /bin/kill, \e
519 \&        /usr/bin/lprm
520 .Ve
521 .PP
522 次の例では、ユーザ \fBtcm\fR が モデムのデバイスファイルにアクセスする
523 コマンドを dialer グループとして実行できるようにしている。
524 この例では、グループしか指定できないことに注意してほしい。コマンドは
525 ユーザ \fBtcm\fR の資格で実行されるのである。
526 .PP
527 .Vb 2
528 \& tcm    boulder = (:dialer) /usr/bin/tip, /usr/bin/cu, \e
529 \&        /usr/local/bin/minicom
530 .Ve
531 .Sh "Tag_Spec"
532 .IX Subsection "Tag_Spec"
533 コマンドは 0 個以上のタグを伴うことができる。タグの値としては、 
534 \&\f(CW\*(C`NOPASSWD\*(C'\fR, \f(CW\*(C`PASSWD\*(C'\fR,
535 \&\f(CW\*(C`NOEXEC\*(C'\fR, \f(CW\*(C`EXEC\*(C'\fR,
536 \&\f(CW\*(C`SETENV\*(C'\fR, \f(CW\*(C`NOSETENV\*(C'\fR の六つが可能で
537 ある。ある \f(CW\*(C`Cmnd\*(C'\fR にタグをセットすると、
538 \&\f(CW\*(C`Cmnd_Spec_List\*(C'\fR 中のそれ以後の 
539 \&\f(CW\*(C`Cmnd\*(C'\fR は、反対の意味を持つタグによって変更されないかぎり、
540 そのタグを継承する (すなわち、\f(CW\*(C`PASSWD\*(C'\fR は 
541 \&\f(CW\*(C`NOPASSWD\*(C'\fR を上書きし、\f(CW\*(C`NOEXEC\*(C'\fR は 
542 \&\f(CW\*(C`EXEC\*(C'\fR を上書きするわけだ)。
543 .PP
544 \fI\s-1NOPASSWD\s0 と \s-1PASSWD\s0\fR
545 .IX Subsection "NOPASSWD and PASSWD"
546 .PP
547 デフォルトでは、\fBsudo\fR はコマンドを実行する前に、
548 ユーザが本人であることを証明するように求める。この振舞いは 
549 \&\f(CW\*(C`NOPASSWD\*(C'\fR タグによって変更することができる。
550 \&\f(CW\*(C`Runas_Spec\*(C'\fR と同様、\f(CW\*(C`NOPASSWD\*(C'\fR タグも 
551 \&\f(CW\*(C`Cmnd_Spec_List\*(C'\fR 中のそれに続くコマンドに対して
552 デフォルトを定める。\f(CW\*(C`PASSWD\*(C'\fR の働きは反対であり、
553 振舞いを元に戻したいときに使える。たとえば、
554 .PP
555 .Vb 1
556 \& ray    rushmore = NOPASSWD: /bin/kill, /bin/ls, /usr/bin/lprm
557 .Ve
558 .PP
559 とすれば、ユーザ \fBray\fR はマシン rushmore 上で認証をしないでも 
560 \&\fBroot\fR として \fI/bin/kill\fR, \fI/bin/ls\fR,
561 \&\fI/usr/bin/lprm\fR を実行できるようになる。もし \fBray\fR が
562 パスワードなしで実行できるコマンドを \fI/bin/kill\fR だけに
563 絞りたいのなら、エントリはこうなるだろう。
564 .PP
565 .Vb 1
566 \& ray    rushmore = NOPASSWD: /bin/kill, PASSWD: /bin/ls, /usr/bin/lprm
567 .Ve
568 .PP
569 ただし、ユーザが \fIexempt_group\fR オプションで指定されているグループに
570 属する場合は、\f(CW\*(C`PASSWD\*(C'\fR タグが効果を持たないことに
571 注意してほしい。
572 .PP
573 デフォルトでは、現在使用中のホストに関するユーザのエントリのうちに 
574 \&\f(CW\*(C`NOPASSWD\*(C'\fR タグが指定されているものが一つでもあれば、
575 そのユーザはパスワードなしで \f(CW\*(C`sudo \-l\*(C'\fR を実行できる。
576 なお、ユーザがパスワードなしで \f(CW\*(C`sudo \-v\*(C'\fR を実行できるのは、
577 現在使用中のホストに関するそのユーザのエントリのすべてで
578 \&\f(CW\*(C`NOPASSWD\*(C'\fR タグが生きているときのみである。この動作は、
579 \&\fIverifypw\fR や \fIlistpw\fR オプションによって変更できる。
580 .PP
581 \fI\s-1NOEXEC\s0 と \s-1EXEC\s0\fR
582 .IX Subsection "NOEXEC and EXEC"
583 .PP
584 \&\fBsudo\fR が \fInoexec\fR サポートつきでコンパイルされ、
585 下で稼働しているオペレーティングシステムがそれに対応している場合、
586 \&\f(CW\*(C`NOEXEC\*(C'\fR タグを利用すれば、動的にリンクされた実行ファイルが
587 そこからさらにコマンドを実行するのを防ぐことができる。
588 .PP
589 次の例では、ユーザ \fBaaron\fR は \fI/usr/bin/more\fR と 
590 \&\fI/usr/bin/vi\fR を実行できるが、シェル・エスケープは利用できない。
591 .PP
592 .Vb 1
593 \& aaron  shanty = NOEXEC: /usr/bin/more, /usr/bin/vi
594 .Ve
595 .PP
596 \&\f(CW\*(C`NOEXEC\*(C'\fR がどんなふうに働くのか、お使いのシステムで
597 利用できるかどうか、などについてさらに詳しく知りたかったら、
598 「シェル・エスケープを防止する」のセクションを御覧になっていただきたい。
599 .PP
600 \fI\s-1SETENV\s0 と \s-1NOSETENV\s0\fR
601 .IX Subsection "SETENV and NOSETENV"
602 .PP
603 上記のタグは \fIsetenv\fR オプションの値をコマンドごとに変更する。
604 注意すべきは、あるコマンドに対して \f(CW\*(C`SETENV\*(C'\fR が
605 設定されていると、コマンドラインから設定するどんな環境変数も \fIenv_check\fR,
606 \&\fIenv_delete\fR, \fIenv_keep\fR による規制を受けないということである。
607 だから、そうした形で環境変数を設定することを許可するのは、
608 信用できるユーザだけに限るべきだ。なお、マッチするコマンドが
609 \&\fB\s-1ALL\s0\fR だった場合は、暗黙のうちに \f(CW\*(C`SETENV\*(C'\fR タグが
610 そのコマンドに付けられるが、このデフォルトの動作は
611 \&\f(CW\*(C`UNSETENV\*(C'\fR タグを使えば打ち消すことができる。
612 .Sh "ワイルドカード"
613 .IX Subsection "Wildcards"
614 \&\fIsudoers\fR ファイルでは、ホスト名、コマンドラインのパス名、
615 コマンドラインの引き数にシェル形式のワイルドカード (メタ文字とか
616 glob キャラクタとも言う) が使用できる。ワイルドカードのマッチングは
617 \&\fB\s-1POSIX\s0\fR の \fIglob\fR\|(3) と \fIfnmatch\fR\|(3)
618 ルーティンを用いて行われる。\fB以下のものは正規表現ではない\fRことに
619 注意してほしい。
620 .ie n .IP "\*(C`*\*(C'" 8
621 .el .IP "\f(CW\*(C`*\*(C'\fR" 8
622 .IX Item "*"
623 ゼロ個以上の任意の文字にマッチする。
624 .ie n .IP "\*(C`?\*(C'" 8
625 .el .IP "\f(CW\*(C`?\*(C'\fR" 8
626 .IX Item "?"
627 任意の一文字にマッチする。
628 .ie n .IP "\*(C`[...]\*(C'" 8
629 .el .IP "\f(CW\*(C`[...]\*(C'\fR" 8
630 .IX Item "[...]"
631 指定された範囲の任意の一文字にマッチする。
632 .ie n .IP "\*(C`[!...]\*(C'" 8
633 .el .IP "\f(CW\*(C`[!...]\*(C'\fR" 8
634 .IX Item "[!...]"
635 指定された範囲\fB以外\fRの任意の一文字にマッチする。
636 .ie n .IP "\*(C`\ex\*(C'" 8
637 .el .IP "\f(CW\*(C`\ex\*(C'\fR" 8
638 .IX Item "x"
639 \&\*(L"x\*(R" がどんな文字であっても、\*(L"x\*(R" そのものとして
640 評価する。これは \*(L"*\*(R", \*(L"?\*(R", \*(L"[\*(R", \*(L"}\*(R" といった
641 特殊文字をエスケープするために使用する。
642 .PP
643 使用システムの \fIglob\fR\|(3) や \fIfnmatch\fR\|(3) 関数が
644 \&\s-1POSIX\s0 の文字クラスに対応しているなら、文字クラスも使用できる。
645 ただし、\f(CW\*(Aq:\*(Aq\fR 文字は、\fIsudoers\fR で特別な意味を
646 持っているので、エスケープしなければならない。一例を上げると、
647 .PP
648 .Vb 1
649 \&    /bin/ls [[\e:alpha\e:]]*
650 .Ve
651 .PP
652 上記は、文字で始まるどんなファイル名にもマッチするだろう。
653 .PP
654 コマンドのパス名に使われたワイルドカードはフォワードスラッシュ ('/') 
655 に\fBマッチしない\fRことに注意してほしい。だが、コマンドライン引き数との
656 マッチングでは、ワイルドカードはスラッシュと\fBしっかりマッチする\fR。
657 そこで、
658 .PP
659 .Vb 1
660 \&    /usr/bin/*
661 .Ve
662 .PP
663 というコマンドパスは、\fI/usr/bin/who\fR とマッチするが、
664 \&\fI/usr/bin/X11/xterm\fR とはマッチしないことになる。
665 .Sh "ワイルドカード・ルールの例外"
666 .IX Subsection "Exceptions to wildcard rules"
667 上記ルールには次の例外がある。
668 .ie n .IP """""" 8
669 .el .IP "\f(CW``''\fR" 8
670 .IX Item """"""
671 \&\fIsudoers\fR ファイルのエントリにおいて、空文字列 \f(CW""\fR が唯一
672 のコマンドライン引き数だった場合は、そのコマンドに\fBいかなる\fR引き数を付
673 けて実行することも許されないということである。
674 .Sh "sudoers に他のファイルをインクルードする"
675 .IX Subsection "Including other files from within sudoers"
676 \&\f(CW\*(C`#include\*(C'\fR 命令や \f(CW\*(C`#includedir\*(C'\fR 命令を
677 使えば、現在解析中の \fIsudoers\fR ファイルに外部にあるほかの
678 \&\fIsudoers\fR ファイルをインクルードすることができる。
679 .PP
680 この方法を使えば、たとえば、サイト全体で使用する \fIsudoers\fR ファイルの
681 ほかに、マシンごとのローカルな \fIsudoers\fR ファイルを持つことができる。
682 ここでは、サイト全体の \fIsudoers\fR を \fI/etc/sudoers\fR とし、
683 マシンごとの方は \fI/etc/sudoers.local\fR とすることにしよう。
684 \&\fI/etc/sudoers\fR に \fI/etc/sudoers.local\fR をインクルードするには、
685 \&\fI/etc/sudoers\fR 中に次の行を書き込む。
686 .Sp
687 .RS 4
688 \&\f(CW\*(C`#include /etc/sudoers.local\*(C'\fR
689 .RE
690 .PP
691 \&\fBsudo\fR は解析中この行に出会うと、カレントファイル
692 (\fI/etc/sudoers\fR だ) の処理を一時中止し、処理の対象を
693 \&\fI/etc/sudoers.local\fR に切り替える。そして、
694 \&\fI/etc/sudoers.local\fR の末尾まで達したら、\fI/etc/sudoers\fR の
695 残りを処理するのだ。インクルードされたファイルがさらに他のファイルを
696 インクルードしてもよい。インクルートのネストには 128 ファイルまでという
697 ハード・リミットがあって、インクルードファイルのループが起きないように
698 なっている。
699 .PP
700 ファイル名には \f(CW%h\fR エスケープが使える。これはホスト名の短縮形を
701 示している。たとえば、マシンのホスト名が \*(L"xerxes\*(R" のとき、
702 .PP
703 \&\f(CW\*(C`#include /etc/sudoers.%h\*(C'\fR
704 .PP
705 と書けば、\fBsudo\fR はファイル \fI/etc/sudoers.xerxes\fR をインクルード
706 することになる。
707 .PP
708 \&\f(CW\*(C`#includedir\*(C'\fR 命令を使えば、\fIsudo.d\fR ディレクトリを
709 作っておいて、システムのパッケージ管理者がパッケージをインストールする過程で
710 \&\fIsudoers\fR のルールを記したファイルをそこに入れてやる、といったことが
711 可能になる。たとえば、次のように書くと、
712 .PP
713 \&\f(CW\*(C`#includedir /etc/sudoers.d\*(C'\fR
714 .PP
715 \&\fBsudo\fR は \fI/etc/sudoers.d\fR にあるファイルを一つづつ読み込む。
716 ただし、末尾が \f(CW\*(C`~\*(C'\fR だったり、\f(CW\*(C`.\*(C'\fR 文字を
717 含んでいたりするファイル名はスキップするが、これは パッケージマネージャや
718 エディタが作った、テンポラリファイルやバックアップファイルを読み込むような
719 問題を起こさないためである。ファイルは辞書順にソートされて、解析される。
720 すなわち、\fI/etc/sudoers.d/01_first\fR が \fI/etc/sudoers.d/10_second\fR
721 より前に解析されるということだ。ソートは辞書順であって、数値の順では
722 ないので、\fI/etc/sudoers.d/1_whoops\fR というファイルがあっても、
723 \&\fI/etc/sudoers.d/10_second\fR \fBより後で\fRロードされることに
724 注意してほしい。ファイル名の先頭を 0 で埋めて数字の桁を揃えれば、
725 こうした問題を回避することができる。
726 .PP
727 気を付けてほしいが、\f(CW\*(C`#include\*(C'\fR でインクルードされた
728 ファイルとは違って (訳注: \fBvisudo\fR は \fI/etc/sudoers\fR を
729 編集するとき、\f(CW\*(C`#include\*(C'\fR で指定したファイルがあれば、
730 続けてそれも編集する)、
731 \&\fBvisudo\fR が \f(CW\*(C`#includedir\*(C'\fR で指定したディレクトリの
732 ファイルまで編集するのは、シンタクスエラーを含むものがあるときだけである。
733 とは言え、\fBvisudo\fR を \f(CW\*(C`\-f\*(C'\fR オプション付きで実行して、
734 ディレクトリ中のファイルを直接編集することは可能だ。
735 .Sh "ほかの特殊文字と予約語"
736 .IX Subsection "Other special characters and reserved words"
737 パウンド記号 ('#') はコメントを示すのに使用される (例外は、#include 命令の
738 一部であるときや、ユーザ名に関連して現れ、その後に一個以上の数字が
739 続くときであり、後者の場合は uid と見なされる)。コメント記号と
740 それに続くテキストは、行末にいたるまで無視される。
741 .PP
742 予約語 \fB\s-1ALL\s0\fR は組込みのエイリアスであり、何に対してでも
743 マッチする。\fB\s-1ALL\s0\fR は、\f(CW\*(C`Cmnd_Alias\*(C'\fR,
744 \&\f(CW\*(C`User_Alias\*(C'\fR, \f(CW\*(C`Runas_Alias\*(C'\fR,
745 \&\f(CW\*(C`Host_Alias\*(C'\fR を代わりに使えるところなら、どこでも
746 使用できる。\fB\s-1ALL\s0\fR という名前のエイリアスを自分で定義しようと
747 してはいけない。組込みのエイリアスの方が、自分で作ったエイリアスより
748 優先して使われるからだ。\fB\s-1ALL\s0\fR の使用には危険が伴うことが
749 あるのを忘れないでいただきたい。なぜなら、\fB\s-1ALL\s0\fR を
750 コマンドに関して使うと、ユーザにシステム上の\fBどんな\fRコマンドでも
751 実行することを許してしまうからである。
752 .PP
753 エクスクラメーションマーク ('!') は、エイリアスでも 
754 \&\f(CW\*(C`Cmnd\*(C'\fR の前でも論理 \fInot\fR 演算子として使用できる。
755 これによってある値を除外することが可能だ。しかしながら、
756 組込みエイリアス \f(CW\*(C`ALL\*(C'\fR と \f(CW\*(C`!\*(C'\fR を
757 組み合わせて、「二三のコマンド以外のすべての」コマンドの実行をあるユーザに
758 許可しようとしても、思いどおりの動きになることはめったにないことに
759 気を付けてほしい (下記の「セキュリティに関する注意点」を参照)。
760 .PP
761 長い行は、行末にバックスラッシュ ('\e') を置けば、継続することができる。
762 .PP
763 リストにおける要素間やユーザ設定における構文用特殊文字 
764 ('=', ':', '(', ')') の前後に空白文字 (whitespace)を入れることは、
765 任意である。
766 .PP
767 次の文字を単語 (ユーザ名とかホスト名とか) の一部として使うときは、
768 バックスラッシュ ('\e') でエスケープしなければならない。
769 \&'@', '!', '=', ':', ',', '(', ')', '\e' がそれである。
770 .SH "SUDOERS のオプション"
771 .IX Header "SUDOERS OPTIONS"
772 すでに説明したように、\fBsudo\fR の動作は 
773 \&\f(CW\*(C`Default_Entry\*(C'\fR 行によって変更することができる。
774 Defaults に与えることのできるパラメータについて、サポートされているも
775 ののすべてを、タイプ別にまとめて以下に列挙する。
776 .PP
777 \&\fBフラグ\fR:
778 .IP "always_set_home" 16
779 .IX Item "always_set_home"
780 これをセットすると、\fBsudo\fR は環境変数 \f(CW\*(C`HOME\*(C'\fR を
781 変身対象ユーザのホームディレクトリに設定する (\fB\-u\fR オプションが
782 使用されないかぎり、それは root である)。事実上、暗黙のうちに \fBsudo\fR に
783 \&\fB\-H\fR オプションが常に指定されることになるわけだ。このフラグは
784 デフォルトでは \fIoff\fR である。
785 .IP "authenticate" 16
786 .IX Item "authenticate"
787 これをセットすると、ユーザはコマンドの実行を許可される前に、パスワードで
788 (あるいは、ほかの認証方法で) 認証をしなければならない。このデフォルト値は
789 \&\f(CW\*(C`PASSWD\*(C'\fR や \f(CW\*(C`NOPASSWD\*(C'\fR タグで変更できる。
790 このフラグはデフォルトでは \fIon\fR である。
791 .IP "closefrom_override" 16
792 .IX Item "closefrom_override"
793 これをセットすると、ユーザが \fBsudo\fR の \fB\-C\fR オプションを
794 使用できるようになる。\fB\-C\fR オプションというのは、\fBsudo\fR が
795 開いたファイルを閉じていくとき、どのファイル・ディスクリプタから
796 クローズしていくかというデフォルトの始点を変更するものだ。このフラグは
797 デフォルトでは \fIoff\fR である。
798 .IP "env_editor" 16
799 .IX Item "env_editor"
800 これをセットすると、\fBvisudo\fR はデフォルトのエディタ・リストを
801 利用する前に、環境変数 \s-1EDITOR\s0 や \s-1VISUAL\s0 の値を
802 使用するようになる。これがセキュリティホールになりかねないことに
803 注意してほしい。ユーザが root として任意のコマンドをログに記録されることなく
804 実行できるようになるからだ。こうした環境変数を利用するときの、
805 \&\fIenv_editor\fR を有効にするよりも安全な方法は、
806 \&\fIsudoers\fR ファイルの \f(CW\*(C`editor\*(C'\fR オプションに
807 コロンで区切ったエディタのリストを書いておくことだ。そうすれば、
808 \&\fBvisudo\fR が \s-1EDITOR\s0 や \s-1VISUAL\s0 を使うのは、
809 それが \f(CW\*(C`editor\*(C'\fR オプションに指定した値とマッチしたときだけに
810 なる。このフラグはデフォルトでは \fIoff\fR である。
811 .IP "env_reset" 16
812 .IX Item "env_reset"
813 これをセットすると、\fBsudo\fR は環境を以下の変数のみを含むように
814 設定し直す。すなわち、\s-1LOGNAME\s0, \s-1SHELL\s0, \s-1USER\s0,
815 \&\s-1USERNAME\s0 それに \f(CW\*(C`SUDO_*\*(C'\fR である。その後で
816 さらに、\fBsudo\fR を起動するユーザの環境にある変数のうち、
817 \&\f(CW\*(C`env_keep\*(C'\fR や \f(CW\*(C`env_check\*(C'\fR のリストに
818 マッチするものが追加される。 \f(CW\*(C`env_keep\*(C'\fR や 
819 \&\f(CW\*(C`env_check\*(C'\fR のリストにデフォルトでどんな変数が
820 含まれているかは、root ユーザが \fBsudo\fR を \fI\-V\fR オプション付きで
821 実行すれば、見ることができる。なお、\fIsudoers\fR ファイルの
822 \&\fIsecure_path\fR オプションが設定されているときは、その値が
823 環境変数 \f(CW\*(C`PATH\*(C'\fR として使用されることになる。
824 このフラグはデフォルトでは \fIon\fR である。
825 .IP "fqdn" 16
826 .IX Item "fqdn"
827 \&\fIsudoers\fR ファイルで完全修飾ホスト名を使用したかったら、
828 このフラグをセットするとよい。すなわち、myhost ではなく、
829 myhost.mydomain.edu を使いたい場合だ。そのときでも、そうしたければ、
830 短縮形も使える (両方を混ぜて使うことだってできる)。気を付けて
831 ほしいのは、\fIfqdn\fR を 有効にすると、\fBsudo\fR は \s-1DNS\s0 へ
832 問い合わせをしなければならないので、\s-1DNS\s0 サービスが
833 稼働していない場合、\fBsudo\fR が使えなくなるかもしれないということだ
834 (たとえば、マシンがネットワークに接続していない場合)。
835 もう一つ気を付けるべきことがある。
836 \&\s-1DNS\s0 が知っているホストの正式名を使わなければならないということだ。
837 言い換えれば、ホストのエイリアス (\f(CW\*(C`CNAME\*(C'\fR のエントリ) を
838 使ってはいけない。パフォーマンスの問題もあるし、\s-1DNS\s0 からエイリアスを
839 すべて取得する方法はないからでもある。マシンのホスト名が 
840 \&(\f(CW\*(C`hostname\*(C'\fR コマンドで返ってくるものが) すでに
841 完全修飾名になっているならば、\fIfqdn\fR をセットする必要はないだろう。
842 このフラグはデフォルトでは \fIoff\fR である。
843 .IP "ignore_dot" 16
844 .IX Item "ignore_dot"
845 これをセットすると、環境変数 \f(CW\*(C`PATH\*(C'\fR 中に '.' や ''
846 (カレントディレクトリ) があっても、\fBsudo\fR はそれを無視する。
847 \&\f(CW\*(C`PATH\*(C'\fR そのものは変更されない。このフラグは
848 デフォルトでは \fIoff\fR である。
849 .IP "ignore_local_sudoers" 16
850 .IX Item "ignore_local_sudoers"
851 \&\s-1LDAP\s0 の方でこのフラグをセットすると、\fI/etc/sudoers\fR の
852 解析がスキップされる。このフラグは、ローカルにある sudoers ファイルの
853 使用を禁じて、\s-1LDAP\s0 のみを使うようにしたい企業のためにある。
854 たちの悪いオペレータが \fI/etc/sudoers\fR に手を加えて自分の権限を
855 増やそうとしても、そうした悪だくみは阻止されるわけだ。このオプションが
856 設定されているときは、\fI/etc/sudoers\fR ファイルは存在する必要すらない。
857 このオプションは、マッチする \s-1LDAP\s0 の具体的なエントリが
858 一つもなかったときに、どう振舞うべきかを \fBsudo\fR に指示するものだから、
859 これを指定した sudoOption は \f(CW\*(C`cn=defaults\*(C'\fR のセクションに
860 なければ意味がない。このフラグはデフォルトでは \fIoff\fR である。
861 .IP "insults" 16
862 .IX Item "insults"
863 これをセットすると、不正なパスワードが入力されたとき、
864 \&\fBsudo\fR がユーザに悪態をつく。このフラグはデフォルトでは \fIoff\fR
865 である。
866 .IP "log_host" 16
867 .IX Item "log_host"
868 これをセットすると、ホスト名が (syslog 経由ではない) \fBsudo\fR の
869 ログファイルに記録されることになる。このフラグはデフォルトでは \fIoff\fR
870 である。
871 .IP "log_year" 16
872 .IX Item "log_year"
873 これをセットすると、四桁の年が (syslog 経由ではない) \fBsudo\fR の
874 ログファイルに記入されることになる。このフラグはデフォルトでは \fIoff\fR 
875 である。
876 .IP "long_otp_prompt" 16
877 .IX Item "long_otp_prompt"
878 \&\fBS/Key\fR や \fB\s-1OPIE\s0\fR のような One Time Password
879 (\s-1OTP\s0) スキームを採用しているときにこれを有効にすると、チャレンジを
880 ローカルウィンドウにカット・アンド・ペーストしやすいように、
881 二行のプロンプトが使用される。デフォルトのプロンプトほど見栄えはよくないが、
882 こちらの方が便利だと思う人もいる。デフォルトではこのフラグは \fIoff\fR 
883 である。
884 .IP "mail_always" 16
885 .IX Item "mail_always"
886 ユーザが \fBsudo\fR を実行するたびに、\fImailto\fR ユーザにメールを送る。
887 このフラグはデフォルトでは \fIoff\fR である。
888 .IP "mail_badpass" 16
889 .IX Item "mail_badpass"
890 \&\fBsudo\fR を実行するユーザが正しいパスワードを入力しないと、
891 \&\fImailto\fR ユーザにメールを送る。このフラグはデフォルトでは 
892 \&\fIoff\fR である。
893 .IP "mail_no_host" 16
894 .IX Item "mail_no_host"
895 これをセットすると、\fBsudo\fR を起動したユーザが \fIsudoers\fR ファイルに
896 存在するものの、使用中のホストでコマンドの実行を許可されていない場合、
897 \&\fImailto\fR ユーザにメールを送付する。このフラグはデフォルトでは 
898 \&\fIoff\fR である。
899 .IP "mail_no_perms" 16
900 .IX Item "mail_no_perms"
901 これをセットすると、\fBsudo\fR を起動したユーザが \fBsudo\fR の使用を
902 許可されているが、実行しようとしているコマンドが \fIsudoers\fR ファイルの
903 そのユーザのエントリに登録されていないか、明示的に禁止されている場合、
904 \&\fImailto\fR ユーザにメールを送付する。このフラグはデフォルトでは 
905 \&\fIoff\fR である。
906 .IP "mail_no_user" 16
907 .IX Item "mail_no_user"
908 これをセットすると、\fBsudo\fR を起動したユーザが \fIsudoers\fR ファイルに
909 記載されていない場合、\fImailto\fR ユーザにメールを送付する。
910 このフラグはデフォルトでは \fIon\fR である。
911 .IP "noexec" 16
912 .IX Item "noexec"
913 これをセットすると、\fBsudo\fR を通して実行されるすべてのコマンドが、
914 \&\f(CW\*(C`EXEC\*(C'\fR タグで無効にされないかぎり、あたかも 
915 \&\f(CW\*(C`NOEXEC\*(C'\fR タグが設定されているかのごとく振舞うようになる。
916 上述の「\fI\s-1NOEXEC\s0 と \s-1EXEC\s0\fR」の説明、および、このマニュアルの
917 終わりの方にある「シェル・エスケープを防止する」というセクションを
918 参照してほしい。このフラグはデフォルトでは \fIoff\fR である。
919 .IP "path_info" 16
920 .IX Item "path_info"
921 通常 \fBsudo\fR は、環境変数 \f(CW\*(C`PATH\*(C'\fR 中にコマンドが
922 見付からないと、ユーザにそのことを知らせる。これを利用すれば、
923 一般ユーザにアクセス権のない実行ファイルのありかについて情報を
924 収集できるという理由から、この動作を無効にしたいサイトもあるかもしれない。
925 その場合の欠点は、実行ファイルが単にユーザの \f(CW\*(C`PATH\*(C'\fR 中に
926 なかっただけの場合でも、実行の許可がないと \fBsudo\fR がユーザに告げる
927 ことになって、実情がわかりにくいかもしれないことである。このフラグは
928 デフォルトでは \fIon\fR である。
929 .IP "passprompt_override" 16
930 .IX Item "passprompt_override"
931 通常、\fIpassprompt\fR オプションによって指定されたパスワードプロンプトが
932 使用されるのは、\s-1PAM\s0 のようなシステムが用意している
933 パスワードプロンプトが \*(L"Password:\*(R" という文字列にマッチしている
934 ときだけである。\fIpassprompt_override\fR をセットすると、
935 \&\fIpassprompt\fR が無条件で使われることになる。このフラグは
936 デフォルトでは \fIoff\fR である。
937 .IP "preserve_groups" 16
938 .IX Item "preserve_groups"
939 デフォルトでは、\fBsudo\fR は所属グループの初期値として、変身対象ユーザが
940 所属しているグループのリストを設定する。 \fIpreserve_groups\fR を
941 セットすると、\fBsudo\fR を実行するユーザの所属グループのリストが、
942 変更されずにそのまま維持される。とは言え、実グループ ID や
943 実効グループ ID が変身対象ユーザのそれに設定されることに変わりはない。
944 このフラグはデフォルトでは \fIoff\fR である。
945 .IP "pwfeedback" 16
946 .IX Item "pwfeedback"
947 ほかのたいていの Unix プログラムと同様、\fBsudo\fR はパスワードを
948 読み込むとき、デフォルトでは、ユーザが Return (または Enter) キーを
949 押すまで、エコーを off にする。この動作にとまどうユーザが存在する。
950 彼らには \fBsudo\fR が急に反応しなくなったように見えるのだ。
951 \&\fIpwfeedback\fR をセットすると、ユーザがキーを押すたびに、\fBsudo\fR が
952 目に見える反応を返すようになる。これには、セキュリティ上の問題が
953 あることに注意してほしい。横で見ている人が、打ち込まれたパスワードの
954 文字数を特定することができるかもしれないのだ。このフラグはデフォルトでは
955 \&\fIoff\fR である。
956 .IP "requiretty" 16
957 .IX Item "requiretty"
958 これをセットすると、\fBsudo\fR が実行されるのは、ユーザが実際の tty に
959 ログインしたときだけになる。すなわち、\fBsudo\fR を実行できるのは、
960 ログイン・セッションからだけであって、
961 \&\fIcron\fR\|(8) や cgi-bin スクリプトといった、ほかの方法を介して実行する
962 ことはできないということだ。このフラグは、デフォルトでは \fIoff\fR である。
963 .IP "root_sudo" 16
964 .IX Item "root_sudo"
965 これをセットすると、root も \fBsudo\fR を実行できるようになる。
966 このフラグを無効にすると、ユーザがたとえば \f(CW"sudo sudo /bin/sh"\fR と
967 いったように \fBsudo\fR コマンドを\fB連鎖的に\fR使って、ルートシェルを
968 獲得することができなくなる。ところで、
969 \&\fIroot_sudo\fR が off だと、root が \fBsudoedit\fR まで実行できなくなる
970 ことに注意してほしい。
971 \&\fIroot_sudo\fR を無効にしても、セキュリティが実際に向上するわけではない。
972 このフラグが存在しているのは、もっぱら歴史的な理由からなのだ。
973 このフラグはデフォルトでは \fIon\fR である。
974 .IP "rootpw" 16
975 .IX Item "rootpw"
976 これをセットすると、\fBsudo\fR はプロンプトで、起動したユーザの
977 パスワードではなく、root のパスワードを要求するようになる。
978 このフラグはデフォルトでは \fIoff\fR である。
979 .IP "runaspw" 16
980 .IX Item "runaspw"
981 これをセットすると、\fBsudo\fR はプロンプトで、起動したユーザの
982 パスワードではなく、\fIsudoers\fR ファイルの \fIrunas_default\fR オプションが
983 定義しているユーザーの (デフォルトでは \f(CW\*(C`root\*(C'\fR である)
984 パスワードを要求する。このフラグはデフォルトでは \fIoff\fR である。
985 .IP "set_home" 16
986 .IX Item "set_home"
987 これがセットされているとき、\fBsudo\fR を \fB\-s\fR オプション付きで
988 起動すると、環境変数 \f(CW\*(C`HOME\*(C'\fR が変身対象ユーザの 
989 (\fB\-u\fR オプションが使用されないかぎり、それは root である)
990 ホームディレクトリに設定される。すなわち、 \fB\-s\fR オプションが
991 \&\fB\-H\fR オプションを事実上兼ねることになるわけだ。このフラグは
992 デフォルトでは \fIoff\fR である。
993 .IP "set_logname" 16
994 .IX Item "set_logname"
995 通常 \fBsudo\fR は環境変数 \f(CW\*(C`LOGNAME\*(C'\fR,
996 \&\f(CW\*(C`USER\*(C'\fR, \f(CW\*(C`USERNAME\*(C'\fR を
997 変身対象ユーザの名前 (\fB-u\fR オプションが指定されていない場合、
998 普通は root) にセットする。しかし、プログラムによっては (たとえば、
999 \&\s-1RCS\s0 リビジョンコントロールシステムがその一つだが) ユーザが
1000 実際には誰であるかを判定するのに \f(CW\*(C`LOGNAME\*(C'\fR を
1001 使用していることがあるので、この振舞いを変更することが望ましい場合もある。
1002 set_logname オプションに '!' を付けて否定することで、それができる。
1003 なお \fIenv_reset\fR オプションを無効にしていない場合、
1004 \&\fIenv_keep\fR リストの項目が \fIset_logname\fR による値を
1005 上書きすることになるので、注意してほしい。このフラグはデフォルトでは 
1006 \&\fIon\fR である。
1007 .IP "setenv" 16
1008 .IX Item "setenv"
1009 これをセットすると、ユーザがコマンドラインから \fIenv_reset\fR オプションを
1010 無効にできるようになる。さらに、コマンドラインから設定する環境変数が 
1011 \&\fIenv_check\fR, \fIenv_delete\fR, \fIenv_keep\fR による制限を
1012 受けなくなる。それ故、そのようなやり方で変数を設定することを
1013 許可するのは、信用できるユーザのみに限るべきだ。このフラグは
1014 デフォルトでは \fIoff\fR である。
1015 .IP "shell_noargs" 16
1016 .IX Item "shell_noargs"
1017 これがセットされているとき、\fBsudo\fR を引き数なしで起動すると、
1018 \&\fBsudo\fR は \fB\-s\fR オプションが指定されたかのように振舞う。
1019 すなわち、root ユーザとしてシェルを実行するわけだ (シェルは、
1020 環境変数 \f(CW\*(C`SHELL\*(C'\fR がセットされていれば、それによって決まるし、
1021 セットされていなければ、\fBsudo\fR を起動したユーザの /etc/passwd エントリに
1022 登録されたものになる)。このフラグはデフォルトでは \fIoff\fR である。
1023 .IP "fast_glob" 16
1024 .IX Item "fast_glob"
1025 通常 \fBsudo\fR はパス名のマッチングをするとき、\fIglob\fR\|(3) 関数を
1026 使用して、シェル・スタイルのワイルドカード展開 (glob) を行う。しかし、
1027 \&\fIglob\fR\|(3) はファイルシステムにアクセスするので、指定パターンに
1028 よっては、作業を完了するまでに時間がかかることがある。
1029 必要な時にマウントするようになっている (つまりオートマウントの)
1030 ネットワーク・ファイル・システムを参照するときは、とりわけ時間がかかる。
1031 \&\fIfast_glob\fR オプションを指定すると、\fBsudo\fR が
1032 \&\fIfnmatch\fR\|(3) 関数を使うようになるが、こちらの関数はマッチングの際に
1033 ファイルシステムにアクセスしない。\fIfast_glob\fR の欠点は、
1034 \&\fI./ls\fR や \fI../bin/ls\fR のような相対パスに対するマッチが
1035 できないことである。このフラグはデフォルトでは \fIoff\fR である。
1036 .IP "stay_setuid" 16
1037 .IX Item "stay_setuid"
1038 通常 \fBsudo\fR がコマンドを実行するとき、実 UID と実効 UID は
1039 変身対象ユーザ (デフォルトでは root) のものにセットされる。このオプションは
1040 その振舞いを変更して、\fBsudo\fR を起動したユーザの \s-1UID\s0 が、
1041 そのまま実 \s-1UID\s0 として残るようにする。言い換えると、\fBsudo\fR が 
1042 setuid ラッパーとして動作するようになるわけだ。プログラムを setuid で
1043 動かすと、危険をもたらしかねないという理由から、ある種の機能を
1044 使えないようにしているシステムでは、このオプションが役に立つかもしれない。
1045 このオプションは、 \fIsetreuid()\fR 関数なり \fIsetresuid()\fR 関数なりを
1046 持っているシステムでのみ有効である。
1047 このフラグはデフォルトでは \fIoff\fR である。
1048 .IP "targetpw" 16
1049 .IX Item "targetpw"
1050 これをセットすると、\fBsudo\fR はプロンプトで、起動したユーザのパスワード
1051 ではなく、\fB\-u\fR オプションで指定されたユーザ (デフォルトでは root) の 
1052 パスワードを要求する。この設定をすると、\fB\-u\fR オプションの引き数として、
1053 passwd データベースに登録されていない uid が使えなくなることに注意してほしい。
1054 このフラグはデフォルトでは \fIoff\fR である。
1055 .IP "tty_tickets" 16
1056 .IX Item "tty_tickets"
1057 これをセットすると、ユーザは tty ごとに認証をしなければならなくなる。
1058 \&\fBsudo\fR は通常、チケットディレクトリ (訳注:たとえば 
1059 /var/run/sudo) にある、\fBsudo\fR を実行しているユーザと同じ名前のディ
1060 レクトリを認証に使用する。しかし、このフラグが有効になっている場合は、
1061 そのディレクトリにある、ユーザがログインしている tty に対応する名前の
1062 ファイルを使用することになるのだ。このフラグはデフォルトでは \fIoff\fR 
1063 である。
1064 .IP "umask_override" 16
1065 .IX Item "umask_override"
1066 これをセットすると、\fBsudo\fR は umask を \fIsudoers\fR の
1067 umask オプションで指定されたとおりの値に、変更を加えることなく設定する。
1068 このことによって、ユーザ自身の umask 値よりもっと緩やかな umask 値を
1069 \&\fIsudoers\fR で指定することが可能になる。\fBsudo\fR の昔の動作と
1070 同じになるわけだ。
1071 \&\fIumask_override\fR をセットしない場合、現在の \fBsudo\fR は umask を、
1072 ユーザの umask 値と \fIsudoers\fR で指定した umask 値とのビット和に
1073 設定することになっている。このフラグはデフォルトでは \fIoff\fR である。
1074 .\" .IP "use_loginclass" 16
1075 .\" .IX Item "use_loginclass"
1076 .\" If set, \fBsudo\fR will apply the defaults specified for the target user's
1077 .\" login class if one exists.  Only available if \fBsudo\fR is configured with
1078 .\" the \-\-with\-logincap option.  This flag is \fIoff\fR by default.
1079 .\" これをセットすると、\fBsudo\fR は、変身対象ユーザのログインクラスが存
1080 .\" 在するならば、それに対して指定されたデフォルトの値を使うことになる。こ
1081 .\" のフラグは、\fBsudo\fR を \-\-with\-logincap オプションを付けて 
1082 .\" configure したときのみ利用することができる。このフラグはデフォルトでは 
1083 .\" \&\fIoff\fR である。
1084 .IP "visiblepw" 16
1085 .IX Item "visiblepw"
1086 デフォルトでは、ユーザがパスワードを入力しなければならないときに、
1087 使用しているターミナルでエコーの抑制ができなかったら、
1088 \&\fBsudo\fR は実行を拒否するようになっている。これに対し、
1089 \&\fIvisiblepw\fR フラグが設定されていると、パスワードがスクリーンに
1090 表示されてしまう場合でも、\fBsudo\fR はプロンプトを出して、パスワードを
1091 求める。この動作によって、
1092 \&\fIrsh\fR\|(1) は tty を割り当てないにもかかわらず、
1093 \&\f(CW"rsh somehost sudo ls"\fR といった操作の実行が可能になるわけだ。
1094 このフラグはデフォルトでは \fIoff\fR である。
1095 .PP
1096 \&\fB整数\fR:
1097 .IP "closefrom" 16
1098 .IX Item "closefrom"
1099 \&\fBsudo\fR はコマンドを実行する前に、標準入力、標準出力、標準エラー
1100 (すなわち、ファイルディスクリプタ 0\-2 である) を除いて、
1101 オープンしたすべてのファイル・ディスクリプタをクローズする。
1102 \&\fIclosefrom\fR オプションを使用すると、0\-2 以外の
1103 どのファイル・ディスクリプタからクローズして行くかを指定することができる。
1104 デフォルトは \f(CW3\fR である。
1105 .IP "passwd_tries" 16
1106 .IX Item "passwd_tries"
1107 \&\fBsudo\fR が「失敗」をログに記録して終了する前に、ユーザがパスワードを
1108 入力できる回数。デフォルトは \f(CW\*(C`3\*(C'\fR。
1109 .PP
1110 \&\fB真偽値としても使用できる整数\fR:
1111 .IP "loglinelen" 16
1112 .IX Item "loglinelen"
1113 \&\fBsudo\fR 用ログファイルの一行あたりの文字数。この値は、ログファイルを
1114 見やすくするために改行する位置を決めるのに使用される。この値は、
1115 syslog 経由のログファイルには影響せず、直接ファイルにログを書き出すときのみ
1116 効果がある。デフォルトは \f(CW\*(C`80\*(C'\fR である (改行をしないように
1117 するには、値を 0 にするか、頭に '!' を付けて、このオプションを否定する)。
1118 .IP "passwd_timeout" 16
1119 .IX Item "passwd_timeout"
1120 \&\fBsudo\fR のパスワードプロンプトが時間切れになるまでの分単位の時間。
1121 デフォルトは \f(CW\*(C`5\*(C'\fR である。これを \f(CW0\fR にセットする
1122 と、パスワードプロンプトが時間切れなしになる。
1123 .IP "timestamp_timeout" 16
1124 .IX Item "timestamp_timeout"
1125 \&\fBsudo\fR がパスワードを再び要求するようになるまでの時間を分単位で
1126 指定する。デフォルトでは \f(CW\*(C`5\*(C'\fR である。これを \f(CW0\fR に
1127 セットすると、毎回パスワードを要求するようになる。\f(CW0\fR より小さい値に
1128 セットした場合は、ユーザのタイムスタンプが期限切れになることがない。
1129 ユーザが \f(CW\*(C`sudo \-v\*(C'\fR と \f(CW\*(C`sudo \-k\*(C'\fR を
1130 実行することによって、タイムスタンプを自分で作ったり、消したりできるように
1131 したかったら、この手を使えばよい。
1132 .IP "umask" 16
1133 .IX Item "umask"
1134 コマンドを実行しているときに使用する umask 値。ユーザの umask 値をそのまま
1135 使いたかったら、'!' を頭に付けて、このオプションを否定するか、0777 に
1136 セットする。このオプションの値が 0777 以外の場合、実際に使用される
1137 umask 値は、ユーザの umask 値と umask オプションで指定する umask 値との
1138 ビット和になる。そのことによって、\fBsudo\fR がコマンドを実行するときの
1139 umask 値が、ユーザの umask 値より低くならないようになっているわけだ。
1140 なお、umask オプションのデフォルトの値は、\f(CW\*(C`0022\*(C'\fR である。
1141 \&\s-1PAM\s0 を使用しているシステムでは、 \s-1PAM\s0 のデフォルト設定で
1142 umask 値を指定することができるが、その場合は、それが \fIsudoers\fR で
1143 指定した値を上書きすることに注意してほしい。
1144 .PP
1145 \&\fB文字列\fR:
1146 .IP "badpass_message" 16
1147 .IX Item "badpass_message"
1148 ユーザが不正なパスワードを入力したときに表示するメッセージ。
1149 \&\fIinsults\fR フラグが有効になっていないかぎり、デフォルトは
1150 「\f(CW\*(C`Sorry, try again.\*(C'\fR」である。
1151 .IP "editor" 16
1152 .IX Item "editor"
1153 \&\fBvisudo\fR で使用できるエディタをコロン (':') で区切ったリスト。
1154 \&\fBvisudo\fR は、可能ならば、ユーザの \s-1EDITOR\s0 環境変数と一致し
1155 たエディタを選択する。それができないときは、このリストにあるエディタで、
1156 実際に存在し、かつ実行可能な最初のエディタを使用する。デフォルトは使用
1157 システムにおける vi のパスである。
1158 .IP "mailsub" 16
1159 .IX Item "mailsub"
1160 \&\fImailto\fR ユーザに送付するメールの件名。エスケープ文字 \f(CW%h\fR 
1161 はマシンのホスト名に展開される。デフォルトは「\f(CW\*(C`*** SECURITY
1162 information for %h ***\*(C'\fR」。
1163 .IP "noexec_file" 16
1164 .IX Item "noexec_file"
1165 ライブラリ関数 \fIexecv()\fR, \&\fIexecve()\fR, \fIfexecve()\fR の
1166 ダミー版 (エラーを返すだけの関数) が入っている共有ライブラリのパス。
1167 これは、\f(CW\*(C`LD_PRELOAD\*(C'\fR やそれに相当するものを
1168 サポートしているシステムで \fInoexec\fR 機能を実現するために使用される。
1169 デフォルトでは \fI/usr/local/libexec/sudo_noexec.so\fR になっている。
1170 .IP "passprompt" 16
1171 .IX Item "passprompt"
1172 パスワードを要求するときに使用するデフォルトのプロンプト。\fB-p\fR オ
1173 プションや環境変数 \f(CW\*(C`SUDO_PROMPT\*(C'\fR によって変更すること
1174 ができる。以下のパーセント (`\f(CW\*(C`%\*(C'\fR') エスケープが使用で
1175 きる。
1176 .RS 16
1177 .ie n .IP "%H" 4
1178 .el .IP "\f(CW%H\fR" 4
1179 .IX Item "%H"
1180 ドメイン名付きのローカルホスト名に展開 (マシンのホスト名が完全修飾名か、
1181 \&\fIfqdn\fR オプションがセットされている場合に有効)
1182 .ie n .IP "%h" 4
1183 .el .IP "\f(CW%h\fR" 4
1184 .IX Item "%h"
1185 ドメイン名なしのローカルホスト名に展開
1186 .ie n .IP "%p" 4
1187 .el .IP "\f(CW%p\fR" 4
1188 .IX Item "%p"
1189 パスワードを要求されているユーザ名に展開 (\fIsudoers\fR ファイルの 
1190 \&\fIrootpw\fR, \fItargetpw\fR, \fIrunaspw\fR フラグを尊重する)
1191 .ie n .IP "%U" 4
1192 .el .IP "\f(CW%U\fR" 4
1193 .IX Item "%U"
1194 変身対象ユーザの (デフォルトでは root) ログイン名に展開
1195 .ie n .IP "%u" 4
1196 .el .IP "\f(CW%u\fR" 4
1197 .IX Item "%u"
1198 \&\fBsudo\fR を起動するユーザのログイン名に展開
1199 .ie n .IP "\*(C`%%\*(C'" 4
1200 .el .IP "\f(CW\*(C`%%\*(C'\fR" 4
1201 .IX Item "%%"
1202 連続した二個の \f(CW\*(C`%\*(C'\fR は、一個の \f(CW\*(C`%\*(C'\fR 文字
1203 そのものを意味する
1204 .RE
1205 .RS 16
1206 .Sp
1207 デフォルトの値は「\f(CW\*(C`Password:\*(C'\fR」である。
1208 .RE
1209 .\" .IP "role" 16
1210 .\" .IX Item "role"
1211 .\" The default SELinux role to use when constructing a new security
1212 .\" context to run the command.  The default role may be overridden on
1213 .\" a per-command basis in \fIsudoers\fR or via command line options.
1214 .\" This option is only available whe \fBsudo\fR is built with SELinux support.
1215 .\" コマンドを実行するために SELinux の新しいセキュリティ・コンテキストを
1216 .\" 構成するとき、使用するデフォルトのロール。デフォルトのロールは、
1217 .\" \&\fIsudoers\fR ファイルや、コマンドラインオプションを使って、コマンド
1218 .\" ごとに変更することができる。このオプションが利用できるのは、\fBsudo\fR 
1219 .\" が SELinux サポートつきで作成されたときだけである。
1220 .IP "runas_default" 16
1221 .IX Item "runas_default"
1222 コマンドラインで \fB-u\fR オプションが指定されていないときの、デフォルトの
1223 変身対象ユーザ。デフォルトでは \f(CW\*(C`root\*(C'\fR になっている。
1224 \fIrunas_default\fR をセットするなら、\f(CW\*(C`Runas_Alias\*(C'\fR を
1225 指定するよりも前にやらなければならないことに注意すること。
1226 .IP "syslog_badpri" 16
1227 .IX Item "syslog_badpri"
1228 ユーザが認証に失敗したときに使用する syslog の優先順位 (priority)。デ
1229 フォルトでは \f(CW\*(C`alert\*(C'\fR になっている。
1230 .IP "syslog_goodpri" 16
1231 .IX Item "syslog_goodpri"
1232 ユーザが認証に成功したときに使用する syslog の優先順位 (priority)。デ
1233 フォルトでは \f(CW\*(C`notice\*(C'\fR になっている。
1234 .IP "sudoers_locale" 16
1235 .IX Item "sudoers_locale"
1236 sudoers ファイルを解析するときに使用するロケール。ロケールの変更は、
1237 sudoers の解釈に影響があるかもしれないので、注意してほしい。
1238 デフォルトでは \f(CW"C"\fR になっている。
1239 .IP "timestampdir" 16
1240 .IX Item "timestampdir"
1241 \&\fBsudo\fR がタイムスタンプ・ファイルを置くディレクトリ。デフォルト
1242 は \fI/var/run/sudo\fR である。
1243 .IP "timestampowner" 16
1244 .IX Item "timestampowner"
1245 タイムスタンプ・ディレクトリとそこに置かれるタイムスタンプの所有者。デ
1246 フォルトは \f(CW\*(C`root\*(C'\fR である。
1247 .\" .IP "type" 16
1248 .\" .IX Item "type"
1249 .\" The default SELinux type to use when constructing a new security
1250 .\" context to run the command.  The default type may be overridden on
1251 .\" a per-command basis in \fIsudoers\fR or via command line options.
1252 .\" This option is only available whe \fBsudo\fR is built with SELinux support.
1253 .\" コマンドを実行するために SELinux の新しいセキュリティ・コンテキストを
1254 .\" 構成するとき、使用するデフォルトのタイプ。デフォルトのタイプは、
1255 .\" \&\fIsudoers\fR ファイルや、コマンドラインオプションを使って、コマンド
1256 .\" ごとに変更することができる。このオプションが利用できるのは、\fBsudo\fR 
1257 .\" が SELinux サポートつきで作成されたときだけである。
1258 .PP
1259 \&\fB真偽値としても使用できる文字列\fR:
1260 .IP "askpass" 12
1261 .IX Item "askpass"
1262 \&\fIaskpass\fR で指定するのは、ヘルパー・プログラムの絶対パスである。
1263 このヘルパー・プログラムは、ターミナルを利用できないときに、
1264 ユーザのパスワードを読み込むために使用する。たとえば、\fBsudo\fR が
1265 (テキストベースではなく) グラフィカルなアプリケーションから実行される
1266 といった場合だ。\fIaskpass\fR で指定されたヘルパー・プログラムは、
1267 渡された引き数をプロンプトとして表示し、ユーザのパスワードを標準出力に
1268 書き出すべきである。
1269 \&\fIaskpass\fR の値は、環境変数 \f(CW\*(C`SUDO_ASKPASS\*(C'\fR で
1270 上書きすることができる。
1271 .IP "env_file" 12
1272 .IX Item "env_file"
1273 \&\fIenv_file\fR オプションでファイルの絶対パスを指定すると、
1274 実行するプログラムの環境として設定する変数をそのファイルに格納して
1275 おくことができる。このファイルのエントリは \f(CW\*(C`VARIABLE=value\*(C'\fR
1276 か \f(CW\*(C`export VARIABLE=value\*(C'\fR の形でなければならない。
1277 変数の値をシングルクォートやダブルクォートで囲んでもよい。
1278 このファイルに含まれる変数は、\fIenv_keep\fR や \fIenv_check\fR のような
1279 \&\fBsudo\fR のほかの環境設定の影響を受ける。
1280 .IP "exempt_group" 12
1281 .IX Item "exempt_group"
1282 このグループのユーザはパスワードの入力や \fIsecure_path\fR による
1283 \&\s-1PATH\s0 の限定を免除されている。このオプションはデフォルトでは
1284 セットされていない。
1285 .IP "lecture" 12
1286 .IX Item "lecture"
1287 \&\fBsudo\fR はパスワードプロンプトに添えて簡単な訓戒を表示することが
1288 できる。このオプションはその訓戒をいつ表示するかを決定する。以下の値が
1289 可能である。
1290 .RS 12
1291 .IP "always" 8
1292 .IX Item "always"
1293 いつでも必ず訓戒を表示する
1294 .IP "never" 8
1295 .IX Item "never"
1296 訓戒を一切表示しない。
1297 .IP "once" 8
1298 .IX Item "once"
1299 ユーザがはじめて \fBsudo\fR を実行したときだけ表示する。
1300 .RE
1301 .RS 12
1302 .Sp
1303 値を指定しないと、\fIonce\fR を指定したことになる。頭に '!' を付けて、
1304 このオプションを否定すると、値に \fInever\fR が使用される。
1305 デフォルトの値は \fIonce\fR である。
1306 .RE
1307 .IP "lecture_file" 12
1308 .IX Item "lecture_file"
1309 標準の訓戒の代わりに使用する \fBsudo\fR の訓戒を書き込んだファイルがあるなら、
1310 \&\fIlecture_file\fR でそのパスを指定する。\fBsudo\fR はデフォルトでは、
1311 プログラムに埋め込まれた訓戒を使用する。
1312 .IP "listpw" 12
1313 .IX Item "listpw"
1314 このオプションは、\fBsudo\fB を\fB\ -l\fR オプション付きで実行したとき、
1315 ユーザがパスワードを要求されるのは、どんな場合かを決定する。
1316 以下のような値が可能である。
1317 .RS 12
1318 .IP "all" 8
1319 .IX Item "all"
1320 パスワードを入力しないですむためには、\fIsudoers\fR ファイルの使用中の
1321 ホストに対する当該ユーザのエントリのすべてに 
1322 \&\f(CW\*(C`NOPASSWD\*(C'\fR タグが設定されていなければならない。
1323 .IP "always" 8
1324 .IX Item "always"
1325 ユーザは \fB\-l\fR オプションを使用する際に必ずパスワードを入力しなければ
1326 ならない。
1327 .IP "any" 8
1328 .IX Item "any"
1329 パスワードを入力しないですむためには、\fIsudoers\fR ファイルの使用中の
1330 ホストに対する当該ユーザのエントリの少なくとも一つに 
1331 \&\f(CW\*(C`NOPASSWD\*(C'\fR タグが設定されていなければならない。
1332 .IP "never" 8
1333 .IX Item "never"
1334 ユーザは \fB\-l\fR オプションを使用する際にパスワードを入力する必要が
1335 まったくない。
1336 .RE
1337 .RS 12
1338 .Sp
1339 値を指定しないと、値は \fIany\fR だと見なされる。'!' を頭に付けて、
1340 このオプションを否定すると、値に \fInever\fR が使われることになる。
1341 デフォルトは \fIany\fR である。
1342 .RE
1343 .IP "logfile" 12
1344 .IX Item "logfile"
1345 \&\fBsudo\fR のログファイルのパス (syslog 経由のログファイルではない)。
1346 パスを指定すると、ファイルへのロギングが on になり、 '!' を頭に付けて、
1347 このオプションを否定すると、off になる。デフォルトでは、\fBsudo\fR は 
1348 syslog 経由でログを取る。
1349 .IP "mailerflags" 12
1350 .IX Item "mailerflags"
1351 メーラを起動するときに使用するフラグ。デフォルトは \fB\-t\fR に
1352 なっている。
1353 .IP "mailerpath" 12
1354 .IX Item "mailerpath"
1355 警告メールの送信に使うメール・プログラムのパス。デフォルトは configure 
1356 したときに見つかった sendmail のパス。
1357 .IP "mailfrom" 12
1358 .IX Item "mailfrom"
1359 警告メールやエラー・メールを送るとき、差出人として使用するアドレス。
1360 \&\fBsudo\fR が \f(CW\*(C`@\*(C'\fR 記号を解釈しないようにするため、
1361 アドレスはダブルクォート (\f(CW\*(C`"\*(C'\fR) で囲むべきである。
1362 デフォルトは、\fBsudo\fR を実行するユーザの名前。
1363 .IP "mailto" 12
1364 .IX Item "mailto"
1365 警告メールやエラー・メールを送付する宛先のアドレス。\fBsudo\fR が 
1366 \&\f(CW\*(C`@\*(C'\fR 記号を解釈しないようにするため、アドレスは
1367 ダブルクォート (\f(CW\*(C`"\*(C'\fR) で囲むべきである。デフォルトは root に
1368 なっている。
1369 .IP "secure_path" 12
1370 .IX Item "secure_path"
1371 \&\fBsudo\fR から実行されるあらゆるコマンドが使用するパス。
1372 \&\fBsudo\fR を実行するユーザが、無難な環境変数 \f(CW\*(C`PATH\*(C'\fR を
1373 使っているかどうか確信が持てないなら、このオプションを使用するとよいだろう。
1374 もう一つの使用法は、「root のパス」と「一般ユーザのパス」を別のものに
1375 しておきたい場合だ。ユーザが \fIexempt_group\fR オプションで指定した
1376 グループに属していると、そのユーザは \fIsecure_path\fR の影響を受けない。
1377 このオプションは、デフォルトではセットされていない。
1378 .IP "syslog" 12
1379 .IX Item "syslog"
1380 syslog を使ってログを取っている場合の syslog のファシリティ (syslog 経由で
1381 ログを取らない場合は、'!' を頭に付けて、このオプションを否定する)。
1382 デフォルトは \f(CW\*(C`local2\*(C'\fR になっている。
1383 .IP "verifypw" 12
1384 .IX Item "verifypw"
1385 このオプションは、\fBsudo\fR を \fB\-v\fR オプション付きで実行したとき、
1386 ユーザがパスワードを要求されるのは、どんな場合かを決定する。次のような
1387 値が可能である。
1388 .RS 12
1389 .IP "all" 8
1390 .IX Item "all"
1391 パスワードを入力しないですむためには、\fIsudoers\fR ファイルの使用中の
1392 ホストに対する当該ユーザのエントリのすべてに 
1393 \&\f(CW\*(C`NOPASSWD\*(C'\fR タグが設定されていなければならない。
1394 .IP "always" 8
1395 .IX Item "always"
1396 ユーザは \fB\-v\fR オプションを使用する際に必ずパスワードを入力しなければ
1397 ならない。
1398 .IP "any" 8
1399 .IX Item "any"
1400 パスワードを入力しないですむためには、\fIsudoers\fR ファイルの使用中の
1401 ホストに対する当該ユーザのエントリの少なくとも一つに 
1402 \f(CW\*(C`NOPASSWD\*(C'\fR タグが設定されていなければならない。
1403 .IP "never" 8
1404 .IX Item "never"
1405 ユーザは \fB\-v\fR オプションを使用する際にパスワードを入力する必要が
1406 まったくない。
1407 .RE
1408 .RS 12
1409 .Sp
1410 値を指定しないと、値は \fIall\fR だと見なされる。'!' を頭に付けて、
1411 このオプションを否定すると、値に \fInever\fR が使われることになる。
1412 デフォルトは \fIall\fR である。
1413 .RE
1414 .PP
1415 \&\fB真偽値としても使用できるリスト\fR:
1416 .IP "env_check" 16
1417 .IX Item "env_check"
1418 変数の値に \f(CW\*(C`%\*(C'\fR や \f(CW\*(C`/\*(C'\fR が含まれる場合に、
1419 ユーザの環境から取り除かれる環境変数。
1420 この機能は、出来のよくないプログラムに見られる printf 形式のフォーマットの
1421 脆弱性に対処するために利用できる。このオプションの引き数は、
1422 ダブルクォートで囲まれ、スペースで区切られたリストでもよく、
1423 ダブルクォートなしの単一の値でもよい。リストは、\f(CW\*(C`=\*(C'\fR,
1424 \&\f(CW\*(C`+=\*(C'\fR, \f(CW\*(C`\-=\*(C'\fR, \f(CW\*(C`!\*(C'\fR 演算子を
1425 使って、それぞれ置き換えたり、追加したり、削除したり、無効にしたり
1426 することができる。\fIenv_check\fR で指定された変数は、
1427 \&\fIenv_reset\fR オプショの有効・無効にかかわらず、上記のチェックに
1428 パスすれば、環境に保存されることになる。チェックされる環境変数の
1429 デフォルトのリストは、root ユーザが \fBsudo\fR に \&\fI\-V\fR オプションを
1430 付けて実行したときに表示される。
1431 .IP "env_delete" 16
1432 .IX Item "env_delete"
1433 \&\fIenv_reset\fR オプションが無効になっているときに、ユーザの環境から
1434 取り除かれる環境変数。このオプションの引き数は、ダブルクォートで囲まれ、
1435 スペースで区切られたリストでもよく、ダブルクォートなしの単一の値でもよい。
1436 リストは、\f(CW\*(C`=\*(C'\fR, \f(CW\*(C`+=\*(C'\fR, \f(CW\*(C`\-=\*(C'\fR,
1437 \&\f(CW\*(C`!\*(C'\fR 演算子を使って、それぞれ置き換えたり、追加したり、
1438 削除したり、無効にしたりすることができる。取り除かれる環境変数の
1439 デフォルトのリストは、root ユーザが \fBsudo\fR に \fI\-V\fR オプションを
1440 付けて実行したときに表示される。留意すべきは、オペレーティングシステムには、
1441 危険をもたらしかねない変数をいかなる setuid プロセス (\fBsudo\fR も
1442 その一つ) の環境からも取り除くことにしているものが多いということである。
1443 .IP "env_keep" 16
1444 .IX Item "env_keep"
1445 \&\fIenv_reset\fR オプションが有効になっているときでも、ユーザの環境に
1446 そのまま保存される環境変数。このオプションによって、\fBsudo\fR から
1447 生み出されるプロセスが受け取る環境を、きめ細かく制御することが可能になる。
1448 このオプションの引き数は、ダブルクォートで囲まれ、スペースで区切られたリ
1449 ストでもよく、ダブルクォートなしの単一の値でもよい。リストは、
1450 \&\f(CW\*(C`=\*(C'\fR, \f(CW\*(C`+=\*(C'\fR, \f(CW\*(C`\-=\*(C'\fR,
1451 \&\f(CW\*(C`!\*(C'\fR 演算子を使って、それぞれ置き換えたり、
1452 追加したり、削除したり、無効にしたりすることができる。保存される変数の
1453 デフォルトのリストは、root ユーザが \fBsudo\fR に \fI\-V\fR オプションを
1454 付けて実行したときに表示される。
1455 .PP
1456 \fIsyslog\fR\|(3) 経由でログを記録する場合、\fBsudo\fR は syslog のファ
1457 シリティ (facility: \fBsyslog\fR パラメータの値) として次の値を受け付
1458 ける。\fBauthpriv\fR (ただし、\s-1OS\s0 がサポートしているならばだが)、
1459 \&\fBauth\fR, \fBdaemon\fR, \fBuser\fR, \fBlocal0\fR, \fBlocal1\fR,
1460 \&\fBlocal2\fR, \fBlocal3\fR, \fBlocal4\fR, \fBlocal5\fR,
1461 \&\fBlocal6\fR, \fBlocal7\fR。syslog の優先順位 (priority) については、
1462 次のものに対応している。\fBalert\fR, \fBcrit\fR, \fBdebug\fR,
1463 \&\fBemerg\fR, \fBerr\fR, \fBinfo\fR, \fBnotice\fR, \fBwarning\fR。
1464 .SH "ファイル"
1465 .IX Header "FILES"
1466 .ie n .IP "\fI/etc/sudoers\fR" 24
1467 .el .IP "\fI/etc/sudoers\fR" 24
1468 .IX Item "/etc/sudoers"
1469 誰が何を実行できるかのリスト
1470 .IP "\fI/etc/group\fR" 24
1471 .IX Item "/etc/group"
1472 ローカルのグループファイル
1473 .IP "\fI/etc/netgroup\fR" 24
1474 .IX Item "/etc/netgroup"
1475 ネットワークグループのリスト
1476 .SH "用例"
1477 .IX Header "EXAMPLES"
1478 以下は sudoers エントリの見本である。正直なところ、いささか
1479 凝りすぎの部分もある。まず最初にエイリアスを定義する。
1480 .PP
1481 .Vb 4
1482 \& # User alias の指定
1483 \& User_Alias     FULLTIMERS = millert, mikef, dowdy
1484 \& User_Alias     PARTTIMERS = bostley, jwfox, crawl
1485 \& User_Alias     WEBMASTERS = will, wendy, wim
1486 \&
1487 \& # Runas alias の指定
1488 \& Runas_Alias    OP = root, operator
1489 \& Runas_Alias    DB = oracle, sybase
1490 \& Runas_Alias    ADMINGRP = adm, oper
1491 \&
1492 \& # Host alias の指定
1493 \& Host_Alias     SPARC = bigtime, eclipse, moet, anchor :\e
1494 \&                SGI = grolsch, dandelion, black :\e
1495 \&                ALPHA = widget, thalamus, foobar :\e
1496 \&                HPPA = boa, nag, python
1497 \& Host_Alias     CUNETS = 128.138.0.0/255.255.0.0
1498 \& Host_Alias     CSNETS = 128.138.243.0, 128.138.204.0/24, 128.138.242.0
1499 \& Host_Alias     SERVERS = master, mail, www, ns
1500 \& Host_Alias     CDROM = orion, perseus, hercules
1501 \&
1502 \& # Cmnd alias の指定
1503 \& Cmnd_Alias     DUMPS = /usr/bin/mt, /usr/sbin/dump, /usr/sbin/rdump,\e
1504 \&                        /usr/sbin/restore, /usr/sbin/rrestore
1505 \& Cmnd_Alias     KILL = /usr/bin/kill
1506 \& Cmnd_Alias     PRINTING = /usr/sbin/lpc, /usr/bin/lprm
1507 \& Cmnd_Alias     SHUTDOWN = /usr/sbin/shutdown
1508 \& Cmnd_Alias     HALT = /usr/sbin/halt
1509 \& Cmnd_Alias     REBOOT = /usr/sbin/reboot
1510 \& Cmnd_Alias     SHELLS = /usr/bin/sh, /usr/bin/csh, /usr/bin/ksh, \e
1511 \&                         /usr/local/bin/tcsh, /usr/bin/rsh, \e
1512 \&                         /usr/local/bin/zsh
1513 \& Cmnd_Alias     SU = /usr/bin/su
1514 \& Cmnd_Alias     PAGERS = /usr/bin/more, /usr/bin/pg, /usr/bin/less
1515 .Ve
1516 .PP
1517 以下では、コンパイル時に埋め込まれたデフォルト値のいくつかを変更している。
1518 \&\fBsudo\fR には \fIsyslog\fR\|(3) 経由でログを記録し、ファシリティには
1519 すべての場合に \fIauth\fR を使用させたい。フルタイムのスタッフには 
1520 \&\fBsudo\fR の訓戒を出さないようにしたい。ユーザ \fBmillert\fR は
1521 パスワードを入力しないでよい。コマンドを root として実行するときは、
1522 環境変数 \f(CW\*(C`LOGNAME\*(C'\fR, \f(CW\*(C`USER\*(C'\fR,
1523 \&\f(CW\*(C`USERNAME\*(C'\fR を変更したくない。さらに、
1524 \&\fI\s-1SERVERS\s0\fR という \f(CW\*(C`Host_Alias\*(C'\fR に属する
1525 マシンでは、ローカルなログファイルを副本として作り、ログの記入事項は
1526 数年に渡って保存されるので、ログの各行に間違いなく年度が入るようにする。
1527 最後に \s-1PAGERS\s0 という \f(CW\*(C`Cmnd_Alias\*(C'\fR に属する
1528 コマンド (\fI/usr/bin/more\fR, \fI/usr/bin/pg\fR, \fI/usr/bin/less\fR) 
1529 については、シェル・エスケープを無効にする。
1530 .PP
1531 .Vb 7
1532 \& # built-in defaults の変更
1533 \& Defaults               syslog=auth
1534 \& Defaults>root          !set_logname
1535 \& Defaults:FULLTIMERS    !lecture
1536 \& Defaults:millert       !authenticate
1537 \& Defaults@SERVERS       log_year, logfile=/var/log/sudo.log
1538 \& Defaults!PAGERS        noexec
1539 .Ve
1540 .PP
1541 ユーザ設定が、誰が何を実行できるかを実際に決めている部分だ。
1542 .PP
1543 .Vb 2
1544 \& root           ALL = (ALL) ALL
1545 \& %wheel         ALL = (ALL) ALL
1546 .Ve
1547 .PP
1548 \&\fBroot\fR と \fBwheel\fR グループのすべてのユーザには、どのホストでも
1549 任意のユーザとしていかなるコマンドでも実行することを認める。
1550 .PP
1551 .Vb 1
1552 \& FULLTIMERS     ALL = NOPASSWD: ALL
1553 .Ve
1554 .PP
1555 フルタイムのシステム管理者 (\fBmillert\fR, \fBmikef\fR, \fBdowdy\fR) 
1556 は、どのホストでも任意のコマンドを認証なしで実行できる。
1557 .PP
1558 .Vb 1
1559 \& PARTTIMERS     ALL = ALL
1560 .Ve
1561 .PP
1562 パートタイムのシステム管理者 ((\fBbostley\fR, \fBjwfox\fR,
1563 \&\fBcrawl\fR) は、どのホストでも任意のコマンドを実行できるが、
1564 その際に認証をしなければならない (このエントリには 
1565 \&\f(CW\*(C`NOPASSWD\*(C'\fR タグが指定されていないので)。
1566 .PP
1567 .Vb 1
1568 \& jack           CSNETS = ALL
1569 .Ve
1570 .PP
1571 ユーザ \fBjack\fR は、\fI\s-1CSNETS\s0\fR というエイリアスに属するマシンで
1572 任意のコマンドを実行できる (すなわち、ネットワークが \f(CW128.138.243.0\fR,
1573 \&\f(CW128.138.204.0\fR, \f(CW128.138.242.0\fR のマシンだ)。この内、
1574 \&\f(CW128.138.204.0\fR にのみ class C のネットワークであることを示す
1575 明示的な (\s-1CIDR\s0 表記の) netmask がある。\fI\s-1CSNETS\s0\fR の
1576 ほかのネットワークについては、ローカルマシンの netmask がマッチングの際に
1577 使われることになる。
1578 .PP
1579 .Vb 1
1580 \& lisa           CUNETS = ALL
1581 .Ve
1582 .PP
1583 ユーザ \fBlisa\fR はエイリアスが \fI\s-1CUNETS\s0\fR のいかなるホストでも
1584 任意のコマンドを実行することができる (すなわち、
1585 \f(CW128.138.0.0\fR という class B ネットワークのマシンだ)。
1586 .PP
1587 .Vb 2
1588 \& operator       ALL = DUMPS, KILL, SHUTDOWN, HALT, REBOOT, PRINTING,\e
1589 \&                sudoedit /etc/printcap, /usr/oper/bin/
1590 .Ve
1591 .PP
1592 ユーザ \fBoperator\fR は、用途が簡単な保守管理に限定されたコマンドを
1593 実行できる。この場合それは、バックアップしたり、プロセスを kill したり、
1594 印刷システムを操作したり、システムをシャットダウンしたりするのに
1595 関係するコマンドと、\fI/usr/oper/bin/\fR ディレクトリにある任意のコマンド
1596 である。
1597 .PP
1598 .Vb 1
1599 \& joe            ALL = /usr/bin/su operator
1600 .Ve
1601 .PP
1602 ユーザ \fBjoe\fR は \fIsu\fR\|(1) を使って operator になることしか
1603 できない。
1604 .PP
1605 .Vb 1
1606 \& %opers         ALL = (: ADMINGRP) /usr/sbin/
1607 .Ve
1608 .PP
1609 \&\fBopers\fR グループのユーザは、\fI/usr/sbin/\fR にあるコマンドを
1610 自分自身の資格で、
1611 \&\f(CW\*(C`Runas_Alias\*(C'\fR \fI\s-1ADMINGRP\s0\fR に属する
1612 任意のグループ (すなわち、\fBadm\fR か \fBoper\fR グループ) として
1613 実行できる。(訳注: 実のところ、sudo-1.7.2p1 では、
1614 \&\fI/etc/sudoers\fR で変身可能グループに \f(CW\*(C`Runas_Alias\*(C'\fR を
1615 まだ指定できないようだ。今のところ、この例で言うなら、\fI\s-1ADMINGRP\s0\fR
1616 ではなく、\fBadm\fR や \fBoper\fR を直接指定しなければならない。)
1617 .PP
1618 .Vb 1
1619 \& pete           HPPA = /usr/bin/passwd [A\-Za\-z]*, !/usr/bin/passwd root
1620 .Ve
1621 .PP
1622 ユーザ \fBpete\fR は \fI\s-1HPPA\s0\fR に属するマシンで root 以外なら
1623 誰のパスワードでも変更することを許されている。上記の指定は、
1624 \&\fIpasswd\fR\|(1) がコマンドラインで複数のユーザ名を受け付けないことを
1625 前提としている点に注意してほしい。
1626 .PP
1627 .Vb 1
1628 \& bob            SPARC = (OP) ALL : SGI = (OP) ALL
1629 .Ve
1630 .PP
1631 ユーザ \fBbob\fR は \fI\s-1SPARC\s0\fR や \fI\s-1SGI\s0\fR に属する
1632 マシンで \f(CW\*(C`Runas_Alias\*(C'\fR \fI\s-1OP\s0\fR に登録されている
1633 任意のユーザとして (\fBroot\fR と \fBoperator\fR である) どんなコマンドでも
1634 実行できる。
1635 .PP
1636 .Vb 1
1637 \& jim            +biglab = ALL
1638 .Ve
1639 .PP
1640 ユーザ \fBjim\fR は \fIbiglab\fR ネットグループに属するマシンで
1641 どんなコマンドでも実行できる。\fBsudo\fR は、\*(L"biglab\*(R" に '+' の
1642 接頭辞が付いているので、それをネットグループだと認識する。
1643 .PP
1644 .Vb 1
1645 \& +secretaries   ALL = PRINTING, /usr/bin/adduser, /usr/bin/rmuser
1646 .Ve
1647 .PP
1648 \&\fBsecretaries\fR ネットグループのユーザは、ユーザの追加や削除は
1649 もちろん、プリンタの管理にも協力する必要がある。そこで、すべてのマシンで
1650 その種のコマンドの実行を認められている。
1651 .PP
1652 .Vb 1
1653 \& fred           ALL = (DB) NOPASSWD: ALL
1654 .Ve
1655 .PP
1656 ユーザ \fBfred\fR は \f(CW\*(C`Runas_Alias\*(C'\fR \fI\s-1DB\s0\fR の
1657 任意のユーザとして (\fBoracle\fR か \fBsybase\fR だ) パスワードを
1658 入力しないでもコマンドを実行することができる。
1659 .PP
1660 .Vb 1
1661 \& john           ALPHA = /usr/bin/su [!\-]*, !/usr/bin/su *root*
1662 .Ve
1663 .PP
1664 ユーザ \fBjohn\fR は \fI\s-1ALPHA\s0\fR に属するマシンで \fIsu\fR\|(1) を
1665 使って root 以外の誰にでもなることができるが、su にオプションを
1666 指定することは許されていない。
1667 .PP
1668 .Vb 1
1669 \& jen            ALL, !SERVERS = ALL
1670 .Ve
1671 .PP
1672 ユーザ \fBjen\fR は \f(CW\*(C`Host_Alias\*(C'\fR \fI\s-1SERVERS\s0\fR に
1673 属するマシン (master, mail, www, ns) を除くいかなるマシンでも
1674 任意のコマンドを実行できる。
1675 .PP
1676 .Vb 1
1677 \& jill           SERVERS = /usr/bin/, !SU, !SHELLS
1678 .Ve
1679 .PP
1680 \&\fBjill\fR は \f(CW\*(C`Host_Alias\*(C'\fR \fI\s-1SERVERS\s0\fR の
1681 いかなるマシンでも \fI/usr/bin/\fR ディレクトリにある任意のコマンドを
1682 実行できるが、\fI\s-1SU\s0\fR や \fI\s-1SHELLS\s0\fR という
1683 \&\f(CW\*(C`Cmnd_Aliases\*(C'\fR に属するコマンドは実行できない。
1684 .PP
1685 .Vb 1
1686 \& steve          CSNETS = (operator) /usr/local/op_commands/
1687 .Ve
1688 .PP
1689 ユーザ \fBsteve\fR はディレクトリ \fI/usr/local/op_commands/\fR にある
1690 任意のコマンドを実行できるが、operator というユーザとして実行できるだけだ。
1691 .PP
1692 .Vb 1
1693 \& matt           valkyrie = KILL
1694 .Ve
1695 .PP
1696 \&\fBmatt\fR も自分用のワークステーション valkyrie で
1697 ハングしたプロセスの kill ぐらいはできる必要がある。
1698 .PP
1699 .Vb 1
1700 \& WEBMASTERS     www = (www) ALL, (root) /usr/bin/su www
1701 .Ve
1702 .PP
1703 ホスト www で \f(CW\*(C`User_Alias\*(C'\fR \fI\s-1WEBMASTERS\s0\fR に
1704 属するいかなるユーザも (will, wendy, wim だ)、ユーザ www (web ページの
1705 所有者) として任意のコマンドを実行することができる。
1706 単に \fIsu\fR\|(1) で www になってもよい。
1707 .PP
1708 .Vb 2
1709 \& ALL            CDROM = NOPASSWD: /sbin/umount /CDROM,\e
1710 \&                /sbin/mount \-o nosuid\e,nodev /dev/cd0a /CDROM
1711 .Ve
1712 .PP
1713 いかなるユーザも \f(CW\*(C`Host_Alias\*(C'\fR が \s-1CDROM\s0 の
1714 マシンで (orion, perseus, hercules)、パスワードを入力することなく 
1715 CD-ROM をマウント、アンマウントできる。上記のコマンドを打ち込むのは
1716 ユーザにとっていささか面倒なので、シェルスクリプトとして
1717 カプセル化してしまうのがよいだろう。
1718 .IP "[\fB訳注\fR]:" 8
1719 .IX Item "footnote2"
1720 当然と言えば当然だが、sudo は自ホストの /etc/sudoers しか読まない。
1721 そこで、こういうことになる。AAA というホストに aaa というユーザが
1722 いるとしよう。ホスト AAA の /etc/sudoers に「ホスト BBB でユーザ aaa は
1723 sudo を介して /bin/ls を実行できる」という記述があったとしても、
1724 ユーザ aaa がホスト AAA から telnet や ssh を使ったとき、ホスト BBB 上で
1725 sudo 経由で ls を実行できるわけではない。それができるためには、
1726 ホスト BBB の /etc/sudoers に「BBB でユーザ aaa は sudo を介して /bin/ls を
1727 実行できる」という記述がなければならないのだ。ホスト BBB で実行する
1728 sudo は BBB の sudo であり、BBB の sudo は BBB の /etc/sudoers しか
1729 読まないのだから。
1730 .Sp
1731 それでは、何故、上記の「用例」で自ホスト以外の設定が行われて
1732 いるのか? そもそも、sudoers の書式で自ホスト以外のホストを
1733 指定できるのは、何故なのか? それは、管理しているサイトの
1734 すべてのホストの設定を記した sudoers ファイルを一つ作って、それを
1735 すべてのホストにコピーして使う、そういった使い方を想定しているからだ。
1736 もし、サイト中のすべてのホストの設定を一ヶ所にまとめて置き、
1737 それをすべてのホストに共有させたいのなら (すなわち、sudo の設定の
1738 集中管理がしたいのなら)、LDAP の採用を考えるべきである。
1739 .SH "セキュリティに関する注意点"
1740 .IX Header "SECURITY NOTES"
1741 一般的に言って、演算子 '!' を使用して \f(CW\*(C`ALL\*(C'\fR から
1742 コマンドの「引き算」をすることは、あまり効果がない。ユーザは実行したい
1743 コマンドを名前を変えてコピーし、それからそれを実行するするといった
1744 ちょっとした手段で、裏をかくことができるからだ。たとえば、
1745 .PP
1746 .Vb 1
1747 \&    bill        ALL = ALL, !SU, !SHELLS
1748 .Ve
1749 .PP
1750 という行は、\fI\s-1SU\s0\fR や \fI\s-1SHELLS\s0\fR に列記されている
1751 コマンドの \fBbill\fR による実行を本当に阻止することにはならない。
1752 なぜなら、\fBbill\fR としては、そうしたコマンドを単に名前を変えて
1753 コピーすればよいし、エディタやほかのプログラムからシェル・エスケープを
1754 利用することもできるからだ。だから、この種の制限はやった方がまし程度に
1755 考えておくべきだ (そして、しっかりした運用方針によって制限の実効力を
1756 上げるべきである)。
1757 .SH "シェル・エスケープを防止する"
1758 .IX Header "PREVENTING SHELL ESCAPES"
1759 \&\fBsudo\fR があるプログラムを実行してしまうと、そのプログラムは、
1760 ほかのプログラムの実行も含めて、何でも自由に好きなことができる。
1761 このことがセキュリティ上の問題になりかねないのは、プログラムが
1762 シェル・エスケープを許しているのは珍しいことではなく、そのために
1763 ユーザが \fBsudo\fR のアクセス制御やロギングをすり抜けることが
1764 可能になるからだ。よく使うプログラムでシェル・エスケープを
1765 許しているものには、次のようなものがある。
1766 (当然ながら) シェル、エディタ、ページャ、メーラ、ターミナル。
1767 .PP
1768 この問題に対処するには、基本的に二つの方法がある。
1769 .IP "制限" 10
1770 .IX Item "restrict"
1771 ユーザに任意のコマンドの実行を許すようなコマンドに対して、ユーザが
1772 アクセスできないようにする。エディタの場合は、制限モードと称して、
1773 シェル・エスケープが使えないモードを持っているものも多い。
1774 もっとも、\fBsudo\fR 経由でエディタを使うのなら、
1775 \&\fBsudoedit\fR を使用する方がよりすぐれた対策である。
1776 シェル・エスケープを提供するプログラムはたくさんあるので、
1777 それを提供しないプログラムのみを使用するようにユーザを制限するのは、
1778 たいてい実現不可能である。
1779 .IP "noexec" 10
1780 .IX Item "noexec"
1781 共有ライブラリをサポートしている多くのシステムには、環境変数 (たいていは 
1782 \&\f(CW\*(C`LD_PRELOAD\*(C'\fR) で別の共有ライブラリを指定することによって、
1783 デフォルトのライブラリ関数を置き換える能力がある。
1784 そういったシステムでは、\fBsudo\fR の \fInoexec\fR 機能を使えば、
1785 \&\fBsudo\fR から実行されるプログラムが、何かほかのプログラムを実行するのを
1786 防ぐことができる。とは言え、これが当てはまるのは、動的にリンクされた
1787 ネイティブなプログラムだけだということに気を付けてほしい。
1788 静的にリンクされたプログラムや、バイナリ・エミュレーションのもとで
1789 動くほかの OS のプログラムには効果がない。
1790 .Sp
1791 \&\fBsudo\fR が \fInoexec\fR に対応しているかどうかを知りたかったら、
1792 root ユーザになって次のように実行してみればよい。
1793 .Sp
1794 .Vb 1
1795 \&    sudo \-V | grep "dummy exec"
1796 .Ve
1797 .Sp
1798 その出力にこんなふうに始まる行があれば、
1799 .Sp
1800 .Vb 1
1801 \&    File containing dummy exec functions:
1802 .Ve
1803 .Sp
1804 そのときは、たぶん \fBsudo\fR が標準ライブラリにある exec ファミリーの関数を、
1805 単にエラーを返すだけの自分自身の関数で置き換えられるということだ。
1806 残念ながら、\fInoexec\fR が有効かどうか、コンパイル時に確かめる
1807 絶対確実な方法はない。\fInoexec\fR は SunOS, Solaris, *BSD, Linux,
1808 \&\s-1IRIX\s0, Tru64 \s-1UNIX\s0, MacOS X, HP-UX 11.x で使えるはずだ。
1809 \&\s-1AIX\s0 と UnixWare では使えないことがわかっている。環境変数 
1810 \&\f(CW\*(C`LD_PRELOAD\*(C'\fR をサポートしているたいていの OS なら、
1811 \&\fInoexec\fR が使えると思う。使用しているオペレーティングシステムの
1812 マニュアルページを調べて、ダイナミック・リンカについて (通例 ld.so,
1813 ld.so.1, dyld, dld.sl, rld, loader といった名前になっている) 
1814 \&\f(CW\*(C`LD_PRELOAD\*(C'\fR がサポートされているかどうか確認してほしい。
1815 .Sp
1816 あるコマンドに対して \fInoexec\fR を有効にするには、
1817 上記「ユーザの設定」セクションで述べたように、\f(CW\*(C`NOEXEC\*(C'\fR タグを
1818 使用する。そのときの例を再掲しよう。
1819 .Sp
1820 .Vb 1
1821 \& aaron  shanty = NOEXEC: /usr/bin/more, /usr/bin/vi
1822 .Ve
1823 .Sp
1824 この例では、ユーザ \fBaaron\fR 対して、\fInoexec\fR を有効にした上で、
1825 \&\fI/usr/bin/more\fR と \fI/usr/bin/vi\fR の実行を許可している。
1826 このようにすれば、この二つのコマンドから (シェルのような) ほかのコマンドを
1827 実行することができなくなるわけだ。使用しているシステムが \fInoexec\fR に
1828 対応する能力があるかどうか、よくわからない場合は、取りあえず 
1829 \&\fInoexec\fR を試して、効果があるかどうか確かめてみればよい。それなら
1830 いつだってできるはずだ。
1831 .PP
1832 注意してほしいが、シェル・エスケープの禁止は万能薬ではない。ルートの権限で
1833 動いているプログラムには、ほかにも、危険性のあるさまざまな作業 (ファイルの
1834 中身を入れ替えるとか、上書きするとか) が可能であり、思いがけずに
1835 権限を拡大してしまうこともありえるのだ。特にエディタについて言うと、
1836 ユーザには \fBsudoedit\fR を実行する許可を与えるのが、より安全な方法である。
1837 .SH "関連項目"
1838 .IX Header "SEE ALSO"
1839 \&\fIrsh\fR\|(1), \fIsu\fR\|(1), \fIfnmatch\fR\|(3), \fIglob\fR\|(3), \fIsudo\fR\|(8), \fIvisudo\fR\|(8)
1840 .SH "警告"
1841 .IX Header "CAVEATS"
1842 \&\fIsudoers\fR ファイルの編集には、\fB必ず\fR \fBvisudo\fR コマンドを
1843 使うべきだ。そうすれば、\fBvisudo\fR がファイルをロックし、文法のチェッ
1844 クをやってくれる。\fIsudoers\fR ファイルに文法的な間違いがあると、
1845 \&\fBsudo\fR が動かないので、\fIsudoers\fR ファイルには文法エラーが絶
1846 対にあってはならないのだ。
1847 .PP
1848 ネットグループを (ユーザについてではなく) マシンについて使用し、
1849 \&\fInetgroup\fR ファイルに完全修飾ホスト名を記載する場合は (たいてい
1850 そうするものだが)、そのマシンのホスト名を \f(CW\*(C`hostname\*(C'\fR 
1851 コマンドが出力する通りの完全修飾名で書くか、さもなければ 
1852 \&\fIsudoers\fR ファイルで \fIfqdn\fR オプションを使うかしなければなら
1853 ない。
1854 .SH "バグ"
1855 .IX Header "BUGS"
1856 \&\fBsudo\fR にバグを発見したと思ったら、下記のページにアクセスして、
1857 バグレポートを提出していただきたい。
1858 .br
1859 http://www.sudo.ws/sudo/bugs/
1860 .SH "サポート"
1861 .IX Header "SUPPORT"
1862 ある程度の無料サポートが sudo-users メーリングリストを通して利用できる。
1863 購読やアーカイブの検索には下記 URL を御覧になること。
1864 .br
1865 http://www.sudo.ws/mailman/listinfo/sudo\-users
1866 .SH "免責"
1867 .IX Header "DISCLAIMER"
1868 \&\fBsudo\fR は「現状のまま」提供される。明示的な、あるいは黙示的な
1869 いかなる保証も、商品性や特定目的への適合性についての黙示的な保証を含め、
1870 またそれのみに止まらず、これを否認する。詳細な全文については、
1871 \&\fBsudo\fR と一緒に配布されている \s-1LICENSE\s0 ファイルや
1872 下記 Web ページを御覧いただきたい。
1873 .br
1874 http://www.sudo.ws/sudo/license.html