umaskがファイルの実行権限を変更しないのはなぜですか? [コピー]

umaskがファイルの実行権限を変更しないのはなぜですか? [コピー]

に変更すると、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+xumaskはumaskと同じように無視されますが、chmod 777umaskchmod +wは適用されます)。
  • 権限保存ツールは適切なモードを適用し、umask を無視します。例えば cp -ptar -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などのリモートファイルシステムは独自の変更を追加できることに注意してください。)

おすすめ記事