GNU/Linux >> Linux の 問題 >  >> Linux

Linuxファイルのパーミッション:知っておくべきことすべて

Linuxは、同じコンピューターにアクセスするために複数のユーザーアカウントとユーザーグループを設定できるマルチユーザーオペレーティングシステムです。ご想像のとおり、これによりセキュリティ上の懸念が生じます。幸いなことに、Linuxには、ユーザーがお互いの機密情報にアクセスできないようにする強力なファイル権限設定とオプションが付属しています。

さまざまなユーザーグループを定義し、それらに追加のファイル権限を割り当てることができます。適切な権限がないと、ユーザーまたはユーザーグループはファイルやディレクトリにアクセスできず、すべての情報が安全に保たれます。

この記事を読むために、Linuxファイルのパーミッションに関する詳細なガイドを用意しました。最終的には、各ファイルのアクセス許可の意味と、機能を使用してファイルとディレクトリを保護する方法をしっかりと理解する必要があります。

ファイルの所有権とアクセス許可について

Linuxファイルの所有権と権限を理解するには、まず「ユーザー」と「グループ」を理解する必要があります。

ユーザー対グループ

Linuxでは、複数の「ユーザー」を作成できます。これは、コンピューターを使用するさまざまな人々のファイルとディレクトリを分離するのに役立ちます。各ユーザーには、ユーザーIDやホームディレクトリなど、いくつかの特定のプロパティがあります。

システム上のさまざまなユーザーを表示するには、ターミナルで次のコマンドを入力します。

 $ cat / etc / passwd 

すべてのユーザーを管理するために、Linuxは「グループ」の概念を導入しています。 1つまたは2つのグループを作成してから、すべてのシステムユーザーをこれらのグループの1つ以上に追加すると、グループをより簡単に管理できます。

グループを作成することもできますが、ユーザーを追加することはできません。その場合、ユーザーはゼロのグループになります。

ただし、一方で、ユーザーを作成すると、自動的に「デフォルトグループ」に関連付けられます。もちろん、ユーザーを別のグループに追加することもできます。そのため、ユーザーは複数のグループに参加できます。

システム上のすべてのグループを表示するには、ターミナルで次のコマンドを入力します。

 $ cat / etc / group 

注:上記の2つのコマンドを実行すると、作成していないユーザーとグループがシステムにすでに大量に存在することに気付くでしょう。これらはすべてシステムユーザーとグループです。これらは、すべてのバックグラウンドプロセスを安全に実行するために必要です。

ファイルの所有権と権限の付与

ユーザーが新しいファイルまたはディレクトリを作成するときはいつでも、それはユーザーとユーザーのデフォルトグループによって「所有」されます。さらに、各ファイルまたはディレクトリは、単一のユーザーと単一のグループのみが所有できます。

では、他のユーザーに自分のファイルやディレクトリへのアクセスを許可するにはどうすればよいでしょうか。ここで、ファイルのアクセス許可を設定する必要があります。すべてのファイルとディレクトリには、3種類のアクセス許可クラスがあります。これらは次のとおりです。

  • 所有者:このクラスでは、権限はファイルの所有者にのみ影響します。
  • グループ:このクラスでは、権限はファイルを所有するグループに影響します。ただし、ファイルの所有者がこのグループに属している場合は、「グループ」権限ではなく「ユーザー」権限を使用してください。
  • その他:このクラスでは、権限はシステム上にいる他のすべてのユーザーに影響します。

これらのクラスのそれぞれに異なる権限を割り当てて、ファイルとディレクトリへのアクセスレベルを取得するユーザーとグループを制御できます。そうは言っても、割り当てることができるさまざまな権限を見てみましょう。

Linuxでは、3種類のファイル権限にアクセスできます。これらは次のとおりです。

  • 読み取り:読み取り権限を持つファイルを使用すると、ユーザーはそのコンテンツを表示できます。一方、ディレクトリに読み取り権限がある場合、ユーザーはそのディレクトリに保存されているファイルと他のディレクトリの名前しか見ることができません。
  • 書き込み:書き込み権限を持つファイルを使用すると、ユーザーはそのファイルのコンテンツを変更したり、削除したりすることができます。一方、書き込み権限を持つディレクトリの場合、ユーザーはそこに保存されているファイルとディレクトリを変更したり、新しいファイルとディレクトリを作成したりできます。

注:実行権限も有効になっていない限り、書き込み権限はディレクトリに影響を与えません。これは、実行ビットが設定されている場合にのみ、システムがフォルダのアクセス許可を取得できるためです。

  • 実行:ファイルを実行するには、ユーザーが書き込み権限のみを必要とします。ただし、読み取り権限も有効にする必要があります。有効にしないと、影響を受けません。実行権限を持つディレクトリの場合、ユーザーは(cdコマンドを使用して)ディレクトリに入り、そこに含まれるファイルとディレクトリのメタデータを表示できます。

