連載
» 2018年08月17日 05時00分 公開

Linux基本コマンドTips(233):【 getfacl 】コマンド――ファイルのアクセス制御リスト(ACL)を表示する

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

[西村めぐみ,@IT]
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

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

getfaclコマンドとは?

 「getfacl」(get file access control lists)は、ファイルやディレクトリのアクセス制御リスト(ACL)を表示するコマンドです。

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

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

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



getfaclコマンドの書式

getfacl [オプション] ファイル名……

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





getfaclの主なオプション

短いオプション 長いオプション 意味
-a --access ファイルACLだけを表示する
-d --default デフォルトACLだけを表示する
-c --omit-header コメントヘッダ(冒頭の3行)を表示しない
-e --all-effective 実効権がACLエントリで定義された権利と同じ場合も、実効権のコメントを全て表示する(本文を参照
-E --no-effective 実効権のコメントを表示しない
-s --skip-base 基本ACLエントリ(所有者、グループ、その他)しか持たないファイルをスキップさせる
-R --recursive ディレクトリを再帰的に表示する
-L --logical シンボリックリンクをたどる
-P --physical シンボリックリンクをたどらない(-Rと同時に指定)
-t --tabular タブ区切りのフォーマットで出力する
-n --numeric ユーザーIDとグループIDで出力する
-p --absolute-names 先頭の「/」を取り除かない
-- オプションの終わりを示す(これ以降の指定は全てファイル名として扱う)


ACLを表示する

 「getfacl ファイル名」で指定したファイルのACLを表示します。

 getfaclを実行すると、まず、ファイル名と所有者、グループをコメントヘッダの形で表示します。続いて、ユーザーに対する許可、グループに対する許可、その他に対する許可を表示します。

 例えば「user::rw-」であれば、「所有者には、読み("R"eadable)、書き("W"ritable)が可能で、実行(executable)は許可されていない」という意味です。

 画面1ではtest1.txtに「user:penguin:rw-」と表示されています。これは、ユーザー「penguin」に対し「rw-」が設定されているという意味です。

 同じように、グループに対する許可は「group:」、その他に対する許可は「other:」で表示します。

 この他、ACLマスクを設定した場合は「mask:」に続いて値を表示し、デフォルトACLが設定されている場合は「default:」を表示します(※1)。

※1 ACLは親ディレクトリから継承できる。ディレクトリに対してデフォルトACLを設定することで、ディレクトリ内のファイルに値を継承させたことになる。なお、デフォルトACLは「setfacl -m default:〜」のように設定する(第234回を参照)。



コマンド実行例

getfacl ファイル名

(指定したファイルのACLを表示する)

getfacl test1.txt

(test1.txtのACLを表示する)


画面1 画面1 ファイルのACLを表示したところ


ACLと実効権を表示する

 「ファイルに対して与える最大のパーミッション(アクセス権)」として「マスク」(ACLマスク)と呼ばれる値をあらかじめ設定できます。

 ACLマスクに「r」が設定されている場合、ACLを設定するsetfaclコマンドで「rw」を与えても「r」しか許可されません。このような実際に許可されるアクセス権を「実効権」(effective right)と呼びます。

 ファイルに設定したACLとマスクによる制限が異なる場合、getfaclコマンドはACLに続いて「#effective:〜」として、実効権を表示します(画面2)。

画面2 画面2 ACLと実効権が表示されたところ

 ACLの設定と実効権が一致している場合、getfaclコマンドは実効権を表示しません。なお「-e」オプションを付けると、常に実効権を表示します(画面3)。

コマンド実行例

getfacl -e ファイル名

(実効権を常に表示する)


画面3 画面3 強制的に実効権を表示したところ


筆者紹介

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

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のメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。