Ubuntu 24.04
Sponsored Link

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::---

# [ubuntu] ユーザーで確認

ubuntu@dlp:~$
cat /home/test.txt

ACL test file  
# 正常に表示できた
# 他ユーザーで確認

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
root@dlp:~#
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] のACLを全て削除

root@dlp:~#
setfacl -b /home/test.txt
# [/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::---

root@dlp:~#
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/
関連コンテンツ