これで、Linuxユーザー、グループの役割、およびファイルの所有権とアクセス許可の概念についての基本的な理論的理解が得られたはずです。それでは、実際にそれらをどのように使用できるかを見てみましょう。

ファイルのアクセス許可を表示する方法

lsコマンドを使用すると、特定のディレクトリにあるすべてのファイルのリストを取得できることをすでにご存知かもしれません。ただし、ファイルのセキュリティに関する詳細は提供されません。この情報については、コマンドls-lを使用する必要があります。

これにより、各ファイルに関する詳細情報を提供する「ロングリスト」オプションを指定してlsコマンドを実行できるようになります。これを行うには、次のコマンドを使用できます。

 $ ls-l<ディレクトリへのパス>

これにより、指定されたディレクトリのファイル権限に関する情報が得られます。または、現在のディレクトリのファイル権限の詳細を取得する場合は、次のコマンドを入力できます。

 $ ls -l <​​/ pre> 

この読み取りでは、ホームディレクトリでls-lコマンドを使用します。

この情報の意味を見てみましょう。

  1. 最初に注意することは、各行には、コマンドを実行したディレクトリにあるさまざまなファイルとディレクトリに関する情報が含まれていることです。
  2. 次に、各行の最初の文字は、ファイルであることを示す「-」、ディレクトリであることを意味する文字「d」、またはシンボリックであることを示す「l」で始まります。リンク。上の画像では、行が「d」で始まるため、デスクトップがディレクトリであることがわかります。ただし、hello worldは「-」で始まるため、ファイルです。
  3. その後、3文字の「r、w、x」と記号「-」の特定の組み合わせを表す9つの文字を取得します。これは、対応するファイルまたはディレクトリの権限を示すために使用されます。後のセクションで、これらの9文字を読み取ってファイルのアクセス許可を理解する方法について説明します。
  4. これに続いて、さらに2つの列があります。これにより、ファイルまたはディレクトリの所有者とグループが識別されます。上記の例では、ご覧のとおり、すべてのファイルとディレクトリが所有者の「root」とデフォルトの「root」グループに属しています。
  5. 次の列には、ファイルまたはディレクトリのサイズがバイト単位で表示されます。
  6. 次に、ファイルが最後に変更された日時を示す列がさらに2つあります。
  7. 最後に、最後の列にファイルまたはディレクトリの名前が表示されます。

セキュリティ権限について

各行の最初の文字の直後にある次の9文字は、対応するファイルまたはディレクトリのアクセス許可を示すために使用されます。

上の画像のデスクトップディレクトリについて考えてみましょう。権限rwxr-xr-xがあります。しかし、これはどういう意味ですか?

まず、9文字をそれぞれ3文字を含む3つのセグメントに分割する必要があります。最初のセグメントはユーザーの権限を示し、2番目のセグメントはグループの権限を示し、3番目のセグメントは他のグループの権限を示します。

そのため、ユーザーにはrwx権限があります。グループには権限r-xがあります。

そして最後に、もう一方にはr-xの権限があります。

ここで、「r」は「読み取り」権限を意味します。

次に、「w」は「書き込み」権限を示します。

次に、「x」は「実行」権限があることを意味します。

各セグメントには、rwxの順序でこれらの権限が配置されます。 rxwやwxrのようなシーケンスは見つかりません。読み取り、書き込み、または実行のアクセス許可が取り消されると、対応する文字が「-」に置き換えられます。

この知識から、デスクトップディレクトリの下で、ユーザーが読み取り、書き込み、および実行する権限を持っていると推測できます。一方、グループとその他のユーザーには、読み取りと実行の権限のみがあり、書き込みの権限はありません。

同様に、ファイルの場合、hello worldにはアクセス許可rw-rw-r–があります。これは、ユーザーとグループには読み取りと書き込みのアクセス許可がありますが、実行のアクセス許可はないことを意味します。同時に、もう一方には読み取り権限のみがあり、書き込み権限や実行権限はありません。

ファイルパーミッションの数値表現と記号表現

上記のセクションでは、「r、w、x」の文字と「-」の記号を使用して権限がどのように示されるかを示しました。これはシンボリックモードとして知られています。ファイルのアクセス許可を示す別の方法、数値モードもあります。

理解しやすくするために、rw-rw-r–というアクセス許可を持つファイルhelloworldを再検討してみましょう。

これによると、ユーザーには権限rw-があります。そのため、読み取りと書き込みのアクセス許可は有効になりますが、実行のアクセス許可は無効になります。

有効な各権限は1で示され、無効な権限は0で示されます。これにより、2進数(この場合は110)が得られます。次に、8進数に変換する必要があります。数字の6。

