Linux の通常のファイル権限は、所有者、グループ、その他の 3 種類で制御します。多くの場合はこれで十分ですが、特定ユーザーだけに読み取り権限を追加したい、既存グループを変えずに別グループにも書き込みを許可したい、という場面では少し足りません。
Ubuntu 22.04 では、拡張 ACL を使うことで、通常の owner / group / other に加えて、ユーザー単位・グループ単位の追加権限を設定できます。この記事では、setfacl と getfacl を使って ACL を設定・確認・削除する手順を整理します。
この記事で扱う内容は次の通りです。
- ACL が必要になる場面
aclパッケージの導入getfaclによる権限確認setfaclによるユーザー・グループ権限の追加- デフォルト ACL と削除方法
| 対象 OS | Ubuntu 22.04 |
|---|---|
| 主なコマンド | getfacl, setfacl |
| パッケージ | acl |
| 用途 | 通常の所有者・グループ権限では表現しにくい追加アクセス制御 |
acl パッケージを導入するgetfacl で現在の権限を確認するsetfacl でユーザーまたはグループ権限を追加する書籍
Ubuntu Server の権限管理や運用項目を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るACL を使う場面
ACL は、通常の所有者・グループ・その他の 3 分類では権限設計が難しい場合に使います。たとえば、あるディレクトリの所有グループは変えずに、特定ユーザーへ読み書きを許可したい場合です。
ただし、ACL を多用すると、ls -l だけでは権限の全体像が分かりにくくなります。ACL が設定されているファイルやディレクトリでは、パーミッション末尾に + が表示されることがあります。
drwxrwx---+ 2 root system-ops 4096 Jun 16 12:00 sharedこの + は、通常のモードビットに加えて ACL があることを示します。詳細は getfacl で確認します。
acl パッケージを導入する
Ubuntu 22.04 では、ACL の操作に acl パッケージを使います。
sudo apt update
sudo apt install -y aclコマンドが利用できることを確認します。
command -v getfacl
command -v setfacl検証用ディレクトリを作成する
ここでは、例として /srv/shared を作成します。実際の運用では、対象ディレクトリや所有グループは環境に合わせて読み替えます。
sudo groupadd --system system-ops
sudo mkdir -p /srv/shared
sudo chown root:system-ops /srv/shared
sudo chmod 2770 /srv/sharedchmod 2770 の 2 は setgid ビットです。このディレクトリ配下に作成されるファイルやディレクトリが、親ディレクトリのグループを引き継ぎやすくなります。
現在の ACL を確認する
getfacl で現在の権限を確認します。
getfacl /srv/shared# file: srv/shared
# owner: root
# group: system-ops
# flags: -s-
user::rwx
group::rwx
other::---この状態では、所有者の root と所有グループの system-ops に権限があり、その他のユーザーには権限がありません。
特定ユーザーへ権限を追加する
特定ユーザーに読み書き実行権限を追加する場合は、u:ユーザー名:権限 の形式で指定します。
sudo setfacl -m u:acltest:rwx /srv/shared
getfacl /srv/shared# file: srv/shared
# owner: root
# group: system-ops
# flags: -s-
user::rwx
user:acltest:rwx
group::rwx
mask::rwx
other::---user:acltest:rwx が追加され、acltest ユーザーに権限が付与されています。
特定グループへ権限を追加する
グループへ権限を追加する場合は、g:グループ名:権限 の形式で指定します。
sudo groupadd --system app-ops
sudo setfacl -m g:app-ops:rx /srv/shared
getfacl /srv/sharedこの例では、app-ops グループに読み取りと探索権限を付与しています。ディレクトリでは、ファイル名を辿るために x 権限が必要です。
デフォルト ACL を設定する
ディレクトリ配下に新しく作成されるファイルやディレクトリへ ACL を引き継がせたい場合は、デフォルト ACL を設定します。
sudo setfacl -m d:g:app-ops:rx /srv/shared
getfacl /srv/sharedd: は default ACL を意味します。既存ファイルには自動で反映されないため、既存データにも適用したい場合は別途再帰的に設定します。
再帰的に ACL を適用する
既存のファイルやディレクトリへまとめて ACL を適用する場合は、-R を使います。
sudo setfacl -R -m g:app-ops:rx /srv/shared/ や広いマウントポイントに対して実行しないよう注意します。ACL を削除する
特定ユーザーの ACL を削除する場合は -x を使います。
sudo setfacl -x u:acltest /srv/shared対象の ACL をすべて削除し、通常の権限だけに戻す場合は -b を使います。
sudo setfacl -b /srv/sharedデフォルト ACL だけを削除する場合は -k を使います。
sudo setfacl -k /srv/sharedACL を使う時の注意点
ACL は便利ですが、運用では見落としやすい権限になります。通常の ls -l だけで判断せず、+ が付いている場合は getfacl で詳細を確認します。
また、ACL はファイルシステム上の権限です。アプリケーション側の認可、Samba や NFS の共有設定、Web サーバーの実行ユーザーなどとは別の層です。複数の層で権限を扱う場合は、どこで許可し、どこで拒否しているのかを分けて考えます。
sudo による管理権限の扱いは、Ubuntu 22.04 sudo パスワード確認の抑止 も合わせて確認すると、ログイン後の権限設計をつなげて理解しやすくなります。
まとめ
Ubuntu 22.04 で ACL を使うと、通常の所有者・グループ・その他だけでは表現しにくい権限を追加できます。特定ユーザーや特定グループに対して、読み取り、書き込み、実行権限を個別に付与できます。
一方で、ACL は権限が見えにくくなるため、必要な箇所に限定して使うのが現実的です。設定後は getfacl で確認し、不要になった ACL は setfacl -x や setfacl -b で削除します。



