「chmodでは所有者・グループ・その他の3区分しか指定できなくて困っている」
現場のLinuxサーバー運用では、こうした細かい権限制御を求められる場面が本当に多いです。
この記事では、Linuxのアクセス制御リスト(ACL:Access Control List)をsetfaclコマンドとgetfaclコマンドで設定・確認する方法を、実行例とトラブルシュートを交えて解説します。
RHEL 9.4 / Ubuntu 24.04 LTSで動作確認済みの手順です。
この記事のポイント
・setfacl -m u:ユーザー名:rwx ファイル で個別ユーザーにACL権限を付与できる
・getfacl ファイル でACLの設定状況を確認できる
・ls -l の末尾の「+」マークがACL付きの目印
・デフォルトACL(d:)を使えばディレクトリ配下の新規ファイルにも権限が自動継承される
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
なぜchmodではなくACLが必要なのか
従来のLinuxパーミッション(chmod)で指定できるのは、所有者・所有グループ・その他の3区分だけです。たとえば「共有ディレクトリに読み書きできるのはAさんとBさんだけ、Cさんは読み取りのみ」といった要件は、chmodだけでは実現できません。
ACL(アクセス制御リスト)を使うと、chmodの3区分とは別枠で、ユーザーごと・グループごとに個別の権限を追加できます。
共有フォルダ運用、Webサイトの複数ユーザー管理、バックアップ領域のアクセス制限など、実務で避けて通れない機能です。
setfaclとgetfaclの基本構文
setfaclは権限を「設定する」コマンド、getfaclは権限を「表示する」コマンドです。・setfacl:Set File ACLの略。ACLを追加・変更・削除する
・getfacl:Get File ACLの略。ACLを確認する
# 基本の文法 setfacl -m [u|g]:[ユーザー名|グループ名]:[権限] ファイル名 # 確認 getfacl ファイル名
・-m:modify。ACLエントリを追加・変更する
・-x:remove。指定したACLエントリを削除する
・-b:全てのACLエントリを削除する(標準パーミッションへ戻す)
・-R:ディレクトリ配下を再帰的に適用
・-d:default ACL。ディレクトリ配下の新規ファイルに自動継承させる
基本的な使い方(最頻出の手順)
1. ACLが有効かを確認する
多くのディストリビューションでは、ext4・xfsとも標準でACLが有効になっています。念のためマウントオプションを確認します。
# マウント状況を確認 $ mount | grep " / " /dev/mapper/rhel-root on / type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,sunit=512,swidth=512,noquota) # xfsはデフォルトでACL有効。ext4でもrw,relatimeがあれば有効
2. 特定ユーザーに読み書き権限を付与する
共有ディレクトリ /var/share に、ユーザー「tanaka」だけに読み書き実行権限を与える例です。# 事前の状態を確認 $ ls -ld /var/share drwxr-x--- 2 root root 4096 Apr 18 10:00 /var/share # tanakaに読み書き実行(rwx)を付与 $ sudo setfacl -m u:tanaka:rwx /var/share # 結果を確認 $ ls -ld /var/share drwxr-x---+ 2 root root 4096 Apr 18 10:00 /var/share
lsで一覧表示しても「+」があれば追加権限が入っていると判断できます。
3. getfaclで設定内容を確認する
$ getfacl /var/share # file: var/share # owner: root # group: root user::rwx user:tanaka:rwx group::r-x mask::rwx other::---
maskは「グループとユーザーACLの実効最大権限」を示す重要な値で、後述します。
4. グループ単位で権限を付与する
ユーザー単位ではなく、グループ「developers」に読み取り実行だけ与える場合は、プレフィックスをgに変えます。$ sudo setfacl -m g:developers:rx /var/share # 確認 $ getfacl /var/share # file: var/share # owner: root # group: root user::rwx user:tanaka:rwx group::r-x group:developers:r-x mask::rwx other::---
5. ACLエントリを削除する
個別のエントリだけ削除する場合は -x を使います。# tanakaのエントリだけ削除 $ sudo setfacl -x u:tanaka /var/share # 全エントリを削除して通常パーミッションへ戻す $ sudo setfacl -b /var/share
応用・実務Tips
デフォルトACLで新規ファイルに権限を自動継承する
共有ディレクトリを運用していて、「新規ファイルを置くたびに毎回setfaclするのは面倒」という悩みは現場でよく聞きます。その場合はデフォルトACL(d:プレフィックス)を使います。
# ディレクトリ配下の新規ファイルにtanakaの書き込みを自動継承 $ sudo setfacl -d -m u:tanaka:rwx /var/share # 確認 $ getfacl /var/share # file: var/share # owner: root # group: root user::rwx user:tanaka:rwx group::r-x mask::rwx other::--- default:user::rwx default:user:tanaka:rwx default:group::r-x default:mask::rwx default:other::---
既存ファイルにも再帰的に適用する
デフォルトACLは「これから作られるファイル」にしか効きません。既存ファイルにまとめて適用するには -R オプションを併用します。# ディレクトリ配下の既存ファイル全てにtanakaの権限を付与 $ sudo setfacl -R -m u:tanaka:rwx /var/share
設定内容をバックアップ・リストアする
getfaclの出力はsetfaclで読み込める形式です。移行や復旧のために保存しておくのが実務の定石です。# ACL設定をファイルへ保存 $ getfacl -R /var/share > /tmp/share_acl.txt # 別サーバーや復旧時にリストア $ sudo setfacl --restore=/tmp/share_acl.txt
Linuxの基本コマンドに立ち返って全体像を押さえたい場合はls コマンドの基本オプションと併せて確認してください。
「Operation not supported」が出た時の対処法
setfacl実行時に「Operation not supported」と表示される場合、ファイルシステム側でACLが無効になっている可能性が高いです。$ sudo setfacl -m u:tanaka:rwx /mnt/extdisk/share setfacl: /mnt/extdisk/share: Operation not supported
1. mountコマンドで対象のマウントオプションを確認する
2. /etc/fstabのオプション欄に「acl」を追加する
3. `sudo mount -o remount /mnt/extdisk` で再マウントする
fstabの書き方や再マウントの具体的な手順はmount コマンドの使い方の記事も参照してください。古いext3環境やNFSマウントでは特に発生しやすいトラブルです。
「Permission denied」が出た時の対処法
setfaclはファイルの所有者かroot権限で実行する必要があります。$ setfacl -m u:tanaka:rwx /var/share setfacl: /var/share: Operation not permitted # sudoを付けて再実行する $ sudo setfacl -m u:tanaka:rwx /var/share
maskの挙動に注意する
ACLには「mask(実効最大権限)」という概念があります。これはユーザーACL・グループACLに与えられる権限の上限値です。# rwxを付与しているのに、maskがr-xだと実効はr-xになる $ getfacl /var/share user:tanaka:rwx #effective:r-x mask::r-x
明示的にmaskを戻すには次のコマンドを使います。
$ sudo setfacl -m m::rwx /var/share
本記事のまとめ
setfaclコマンドを使えば、chmodでは対応できないユーザー・グループ単位のきめ細かい権限制御が可能になります。実運用で押さえておきたい操作を一覧にまとめます。| やりたいこと | コマンド |
|---|---|
| ユーザーに権限を付与する | setfacl -m u:ユーザー名:rwx ファイル名 |
| グループに権限を付与する | setfacl -m g:グループ名:rx ファイル名 |
| ACLを確認する | getfacl ファイル名 |
| 特定エントリを削除する | setfacl -x u:ユーザー名 ファイル名 |
| 全ACLを削除する | setfacl -b ファイル名 |
| 既存ファイルへ再帰適用する | setfacl -R -m u:ユーザー名:rwx ディレクトリ |
| 新規ファイルに継承させる | setfacl -d -m u:ユーザー名:rwx ディレクトリ |
| ACL設定をバックアップする | getfacl -R /path > acl.txt |
| ACL設定をリストアする | setfacl --restore=acl.txt |
| maskを明示的に戻す | setfacl -m m::rwx ファイル名 |
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます