【 setfacl 】コマンド(応用編その1)――デフォルトのアクセス制御リスト(ACL)を設定するLinux基本コマンドTips(235)

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

» 2018年08月24日 05時00分 公開
[西村めぐみ@IT]
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

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

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回を参照)





デフォルトのACLを設定する

 「setfacl -m 設定 ファイル」で、ファイルに対し拡張ACLを設定します(画面1)。ACLの設定内容を「ACLエントリ」と言います。

 デフォルトのACLを設定する際は、「setfacl -m d:u:penguin:rw test1.txt」のように、ACLエントリの先頭に「d:」を付けます。これは「default:」の略です。設定が複数の場合は「,」で区切ります。

 ディレクトリに対してデフォルトのACLを設定しておくと、ディレクトリ内のファイル(ディレクトリ)作成時に、デフォルトACLが自動的に設定されるようになります。

 ACLでは、ユーザー(user)、グループ(group)、その他(other)に対する設定の他、第236回で取り上げるマスク(mask)を設定できます。次の表はACLエントリの基本的な書式です。

記入内容 意味
user:ユーザー:許可内容 ユーザーに対する許可
group:グループ:許可内容 グループに対する許可
other:許可内容 その他に対する許可
mask:許可内容 与えられる許可の最大値(マスク)

 デフォルトACLエントリの基本的な書式は次のようになります。

記入内容 意味
default:user:ユーザー:許可内容 ユーザーに対するデフォルトの許可
default:group:グループ:許可内容 グループに対するデフォルトの許可
default:other:許可内容 その他に対するデフォルトの許可
default:mask:許可内容 デフォルトのマスク

 「user」「group」「other」「mask」「default」はそれぞれ「u」「g」「o」「m」「d」と省略できます。

 「ユーザー」部分ではユーザー名かユーザーIDを指定します。省略した場合は所有者に対する設定となります。「グループ」部分も同様に、グループ名またはグループIDを指定します。省略した場合は所有グループに対する設定となります。

 「許可内容」部分は、読み出し(r)、書き込み(w)、実行(x)の文字か、または8進数の数値で設定します。組み合わせた設定も可能です。例えば読み書き可能であれば、「rw」か「6」と設定します。6は2(書き込み可能)と4(読み出し可能)を加えた数です。全て可能なら「rwx」または「7」と設定します。

文字 数値 許可内容
x 1 実行可能
w 2 書き込み可能
r 4 読み出し可能
- 0 全て許可しない

コマンド実行例

setfacl -m 設定 ディレクトリ

(ディレクトリにACLを設定する)

setfacl -m d:u:penguin:rw mydoc/

(mydocディレクトリに対し、デフォルトのACLとして、ユーザー「penguin」に「rw」の許可を与える)

setfacl -m d:u:penguin:rw,d:g:group1:rw mydoc/

(mydocディレクトリに対し、デフォルトのACLとして、ユーザー「penguin」に「rw」の許可を、グループ「group1」に「rw」の許可を与える)(画面1


画面1 画面1 デフォルトACLを設定したところ (※3)

※3 画面1では所有者、グループ、その他へ、デフォルトACLを設定していない。このため「umask」に従い、青い下線のように所有者「rwx」、グループ「rwx」、その他「r-x」が設定されている。これはCentOSの場合、umaskの設定値が「002」となっているためだ(第14回参照)。Ubuntu環境の場合、umaskが「022」の場合がある。このときは、グループに対するデフォルトACLは「r-x」。最大の許可が「rwx」なので、デフォルトのACLマスク(第236回)は「rwx」。



 画面1では、「mydoc」ディレクトリに対してデフォルトACLを設定しました。そのため、mydocディレクトリの中で作成したファイルやディレクトリにはこのACLが自動で反映されます(画面2)。新たに内部で作成したディレクトリにも、デフォルトACLが引き継がれます。

画面2 画面2 デフォルトACLを設定したディレクトリ内で作成したファイルやディレクトリのACL

 デフォルトACLを設定したディレクトリにファイルをコピーした際にも、デフォルトACLが反映されます。画面3では、ACLが設定されていないファイルを「mydoc」ディレクトリにコピーしました。

画面3 画面3 デフォルトACLが設定されたディレクトリに他の場所からファイルをコピーしたところ

 既にALCを設定したファイルの設定値を変えずに、そのままデフォルトACLが設定されたディレクトリ内にコピーすることもできます(画面4)。その際は、cpコマンドの「-p」または「-a」オプションを使用します(第19回)。

画面4 画面4 ALCを保持したままファイルをコピーしたところ


デフォルトACLを削除する

 デフォルトACLを削除するには「-k」(--remove-default)オプションを使用します(画面5)。

コマンド実行例

setfacl -k ディレクトリ

(ディレクトリのデフォルトACLを削除する)

setfacl -k dir1

(dir1ディレクトリのデフォルトACLを削除する)(画面5


画面5 画面5 デフォルトACLを削除したところ


筆者紹介

西村 めぐみ(にしむら めぐみ)

PC-9801NからのDOSユーザー。PC-486DX時代にDOS版UNIX-like toolsを経てLinuxへ。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『Accessではじめるデータベース超入門[改訂2版]』『macOSコマンド入門』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。