ACL によるアクセスコントロール2025/12/09 |
|
ACL (Access Control Lists) の設定です。 |
|
| [1] | ACL パッケージは OS の最小構成に含まれているため、追加パッケージのインストールは不要ですが、 もしインストールされていない場合は、事前にインストールします。 |
|
dlp:~ # zypper -m install acl
|
| [2] |
SUSE のデフォルトファイルシステムである [btrfs] を使用している場合は、ACL を利用するための事前設定は不要です。 |
| [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 # 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::--- # 他ユーザーで確認 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
ll /home/testdir total 4 -rw-r-----+ 1 root root 10 Dec 9 10:09 testfile.txtdlp:~ # 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/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::--- 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 |
|
|