Categories: linux

Linuxのアクセス権を柔軟に管理!setfaclコマンドの使い方と活用例

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でよく使うオプションの解説

オプション内容
-mACLの追加または変更(modify)
-xACLの削除(remove)
-bACLをすべて削除(blank)
-kデフォルトACLを削除
-R再帰的に適用
--setACLを一括で設定

例: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内に新しく作成されるファイルやディレクトリに対して、user1rwの権限を自動で得るようになります。


実践例:プロジェクトフォルダでの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を上手に活用し、安全かつ効率的なファイル管理を実現してください。

upandup

Web制作の記事を中心に、暮らし、ビジネスに役立つ情報を発信します。 アフィリエイトにも参加しています。よろしくお願いいたします。