アクセス制御リスト(ACL)について
ACLは、従来のrwx権限体系では実現できなかった、より細かい粒度での権限管理を実現します。CentOS7以降のバージョンでは、デフォルトでACLが有効なxfsおよびext4ファイルシステムが作成されますが、CentOS7以前では、手動でACLを有効にする必要があります。
ACLの機能
- ユーザーやグループ単位で個別の権限を設定できる。
- CentOS7以降では、デフォルトでxfsおよびext4ファイルシステムにACL機能が含まれる。
- それ以前のバージョンでは、次のコマンドを使用してACLを有効にする必要がある。
tune2fs –o acl /dev/sdb1
mount –o acl /dev/sdb1 /mnt/test
ACLが適用される順序は、所有者、カスタムユーザー、所属グループ|カスタムグループ、その他の人となります。
ACL関連のコマンド
-
setfacl
コマンドによりACL権限を設定できます。 -
getfacl
コマンドにより設定されたACL権限を確認できます。
主なオプション:
-
-m|--modify=acl
:ACL権限を変更 -
-M|--modify-file=file
:ファイルからルールを読み取る -
-x|--remove=acl
:ファイルのACL権限を削除 -
-X|--remove-file=file
:ファイルからルールを削除 -
-b|--remove-all
:ファイルに設定されたすべてのACL権限を削除 -
-k|--remove-default
:デフォルトのACLルールを削除 -
--set=acl
:新しいルールで古いルールを置き換える(元のACL項目を削除し、新しいもので置き換える) -
--set-file=file
:ファイルから新しいルールを読み取る -
--mask
:mask値を再計算 -
-n|--no-mask
:mask値を再計算しない -
-d|--default
:ディレクトリにデフォルトのACLを設定 -
-R|--recursive
:再帰的に実行 -
-L|--logical
:シンボリックリンクが指す実際のファイルにACLを適用(-Rと併用) -
-P|--physical
:シンボリックリンク指すファイルにACLを適用しない(-Rと併用)
例:
echo "abcd" > f1
ll f1
# otherユーザーが読み取り可能
su - mage -c "cat /tmp/f1"
# mageユーザーにはいかなる権限も設定しない
setfacl -m u:mage:- f1
getfacl f1
# ファイルを確認すると、小さな+マークが表示される
ll f1
# mageは読み取り不可
su - mage -c "cat /tmp/f1"
# 他のotherユーザーjerryは読み取り可能
su - jerry -c "cat /tmp/f1"
# jerryは書き込み不可
su - jerry -c "echo 1234 >> /tmp/f1"
# jerryに書き込み権限を追加
setfacl -m u:jerry:rw f1
getfacl f1
# 書き込み可能
su - jerry -c "echo 1234 >> /tmp/f1"
su - jerry -c "cat /tmp/f1"
グループにACLを追加する例:
setfacl -m g:tom:rwx f1
getfacl f1
ファイルからACLをコピーする例:
getfacl f1 > acl_file
setfacl --set-file=acl_file f2
getfacl f1 f2
ACL権限を削除する例:
setfacl -x u:mage f1
setfacl -x g:tom f1
getfacl f1
ファイル上のすべてのACL権限を削除する例:
setfacl -b f1
getfacl f1
「--set」による置き換えの例:
setfacl --set u::rw,u:jerry:-,g::-,o::- f2
getfacl f2
mask権限について
- maskは、所有者(owner)とその他(other)を除く、ユーザーやグループの最大権限を制限します。
- maskはユーザーやグループの実際に効果的な権限(Effective Permission)を決定するために使用されます。
- maskの設定範囲内でのみ、ユーザーやグループの設定が有効になります。
例:
setfacl -m mask::rx file
ユーザーに対するアクセス権限の追加
特定のユーザーに対し、ファイルやディレクトリへの追加アクセス権を設定することができます。
# ユーザー'mage'にファイル'f1'への読み書き権限を追加
setfacl -m u:mage:rw f1
グループに対するアクセス権限の追加
特定のグループに対しても、ファイルやディレクトリへの追加アクセス権を設定することが可能です。
# グループ'tom'にファイル'f1'への読み書き実行権限を追加
setfacl -m g:tom:rwx f1
ACL 権限の確認
getfacl
コマンドを使用して、ファイルやディレクトリの現在の ACL 権限設定を表示します。
# ファイル'f1'の現在の ACL 権限を表示
getfacl f1
ACL 権限の削除
特定のユーザーやグループの ACL 権限を削除することができます。
# ユーザー'mage'のファイル'f1'に対する ACL 権限を削除
setfacl -x u:mage f1
# グループ'tom'のファイル'f1'に対する ACL 権限を削除
setfacl -x g:tom f1
ファイル上のすべての ACL 権限を削除
ファイルやディレクトリからすべての ACL 権限を削除することもできます。これは、ACLを完全にリセットしたい場合に便利です。
# ファイル'f1'からすべての ACL 権限を削除
setfacl -b f1
デフォルト ACL の設定
ディレクトリにデフォルト ACL を設定することにより、そのディレクトリ内に新しく作成されるすべてのファイルやサブディレクトリに自動的に ACL を適用させることができます。
# ディレクトリ'dir1'に対して、新たに作成されるファイルに自動的に適用されるデフォルトACLを設定
setfacl -d -m u:mage:rw dir1
これらの ACL コマンドをマスターすることで、ファイルシステム上でのアクセス権限をより精密に制御することができるようになります。Linux システムでのセキュリティ管理やアクセス制御において、ACL は非常に強力なツールです。
以上が ACL に関する概要、コマンド操作例、及びその注意点となります。