に変更すると、umask
権限を持つテキストファイルを0000
作成したいと思いますrwxrwxrwx
(umaskの理解から「重複の可能性」の質問で述べたように) しかし、これを試してみると、次のような結果が表示されます。
$ umask 0000
$ touch /tmp/new.txt
$ ls -ld /tmp/new.txt
-rw-rw-rw- 1 alanstorm wheel 0 Jun 2 10:52 /tmp/new.txt
rw-rw-rw-
つまり、実行権限が省略され、forファイル(ディレクトリは)で終わりますrwxrwxrwx
。私はローカルOS Xシステム、共有ホストの古いBSDシステム、linodで実行されているLinuxサーバーでこれを試しました。
なぜこれですか?私の理解は、umaskが権限の最終的なモデレータであるということです。これを正しく理解していますか?もしそうなら、UNIXシステムのファイルに対するデフォルトの権限にはどのような影響がありますか?
答え1
umaskは規制ではなく減算です。デフォルトでは、umaskに設定されている許可ビットはプログラム指定モードで削除されますが、umaskは許可ビットを追加できません。touch
デフォルトはモード 666 を指定します。(リンクはGNU実装を指していますが、それ以外は同じように動作します。POSIXで指定umask
)、したがって結果ファイルはcurrent:によってブロックされます。あなたの場合はumask
何もブロックされていないため、結果は666です。
ファイルまたはディレクトリのモードは通常、これを生成したプログラムによって指定されます。関連するほとんどのシステムコールはモード(例えば open(2)
、creat(2)
、mkdir(2)
どちらもモードパラメータを持っていますが、fopen(2)
いいえ、モード666を使用します)。親ディレクトリがデフォルトのACLを指定しない限り、呼び出し時にプロセスのumaskは指定されたモードをマスクするために使用されます(ビット単位mode & ~umask
、効果的にモードからumaskの各権限セットを引く)。増加しました。親ディレクトリがデフォルトのACLを指定する場合、そのデフォルトのACLはumaskの代わりに使用されます。結果ファイル権限は、作成者が指定したパターンと、基本 ACL で指定したパターンとの交点です。
POSIXの指定デフォルトモードはファイルの場合は666、ディレクトリの場合は777でなければなりません。文書基本(つまり、POSIXを読み取るときにプログラムまたは関数でファイルまたはディレクトリのモードを指定しないと、デフォルト値が適用され、システムでは適用されません。通常、これはPOSIX準拠のツールがファイルを作成するときにモード666を指定し、ディレクトリを作成するときにモード777を指定し、そこからumaskを減算します。ただし、他のモードを使用または無視する必要がある正当な理由が多いため、システムはこれを強制することはできません。ウマスク:
- 実行可能ファイルを生成するコンパイラは、実行ビットが設定されたファイルを生成しようとします(ただし、umaskを適用しますが)。
chmod(1)
明らかに、モードは引数に従って指定され、「who」が指定されているかモードが完全に指定されている場合はumaskを無視します(したがって、chmod o+x
umaskはumaskと同じように無視されますが、chmod 777
umaskchmod +w
は適用されます)。- 権限保存ツールは適切なモードを適用し、umask を無視します。例えば
cp -p
、tar -p
; - モードを完全に指定する引数を取るツールは umask:
install --mode
,mknod -m
... も無視します。
したがって、umaskはデフォルトで設定されているものを見たくない権限ビットを指定すると考える必要がありますが、これは単なる要求であることに注意してください。設定されているものを表示する権限ビットを指定するためには使用できず、設定されていないものを表示する権限ビットを指定するためにのみ使用できます。さらに、すべてのプロセスは次のようにumaskを変更できます。umask(2)
システムコール!システムumask(2)
コールは、プロセスが現在のumask(親プロセスから継承されている)を見つける唯一のPOSIX定義方法です。 Linux では、カーネル 4.7 以降では、プロセスの現在の umask を見ることができます。Umask
から探す/proc/${pid}/status
。
setuid
(完全性を確保するために、固定ビットの動作はsetgid
システムによって異なり、NFSなどのリモートファイルシステムは独自の変更を追加できることに注意してください。)
答え2
ファイル権限計算式:
default_mode & ~umask
POSIXでも指定の場合、ファイルのデフォルトモードはまたはで、ディレクトリのS_IROTH | S_IWOTH | S_IRGRP | S_IWGRP | S_IRUSR | S_IWUSR
場合、666
デフォルトモードはアプリケーションで指定されていない場合、またはS_IRWXU | S_IRWXG | S_IRWXO
です。777
ファイルのデフォルトモードで実行ビットがある場合、ビット0
ごとのANDは常にisで実行されるためです&
。0
0
そのため、 の値に関係なくumask
アプリケーションが実行ビットを指定しないと、新しく生成されたファイルの実行ビットがオフになります。
答え3
上記の説明はとても良いです。 umaskと権限の明確な説明を提供します。もう少し実用的です。 「タッチ」が提供する権限が何であるかを知りたい場合
「トラッキングタッチ/tmp/new.txt」
"new.txt"を生成するために使用されたタッチシステムコールを観察してください。
例えば。 "strace touch /tmp/new.txt"のo / p(... - >一部のコンテンツ)
...
open("/tmp/new.txt", O_WRONLY | O_CREAT | O_NOCTTY | O_NONBLOCK, 0666) = 3
...
参考までに ストレス