Linux での ACL と MASK というタイトルのこの例を見つけました。この記事では、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()
というコマンド デフォルトのパーミッション 0777
を持つシステムコール (rwxrwxrwx
)。今度は 022
の umask で 次の権限が削除されます (----w--w-
)、つまり 0755 (rwxr-xr-x
) が残ります。 ) ディレクトリが作成されたとき。
例 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
を使用して手動で設定することです .
参考文献
- acl のマニュアル ページ
セキュリティ上の理由から、Linux オペレーティング システムでは、実行ビットを含むファイルの自動作成が許可されていません。これは、サイバー攻撃者がサーバーにアクセスした場合に、そのようなファイルにプログラムを書き込んで実行するのを防ぐためです.あくまで安全対策です。 chmod ユーティリティでファイルを作成した後、ファイルに実行ビットを手動で設定する必要があります