【 setfacl 】コマンド(基礎編)――ファイルのアクセス制御リスト(ACL)を設定/削除する:Linux基本コマンドTips(234)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、ファイルやディレクトリのアクセス制御リスト(ACL)を設定/削除する「setfacl」コマンドです。
本連載は、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 | テストモード(実施結果を表示するだけで、実際には設定しない) |
拡張ACLを設定する
「setfacl -m 設定 ファイル」で、ファイルに対し拡張ACLを設定します(画面1)。ACLの設定内容を「ACLエントリ」と呼びます。
例えば、test1.txtに対し、penguinというユーザーに読み書きの許可を与えるのであれば、「setfacl -m u:penguin:rw test1.txt」のようにします。設定が複数ある場合は「,」で区切ります。ACLエントリの書式は次の通りです。
記入内容 | 意味 |
---|---|
user:ユーザー:許可内容 | ユーザーに対する許可 |
group:グループ:許可内容 | グループに対する許可 |
other:許可内容 | その他に対する許可 |
「user」「group」「other」はそれぞれ「u」「g」「o」と省略できます。
「ユーザー」部分ではユーザー名かユーザー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 設定1,設定2 ファイルA ファイルB ファイルC
(複数の拡張ACLを複数のファイル設定する)
setfacl -m u:penguin:r test1.txt
(test1.txtに対し、ユーザー「penguin」に「r」の許可を与える)(画面1)
setfacl -m u::rxw,o:- test1.txt
(test1.txtに対し、所有者には「rwx」の許可を与え、その他は許可を与えない)
画面1ではユーザー名を指定したACLエントリがあるため、青枠で囲んだようにデフォルトでACLマスク(mask::rw-)が設定されています。マスクが「rw-」のとき、「r」や「rw」を拡張ACLとして追加すると実効権(実際に許可される権限)としてそのまま認められます。しかし、マスクが「r--」の場合、「rw」を与えても実効権は「r」にとどまります。
拡張ACLを削除する
「setfacl -x 設定 ファイル」で、ファイルから拡張ACLの設定を削除します(画面2)。
例えば、test1.txtに設定されているpenguinというユーザーに対する設定を削除する場合は、「setfacl -x u:penguin test1.txt」のようにします。
ファイルに対する全ての拡張ACL設定を一度に削除したい場合は「-b」(--remove-all)オプションを使い、「setfacl -b ファイル」のようにします。
なお、所有者、グループ、その他に対するLinuxの基本的なパーミッション(基本ACL)は、削除してもそのまま残ります。
コマンド実行例
setfacl -x 設定 ファイル
(ファイルから拡張ACL設定を削除する)
setfacl -x u:penguin test1.txt
(test1.txtに設定されているユーザー「penguin」に対する許可を削除する)(画面2)
setfacl -b ファイル
(全ての拡張ACL設定を削除する)(画面2)
筆者紹介
西村 めぐみ(にしむら めぐみ)
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.