アクセス制御リストについて

POSIXアクセス制御リスト(ACL)は、所有者、グループおよび他のすべてのシステム・ユーザーの読取り、書込み、実行権限を設定する従来のUNIX任意アクセス制御(DAC)よりも豊富なアクセス制御モデルを提供します。複数のユーザーまたはグループについてアクセス権を定義しプログラム、プロセス、ファイルおよびディレクトリについて権限を指定する、ACLを構成できます。ディレクトリにデフォルトのACLを設定すると、その子孫が同じ権限を自動的に継承します。ACLは、btrfsOCFS2ext3ext4およびXFSファイル・システム(マウントされたNFSファイル・システムを含む)で使用できます。

ACLは、ACLが関連付けられているファイルまたはディレクトリに対して、特定のユーザーまたはグループがどのようにアクセスできるかを指定する一連のルールで構成されます。通常のACLエントリは、単一のファイルまたはディレクトリついてアクセス情報を指定します。デフォルトACLエントリは、ディレクトリに対してのみ設定され、アクセスACLがないディレクトリ内のファイルにはデフォルトのアクセス情報を指定します。

ACLサポートの有効化

  1. aclパッケージがインストールされていることを確認します。そうでない場合は、次のコマンドを使用します。

    sudo dnf install acl
  2. /etc/fstabファイルを編集して、ACLを使用するファイル・システムのエントリを変更します。これにより、ACLをサポートする適切なオプションが含まれます。次に例を示します。

    LABEL=/work      /work       ext4     acl     0 0

    マウントされたSamba共有には、aclのかわりにcifsaclオプションを使用します。

  3. ファイル・システムを再マウントします。

    sudo mount -o remount /work

ACLの設定および表示

ファイルに対するACLルールを追加または変更するには、次の構文でsetfaclコマンドを使用します。

sudo setfacl -m rules file ...

ACLルールでは、次の形式を使用できます。

[d:]u: user[: permissions]

名前またはユーザーIDで指定されたユーザーのアクセスACLを設定します。これらの権限は、ユーザーが指定されていない場合は所有者に適用されます。

[d:]g: group[: permissions]

名前またはグループIDで指定されたグループのアクセスACLを設定します。これらの権限は、グループが指定されていない場合は所有グループに適用されます。

[d:]m[:][: permissions]

所有グループの権限すべてとユーザーおよびグループのエントリすべてを結合した、有効な権限マスクを設定します。

[d:]o[:][: permissions]

その他(他のいずれのルールも適用されない全員)のアクセスACLを設定します。

それらの権限を次に示します。それらはchmodコマンドで使用されます。

  • r: 読取り

  • w: 書込み

  • x: 実行

d:接頭辞を使用して、ディレクトリのデフォルトACLにルールを適用します。

ファイルのACLを表示するには、getfaclコマンドを使用します。たとえば:

sudo getfacl foofile

このコマンドの出力は、次のようになります。

# file: foofile
# owner: bob
# group: bob
user::rw-
user::fiona:r--
user::jack:rw-
user::jill:rw-
group::r--
mask::r--
other::r--

拡張ACLがファイルに対してアクティブな場合は、ls -lコマンドを使用すると、権限の後にプラス記号(+)が表示されます。

-rw-r--r--+ 1 bob bob  105322 Apr 11 11:02 foofile

次の例では、ディレクトリおよびファイルのACLを設定する方法と表示する方法を示します。

  • ユーザーにファイルまたはディレクトリへの読取りアクセス権を付与するには、次のようにします。

    sudo setfacl -m u:user:r file
  • ファイルまたはディレクトリの名前、所有者、グループおよびACLを表示するには、次のようにします。

    sudo getfacl file
  • ACLではなく有効な権限マスクを変更することで、すべてのグループおよびユーザーの、ファイルへの書込みアクセス権を削除します。

    sudo setfacl -m m::rx file

    -xオプションでは、ユーザーまたはグループのルールを削除します。

  • ファイルのACLからユーザーのルールを削除するには、次のようにします。

    sudo setfacl -x u:user file
  • ファイルのACLからグループのルールを削除するには、次のようにします。

    sudo setfacl -x g:group file
  • ファイルまたはディレクトリからすべての拡張ACLエントリを削除するには、次のように、-bオプションを指定します。

    sudo setfacl -b file
  • ファイルf1のACLをファイルf2にコピーするには、次のようにします。

    sudo getfacl f1 | setfacl --set-file=- f2
  • ディレクトリ上のその他について読取りおよび実行アクセス権のデフォルトACLを設定するには、次のようにします。

    sudo setfacl -m d:o:rx directory
  • ディレクトリのACL設定を、継承可能なデフォルトACL設定に昇格させるには、次のようにします。

    sudo getfacl --access directory | setfacl -d -M- directory
  • ディレクトリからデフォルトACLを削除するには、次のように、-kオプションを指定します。

    sudo setfacl -k directory

詳細は、acl(5)setfacl(1)およびgetfacl(1)の各マニュアル・ページを参照してください。