openSUSE Leap 16

ACL によるアクセスコントロール2025/12/09

 

ACL (Access Control Lists) の設定です。
ファイル/ディレクトリに対する [所有者/グループ/第三者] と [読み取り/書き込み/実行] のアクセスコントロールをより細かく設定可能です。

[1] ACL パッケージは OS の最小構成に含まれているため、追加パッケージのインストールは不要ですが、 もしインストールされていない場合は、事前にインストールします。
dlp:~ #
zypper -m install acl
[2]

SUSE のデフォルトファイルシステムである [btrfs] を使用している場合は、ACL を利用するための事前設定は不要です。
[mount] コマンド等のデフォルトオプションには表示されませんが、[btrfs] では ACL はデフォルトで有効となります。
逆に、ACL を無効にしたい場合は、マウントオプションに明示的に [-o noacl] を付加する必要があります。

[3] ACL の設定です。
例として、[/home/test.txt] を所有者 [root] のアクセス権 [700] で作成し、そのファイルに ACL を設定します。
dlp:~ #
ll /home/test.txt

-rw-------. 1 root root 25 Dec  9 10:04 /home/test.txt

# ユーザー [suse] に r(read) を許可

dlp:~ #
setfacl -m u:suse:r /home/test.txt
# ACL を設定するとアクセス権の右に以下のように [+] が付加される

dlp:~ #
ll /home/test.txt

-rw-r-----+ 1 root root 25 Dec  9 10:04 /home/test.txt

# ACL を表示して設定確認

dlp:~ #
getfacl /home/test.txt

getfacl: Removing leading '/' from absolute path names
# file: home/test.txt
# owner: root
# group: root
user::rw-
user:suse:r--
group::---
mask::r--
other::---


# [suse] ユーザーでアクセス確認

suse@dlp:~>
cat /home/test.txt

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

leap@dlp:~>
cat /home/test.txt

cat: /home/test.txt: Permission denied  
# 正常に表示不可
[4] あるディレクトリ配下全てに再帰的に ACL を設定する。
dlp:~ #
ll -d /home/testdir

drwx------. 1 root root 0 Dec  9 10:07 /home/testdir

# [/home/testdir] ディレクトリに対してユーザー [suse] に r(read) を再帰的に許可

dlp:~ #
setfacl -R -m u:suse:r /home/testdir
dlp:~ #
ll /home/testdir

total 4
-rw-r-----+ 1 root root 10 Dec  9 10:09 testfile.txt

dlp:~ #
getfacl -R /home/testdir

getfacl: Removing leading '/' from absolute path names
# file: home/testdir
# owner: root
# group: root
user::rwx
user:suse:r--
group::---
mask::r--
other::---

# file: home/testdir/testfile.txt
# owner: root
# group: root
user::rw-
user:suse:r--
group::---
mask::r--
other::---
[5] グループ単位で ACL を設定する。
# [/home/testfile.txt] に対して、グループ [security] に rw(read/write) を許可

dlp:~ #
groupadd security

dlp:~ #
setfacl -m g:security:rw /home/testfile.txt

dlp:~ #
getfacl /home/testfile.txt

getfacl: Removing leading '/' from absolute path names
# file: home/testfile.txt
# owner: root
# group: root
user::rw-
group::---
group:security:rw-
mask::rw-
other::---


# [security] グループ所属の [leap] ユーザーで確認

leap@dlp:~>
echo "test write" >> /home/testfile.txt

leap@dlp:~>
cat /home/testfile.txt

ACL test file
test write  
# 正常に書き込めた
# [security] グループに属さない他ユーザーで確認

suse@dlp:~>
echo "test write" >> /home/testfile.txt

-bash: /home/test.txt: Permission denied  
# 正常に書き込めない
[6] ACL 設定を削除する。
# [/home/test.txt] の ACL を全て削除

dlp:~ #
setfacl -b /home/test.txt
# [/home/testfile.txt] に付与されている [suse] ユーザーの ACL のみ削除

dlp:~ #
setfacl -x u:suse /home/testfile.txt
[7] あるディレクトリに対してデフォルトの ACL を設定する。
デフォルト ACL が設定されたディレクトリ配下にファイル/ディレクトリを作成すると、デフォルト ACL が継承される。
( デフォルト設定のみでなく、対象ディレクトリに対して個別の許可設定もしておく必要がある )
ただし、新規作成ファイルにはデフォルトで ACL が付与されるが、それらのファイルに後から chmod でアクセス権を変更すると ACL 設定はクリアされるため、注意が必要。
dlp:~ #
setfacl -m u:suse:r-x /home/testdir
# [/home/testdir] ディレクトリに対して [suse] に r-x(read/execute) を許可するデフォルト ACL

dlp:~ #
setfacl -d -m u:suse:r-x /home/testdir

dlp:~ #
getfacl /home/testdir

getfacl: Removing leading '/' from absolute path names
# file: home/testdir
# owner: root
# group: root
user::rwx
user:suse:r-x
group::---
mask::r-x
other::---
default:user::rwx
default:user:suse:r-x
default:group::---
default:mask::r-x
default:other::---

dlp:~ #
echo "ACL default setting" > /home/testdir/test.txt

dlp:~ #
ll /home/testdir/test.txt

-rw-r-----+ 1 root root 20 Dec  9 10:15 /home/testdir/test.txt

# [suse] ユーザーで確認

suse@dlp:~>
cat /home/testdir/test.txt

ACL default setting  
# 正常に読めた
[8] デフォルト ACL を削除する。
dlp:~ #
setfacl -k /home/testdir

dlp:~ #
getfacl /home/testdir

getfacl: Removing leading '/' from absolute path names
# file: home/testdir
# owner: root
# group: root
user::rwx
user:suse:r-x
group::---
mask::r-x
other::---
[9] ファイルから ACL を読み込み設定する。
# ACL 設定ファイルを作成 ( 書式は [getfacl] の出力結果と同じ )
# 設定したい ACL が他システムにあるならば [getfacl] の結果をリダイレクトでファイルに出力しそのまま利用することも可能

dlp:~ #
vi acl.txt
# file: /home/testdir
# owner: root
# group: root
user::rwx
user:suse:r-x
group::---
mask::r-x
other::---

# file: /home/test.txt
# owner: root
# group: root
user::rwx
user:suse:r--
group::---
mask::r--
other::---

dlp:~ #
setfacl --restore=acl.txt

dlp:~ #
ll /home

total 8
drwx------. 1 leap leap 122 Dec  9 10:06 leap
drwx------. 1 suse suse 122 Dec  9 09:53 suse
-rwxr-----+ 1 root root  25 Dec  9 10:04 test.txt
drwxr-x---+ 1 root root  40 Dec  9 10:15 testdir
-rw-rw----+ 1 root root  21 Dec  9 10:13 testfile.txt
関連コンテンツ