Linuxのファイルやディレクトリのアクセス権は、一般的に「所有者」「グループ」「その他」という3者に分けて制御されています。これでも基本的な運用には問題ありませんが、現場では「このユーザーだけに読み取り権限を与えたい」「特定のグループには書き込みを禁止したい」といった細かな権限管理が必要になることも少なくありません。そんなときに役立つのが「ACL(アクセス制御リスト)」です。
本記事では、LinuxでACLを設定する際に使うsetfacl
コマンドについて、基本的な使い方から実践的な活用方法までわかりやすく解説します。ファイル管理の柔軟性を高めたい方は、ぜひ最後まで読んでみてください。
ACLとは?アクセス権を柔軟にする仕組み
ACL(Access Control List)とは、ファイルやディレクトリに対して「特定のユーザーやグループごとに個別のアクセス権限を設定する」ための仕組みです。通常のパーミッション(rwx)では「所有者」「グループ」「その他」の3者に対してしかアクセス権を設定できませんが、ACLを使うことで、それ以上に細かい制御が可能になります。
たとえば、プロジェクトチームの中で「特定のファイルはAさんだけ読み取り可能」「Bさんは書き込みもできる」といった条件がある場合、ACLを使えば柔軟に対応できます。
ACLの設定にはsetfacl
コマンドを使い、確認にはgetfacl
コマンドを用います。
setfaclコマンドの基本構文
setfacl
の基本構文は以下のとおりです。
setfacl [オプション] [ACL設定] [ファイル名]
もっともよく使う形式はこちらです:
setfacl -m u:ユーザー名:権限 ファイル名
または:
setfacl -m g:グループ名:権限 ファイル名
主な権限の指定方法は以下のとおりです:
r
:読み取りw
:書き込みx
:実行-
:権限なし(削除)
たとえば、user1
に対してread
権限を付与するには、次のように実行します:
setfacl -m u:user1:r ファイル名
setfaclでよく使うオプションの解説
オプション | 内容 |
---|---|
-m | ACLの追加または変更(modify) |
-x | ACLの削除(remove) |
-b | ACLをすべて削除(blank) |
-k | デフォルトACLを削除 |
-R | 再帰的に適用 |
--set | ACLを一括で設定 |
例:user1に読み書き権限を設定する
setfacl -m u:user1:rw test.txt
例:設定されたACLを削除する
setfacl -x u:user1 test.txt
例:全ACLを削除する
setfacl -b test.txt
ACLの確認:getfaclコマンドの使い方
ACLが正しく設定されたかどうかは、getfacl
コマンドで確認できます。
getfacl ファイル名
出力例
bashコピーする編集する# file: test.txt
# owner: root
# group: root
user::rw-
user:user1:rw-
group::r--
mask::rw-
other::r--
このように、通常のパーミッションに加え、「user:user1:rw-」のように個別設定が表示されます。
ディレクトリに対するACLの設定とデフォルトACL
ファイルだけでなく、ディレクトリにもACLを設定できます。さらに、ディレクトリに新しく作成されるファイルにもACLを自動で適用するには「デフォルトACL」を使います。
デフォルトACLの設定方法
setfacl -d -m u:user1:rw testdir
この設定により、testdir
内に新しく作成されるファイルやディレクトリに対して、user1
がrw
の権限を自動で得るようになります。
実践例:プロジェクトフォルダでのACL活用
たとえば「プロジェクトA」というディレクトリにおいて、次のような条件を満たす必要があるとします:
- userA は読み取り専用
- userB は読み書き可能
- userC にはアクセスさせない
bashコピーする編集する# ディレクトリ作成
mkdir projectA
# 権限設定
setfacl -m u:userA:r projectA
setfacl -m u:userB:rw projectA
setfacl -m u:userC:--- projectA
さらに、今後追加されるファイルにもこの設定を自動的に引き継がせるには、デフォルトACLを設定します。
setfacl -d -m u:userA:r projectA
setfacl -d -m u:userB:rw projectA
setfacl -d -m u:userC:--- projectA
マスク(mask)の理解:ACLの落とし穴に注意
ACLでは、実際の有効権限が「mask(マスク)」によって制限されることがあります。
たとえば:
setfacl -m u:user1:rw test.txt
setfacl -m m::r test.txt
この場合、user1にはrw
を与えているはずが、maskがr
のため、実際には読み取りしかできません。
maskは「ユーザー/グループ/その他以外の全てのACL設定に共通する上限」です。maskを適切に設定しないと、意図通りに動作しないので注意が必要です。
ACL対応状況とfstabの設定確認
ACLを使用するには、ファイルシステム側でサポートされている必要があります。たとえば、ext4では標準で対応していますが、/etc/fstab
に次のようなオプションが必要な場合もあります:
UUID=xxxx / ext4 defaults,acl 0 1
このようにacl
オプションが含まれていればOKです。設定後には、マウントの再読み込みが必要です。
mount -o remount /
まとめ:ACLでアクセス権を自由自在に
Linuxのアクセス権管理は、通常のパーミッションだけでは対応しきれないケースもあります。setfacl
を使えば、特定のユーザーやグループに対して柔軟なアクセス権を設定でき、現場の運用において大きな助けになります。
特にチーム開発や複数部門での共有ファイル管理には欠かせない機能といえるでしょう。
ACLとsetfacl
を上手に活用し、安全かつ効率的なファイル管理を実現してください。