このチュートリアルでは、Linuxでのアクセス制御リスト、その使用目的、およびそれらの管理方法について詳しく説明します。
システム管理者は、おそらくシステム上のユーザーとグループの権限を構成するのにかなりの時間を費やしています。
ファイルのアクセス許可は、ディレクトリまたはファイルに読み取り、書き込み、または実行のアクセス許可を与えるために、すでに非常に便利です。
しかし、フォルダやファイルに権限を付与するためのより正確な方法が必要な場合はどうなりますか?
ファイルの現在の所有者ではない特定のユーザーまたは特定のグループにファイルへのアクセスを許可したい場合はどうすればよいですか?
これはまさにアクセス制御リストであり、ACLも短縮されています 、Linuxシステムで解決しています。
今日のチュートリアルでは、アクセス制御リスト、それらが何であるか、およびLinuxシステムを適切に構成するためにそれらがどのように使用されるかを非常に詳しく見ていきます。
準備はいいですか?
何を学ぶか
このチュートリアルを最後まで実行すると、次のテーマについて学習できます。
- アクセス制御リスト と、それらをlsコマンドから読み取る方法。
- setfaclを使用してファイルに基本的な権限を設定する方法 コマンド:
- getfaclを使用してアクセス制御リストを読み取る方法 コマンド;
- アクセス制御リストマスクとは何ですか そしてそれをどのように読むべきか;
- アクセス制御リストのデフォルト であり、それらを効果的に使用する方法
これは非常に長いプログラムなので、これ以上面倒なことはせずに、アクセス制御リストとは何かを簡単に定義することから始めましょう。
Linuxでのアクセス制御リストの基本
Linuxでは、ユーザーとグループのアクセス許可を設定する方法が2つあります。通常のファイルアクセス許可を使用する方法とアクセス制御リストを使用する方法です。
アクセス制御リストの定義
アクセス制御リスト は、Linuxファイルシステムで使用され、ファイルとフォルダーにカスタムのよりパーソナライズされたアクセス許可を設定します。 ACLを使用すると、ファイルの所有者または特権ユーザーは、特定のユーザーまたは特定のグループに権限を付与できます。
Linuxでは、ご存知かもしれませんが、権限は3つのカテゴリに分けられます。1つはファイルの所有者用、もう1つはグループ用、もう1つは他のカテゴリ用です。
ただし、場合によっては、特定のユーザーをファイルのグループに配置せずに、ディレクトリへのアクセス(実行権限など)を特定のユーザーに許可したい場合があります。
これが、アクセス制御リストが最初に発明された理由です。
アクセス制御リストの一覧表示
Linuxでは、ホスト上に新しいファイルまたはディレクトリを作成するときにアクセス制御リストが有効になりません(親ディレクトリにいくつかのACLが事前定義されている場合を除く)。
ファイルまたはディレクトリにアクセス制御リストが定義されているかどうかを確認するには、lsコマンドを実行して、「 +」を探します。 許可行の最後にある」文字。
$ ls -l
違いを示すために、最小インスタンスでファイルを一覧表示する場合の違いを次に示します。
アクセス制御リストに関する基本事項がわかったところで、ファイルとディレクトリの基本的なACLの作成を開始する方法を見てみましょう。
Linuxでのアクセス制御リストの作成
ACLコマンドを開始する前に、ホストにパッケージをインストールしておくことが重要です。
ACLパッケージのインストールの確認
最小限のサーバーを実行することを選択した場合は、そうではない可能性があります。
setfaclに関連するヘルプを確認することから始めます 次のコマンドを実行して
$ setfacl --help
ホストがsetfaclコマンドを見つけられない場合は、ACL管理に必要なパッケージをインストールしてください。
$ sudo apt-get install acl -y
このコマンドを実行するには、Debian10でsudo権限が必要になることに注意してください。
setfaclコマンドを実行し、今回はヘルプコマンドが表示されることを確認してください。
ホストが正しく構成されたので、setfaclコマンドがどのように機能するかを見てみましょう。
setfaclを使用したアクセス制御リストの設定
アクセス制御リストでは、覚えておく必要のある2つの主要なコマンドがあります:setfaclとgetfacl。
この章では、 setfaclを見ていきます。 getfaclとしてのコマンドは、かなり自明です。
setfaclコマンドは、Linuxで、ファイルまたはディレクトリのアクセス制御リストを作成、変更、および削除するために使用されます。
setfaclの構文は次のとおりです
$ setfacl {-m, -x} {u, g}:<name>:[r, w, x] <file, directory>
中括弧は次のオプションのいずれかを意味し、通常の括弧は1つまたは複数の項目を意味します。
- -m :変更することを意味します ファイルまたはディレクトリの1つまたは複数のACLエントリ。
- -x :削除することを意味します ファイルまたはディレクトリの1つまたは複数のACLエントリ。
- {u、g} :ユーザーまたはグループのACLを変更する場合。
- 名前 :これはオプションのパラメータです。すべてのユーザーまたはホスト上のすべてのグループにACLエントリを設定する場合は、省略できます。
- [r、w、x] :ファイルまたはディレクトリに読み取り、書き込み、または実行のアクセス許可を設定するため。
たとえば、ファイルにユーザーに特定の書き込み権限を設定するには、次のコマンドを記述します
$ setfacl -m u:user:w <file, directory>
ホスト上のすべてのユーザーに実行権限を設定するには、次のコマンドを記述します
$ setfacl -m u::x <file, directory>
ホスト上の特定のグループに完全な権限を設定するには、この方法でsetfaclを記述します
$ setfacl -m g:group:rwx <file, directory>
ここで、ファイルからACLエントリを削除するとします。
ファイルからユーザー固有のエントリを削除するには、xオプションを指定します。
注:単一のACLエントリから特定の権限を指定することはできません。つまり、書き込み権限を削除して、ACLの読み取り権限をアクティブに保つことはできません。
$ setfacl -x u:<user> <file, directory>
同様に、ホスト上のグループに関連するACLを削除するには、次のコマンドを記述します
$ setfacl -x g:<group> <file, directory>
Linuxでアクセス制御リストを簡単に作成する方法を確認したので、次はファイルとディレクトリの既存のアクセス制御リストを確認する方法を確認します。
getfaclを使用したアクセス制御リストの一覧表示
getfaclコマンドはLinuxで使用され、すべての通常のアクセス許可の完全なリストを出力し、アクセス制御はファイルまたはディレクトリのアクセス許可を一覧表示します。
getfaclは、次の構文で使用できます
$ getfacl <file, directory>
getfaclコマンドは複数のカテゴリに分類されます:
- ファイル名、所有者、グループ :ユーザーとグループの所有権に関する情報が上部に表示されます;
- ユーザー権限:最初に、所有ユーザーとも呼ばれる通常のユーザー権限があり、その後にユーザー固有のACLエントリ(名前付きユーザーと呼ばれる)が続きます
- グループ権限 :所有するグループが表示され、その後に名前付きグループとも呼ばれるグループ固有のACLエントリが続きます
- マスク :ACLエントリに与えられる権限を制限するため、マスクについては次のセクションで詳しく説明します。
- その他の権限 :これらの権限は常にアクティブであり、これは、現在のユーザーまたはグループと一致する他の権限がない場合に調査される最後のカテゴリです。
アクセス制御リストマスクの操作
おそらく最後のスクリーンショットからわかるように、名前付きグループと他の権限の間にマスクエントリがあります。
しかし、このマスクは何に使用されますか?
ACLマスクは、ファイル作成マスク(umask)とは異なり、ファイルまたはディレクトリに存在する既存のACLエントリを制限するために使用されます。
ACLマスクは、ACLマスクを超える既存のアクセス許可に関係なく、ACLアクセス許可の最大セットとして使用されます。
いつものように、図は百の言葉を話します。
ACLマスクは、-nフラグでマスクを更新しないように指定しない限り、setfaclコマンドを実行するたびに更新されます。
マスクが更新されないようにするには、次のコマンドでsetfaclを実行します
$ setfacl -n -m u:antoine:rwx <file, directory>
この例でわかるように、ファイルに対する完全なアクセス許可を持つようにユーザー「antoine」を設定しました。
マスクは、読み取りおよび書き込み権限への権限を制限するように設定されています。
結果として、このユーザーに対してこのファイルに設定された「有効なアクセス許可」は読み取りと書き込みのアクセス許可であり、実行アクセス許可は付与されません。
注:アクセス許可の最大セットがマスクエントリと異なる場合、使用されるACLエントリの「実際の」セットを計算する効果的な行が表示されます。
ディレクトリでのアクセス制御リストのデフォルトの作成
この記事ですでに述べたように、ディレクトリにACLエントリを作成することは可能であり、それらはファイルアクセス制御リストと同じように機能します。
ただし、ディレクトリに関してはわずかな違いがあります。アクセス制御リストのデフォルトを作成するオプションが必要です。
アクセス制御リストのデフォルト は、ファイルやサブディレクトリなど、このディレクトリ内のオブジェクトによって継承されるディレクトリにACLエントリを作成するために使用されます。
デフォルトのACLエントリを作成する場合:
- このディレクトリに作成されたファイルは継承 親ディレクトリで指定されたACLエントリ
- このディレクトリに作成されたサブディレクトリは、ACLエントリとデフォルトのACLエントリを継承します。 親ディレクトリから。
デフォルトのACLエントリを作成するには、setfaclコマンドを使用してACLを設定するときに-dオプションを指定します。
$ setfacl -d -m {u, g}:<name>:[r, w, x] <directory>
たとえば、ディレクトリに作成されたすべてのファイルに読み取り権限を割り当てるには、次のコマンドを実行します
$ setfacl -d -m u::r directory
これで、このaclディレクトリにファイルが作成されると、デフォルトのACLエントリがファイルに適用されていることがわかります。
同様に、ディレクトリがacl-directoryに作成されると、継承されます。 親ディレクトリで指定されたデフォルトのACLエントリ。
3つのカテゴリ(ユーザー、グループ、その他)すべてにデフォルトの権限を指定することをお勧めします。
実際、3つのエントリの1つを指定すると、ファイル作成マスクに関連する権限を持つ残りの2つが作成されます。
ディレクトリのデフォルトのアクセス制御リストを削除する
ディレクトリ上のデフォルトの既存のアクセス制御リストを削除するには、-kフラグを使用します setfaclコマンドを使用します。
$ setfacl -k <directory>
前に指定した例を前提として、デフォルトのエントリを削除する方法は次のとおりです
$ setfacl -k acl-directory
親ディレクトリからACLエントリを削除しても、親ディレクトリに含まれるファイルまたはディレクトリのACLエントリは削除されないことに注意してください。
ディレクトリとすべてのサブディレクトリのデフォルトのACLエントリを削除するには 、再帰的を使用する必要があります オプション(-R)
$ setfacl -kR <directory>
結論
このチュートリアルでは、Linuxのアクセス制御リスト、getfacl、およびsetfaclコマンドについて学習しました。
アクセス制御リストのマスクと、親ディレクトリに含まれるファイルとサブディレクトリにACLエントリを作成するためにデフォルトのACLがどのように使用されるかについて詳しく学びました。
Linuxシステム管理に興味がある場合は、このテーマに関するチュートリアルがさらにたくさんあります。必ず読んでください。