【 chacl 】コマンド――ファイルのアクセス制御リスト(ACL)を表示/設定/削除するLinux基本コマンドTips(237)

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

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

Linux基本コマンドTips一覧

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

chaclコマンドとは?

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

 chaclコマンドを使わなくても、Linuxには、もともと基本的なファイルアクセス制御の機能が組み込まれていて、「所有者」「グループ」「その他」に対して、それぞれ「読み出し」「書き込み」「実行」の可否をchmodコマンド(連載第14回)で設定できます。設定内容を確認するには「ls -l」(第26回)や、「stat」(第122回)を使います。

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

 拡張ACLが設定されている場合、「ls -l」を実行すると9桁のパーミッション表示の後に「+」記号を表示します。

 なお、拡張属性の表示だけを行う「getfacl」コマンド(第233回)や、設定/削除だけを行う「setfattr」コマンド(第234回)があります。chaclを含め、いずれもaclパッケージに収録されています。



chaclコマンドの書式

chacl [オプション] 対象……

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





chaclの主なオプション

短いオプション 意味
-b 設定 デフォルト設定 ACLとデフォルトACLを設定する(※1)
-d デフォルト設定 デフォルトACLを設定する(※1)
-r 設定 ACLを再帰的に設定する
-R 拡張ACLのみを削除する
-D デフォルトACLのみを削除する
-B 全てのACL(拡張ACLとデフォルトACL)を削除する
-l ACLを表示する

※1 ディレクトリに対してデフォルトACLを設定すると、ACLを親ディレクトリから継承してディレクトリ内のファイル全てにACL設定を反映できる(詳細は第235回を参照)。





ACLを表示する

 「chacl -l ファイル名」でファイルに設定されているACLを表示します。このとき、ファイルやディレクトリを複数指定できます。

 ACLの設定内容を「ACLエントリ」と呼びます。基本ACLだけが設定されている場合、表示されるACLエントリは「u::rw-,g::rw-,o::r--」のようになります。これは、ls -lが表示する「rw-rw-r--」相当で、所有者(u)とグループ(g)は読み書き、その他(o)は読み出しのみが許可されている、という意味です。

表示内容 意味
u:ユーザー:許可内容 ユーザーに対する許可
g:グループ:許可内容 グループに対する許可
o:許可内容 その他に対する許可
m:許可内容 与えられる許可の最大値(マスク)

 拡張ACLも設定した場合は、「u::rw-,u:penguin:rw-,g::rw-,m::rw-,o::r--」のように表示します(画面1)。基本ACLに加えて「u:penguin:rw-」が設定されています。ユーザー「penguin」に対し、読み書きの許可が与えられているという意味です。

 拡張ACLが設定されている場合、「ACLマスク」という値(m::rw-という部分)も併せて表示します。ACLマスクは「与えられる許可のうち最大値」を意味します。

 あるユーザーに設定した拡張ACLよりもACLマスクとして表示された権限が低い場合、どちらが有効なのかは、getfaclコマンドを使って、「実効権(effective right)」を調べる必要があります。「#effective」(実効権)という行が表示された場合、ACLマスクで設定した権限が有効です。

 ACLマスクについてはsetfaclコマンドの応用編その2(第236回)も参照してください。

コマンド実行例

chacl -l ファイル名

(ファイルのACLを表示する)

chacl -l test1.txt

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


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


拡張ACLを設定する

 拡張ACLを設定するには、「chacl 設定 ファイル名」とします(画面2)。設定対象にはファイルやディレクトリを複数指定できます。

 設定には最低限のACLとして基本ACL(所有者u、グループg、その他o)を並べ、必要に応じて拡張ACL(ユーザーやグループの名前を指定したACL)を書きます。拡張ACLを設定する際には、ACLマスクを同時に設定しなければなりません。

 ユーザーに対する許可は「u:名前:許可内容」または「user:名前:許可内容」と書きます。名前を省略した場合は所有者への許可(基本ACL)となります。同様に、グループに対する許可は「g:名前:許可内容」または「group:名前:許可内容」とします。

 その他に対する許可は「o::許可内容」または「other::許可内容」で設定します。その他には名前を指定しないため「o:許可内容」のように「:」が1つでも構いません。

 ACLマスクは「m::許可の最大値」または「mask::許可の最大値」で設定します。「:」は1つでも構いません。

 与える許可の内容は「r」(読み出し)、「w」(書き込み)、「x」(実行)で指定します。「r」と「w」を同時に指定する場合は「rw」または「rw-」のようにします。いずれの許可も与えない場合は「-」とします(※2)。

