web-dev-qa-db-ja.com

ACLと標準のファイルパーミッション-ファイルにアクセスするときに使用されますか?

ACLと標準のファイル権限は同期されているようです。

$ getfacl test.cpp
# file: test.cpp
# owner: scdmb
# group: scdmb
user::rw-
group::rw-
other::r--

$ ls -l test.cpp
-rw-rw-r-- 2 scdmb scdmb 173 Jan  1  1970 test.cpp

ただし、私が読んだように、iノードにはファイルパーミッション(i_modeフィールド)を保存するための2つの場所と、ACLが配置されるこれらの拡張ファイル属性があります。それで、ファイルにアクセスするとき、どのファイルパーミッションが使用されますか?標準またはACL?それとも、これは異なる方法で提示された同じものですか?

6
scdmb

getfaclmanpage から:

Getfaclの出力形式は次のとおりです。

           1:  # file: somedir/
           2:  # owner: Lisa
           3:  # group: staff
           4:  user::rwx
           5:  user:joe:rwx               #effective:r-x
           6:  group::rwx                 #effective:r-x
           7:  group:cool:r-x
           8:  mask:r-x
           9:  other:r-x
          10:  default:user::rwx
          11:  default:user:joe:rwx       #effective:r-x
          12:  default:group::r-x
          13:  default:mask:r-x
          14:  default:other:---

4、6、9行目は、ファイルモード許可ビットのユーザー、グループ、およびその他のフィールドに対応しています。これらの3つは、ベースACLエントリと呼ばれます。 5行目と7行目は、名前付きユーザーおよび名前付きグループのエントリです。 8行目は有効な権利マスクです。このエントリは、すべてのグループと指定されたユーザーに付与される有効な権限を制限します。 (ファイル所有者およびその他の権限は、有効な権利マスクの影響を受けません。他のすべてのエントリは影響を受けます。)10〜14行目は、このディレクトリに関連付けられたデフォルトのACLを示しています。ディレクトリにはデフォルトのACLがある場合があります。通常のファイルにはデフォルトのACLがありません。

::ではなく<user|group|other>:<name>:<perms>のみの行が表示されるという事実は、拡張ACLがないことを示しています。この特定のファイルでは、ls -la(ユーザー/グループ/その他のアクセス許可ビット(別名「ベースACL」)に表示されるのと同じ情報を取得するための凝った方法としてgetfaclを使用しています。

どの権限が使用されるかについて:簡単な答えは、ACLの順序に依存するということです。詳細については、 ここ および ここ を参照してください。一般に、拒否がACLリストの最初に来る場合、後で明示的な許可を使用して許可を返すことはできません。拒否は常に優先されます。

Unix.SEには、さらに多くの参照があるさらに長い記事があります ここ

5
allquixotic