ACL によるアクセスコントロール2024/05/13 |
ACL (Access Control Lists) の設定です。
ファイル/ディレクトリに対する [所有者/グループ/第三者] と [読み取り/書き込み/実行] のアクセスコントロールをより細かく設定可能です。 |
|
[1] | ACL ツールをインストールします。 |
root@dlp:~# apt -y install acl
|
[2] | ACL を利用するには [ext2/ext3/ext4] や [xfs] など、ACL に対応したファイルシステムで ACL オプションを有効にする必要があります。 Ubuntu では、デフォルトの [ext4] を利用中であれば、デフォルトマウントオプションに ACL オプションが設定され ACL が有効化された状態となっています。 |
root@dlp:~# df -hT / Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/ubuntu--vg-ubuntu--lv ext4 77G 9.1G 64G 13% / # デフォルトマウントオプション確認 root@dlp:~# tune2fs -l /dev/ubuntu-vg/ubuntu-lv | grep "Default mount options"
Default mount options: user_xattr acl # acl オプション設定済みとなっている
|
[3] | HDD の増設等で後から追加したデバイスで、もし ACL が有効になっていない場合は、(デフォルトでは有効) ACL オプションを指定してマウントするか、または デフォルトマウントオプションに追加しておけば OK です。 |
# acl オプションを有効にしてマウントする root@dlp:~# mount -o acl /dev/sdb1 /mnt root@dlp:~# mount | grep sdb1 /dev/sdb1 on /mnt type ext4 (rw,acl) # デフォルトマウントオプションに追加する root@dlp:~# tune2fs -o acl /dev/sdb1 root@dlp:~# tune2fs -l /dev/sdb1 | grep "Default mount options" Default mount options: acl |
[4] | ACL の設定です。 例として、[/home/test.txt] を所有者 [root] のアクセス権 [700] で作成し、そのファイルに ACL を設定します。 |
root@dlp:~# ll /home/test.txt -rw------- 1 root root 13 May 13 03:34 /home/test.txt # [/home/test.txt] に対して ユーザー [ubuntu] に r(read) を許可 root@dlp:~# setfacl -m u:ubuntu:r /home/test.txt
# ACL を設定するとアクセス権の右に以下のように [+] が付加される root@dlp:~# ll /home/test.txt -rw-r-----+ 1 root root 13 May 13 03:34 /home/test.txt # ACL を表示して設定を確認 root@dlp:~# getfacl /home/test.txt # file: home/test.txt # owner: root # group: root user::rw- user:ubuntu:r-- group::--- mask::r-- other::--- # 他ユーザーで確認 noble@dlp:~$ cat /home/test.txt cat: /home/test.txt: Permission denied # 正常に表示不可
|
[5] | あるディレクトリ配下全てに再帰的に ACL を設定する。 |
# [/home/testdir] ディレクトリ配下に対して、ユーザー [ubuntu] に r-x(read/execute) を許可 root@dlp:~# setfacl -R -m u:ubuntu:rx /home/testdir
ll -laR /home/testdir /home/testdir: total 12 drwxr-x---+ 2 root root 4096 May 13 03:38 ./ drwxr-xr-x 5 root root 4096 May 13 03:38 ../ -rw-r-x---+ 1 root root 13 May 13 03:38 testfile.txt*root@dlp:~# getfacl -R /home/testdir getfacl: Removing leading '/' from absolute path names # file: home/testdir # owner: root # group: root user::rwx user:ubuntu:r-x group::--- mask::r-x other::--- # file: home/testdir/testfile.txt # owner: root # group: root user::rw- user:ubuntu:r-x group::--- mask::r-x other::--- # [ubuntu] ユーザーで確認 ubuntu@dlp:~$ cat /home/testdir/testfile.txt ACL testfile |
[6] | グループ単位で ACL を設定する。 |
# [/home/test.txt] に対して グループ [security] に rw(read/write) を許可 root@dlp:~# setfacl -m g:security:rw /home/test.txt root@dlp:~# getfacl /home/test.txt # file: home/test.txt # owner: root # group: root user::rw- user:ubuntu:r-- group::--- group:security:rw- mask::rw- other::--- # [security] グループ所属の [ubuntu] ユーザーで確認 ubuntu@dlp:~$ echo "test write" >> /home/test.txt ubuntu@dlp:~$ cat /home/test.txt ACL test file test write # [security] グループに属さない他ユーザーで確認 noble@dlp:~$ echo "test write" >> /home/test.txt -bash: /home/test.txt: Permission denied |
[7] | ACL 設定を削除する。 |
# [/home/test.txt] に付与されている [ubuntu] ユーザーの ACL のみ削除 root@dlp:~# setfacl -x u:ubuntu /home/test.txt
|
[8] | あるディレクトリに対してデフォルトの ACL を設定する。 デフォルト ACL が設定されたディレクトリ配下にファイル/ディレクトリを作成すると、デフォルト ACL が継承される。 ( デフォルト設定のみでなく、対象ディレクトリに対して個別の許可設定もしておく必要がある ) ただし、新規作成ファイルにはデフォルトで ACL が付与されるが、それらのファイルに後から chmod でアクセス権を変更すると ACL 設定はクリアされるため、注意が必要。 |
root@dlp:~#
setfacl -m u:ubuntu:r-x /home/testdir # [/home/testdir] ディレクトリに対して [ubuntu] に r-x(read/execute) を許可するデフォルト ACL root@dlp:~# setfacl -d -m u:ubuntu:r-x /home/testdir root@dlp:~# getfacl /home/testdir getfacl: Removing leading '/' from absolute path names # file: home/testdir # owner: root # group: root user::rwx user:ubuntu:r-x group::--- mask::r-x other::--- default:user::rwx default:user:ubuntu:r-x default:group::--- default:mask::r-x default:other::---root@dlp:~# umask 077; echo "ACL default setting" > /home/testdir/test.txt root@dlp:~# ll /home/testdir/test.txt -rw-r-----+ 1 root root 20 May 13 03:44 /home/testdir/test.txt # [ubuntu] ユーザーで確認 ubuntu@dlp:~$ cat /home/testdir/test.txt ACL default setting |
[9] | デフォルト ACL を削除する。 |
root@dlp:~# setfacl -k /home/testdir root@dlp:~# getfacl /home/testdir getfacl: Removing leading '/' from absolute path names # file: home/testdir # owner: root # group: root user::rwx user:ubuntu:r-x group::--- mask::r-x other::--- |
[10] | ファイルから ACL を読み込み設定する。 |
# ACL 設定ファイルを作成 ( 書式は getfacl の出力結果と同じ ) # 設定したい ACL が他システムにあるなら、getfacl の結果をリダイレクトでファイルに出力しそのまま利用することも可能
root@dlp:~#
vi acl.txt # file: /home/testdir # owner: root # group: root user::rwx user:ubuntu:r-x group::--- mask::r-x other::--- # file: /home/test.txt # owner: root # group: root user::rwx user:ubuntu:r-- group::--- mask::r-- other::--- setfacl --restore=acl.txt root@dlp:~# ll /home total 24 drwxr-xr-x 5 root root 4096 May 13 03:38 ./ drwxr-xr-x 23 root root 4096 May 13 03:33 ../ drwxr-x--- 2 noble noble 4096 May 13 03:37 noble/ -rwxr-----+ 1 root root 24 May 13 03:42 test.txt* drwxr-x---+ 2 root root 4096 May 13 03:44 testdir/ drwxr-x--x 7 ubuntu ubuntu 4096 May 13 02:47 ubuntu/ |
Sponsored Link |