umaskはACLにどのように影響しますか?


12

umaskACLがアクティブになっている場合、新しく作成されたファイルのデフォルトマスクにどのように影響するかを誰かに説明できますか?これに関するドキュメントはありますか?

例:

$ mkdir test_dir && cd test_dir
$ setfacl -m d:someuser:rwx -m u:someuser:rwx .  # give access to some user
$ getfacl .
# file: .
# owner: myUsername
# group: myGroup
user::rwx
user:someuser:rwx
group::---
mask::rwx
other::---
default:user::rwx
default:user:someuser:rwx
default:group::---
default:mask::rwx
default:other::---
$ umask # show my umask
077
$ echo "main(){}" > x.c # minimal C program
$ make x # build it
cc     x.c   -o x
$ getfacl x
# file: x
# owner: myUsername
# group: myGroup
user::rwx
user:someuser:rwx           #effective:rw-
group::---
mask::rw-
other::---

期待しmask:rwxます。実際umaskに例えば027に設定した後、私は期待される動作をします。


umaskが077の場合、を取得しmask::rw-ます。しかし、それは本当にあなたの質問ではありませんよね?
slm

@slmこれは私の質問の一部です。新しいファイルのマスクがumaskにどのように依存するか知りたい。私は077でディレクトリのデフォルトマスクであるのにmask::rw-mask::rwxそれが得られなかったことにかなり驚いていました。
jofel 2013

わかりました。これを一掃するのに役立つはずの例を使用して、私の回答を更新しています。数分ください。
slm

この質問は密接に関連しています。
jofel 2013

回答:


10

LinuxでACLとマスクというタイトルのこの例を見つけました。この記事では、次の例を示します。これらの例は、ACLの理解とumask相互のやり取りを理解するのに役立つと思います。

バックグラウンド

Linuxシステムでファイルが作成されると、デフォルトの権限0666が適用されますが、ディレクトリが作成されると、デフォルトの権限0777が適用されます。

例1-ファイル

umaskを077に設定し、ファイルをタッチするとします。これを使用するstraceと、実際に何が起こっているかを確認するために使用できます。

$ umask 077; strace -eopen touch testfile 2>&1 | tail -1; ls -l testfile
open("testfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
-rw-------. 1 root root 0 Sep 4 15:25 testfile

この例では、システムコールopen()がアクセス許可0666で行われていることがわかりますが、これumask 077がカーネルによって適用されると、次のアクセス許可が削除され(---rwxrwx)、rw-------別名0600のままになります。

例-2ディレクトリ

ディレクトリに同じ概念を適用できますが、デフォルトのアクセス許可が0666である代わりに0777である点が異なります。

$ umask 022; strace -emkdir mkdir testdir; ls -ld testdir
mkdir("testdir", 0777)                  = 0
drwxr-xr-x 2 saml saml 4096 Jul  9 10:55 testdir

今回はmkdirコマンドを使用しています。次に、mkdirコマンドはシステムコールを呼び出しましたmkdir()。上記の例では、mkdirコマンドmkdir()がデフォルトの権限0777rwxrwxrwx)でシステムコールを呼び出したことがわかります。今回は022、以下の権限のumask が削除されている(----w--w-)ためrwxr-xr-x、ディレクトリが作成されたときは0755()のままです。

例3(デフォルトACLの適用)

次に、ディレクトリを作成して、デフォルトのACLがその中のファイルと一緒に適用されるとどうなるかを示します。

$ mkdir acldir
$ sudo strace -s 128 -fvTttto luv setfacl -m d:u:nginx:rwx,u:nginx:rwx acldir

$ getfacl --all-effective acldir
# file: acldir
# owner: saml
# group: saml
user::rwx
user:nginx:rwx          #effective:rwx
group::r-x          #effective:r-x
mask::rwx
other::r-x
default:user::rwx
default:user:nginx:rwx      #effective:rwx
default:group::r-x      #effective:r-x
default:mask::rwx
default:other::r-x

次に、ファイルを作成しますaclfile

$ strace -s 128 -fvTttto luvly touch acldir/aclfile

# view the results of this command in the log file "luvly"
$ less luvly

新しく作成したファイルの権限を取得します。

$ getfacl --all-effective acldir/aclfile 
# file: acldir/aclfile
# owner: saml
# group: saml
user::rw-
user:nginx:rwx          #effective:rw-
group::r-x          #effective:r--
mask::rw-
other::r--

マスクに注意してくださいmask::rw-mask::rwxディレクトリが作成されたときと同じではないのはなぜですか?

luvlyログファイルをチェックして、ファイルの作成に使用されたデフォルトの権限を確認します。

$ less luvly |grep open |tail -1
10006 1373382808.176797 open("acldir/aclfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3 <0.000060>

これは少し混乱するところです。rwxディレクトリーが作成されたときにマスクを設定すると、ファイルの作成に対して同じ動作が予想されますが、そのようには機能しません。これは、カーネルがopen()デフォルトのアクセス許可で関数を呼び出しているためです0666

要約する

  • ファイルは実行権限(マスキングまたは有効)を取得しません。使用する方法は関係ありません:ACL、umask、またはmask&ACL。
  • ディレクトリは実行権限を取得できますが、マスキングフィールドの設定方法によって異なります。
  • ACL権限の下にあるファイルの実行権限を設定する唯一の方法は、を使用して手動で設定することchmodです。

参考文献


@jofel-これが理にかなっている場合はお知らせください。
slm

@s詳細な回答ありがとうございます。これにより、実際の問題に近づくことができます。chmodsyscallのグループ権限は、ファイルのマスクに影響します(chmod("file",0760)-> mask:rwchmod("file",0770)-> mask:rwx)。多分私はこれについての新しい質問を始めるべきです...
jofel

@jofel-はい、それは別の質問のように聞こえます。
slm

@sImそしてそれはすでにここで答えられました
jofel 2013

「Linuxシステムでファイルが作成されると、デフォルトのパーミッション0666が適用されます...」 -作成するアプリケーション次第なので、正確ではありません。
ilkkachu 2017

2

セキュリティ上の理由から、Linuxオペレーティングシステムでは、実行ビットを含むファイルの自動作成は許可されていません。これは、サイバー攻撃者がサーバーにアクセスした場合に、そのようなファイルにプログラムを書き込んで実行するのを防ぐためです。これは単なる安全対策です。chmodユーティリティを使用してファイルを作成した後、ファイルに実行ビットを手動で設定する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.