概要
ACLは、従来のUnix権限モデル(所有者、グループ、その他)を超えた柔軟な権限管理を提供します。特定のユーザーやグループに対して、ファイルまたはディレクトリへのアクセス権限を明示的に指定できます。これは、複数のユーザーが共有する環境で複雑な権限要件を満たすのに役立ちます。
主な特徴
- きめ細やかな権限制御
- 特定のユーザー/グループへの権限付与
- デフォルト権限(umask)との連携
- ディレクトリのデフォルトACL設定が可能
インストール
`acl`機能自体はLinuxカーネルに組み込まれていますが、`getfacl`および`setfacl`コマンドを使用するには`acl`パッケージをインストールする必要があります。ほとんどのLinuxディストリビューションではデフォルトでインストールされていない場合があります。
Debian/Ubuntu
sudo apt update && sudo apt install acl
DebianまたはUbuntuベースのシステムで`acl`パッケージをインストールするコマンドです。
CentOS/RHEL/Fedora
sudo yum install acl
CentOS、RHEL、またはFedoraベースのシステムで`acl`パッケージをインストールするコマンドです。
使用例
ACLは主に`getfacl`(ACL照会)と`setfacl`(ACL設定)コマンドを通じて管理されます。以下にいくつかの一般的な使用例を示します。
ファイルのACL照会
getfacl my_file.txt
`getfacl`コマンドを使用して、特定のファイルまたはディレクトリの現在のACLを確認します。
特定のユーザーに読み取り/書き込み権限を付与
setfacl -m u:user1:rw my_file.txt
`setfacl -m`オプションを使用して、'user1'ユーザーに'my_file.txt'に対する読み取り(r)および書き込み(w)権限を付与します。
特定のグループに実行権限を付与
setfacl -m g:dev_group:x my_script.sh
`setfacl -m`オプションを使用して、'dev_group'グループに'my_script.sh'に対する実行(x)権限を付与します。
ACLエントリの削除
setfacl -x u:user1 my_file.txt
`setfacl -x`オプションを使用して、'user1'に対するACLエントリを削除します。
ディレクトリにデフォルトACLを設定
setfacl -m d:u:user2:rwx my_directory/
新しく作成されるファイルやディレクトリが特定のACLを継承するように、ディレクトリにデフォルトACLを設定します。`d:`プレフィックスを使用します。
すべてのACLを削除
setfacl -b my_file.txt
`setfacl -b`オプションを使用して、ファイルまたはディレクトリのすべての拡張ACLエントリを削除し、従来の権限に戻します。
ヒントと注意点
ACLを使用する際は、従来の権限システムとの相互作用を理解することが重要です。
ACLと従来の権限
- ACLが設定されたファイル/ディレクトリの`ls -l`出力では、権限文字列の末尾に`+`記号が表示されます。
- ACLは、従来の権限(所有者、グループ、その他)の上に、追加の権限を付与します。`mask`エントリは、ACLの最大有効権限を制限します。
- ACLを過度に複雑に設定すると、権限管理が困難になる可能性があるため、必要な場合にのみ慎重に使用してください。
`mask`エントリの理解
ACLを設定すると、`mask`エントリが自動的に生成または更新されることがあります。この`mask`は、ユーザー(u:)、グループ(g:)、名前付きユーザー(u:name:)、名前付きグループ(g:name:)エントリに付与された最大有効権限を定義します。`mask`よりも多くの権限を付与しようとしても、`mask`によって制限されます。`setfacl -m m::rw`のように、手動で`mask`を設定することも可能です。
ファイルシステムサポート
ACLを使用するには、ファイルシステムがACLをサポートしている必要があります。ext2、ext3、ext4、XFSなど、ほとんどの最新LinuxファイルシステムはACLをサポートしています。ファイルシステムのマウント時に`acl`オプションが有効になっているか確認する必要がある場合があります(例: `/etc/fstab`)。