1 @c ===========================================================================
3 @c This file was generated with po4a. Translate the source file.
5 @c ===========================================================================
8 @c Copyright (C) 1994-2016 Free Software Foundation, Inc.
10 @c Permission is granted to copy, distribute and/or modify this document
11 @c under the terms of the GNU Free Documentation License, Version 1.3 or
12 @c any later version published by the Free Software Foundation; with no
13 @c Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
14 @c Texts. A copy of the license is included in the ``GNU Free
15 @c Documentation License'' file as part of this distribution.
17 各ファイルには、一組のファイル・モードビット (@dfn{file mode bits})
18 というものがあって、ユーザがそのファイルに対してどんなアクセスができるかを制御している。
19 モードビットは、シンボルによっても、8 進数によっても表すことができる。
22 * Mode Structure:: ファイル・モードビットの構成。
23 * Symbolic Modes:: ファイル・モードビットの覚えやすい表現。
24 * Numeric Modes:: ファイル・モードビットの 8 進数による表現。
25 * Operator Numeric Modes:: 8 進数によるモードの追加、削除、絶対指定。
26 * Directory Setuid and Setgid:: ディレクトリの set-user-ID と set-group-ID。
30 @section ファイル・モードビットの構成
32 ファイル・モードビットには、二つの構成部分がある。
33 ファイルに対する通常のアクセスを制御するファイル許可属性ビット (@dfn{file permission bits})
34 と、若干のファイルのみに働く特殊モードビット (@dfn{special mode bits}) である。
36 ユーザがファイルに対して持つ許可 (訳注: アクセス権とも言う) には、
41 @cindex read permission
42 ファイルを読み込む許可。ディレクトリに対しては、ディレクトリの中身をリストする許可になる。
44 @cindex write permission
45 ファイルに書き出す (ファイルを変更する) 許可。ディレクトリに対しては、
46 そのディレクトリ中でファイルを作成したり、削除したりする許可になる。
48 @cindex execute/search permission
49 ファイルを実行する (プログラムとしてそれを動かす) 許可。
50 ディレクトリに対しては、ディレクトリ中のファイルにアクセスする許可になる。
53 ユーザにも 3 種類あり、ファイルに対する上記の操作のいづれについても、
60 ファイルの所有グループに属するファイルの所有者以外のユーザ。
65 @cindex owner, default
66 @cindex group owner, default
67 ファイルには、作成されるときに所有者とグループが割り当てられる。
68 たいていの場合、所有者はファイルを作成したユーザであり、
69 グループはファイルが存在するディレクトリのグループだが、
70 オペレーティングシステムやファイルが作成されるファイルシステム、ファイルの作成方法などによって違うこともある。
71 ファイルの所有者やグループは、@command{chown} や @command{chgrp}
74 上に挙げた 3 種類の許可属性 3 組のほかに、ファイルのモードビットには三つの特殊モードビットが存在するが、
75 そうしたものは、実行ファイル (すなわち、プログラム) と --- ほとんどのシステムでは
82 ファイルの実行時に、そのプロセスの実効ユーザ ID をファイルの所有者のものにする
83 (@dfn{set-user-ID bit} とか @dfn{setuid bit} と呼ばれる)。
84 若干のシステムでは、ディレクトリに set-user-ID ビットを付けると、
85 ファイルの作成者が誰であれ、そのディレクトリ中で作成されるファイルの所有者が、
86 ディレクトリの所有者と同じになる。また、新しく作られるサブディレクトリに
91 ファイルの実行時に、そのプロセスの実効グループ ID をファイルのグループのものにする
92 (@dfn{set-group-ID bit} とか @dfn{setgid bit} と呼ばれる)。
93 ほとんどのシステムでは、ディレクトリに set-group-ID ビットを付けると、
94 ファイルの作成者がどんなグループに属していようとも、
95 そのディレクトリ中で作成されるファイルのグループが、ディレクトリのグループと同じになる。
96 また、新しく作成されるサブディレクトリに set-group-ID ビットが付く。
99 @cindex swap space, saving text image in
100 @cindex text image, saving in swap space
101 @cindex restricted deletion flag
102 特権を持たないユーザ (訳注: 要するに、root 以外の一般ユーザ)
103 に対して、自分が所有するファイルやディレクトリを除き、
104 ディレクトリ中のファイルの削除や、名前の変更を禁じる。
105 これは、ディレクトリの削除制限フラグ (@dfn{restricted deletion flag})
106 と呼ばれ、@file{/tmp} のような、誰でも書き込めるディレクトリでよく見かけられる。
108 古いシステムの中には、通常ファイルにこのビットが付いていると、
109 プログラムのテキスト・イメージをスワップ・デバイスにセーブするものがある。
110 そうすることで、実行時にロードが速くなるわけだ。
111 こちらは、スティッキー・ビット (@dfn{sticky bit}) と呼ばれる。
114 @c should probably say a lot more about ACLs... someday
115 上記のファイル・モードビットのほかに、ファイルシステムに固有のファイル属性が存在することがある。
116 たとえば、アクセス・コントロール・リスト (ACL) がそうだし、
117 ファイルが圧縮されているか否か、ファイルが変更可能か否か (変更不可属性)、
118 ファイルがダンプ可能か否か、といった属性が存在することもある。
119 そうした属性は、通常、ファイルシステム固有のプログラムを使って設定される。例を挙げよう。
123 GNU 及び GNU/Linux では、ext2 ファイルシステムに固有なファイル属性は、
124 @command{chattr} コマンドを使って設定される。
127 FreeBSD では、FFS ファイルシステムに固有なファイルフラグは、
128 @command{chflags} コマンドを使って設定される。
131 ファイルのモードビットがそのファイルに対するある操作を許可していたとしても、
132 それでもその操作に失敗することがある。その理由としては、次のようなことが考えられる。
136 ファイルシステムに固有な属性やフラグが、その操作を許可していない。
139 ファイルシステムが読み込み専用でマウントされている。
142 たとえば、ファイルに変更不可属性が設定されていると、@code{chmod a+w FILE}
143 を直前に実行したとしても、ファイルを変更することはできない。
148 @cindex symbolic modes
149 シンボリックモード (@dfn{Symbolic modes}) では、
150 ファイルのモードビットの変更を、1 文字からなるシンボルに対する操作として表現している。
151 シンボリックモードを使えば、ファイルのモードビットのすべてを変更することもできるし、その一部を選択して変更することもできる。
152 もしそうしたければ、変更前のモードビットの値に基づいて変更することも可能だ。
153 現在の @code{umask} に基づいて変更することも、多分できるはずである (@pxref{Umask and Protection})。
155 シンボリックモードの書式は、次のとおりである。
158 @r{[}ugoa@dots{}@r{][}-+=@r{]}@var{perms}@dots{}@r{[},@dots{}@r{]}
162 ここで @var{perms} は @samp{rwxXst} の内の 0 個以上の文字、または
163 @samp{ugo} の内の 1 個の文字である。
165 以下のセクションでは、シンボリックモードについて、演算子 (operator)
169 * Setting Permissions:: 許可属性の基本操作。
170 * Copying Permissions:: 存在する許可属性をコピーする。
171 * Changing Special Mode Bits:: 特殊モードビット。
172 * Conditional Executability:: 条件付きで実行属性の変更をする。
173 * Multiple Changes:: 複数の変更をする。
174 * Umask and Protection:: umask の働き。
177 @node Setting Permissions
180 ファイルの許可属性に対するシンボルによる操作 (operation) の基本は、
181 あるタイプのユーザに対して、ファイルの、読み、書き、実行または検索を行うための許可属性を、
182 追加したり、削除したり、設定したりすることである。
186 @var{users} @var{operation} @var{permissions}
190 上の書式では、三つの部分を空白で区切って示しているが、見やすくするためにすぎない。
191 シンボリックモードの指定には空白があってはならない。
193 @var{users} の部分は、どのタイプのユーザの、ファイルに対するアクセス権を変更するかを示している。
194 この部分には、1 個以上の下記の文字を指定する (あるいは、何も指定しないでもよい。
195 その場合どうなるかは、「Umask と保険」セクションで説明している。
196 @pxref{Umask and Protection})。文字を 2 個以上指定した場合の順番に特別な意味はない。
200 @cindex owner of file, permissions for
203 @cindex group, permissions for
204 ファイルの所有グループに属するファイルの所有者以外のユーザ。
206 @cindex other permissions
207 @samp{u} や @samp{g} 以外のすべてのユーザ。
209 すべてのユーザ。@samp{ugo} と同じ。
212 @var{operation} の部分は、対象となるユーザのファイルに対するアクセス権をどんなふうに変更するかを指示しており、
217 @cindex adding permissions
218 @var{users} がそのファイルに対して、すでにどんな許可を持っているかにかかわりなく、
219 それに @var{permissions} を追加する。
221 @cindex removing permissions
222 @cindex subtracting permissions
223 @var{users} がそのファイルに対して、すでにどんな許可を持っているかにかかわりなく、
224 そこから @var{permissions} を削除する。
226 @cindex setting permissions
227 @var{permissions} を、そのファイルに対して @var{users} が持つ許可のすべてにする。
230 @var{permissions} の部分は、ファイルに対するどんなアクセス権を変更するかを指示しており、
231 通常は 0 個以上の下記の文字を指定する。@var{users} の部分と同様、文字を
232 2 個以上指定した場合の順番に特別な意味はない。@var{permissions}
233 の部分に何も指定しないことに意味があるのは、操作に @samp{=} 演算子を使用する場合だけである。
234 その場合、指定されたユーザは、そのファイルに対していかなるアクセス権も持たないことになる。
238 @cindex read permission, symbolic
239 @var{users} の、そのファイルを読む権限。
241 @cindex write permission, symbolic
242 @var{users} の、そのファイルに書き込む権限。
244 @cindex execute/search permission, symbolic
245 @var{users} の、そのファイルを実行する権限。ディレクトリの場合は、
249 たとえば、ある通常ファイルについて、すべてのユーザに読み書きを許可するが、
250 その実行は許可しないならば、次のように指定する。
256 そのファイルの所有者以外のすべてのユーザから書き込み権限を取り上げるには、次のようにする。
263 上記の指定は、ファイルの所有者がファイルに対して持っているアクセス権には影響を及ぼさない。
264 また、所有者以外のユーザがそのファイルを読んだり、実行したりできるかどうかにも、影響を及ぼさない。
266 ファイルの所有者以外のすべてのユーザに対して、そのファイルに何をする権限も一切与えないためには、
267 以下のモードを使用すればよい。それでも、所有者以外のユーザは、
268 ファイルの存在するディレクトリに対する書き込み権限を持っていれば、
269 そのファイルを削除することができるだろうけれど。
282 @node Copying Permissions
283 @subsection 存在する許可属性のコピー
285 @cindex copying existing permissions
286 @cindex permissions, copying existing
287 ファイルの許可属性を、それが既に持っている許可属性を元にして指定することもできる。
288 そうするには、演算子の後ろに @samp{r}, @samp{w}, @samp{x}
289 という文字を続ける代わりに、@samp{u}, @samp{g}, @samp{o}
297 上記のモード指定は、ファイルのグループに属するユーザのアクセス権を、
298 その他のユーザがそのファイルに対して持っているアクセス権に追加する。
299 従って、仮にファイルの最初のモードが 664 (@samp{rw-rw-r--}) ならば、
300 上記のモード指定は、それを 666 (@samp{rw-rw-rw-}) に変更することになる。
301 ファイルの最初のモードが 741 (@samp{rwxr----x}) だったら、745 (@samp{rwxr--r-x})
302 になるだろう。@samp{-} と @samp{=} の演算子の働きも、同様である。
304 @node Changing Special Mode Bits
305 @subsection 特殊モードビットの変更
307 @cindex changing special mode bits
308 読み込み、書き出し、実行/検索に関するファイルの許可属性を変更できるだけではない。
309 特殊モードビットも変更することができる。特殊モードビットについては、
310 「ファイルのモードビットの構成」の節で簡単に説明している。@xref{Mode Structure}.
312 ファイルの実行時にユーザ ID をセットするように、ファイルのモードビットを変更するには、
313 シンボリックモードの @var{users} の部分に @samp{u} を使用し、
314 @var{permissions} の部分に@samp{s} を使用する。
316 ファイルの実行時にグループ ID をセットするように、ファイルのモードビットを変更するには、
317 シンボリックモードの @var{users} の部分に @samp{g} を使用し、
318 @var{permissions} の部分に @samp{s} を使用する。
320 ファイルの実行時にユーザ ID とグループ ID の両方をセットするようにするには、
321 シンボリックモードの @var{users} の部分に何も指定せず
322 (あるいは、@samp{a} を使用し)、 @var{permissions} の部分に @samp{s} を使用する。
324 削除制限フラグやスティッキー・ビットが有効になるように、ファイルのモードビットを変更するには、
325 シンボリックモードの @var{users} の部分に何も指定せず
326 (あるいは、@samp{a} を使用し)、@var{permissions} の部分に @samp{t} を使用する。
328 たとえば、あるプログラムに set-user-ID モードビットを設定するには、
335 そのプログラムから set-user-ID と set-group-ID の両方のモードビットを削除するには、
342 削除制限フラグやスティッキー・ビットを設定するには、次のモードを指定する。
348 @samp{o+s} という組み合わせには、何の効果もない。GNU のシステムでは、
349 @samp{u+t} や @samp{g+t} という組み合わせにも、全く効果がなく、
350 また @samp{o+t} は、単なる @samp{+t} と同じ働きをする。
352 特殊モードビットの設定や変更では、@samp{=} はあまり役に立たない。
360 上記のモードは、確かに、削除制限フラグやスティッキー・ビットを設定することはするが、
361 同時に、ファイルのグループに属していないユーザが、
362 そのファイルに対して、読み、書き、実行/検索の権限を持っていたとしても、
365 set-user-ID や set-group-ID ビットがディレクトリに付いている場合の、
366 ほかの約束事については、「ディレクトリの Set-User-ID と Set-Group-ID
367 ビット」の節をご覧になっていただきたい。@xref{Directory Setuid and Setgid}.
369 @node Conditional Executability
370 @subsection 条件付きの実行属性変更
372 @cindex conditional executability
373 シンボルによる許可属性の指定には、もう一つ特別なタイプがある。@samp{x}
374 の代わりに、@samp{X} を使用すると、実行/検索の許可属性に変更があるのは、
375 ファイルがディレクトリである場合か、あるいは、(どのユーザかに)
376 すでに実行許可が付いていた場合だけになる。
385 上記のモードは、すべてのユーザにディレクトリを検索する許可、
386 または、ファイルを実行する許可を与えるが、後者については、どのユーザかが、
387 すでにそのファイルを実行できたならば、という条件が付く。
389 @node Multiple Changes
392 @cindex multiple changes to permissions
393 シンボリックモードの書式は、これまでに述べてきたよりも、実際にはもっと複雑である (@pxref{Setting Permissions})。
394 ファイルのモードビットに対して、複数の変更を一度に行うには、二つの方法がある。
396 一つ目の方法は、シンボリックモードの @var{users} の部分の後ろに、複数の
397 @var{operation} と @var{permissions} を指定することである。
406 このモードは、ファイルの所有者以外のユーザに、読み込み許可を与え、
407 さらに、ファイルがディレクトリであるか、どのユーザかがすでに実行許可を持っていた場合には、実行/検索許可も与えている。
408 また、ファイルの所有者以外のユーザから、ファイルへの書き出し許可を取り上げている。
409 なお、この指定は、ファイルの所有者が持っている許可には影響を及ぼさない。
410 このモードは、以下の二つのモードと等価である。
417 複数の変更を行う二つ目の方法は、単純なシンボリックモードを
418 2 個以上、コンマで区切って指定することである。たとえば、
425 これは、すべてのユーザにそのファイルに対する読み込み許可を与え、
426 所有者以外のすべてのユーザから書き出し許可を削除している。もう一つ、例を挙げる。
433 こちらは、そのファイルに対するすべての許可ビットを明示的に設定している。
434 (ファイルのグループに属さないユーザには、ファイルに対する許可を一切与えていない。)
436 複数の変更を行う二つの方法を組み合わせて使うこともできる。
443 この指定は、すべてのユーザにファイルの読み込み許可を与え、
444 さらに、ファイルのグループに属するユーザには、実行/検索許可も与えているが、
445 書き出し許可は与えていない。上記のモードを指定する方法は、ほかにもいくつかあるだろう。
452 @node Umask and Protection
453 @subsection Umask と保険
455 @cindex umask and modes
456 @cindex modes and umask
457 シンボリックモードの @var{users} の部分を省略すると、デフォルトの @samp{a}
458 が使用される (すべてのユーザが対象になる)。が、この場合、システム変数
459 @code{umask} で設定されている許可属性は、全く影響を受けない
460 (訳注: @code{umask} で許可しないことになっている許可属性は、
461 現在実際には許可になっていようと、不許可であろうと、@samp{-w} や @samp{+w}
462 といった @var{users} 部のない指定では、変更されないということ。
463 以下で例を挙げて説明している)。@code{umask} の値は、@code{umask}
464 コマンドで設定することができる。@code{umask} のデフォルトの値は、システムによって様々である。
466 @cindex giving away permissions
467 シンボリックモードで @var{users} の部分を省略するのは、@samp{+} 以外の操作では、
468 おおむね役に立たない。@var{users} の省略が @samp{+} で役に立つのは、その場合、
469 意図した以上の許可をファイルに付けてしまわないための、簡単にカスタマイズできる保険として、
470 @code{umask} が使用できるからである。
472 一例を挙げると、@code{umask} の値が 2 ということは、
473 ファイルの所有者でもなく、ファイルのグループにも所属していない一般ユーザに、
474 書き出し許可を与えないということである。その場合、
481 というモードは、ファイルの所有者とファイルのグループに所属するユーザに、
482 書き出し許可を追加するが、それ以外のユーザには、書き出し許可を追加しない。それに対して、
489 というモードは、@code{umask} を無視して、ファイルへの書き出し許可を、
495 @cindex numeric modes
496 @cindex file mode bits, numeric
497 @cindex octal numbers for file modes
498 シンボリックモードで指定する代わりに、モードを表す 1 個の 8 進数
499 (基数 8) を指定することもできる。この数値は常に 8 進数として解釈されるので、
500 C 言語の場合とは違って、先頭に @samp{0} を付ける必要はない。@samp{0055}
501 というモードは、@samp{55} というモードと同じなのだ。(とは言え、@samp{00055}
502 のような、5 桁以上のモードは、特別な扱いを受けることがある。
503 @xref{Directory Setuid and Setgid}.)
505 数値モードは、たいていの場合、対応するシンボリックモードより短くてすむが、
506 ファイルの変更前のモードビットを踏まえて指定することが、
507 普通はできないという制限がある。数値モードでは、絶対的な形で指定することしかできないのだ。
508 ディレクトリの set-user-ID ビットと set-group-ID ビットは、
509 この一般的な制限の対象外である。 @xref{Directory Setuid and Setgid}.
510 なお、演算子付き数値モードを使えば、ファイルの変更前のモードビットを踏まえた指定が可能になる。
511 @xref{Operator Numeric Modes}.
513 ファイルの所有者、ファイルのグループに所属する他のユーザ、それ以外の一般ユーザ、
514 この 3 種のユーザに与える許可属性には、それぞれ 3 ビットを要し、その 3 ビットは
515 1 個の 8 進数で表現される。三つの特殊モードビットにも、おのおの 1 ビットが必要であり、
516 こちらも一つにまとめて、もう一つの 8 進数として表現される。
517 各ビットの並び方は、最下位のビットから上位のビットへ向かって、次のようになっている。
523 ファイルのグループに所属しない一般ユーザ:
528 ファイルのグループに所属する所有者以外のユーザ:
539 1000 削除制限フラグ、またはスティッキー・ビット
540 2000 ファイルの実行時にグループ ID をセットする
541 4000 ファイルの実行時にユーザ ID をセットする
544 たとえば、数値モードの @samp{4755} は、シンボリックモードの @samp{u=rwxs,go=rx}
545 に当たり、数値モードの @samp{664} は、シンボリックモードの @samp{ug=rw,o=r}
546 に相当している。数値モードの @samp{0} は、シンボリックモードの @samp{a=} に相当する。
548 @node Operator Numeric Modes
551 演算子付き数値モードは、@samp{-}, @samp{+}, @samp{=} を前に付けた数値モードである。
552 そうした演算子が表している意味は、シンボリックモードの場合と同じだ。
553 たとえば、@samp{+440} は、ファイルの所有者とグループに対する読み込み許可を有効にし、
554 @samp{-1} は、その他の一般ユーザに対する実行許可を無効にする。
555 また、@samp{=600} は、ファイルの所有者に対する読み込みと書き出しの許可を有効にするが、
557 演算子付き数値モードは、シンボリックモードと組み合わせて使うことも可能だ。
558 両者の間はコンマで区切ればよい。一例を挙げると、@samp{=0,u+r}
559 は、すべての許可を無効にした上で、ファイルの所有者の読み込み許可だけを有効にする。
561 コマンド @samp{chmod =755 @var{dir}} と @samp{chmod 755 @var{dir}}
562 の違いは、前者がディレクトリ @var{dir} の setuid と setgid
563 をクリアするのに対して、後者はそれをそのまま維持するという点にある。
564 @xref{Directory Setuid and Setgid}.
566 演算子付き数値モードは、GNU による拡張である。
568 @node Directory Setuid and Setgid
569 @section ディレクトリの Set-User-ID と Set-Group-ID ビット
571 ほとんどのシステムでは、ディレクトリに set-group-ID ビットが付いていると、
572 そのディレクトリ内で新しく作られるファイルは、ディレクトリと同じグループを継承し、
573 新しく作られるサブディレクトリは、親ディレクトリの set-group-ID ビットを継承する。
574 また、若干のシステムでは、ディレクトリの set-user-ID ビットが、
575 ディレクトリ内の新規ファイルの所有者と、新規サブディレクトリの set-user-ID
577 こうした仕組みによって、新しいファイルを共有するために @command{chmod} や
578 @command{chown} を使う必要が軽減し、ユーザにとってファイルの共有がやりやすくなっているのである。
580 ユーザの便宜のためのこうした仕組みは、ディレクトリの set-user-ID
581 ビットや set-group-ID ビットを拠り所にしている。もし、@command{chmod} や
582 @command{mkdir} が、ディレクトリのそうしたビットを常時クリアする仕様になっていたら、
583 この仕組みもそれほど便利ではなくなり、ファイルの共有が面倒なことになるだろう。
584 それ故、@command{chmod} などのコマンドは、原則としてディレクトリの
585 set-user-ID ビットや set-group-ID ビットを変更しないのである。
586 set-user-ID ビットや set-group-ID ビットを変更するには、
587 ユーザがシンボリックモードで明示的にそう指定するか、@samp{=755}
588 のような演算子付き数値モードを使用するか、数値モードでビットを立てるか、5 桁以上の
589 8 進数からなる数値モードでビットをクリアするか、そのどれかをやる必要がある。
590 set-group-ID ビットの継承をサポートしているシステムでの例を挙げよう。
593 # 以下のコマンドは、サブディレクトリの set-user-ID ビットと
594 # set-group-ID ビットを変更しない。従って、デフォルトの値が
602 mkdir -m u=rwx,go=rx F
605 サブディレクトリの set-user-ID ビットや set-group-ID ビットを設定したかったら、
606 シンボリックモードや数値モードで明示的に指定しなければならない。たとえば、次のようにだ。
609 # 以下のコマンドは、サブディレクトリに set-user-ID ビットと
610 # set-group-ID bits を付けようとしている。
614 chmod u=rwx,go=rx,a+s G
617 mkdir -m u=rwx,go=rx,a+s J
620 サブディレクトリの set-user-ID ビットや set-group-ID ビットを消去したかったら、
621 シンボリックモードで明示的にそう指定するか、演算子付き数値モードを使用するか、5 桁以上の
622 8 進数からなる数値モードで指定するかしなければならない。
625 # 以下のコマンドは、ディレクトリ D の set-user-ID ビットと
626 # set-group-ID ビットをクリアしようとしている。
633 こうした動作は、GNU による拡張である。移植を考慮したスクリプトでは、
634 ディレクトリの set-user-ID ビットや set-group-ID ビットを立てたり、
635 クリアしたりするリクエストを当てにしない方がよい。
636 POSIX の規格で、そうしたリクエストを無視する実装が認められているからだ。
637 なお、GNU の許可属性指定における 4 桁以下の数値モードの動作は、ディレクトリの
638 set-user-ID ビットや set-group-ID ビットを維持するシステムで使うスクリプト向けであり、
639 5 桁以上の数値モードの動作は、そうしたビットを維持しないシステムでも使えるスクリプト向けである。
641 (訳注: 4 桁以下と 5 桁以上の数値によるモード指定の違いについて少し整理しておく。
642 数値によるモード指定は、原則として絶対的な指定である。
643 たとえば、755 と指定すれば、755 に対応するモードビットだけが立てられ、
644 それ以外のビットは 0 になる。ただし、ディレクトリの set-user-ID ビットと
645 set-group-ID ビットについてだけは、話がもう少し複雑である。
646 4 桁以下の数値による指定の場合、ディレクトリの set-user-ID ビットや
647 set-group-ID ビットを維持するシステムでは、
648 そうしたビットはデフォルトや現在の状態が引き継がれるのだから、
649 ユーザがディレクトリの set-user-ID ビットや set-group-ID
650 ビットを数値によって指定しても、それは絶対的な指定にならない。
651 デフォルト値や現在値に対する追加にしかならないのである。
652 当然のこととして、この方法では消去もできない。それに対して、5 桁以上の数値による指定の場合は、
653 どんなシステムでも、すべてのモードビットについて、ユーザの指定は絶対指定になる。
654 従って、こちらなら、ディレクトリの set-user-ID ビットや set-group-ID
655 ビットの選択的な設定や消去もできるのである。もちろん、お使いの @command{chmod}
656 のバージョンが、5 桁の数値指定をサポートしていればだが。)