業務上で作業用ユーザーとは別のユーザーを作成し特定ファイルのみで作業する必要が出た際、ユーザーには特定ファイルだけアクセスを許可できないかと思い始めていたところ、ACLという機能があることを知りました。
今回はこのACLについてまとめていきます。
ACL(access control list)とは
アクセス制御リストと呼ばれるもので、ファイルやディレクトリに対して詳細な権限設定が可能になります。
パーミッション設定と言えば、通常chmodやchownコマンドで設定するようなものが代表的かと思います。ファイルに対して一定の権限は設定できますが、設定可能な範囲には制限があります。
一方、ACLではユーザーやグループ、ファイルやディレクトリを指定して権限を細かく設定することが可能です。
ACLを利用するにはパッケージが必要となるため、インストールされているか確認します。
# rpm -q acl
acl-2.3.1-4.el9.x86_64
ACLの設定ではgetfacl,setfaclコマンドを使用します。各コマンドのバージョンはこのようになっています。
# setfacl -v
setfacl 2.3.1
# getfacl -v
getfacl 2.3.1
ファイルへの権限設定
今回はrootで/tmp/test.txtファイルを作成し、userでファイルに書き込み可能にすることをゴールとします。
まずはファイルを作成しておきます。
[root@example.com ~]# touch /tmp/test.txt
getfaclコマンドでパーミッション設定を確認しておきます。引数は次のようになります。
# getfacl <ファイル名>
実行してみると、ファイルに対するACLの詳細が表示されます。何も設定していないのでデフォルトが表示されていますが、現状userからファイルにアクセスすると閲覧はできますが書き込みできない状態です。
[root@example.com ~]# getfacl /tmp/test.txt
# file: test.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--
では、userに権限を付与するためsetfaclコマンドを利用します。引数は次のようになります。
# setfacl -m <ユーザー/グループ>:<ユーザー/グループ名>:<パーミッション> <ファイル名>
実際のコマンドはこんな感じです。
[root@example.com ~]# setfacl -m u:user:rw /tmp/test.txt
再度getfaclコマンドで確認するとuserに権限付与されていることがわかり、test.txtに書き込みが可能になります。
[root@example.com ~]# getfacl /tmp/test.txt
# file: test.txt
# owner: root
# group: root
user::rw-
user:user:rw-
group::r--
mask::rw-
other::r--
まとめ
今回はACLについてまとめていきました。あるユーザーに対して最小権限を付与したい場合などは、細かくカスタマイズできるため便利そうだなと思いました。
余談ですが、今回ACLについて調べはしたものの実運用には至りませんでした。
理由として、OS側でACLがデフォルトでは無効になっていた点、そこまで細かく設定する必要が無かったという点が挙げられます。基礎的だとは思いますが、サーバー上で機能が有効になっているか、パッケージがインストールされているかは事前に確認が必要になります。
設定方法については、いつか利用する可能性もあるので頭の片隅に置いておこうと思います。
参考
https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/7/html/system_administrators_guide/ch-access_control_lists