したがって、hello worldファイルの場合、ユーザーには権限6があります。同様に、グループにも権限6があります。他のユーザーにも権限4があります。したがって、数値モードでは、helloworldファイルの権限は664です。

>

数値表現の最初の数字は常にユーザー権限を表し、2番目の数字はグループ権限を説明するために使用され、3番目の数字は他のすべてのユーザーの権限を表すために使用されます。

ファイルとディレクトリのアクセス許可を設定するために、その場でバイナリを8進数に変換するのは難しいと思うかもしれません。しかし、あなたがする必要があるのはこれを覚えておくことだけです:

  • r =4
  • w =2
  • x =1
  • – =0

したがって、r-xのrwxトリプル値を作成する場合、同等の数値は4 + 0 + 1=5になります。同様に、rw-の場合、数値表現は4 + 2 + 0=6です。また、rwx権限の場合、数値表現は4 + 2 + 1=7です。

また、考えられるすべてのrwxトリプレットに相当するすべての数値モードを示すリストも含まれています。

  • 数値「0」は、rwxトリプレット「—」を示します。
  • 数値「1」は、rwxトリプレット「–x」を示します。
  • 数値「2」は、rwxトリプレット「-w-」を示します。
  • 数字の「3」は、rwxトリプレット「-wx」を示します。
  • 数字の「4」は、rwxトリプレット「r–」を示します。
  • 数値「5」は、rwxトリプレット「r-x」を示します。
  • 数字の「6」は、rwxトリプレット「rw-」を示します。
  • 数字の「7」は、rwxトリプレット「rwx」を示します。

権限の数値モード表現を覚えるのが少し難しい場合は、心配する必要はありません。ほとんどのツールはシンボリックモードをサポートしています。非常にまれな特定の状況でのみ、数値モードを使用する必要があります。

「chmod」コマンド:ファイルのアクセス許可の変更

これで、Linuxファイルのアクセス許可がどのように機能するか、および特定のファイルまたはディレクトリに対してさまざまなユーザーグループがどのようなアクセス許可を持っているかを理解する方法を包括的に理解できたはずです。

それでは、ファイルのアクセス許可の変更について説明しましょう。これを行うには、最初に次のコマンドを使用して新しいファイルを作成しましょう。

 $ touch file.txt 

これにより、コマンドを実行しているディレクトリに新しい「file.txt」が作成されます。次に、ls-lコマンドを実行してファイルのアクセス許可を確認しましょう。

画像からわかるように、file.txtにはアクセス許可rw-rw-r–があります。このことから、ユーザー、グループ、その他のいずれにもファイルを実行する権限がないことがわかります。これを変更しましょう。

すべてのユーザーに「実行」権限を追加するには、次のコマンドを使用する必要があります。

 $ chmod a + x file.txt 

ここで、aはすべてのユーザーの権限を変更することを示し、+xは「実行」権限を追加することを示します。

次に、ls -lコマンドを再度実行して、ファイルのアクセス許可が変更されたかどうかを確認しましょう。

ご覧のとおり、上の画像から、file.txtのファイル権限がrwxrwxr-xに変更され、すべてのユーザーに実行権限が付与されています。

コマンドに「a」を追加しない場合、chmodコマンドは、変更がデフォルトですべてのユーザーに適用されると想定します。したがって、次のコマンドを入力できます:

 $ chmod + x file.txt 

これ以外に、chmodは、「ユーザー」、「グループ」、「その他」を表すために使用される文字u、g、oも受け入れます。また、「+」スイッチの代わりに「-」スイッチを使用すると、権限が取り消されます。

例として次のコマンドを考えてみましょう:

 $ chmod o-rx、g-w file.txt 

上記のコマンドでは、o-rxを使用して、その他から読み取りおよび実行権限を削除します。一方、g-wを使用して、グループから書き込み権限を削除します。 2つのアクションを区切るには、2つのアクションの間にコンマ(、)を追加する必要があることに注意してください。

「+」および「-」スイッチに加えて、「=」を使用してユーザーグループの権限を定義することもできます。権限を追加または取り消す代わりに、「=」スイッチを使用して特定の権限を設定します。

次のコマンドを考慮に入れてください:

 $ chmod u =rx、g =r file.txt 

上記のコマンドで、部分u =rxは、ユーザーの権限をr-xとして設定します。同様に、g =rは、グループの権限をr–として設定します。

数値モードを使用して権限を設定する

数値モードを使用して権限を設定することもできます。たとえば、file.txtのアクセス許可をrwxr–r–として設定するとします。上記の表を参照すると、この権限の数値表現が744であることがわかります。

そのため、次のコマンドを入力してファイルのアクセス許可を変更するだけです。

 $ chmod 744 file.txt 

ディレクトリ内のすべてのファイルに権限を設定する

