MiracleJobLogo
エンジニアのエンジニアによるエンジニアのためのサイト
News 07/19 おすすめ情報に 『 【資格取得者速報】 Aさん 「 Microsoft Security, Compliance, and Identity Fundamentals」 』 を追加しました。
会員登録するとキャリア診断やサイトに参加することができます。
あなたにおすすめな技術情報、資格、仕事などをお知らせします。

無料会員登録


パスワードを忘れた場合
LINEで送る
MiracleJobBanaLeft1
MiracleJobBanaLeft2


ファイルにアクセス制御リストを設定する
profile-img
投稿者: ktamoiさん
投稿日:2023/06/30 20:41
更新日:2023/07/02 13:33
like-img
分類
技術
テクノロジー
Unix系サーバ
キャリア
運用・保守
投稿内容


九回目の投稿です。今回は、Linuxにおけるファイルのアクセス制御リスト(ACL)に

ついて紹介します。インフラ業務に従事していると、ファイルのパーミッションを設定

する機会はたくさんあります。そのようなとき、今回紹介するACLに関する理解が

あると、より柔軟なパーミッション設定を実現することができます。



◆ 準備

ACLの設定について紹介する前に、Linuxにおけるファイルのパーミッションについて

説明します。Linuxにおけるファイルのパーミッションとは、平たく言えばファイルに

対するアクセス権のことであり、lsコマンドやstatコマンドなどで確認できます。


例:

$ ls -l sample.out

total 24

-rwxr-x--- 1 parallels infra 80344 Jun  4 22:54 sample.out


これは、ファイル「sample.out」に対するlsコマンドの実行結果であり、ファイルの

属性(サイズや所有者、パーミッションといった情報)が確認できます。特に、

パーミッションについては、次のとおり設定されていることが分かります。


・所有者は「parallels」であり、「parallels」は読み書き実行できる

・所有グループは「infra」であり、「infra」に属するユーザは読みと実行のみできる

・その他のユーザ(所有者でなく、所有グループにも属さないユーザ)は何もできない


ファイルのパーミッションを変更するには、chmodやchown、chgrpといったコマンドを

使います。上の例の場合、例えば所有グループを「infra」から「app」に変更すると

appに属するユーザに読みと実行の権限が付与されます。


なお、ファイルのパーミッションについては、細かいところで言えばSUIDやSGID、

スティッキービットといったものもあります。



◆アクセス制御リストの概要

前節では、ファイルのパーミッションの意味とそれらの確認/変更方法を説明しました。

chmodなどのコマンドでファイルのパーミッションを変更できることが分かりましたが、

これらのコマンドでは、あるユーザに特例的にアクセス権を付与するといった設定は

できません。具体的には次のとおりです。


例: 

実行ファイル「sample.out」は、その所有者「parallels」とその所有グループ「infra」

のみ実行でき、それ以外のユーザは実行できない。ただし、特例的に、infraに所属

しないユーザ「bob」に対しても実行権限を付与したい。


上述の例の場合、bobはinfraに属さないその他のユーザに分類されるため、bobは

sample.outを実行できません。しかし、ファイルにACLを設定することで、このような

アクセス制御を柔軟に実現できます。ACLを設定する際に用いるコマンドを以下に

記載します。


・setfacl: ファイルにACLを設定(追加や削除)するためのコマンドです

・getfacl: ファイルに設定されたACLを表示するためのコマンドです


両コマンドの使い方は次節にて紹介します。それぞれ多くのオプションが用意されて

いますが、詳細については参考1が分かりやすいです。



◆アクセス制御リストの設定例

先ほどの例を実現するようなアクセス権を、実行ファイル「sample.out」に付与する

方法を紹介します。まずは、グループ「infra」に属するユーザ「alice」では実行でき、

属さないユーザ「bob」では実行できないことを確認します。なお、パーミッションを

確認する際に、lsに加えてgetfaclを用いています(現時点でACLは設定していないことが

分かります)。


上図から、bobではsample.outを実行できないことが分かります。実行できるように

するためには「bobをinfraに所属させる」といった方法もありますが、今回はinfraに

所属させることなく、次のコマンドにてACLを設定することで実行権限を付与します。


# setfacl -m u:bob:x sample.out


setfaclのオプションや書式について補足すると、「-m」はACLを設定するためのもので、

「u:bob:x」は、ユーザ「bob」に実行権限を付与するためのものです。このコマンドの

実行後、bobがsample.outを実行できるようになることを確認します。


setfaclコマンドの実行後、getfaclコマンドにてACLを確認すると、bobに実行権限が

付与されていることが分かります。また、sample.outが実行できるようになっている

ことも確認できました。ちなみに、ACLが付与されているファイルをlsで参照すると、

パーミッションの末尾に「+」が表示されます(OSやディストリビューションにより

表示は異なります)。




◆ 感想など

一口にアクセス制御といっても、それを実現する方法は様々あります(参考2)。

今後の運用業務を通して「どのアクセス制御方式をどの場面/状況で用いるべきか」

といった判断を下せられるよう、更に理解を深めていきたいです。



◆ 参考

・【参考1】https://atmarkit.itmedia.co.jp/ait/articles/1808/23/news026.html

・【参考2】https://hana-shin.hatenablog.com/entry/2022/05/31/221357



以上です。

コメント


MiracleJobBanaRight1
MiracleJobBanaRight2
MiracleJobBanaRight3