※2 「--」や「---」と書くこともできる。いずれの場合も「全て許可しない」という意味になる。



 例えば、基本ACLとして所有者とグループに「rw」、その他に「r」を指定する場合は次のようになります。3行とも表記が異なるだけで、意味は同じです。chmodコマンド(第14回)で「664」を設定したのと同じ結果となります。

 それぞれのエントリは「,」記号で区切ります。uやgなどの順番は任意です。

u::rw-,g::rw-,o::r--
u::rw,g::rw,o::r
user::rw,group::rw,other::r
基本ACL設定のエントリ

 これに加えて、拡張ACLをユーザー「penguin」に設定し、設定内容が「rw」の場合は次のようになります。4行とも同じ意味です。順番は任意で、基本ACLとACLマスクが常に必要です。

u::rw-,g::rw-,o::r--,u:penguin:rw-,m::rw-
u::rw,g::rw,o::r,u:penguin:rw,m:rw
user::rw,group::rw,other::r,user:penguin:rw,mask::rw
user::rw,user:penguin:rw,group::rw,other::r,mask::rw
基本ACLとユーザー「penguin」拡張ACL設定のエントリ

コマンド実行例

chacl 設定 ファイル名

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

chacl u::rw,g::rw,o::r test1.txt

(test1.txtに基本ACLを設定する)

chacl u::rw,g::rw,o::r,u:penguin:rw,g:group1:r,m::rw test1.txt

(test1.txtに基本ACLと拡張ACLを設定する。ユーザー「penguin」への「rw」と、グループ「group1」に対する「r」を設定している。ACLマスクは「rw」とした)(画面2


画面2 画面2 拡張ACLを設定、表示したところ


ディレクトリにデフォルトACLを設定する

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

 デフォルトのACLを設定するには「-d」オプションを使います。ACLエントリの書式はACL設定時と同じです。

 デフォルトACLを設定した後、「chacl -l ディレクトリ」を実行すると、確かに設定が反映されていました(画面3)。

コマンド実行例

chacl -d デフォルトACL ディレクトリ名

(デフォルトACLを設定する)

chacl -d u::rw,g::rw,o:r,u:penguin:rw,g:group1:r,m:rw mydoc/

(mydocディレクトリにデフォルトACLを設定する。基本ACLとして所有者とグループに「rw」、その他に「r」、拡張ACLとしてユーザー「penguin」への「rw」と、グループ「group1」に対する「r」を設定している。ACLマスクは「rw」とした)(画面3


画面3 画面3 ディレクトリに対してデフォルトACLを設定、表示したところ

 なお、画面3のように設定した場合、mydocディレクトリの中にディレクトリを作成したとき、「x」(実行許可)が付きません。これでは不便な場合、chmodコマンドやchaclコマンドで実行許可を追加する必要があります(画面4)。

画面4 画面4 ディレクトリに実行許可を追加したところ


拡張ACL/デフォルトACLを削除する

 ACLを削除する方法は3つあります。拡張ACLは「-R」オプションで削除し、デフォルトACLは「-D」オプションで削除します。全てのACLを削除したい場合は「-B」を使います。いずれの場合も基本ACLはそのまま残ります。

コマンド実行例

chacl -R test1.txt

(ファイルから拡張ACLを削除する)(画面5

chacl -D ディレクトリ名

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

chacl -B ディレクトリ名

(ディレクトリからデフォルトACLと拡張ACLを削除する)


画面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.

スポンサーからのお知らせPR

注目のテーマ

AI for エンジニアリング
「サプライチェーン攻撃」対策
1P情シスのための脆弱性管理/対策の現実解
OSSのサプライチェーン管理、取るべきアクションとは
Microsoft & Windows最前線2024
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

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

メールマガジン登録

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