手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 22.04 ACL の使い方 – setfacl / getfacl で権限を追加する

Ubuntu 22.04 の関連記事

Linux の通常のファイル権限は、所有者、グループ、その他の 3 種類で制御します。多くの場合はこれで十分ですが、特定ユーザーだけに読み取り権限を追加したい、既存グループを変えずに別グループにも書き込みを許可したい、という場面では少し足りません。

Ubuntu 22.04 では、拡張 ACL を使うことで、通常の owner / group / other に加えて、ユーザー単位・グループ単位の追加権限を設定できます。この記事では、setfaclgetfacl を使って ACL を設定・確認・削除する手順を整理します。

ACL は便利ですが、権限が見えにくくなる面もあります。単純な所有者変更やグループ設計で済む場合は、まず通常の Unix 権限で設計し、必要な箇所だけ ACL を使う方が運用しやすくなります。

この記事で扱う内容は次の通りです。

  • ACL が必要になる場面
  • acl パッケージの導入
  • getfacl による権限確認
  • setfacl によるユーザー・グループ権限の追加
  • デフォルト ACL と削除方法
対象 OSUbuntu 22.04
主なコマンドgetfacl, setfacl
パッケージacl
用途通常の所有者・グループ権限では表現しにくい追加アクセス制御
STEP 1acl パッケージを導入する
STEP 2検証用ディレクトリを作成する
STEP 3getfacl で現在の権限を確認する
STEP 4setfacl でユーザーまたはグループ権限を追加する
STEP 5不要になった ACL を削除する
参考
書籍
参考書籍
Advanced Ubuntu Administration and Management Best Practices

Ubuntu Server の権限管理や運用項目を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。

Amazon で見る
このリンクは 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/shared

chmod 27702 は 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/shared

d: は 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/shared

ACL を使う時の注意点

ACL は便利ですが、運用では見落としやすい権限になります。通常の ls -l だけで判断せず、+ が付いている場合は getfacl で詳細を確認します。

また、ACL はファイルシステム上の権限です。アプリケーション側の認可、Samba や NFS の共有設定、Web サーバーの実行ユーザーなどとは別の層です。複数の層で権限を扱う場合は、どこで許可し、どこで拒否しているのかを分けて考えます。

sudo による管理権限の扱いは、Ubuntu 22.04 sudo パスワード確認の抑止 も合わせて確認すると、ログイン後の権限設計をつなげて理解しやすくなります。

まとめ

Ubuntu 22.04 で ACL を使うと、通常の所有者・グループ・その他だけでは表現しにくい権限を追加できます。特定ユーザーや特定グループに対して、読み取り、書き込み、実行権限を個別に付与できます。

一方で、ACL は権限が見えにくくなるため、必要な箇所に限定して使うのが現実的です。設定後は getfacl で確認し、不要になった ACL は setfacl -xsetfacl -b で削除します。

関連する記事
Ubuntu 22.04 ACL の使い方 – setfacl / getfacl で権限を追加する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る