【 setfacl 】コマンド(応用編その2)――アクセス制御リスト(ACL)のマスクを設定する

https://atmarkit.itmedia.co.jp/ait/articles/1808/30/news036.html

【 setfacl 】コマンド(応用編その2)――アクセス制御リスト(ACL)のマスクを設定する
Linux基本コマンドTips(236)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、ファイルやディレクトリのアクセス制御リスト(ACL)を設定/削除する「setfacl」コマンドです。
2018年08月30日 05時00分 公開
[西村めぐみ,@IT]

「Linux基本コマンドTips」のインデックス
Linux基本コマンドTips一覧

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。連載第234回の基礎編、第235回の応用編その1に引き続き、ファイルやディレクトリのアクセス制御リスト(ACL)を設定/削除する「setfacl」コマンドを扱います。

目次
setfaclコマンドの概要 | 書式 | オプション一覧

実行例
ACLマスクを設定する
ACLマスクを保持する
setfaclコマンドとは?
「setfacl」(set file access control lists)は、ファイルやディレクトリの「アクセス制御リスト(ACL)」を設定したり、削除したりするコマンドです。

ACLが有効になっているファイルシステムの場合、通常のファイルアクセス制御(基本ACL)に加えて、特定のユーザーやグループに対してファイルごとのアクセス制限(拡張ACL)が可能になります。

なお、通常のファイルアクセス制御は、「所有者」「グループ」「その他」に対して、それぞれ「読み出し」「書き込み」「実行」の可否を設定します。設定内容は、「ls -l」(連載第26回)や、「stat」(第122回)で確認できます。

拡張ACLが設定されている場合、「ls -l」を実行すると9桁のパーミッション表示の後に「+」記号を表示します。具体的な設定内容を表示したい場合は、「getfacl」コマンド(第233回)を使います。

目次に戻る

setfaclコマンドの書式
setfacl [オプション] ファイル名……

setfacl [–test] –restore=設定ファイル名

※[ ]は省略可能な引数を示しています

目次に戻る

 

setfaclの主なオプション
短いオプション 長いオプション 意味
-m 設定 –modify=設定 拡張ACLを設定する
-M ファイル –modify-file=ファイル ファイルからACLエントリを読み出して設定する
–set=設定 拡張ACLを設定して現在の設定と置き換える
–set-file=ファイル ファイルからACLエントリを読み出して設定し、現在の設定と置き換える
-x 設定 –remove=設定 指定した拡張ACLを削除する
-X ファイル –remove-file=ファイル ファイルからACLエントリを読み出して該当するエントリを削除する
-b –remove-all 全ての拡張ACLを削除する
-k –remove-default デフォルトACL(※1)を削除する
–mask ACLマスクが明示されている場合でも実効権マスク(※2)を再計算する
-n –no-mask 実効権マスク(※2)を再計算しない
-d –default 全ての操作をデフォルトACL(※1)に適用する
-R –recursive 全ての操作をディレクトリに対して再帰的に実施する(–restoreと同時に指定できない)
-L –logical シンボリックリンクをたどる
-P –physical シンボリックリンクをたどらない
–restore=設定ファイル 設定ファイルに従い、ACLを設定する(設定ファイルの書式はgetfaclの出力に準じる)
–test テストモード(実施結果を表示するだけで、実際には設定しない)
※1 デフォルトACLを設定すると、ACLを親ディレクトリから継承してディレクトリ内のファイル全てにACL設定を反映できる(第233回を参照)。
※2 ACLマスクを与えた場合、setfaclコマンドでACLマスクを超える権限を許可しようとしても認められない。このようなときでも認められる権限を実効権と呼ぶ(詳細は第233回を参照)

「-m」で設定するACLエントリの書式
記入内容(※3) 意味
user:ユーザー:許可内容 ユーザーに対する許可
group:グループ:許可内容 グループに対する許可
other:許可内容 その他に対する許可
mask:許可内容 与えられる許可の最大値(マスク)
default:user:ユーザー:許可内容 ユーザーに対するデフォルトの許可
default:group:グループ:許可内容 グループに対するデフォルトの許可
default:other:許可内容 その他に対するデフォルトの許可
default:mask:許可内容 デフォルトのマスク
※3 「user」「group」「other」「mask」「default」はそれぞれ「u」「g」「o」「m」「d」と略すことが可能。「ユーザー」部分はユーザー名またはユーザーIDを指定する。省略した場合は所有者。「グループ」部分はグループ名またはグループIDを指定する。省略した場合は所有グループ。「許可」部分は、読み出し(r)、書き込み(w)、実行(x)の文字か、8進数の数値で設定する

許可内容の設定
文字 数値 許可内容(※4)
x 1 実行可能
w 2 書き込み可能
r 4 読み出し可能
– 0 全て許可しない
※4 rwや6、rwxや7のように複数の文字(数値)を組み合わせて指定できる。「r」を「r–」のように指定することも可能。

 

目次に戻る

ACLマスクを設定する
ACLを設定したファイルやディレクトリには、「ACLマスク」も自動設定されます。設定されるACLマスクの内容は、「グループかユーザー名を指定したACLエントリで与えられる許可の最大値」です。

このため、ACLマスクを変更すれば、「許可の最大値」を変更できます。例えば、ACLマスクを「r」に変更すると、「rw」や「rwx」が与えられていたユーザーやグループに対する許可が全て「r」となります。このように、実際に許可される権限を「実効権」(effective right)と呼びます。

設定されている許可と実効権が食い違う場合、ACLを表示するgetfaclコマンドでは「#effective:実効権」と表示します。

ACLマスクは「setfacl -m mask:許可内容」と設定します(画面1)。デフォルトのACLマスクの場合は「setfacl -m d:mask:許可内容」とします。「mask:」は「m:」と略すことも可能です。

なお、ファイルやディレクトリの所有者は、setfaclコマンドで許可を変更した場合も基本ACL(lsコマンドやstatコマンドで表示される基本的なパーミッション)でACLが決まるため、ACLマスクの影響を受けません。

コマンド実行例
setfacl -m m:値 ファイル

(ファイルにACLマスクを設定する)

setfacl -m m:r test1.txt

(test1.txtのACLマスクを「r」にする)(画面1)

画面1
画面1 ACLマスクを設定したところ マスクを「rw」から「r」へと変更した

目次に戻る

ACLマスクを保持する
ACLマスクをいったん設定したファイルに対し、あらためてACLを設定すると、ACLマスクは実効権から、「ACLで与えられる許可の最大値」に戻ります(画面2)。

ACLマスクをそのまま保持したい場合は「-n」(–no-mask)オプションを使用します(画面3)。

コマンド実行例
setfacl -m 設定 -n ファイル

(ACLマスクを変更せずにACLを設定する)

画面2
画面2 ACLの設定によってACLマスクの値が変わってしまった
画面3
画面3 ACLを設定してもACLマスクが変わらないように操作した 「-n」を用いた

コメント