Overview
ACL を使用すると通常のパーミッションよりも細いアクセス制御が可能となります。
前提条件
インストール
ACL をインストールします。
myadmin@ubuntu:~$ sudo apt -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold install acl
ACL の有効化
ACL を有効化するには、対象のファイルシステムを、acl オプションを付与してマウントする必要があります。Ubuntu の場合はデフォルトで acl オプションが有効化されており、明示的な設定は不要です。
myadmin@ubuntu:~$ df -hT /
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv ext4 37G 28G 7.5G 79% /
myadmin@ubuntu:~$ sudo tune2fs -l /dev/ubuntu-vg/ubuntu-lv
tune2fs 1.46.5 (30-Dec-2021)
Filesystem volume name: <none>
Last mounted on: /
Filesystem UUID: 6ef7814c-47cc-4b42-b12b-b70272bb0063
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit flex_bg sparse_super large_file huge_file dir_nlink extra_isize metadata_csum
Filesystem flags: unsigned_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 2424832
Block count: 9684992
Reserved block count: 435532
Overhead clusters: 197248
Free blocks: 3979098
Free inodes: 1880089
First block: 0
Block size: 4096
Fragment size: 4096
Group descriptor size: 64
Reserved GDT blocks: 1022
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8192
Inode blocks per group: 512
Flex block group size: 16
Filesystem created: Mon Jan 15 22:31:50 2024
Last mount time: Sat Feb 10 21:07:01 2024
Last write time: Sat Feb 10 21:07:00 2024
Mount count: 9
Maximum mount count: -1
Last checked: Mon Jan 15 22:31:50 2024
Check interval: 0 (<none>)
Lifetime writes: 22 GB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 32
Desired extra isize: 32
Journal inode: 8
First orphan inode: 1050826
Default directory hash: half_md4
Directory Hash Seed: 02808c14-f206-4006-8594-52b8eadfd618
Journal backup: inode blocks
Checksum type: crc32c
Checksum: 0x3c6648c4
検証環境
検証環境は以下のようにしました。
myadmin@ubuntu:~$ sudo mkdir /srv/acltest
myadmin@ubuntu:~$ sudo useradd acltest
myadmin@ubuntu:~$ sudo passwd acltest
ACL 設定前の /srv/acltest の状態は以下の通りです。getfacl コマンドは ACL の設定状態を出力します。
myadmin@ubuntu:~$ ls -ld /srv/acltest
drwxr-xr-x 2 root root 4096 Feb 17 16:15 /srv/acltest
myadmin@ubuntu:~$ getfacl /srv/acltest
getfacl: Removing leading '/' from absolute path names
# file: srv/acltest
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
acltest ユーザー・グループで書き込み可能にする
acltest ユーザー・グループで /srv/acltest ディレクトリに対して書き込み可能となるルールを追加します。-R オプションは対象のディレクトリに対して再起的に設定します。-m オプションは ACL ルールを定義します。ACL の設定内容はコマンド例の通りとなりますので割愛します。-d オプションはデフォルトの ACL ルールを定義します。これは -d オプション無しのコマンドも必須になるため注意が必要です。
myadmin@ubuntu:~$ sudo setfacl -R -m u:acltest:rwx /srv/acltest
myadmin@ubuntu:~$ sudo setfacl -R -d -m u:acltest:rwx /srv/acltest
myadmin@ubuntu:~$ sudo setfacl -R -m g:acltest:rwx /srv/acltest
myadmin@ubuntu:~$ sudo setfacl -R -d -m g:acltest:rwx /srv/acltest
myadmin@ubuntu:~$ ls -ld /srv/acltest
drwxrwxr-x+ 2 root root 4096 Feb 17 16:52 /srv/acltest
myadmin@ubuntu:~$ getfacl /srv/acltest
getfacl: Removing leading '/' from absolute path names
# file: srv/acltest
# owner: root
# group: root
user::rwx
user:acltest:rwx
group::r-x
group:acltest:rwx
mask::rwx
other::r-x
default:user::rwx
default:user:acltest:rwx
default:group::r-x
default:group:acltest:rwx
default:mask::rwx
default:other::r-x
この設定は大抵のケースで使用されるオプションが含まれていると思いますので、環境や要件により調整して下さい。ls コマンドでは、拡張 ACL が存在する場合、+ が付きます。また、これはディレクトリの例ですが、ファイル単位でも設定可能です。
ACL の削除
ACL 設定を削除します。
myadmin@ubuntu:~$ sudo setfacl -b /srv/acltest
Ubuntu 22.04 ACL 拡張 ACL によるアクセス制御