ディレクトリに属する​​すべてのファイルのアクセス許可を変更する必要がある場合があります。それらを1つずつ変更すると、多くの時間がかかり、実用的ではありません。この目的のために、-Rスイッチがあります。

たとえば、ユーザーのみのDocumentsディレクトリ内のすべてのファイルに実行権限を追加するとします。これを行うには、次のコマンドを実行できます。

 $ chmod -R u+xドキュメント

所有していないファイルとディレクトリのアクセス許可を変更する

chmodコマンドでは、所有しているファイルとディレクトリの権限のみを変更できます。所有していないファイルやディレクトリの権限を変更する必要がある場合は、sudoを使用する必要があります。

 $ sudochmod<ファイルのアクセス許可を指定><ファイル/ディレクトリ名を指定>

特別な許可

これで、ファイルのアクセス許可、ファイルの所有権、およびさまざまなユーザーグループのファイルのアクセス許可を変更する方法について実用的な知識が得られたはずです。

これとは別に、いくつかの「アクセス権フラグ」もあります。これらは、ファイルとディレクトリに特別なアクセス許可を提供するために使用されます。

スティッキービット

まず、スティッキービットについて話しましょう。場合によっては、ユーザーはファイルまたはディレクトリで共有および共同作業を行う必要があります。その場合、システム上のすべてのユーザーに読み取り、書き込み、および実行のアクセス許可を与える必要があります。

しかし、ユーザーがディレクトリ内のファイルの1つを誤って削除(または混乱)した場合はどうなるでしょうか。書き込み権限を奪うだけでは、ファイルを操作する能力が妨げられます。

ここでスティッキービットが役立ちます。ディレクトリまたはファイルにスティッキービットを設定した場合、rootユーザー、ディレクトリ所有者、およびファイル所有者のみがスティッキービットを削除または削除する権限を持ちます。他のユーザーは、必要な権限を持っていても、スティッキービットが有効なファイルとディレクトリを削除/名前変更することはできません。

デフォルトでは、スティッキービットは/tmpディレクトリで使用されます。ご存知のように、/ tmpディレクトリには、システムで実行され、システム上のすべての異なるユーザーによって使用されるすべてのプログラムの一時ファイルが格納されます。そのため、重要な一時ファイルが誤って削除されるのを防ぐために、Linuxはデフォルトで/tmpにスティッキービットを設定します。

ディレクトリの1つにスティッキービットを設定するには、次のコマンドを使用できます。

 $ chmod + t  

ここで、「t」はスティッキービットを表すために使用される文字であり、「+」スイッチを使用してスティッキービットをディレクトリに追加しています。

同様に、ディレクトリからスティッキービットを削除するには、次のコマンドを使用できます。

 $ chmod -t  

SetuidおよびSetgidビット

setuidビットは、ファイルを所有するユーザーとしてファイルを実行するために使用されます。 setgidビットは、ファイルを所有するグループとしてファイルを実行するために使用されます。 setuidビットはファイルで使用され、ディレクトリには影響しません。ただし、setgidビットはディレクトリで使用できます。

これにより、ディレクトリ内に作成された新しいファイルとサブディレクトリは、ユーザーのデフォルトグループではなく、所有者グループを継承できます。また、ディレクトリの下の新しいサブディレクトリにはsetgidビットが設定されますが、古いファイルは影響を受けません。

ファイルにsetuidビットを設定するには、次のコマンドを使用できます。

 $ sudo chmod + s  

setgidビットを削除するには、代わりに-sを使用する必要があります。同様に、ファイルにsetgidを設定するには、次のコマンドを使用できます。

 $ sudo chmod g + s  

そして、それを削除するには、g-sを使用する必要があります。

結論

ご覧のとおり、Linuxは、システム内のファイルとディレクトリに対するユーザーベースの権限を処理するための堅牢で包括的な機能を提供します。この記事が、これらの権限がどのように実装されているかを理解するのに役立つことを願っています。ただし、Linuxファイルのアクセス許可に関して混乱や質問がある場合は、遠慮なくコメントを残してください。

また、Linuxを使い始めている場合は、LearnLinuxシリーズの記事をブックマークする必要があります。 Linuxシステムを最大限に活用するために、初心者から上級者まで、役立つチュートリアルとガイドがたくさん含まれています。


Linux
  1. Linux tmpディレクトリ:知っておくべきことすべて

  2. Linuxファイル圧縮:知っておくべきことすべて

  3. Linux –すべてがファイルですか?

  1. LinuxのSwappiness:知っておくべきことすべて

  2. Linuxファイルシステムについて知っておくべきことすべて

  3. LinuxChmodコマンドについて知っておくべきことすべて

  1. Linuxコンテナー(LXC)について知っておくべきことすべて

  2. LinuxUbuntuサーバーについて知っておくべきことすべて

  3. LinuxOpenSSHサーバーについて知っておくべきことすべて