「こうなるんだな」と答えが出てくると思いましたが、もし間違っているのではないか尋ねなければならないという気がしました。
私のアカウントのデフォルトのumaskはです0077
。私はwheel
グループに属しています。
次の ACL を含むディレクトリがあります。
# file: .
# owner: root
# group: wheel
# flags: -s-
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:group:wheel:rwx
default:mask::rwx
default:other::r-x
上記のACLに基づいてファイルを生成し、権限を正しく設定しました。
$ touch z
$ ls -al
drwxrwsr-x+ 2 root wheel 4,096 Aug 7 12:36 .
drwxr-xr-x. 7 root root 4,096 Aug 6 17:31 ..
-rw-rw-r--+ 1 ehymowitz wheel 0 Aug 7 12:36 z
これでこれが実行可能ファイルであると確信しているので、権限を変更しました。今回は本当です。いいえACLの後にはumaskに従います。
$ chmod +x z
$ ls -al
drwxrwsr-x+ 2 root wheel 4,096 Aug 7 12:36 .
drwxr-xr-x. 7 root root 4,096 Aug 6 17:31 ..
-rwxrw-r--+ 1 ehymowitz wheel 0 Aug 7 12:36 z
a+x
これを行うには指定する必要があります。
$ chmod a+x z
$ ls -al
drwxrwsr-x+ 2 root wheel 4,096 Aug 7 12:36 .
drwxr-xr-x. 7 root root 4,096 Aug 6 17:31 ..
-rwxrwxr-x+ 1 ehymowitz wheel 0 Aug 7 12:36 z
touch
なぜACLに基づいてファイルを生成するのか理解できないようですが、chmod
権限の調整のためにACLを無視します。
答え1
chmodの明示的な機能
man chmod
ugoa 文字の組み合わせは、ファイルへのユーザーのアクセス権の変更を制御します。ファイルを所有しているユーザー(u)、ファイルグループの他のユーザー(g)、ファイルグループに属していない他のユーザー(o)、またはすべてのユーザー(1人)。これが与えられなければ、(a)が与えられたのと同じ効果がありますが、umaskに設定されたビットは影響を受けません。
ACLに関するいくつかの関連考えを見るために、有益な答えが見つかりました。ファイル権限を設定するシステムコールの正確な詳細を表示できます。 (ありがとうございましたslm!)
しかし、使い方を詳しく紹介することは必ずしも良いわけではありません。 * nix権限は、デフォルトのACL(または既存のset-GID)を使用し始めると本当に奇妙になります。現時点では、umask は希望する一貫した動作をサポートしていないという制限があります。systemdを使用するマルチユーザーワークステーションオペレーティングシステムで(また、udisksは無効な許可ビットでFATファイルシステムをマウントします。)
デフォルトのACLは、WindowsワークステーションのUnixファイルサーバーで使用できます。場合によっては、ハッキングされた Samba 構成を使用して効果的にumask をオーバーライドします。もちろん、LinuxはSambaにアクセスできるので、このoverride hack^W機能の利点を享受できます。 FUSEファイルシステム「bindfs」を使用して、Linux上で同じハッキングを構成できます。
(つまり、mv
Linuxはマウントされた同じファイルシステム内のフォルダ間で異なるデフォルトのACLを尊重しません。ノーチラス(GNOMEファイル)も移動時にデフォルトのACLを実装しません。Windowsエクスプローラも同様です。
答え2
あなたはUnix / Linux権限のより微妙な側面の1つを目撃しています。touch
ファイルが生成された親ディレクトリからコマンドを呼び出すと、ACLが選択されます。 ACLは既存の権限(モード)+ ACLを結合します。
を使用すると、chmod
作業中のファイルまたはディレクトリのMODEビットのみを操作できます。互いに異なるため、取り扱いには注意が必要であることに留意してください。
はい
を使用すると、strace
どのように機能するかを確認できますchmod
。まずファイルを作成しましょうfile_077
。
$ rm afile_077*; umask 077; strace -s 2000 touch afile_077 > afile_077.tr 2>&1
結果を見る:
$ ll afile_077
-rw------- 1 user1 user1 0 Aug 7 09:32 afile_077
ファイルの権限を次のように変更しますa+x
。
$ strace -s 2000 chmod a+x afile_077 > afile_077_chmod.tr 2>&1
生成されたログを表示します。
$ cat afile_077_chmod.tr
...
umask(0) = 02
stat("afile_077", {st_mode=S_IFREG|0600, st_size=0, ...}) = 0
fchmodat(AT_FDCWD, "afile_077", 0711) = 0
...
ここでは、MODEビットがchmod
要求さumask
れ、それに応じて設定されていることがわかります。 ACLにはまったく注意を払いません。メモ:この質問は、その出力をそのタスクにchmod
統合しないことに注意してください。umask