この記事では、Linux®ファイルのパーミッションのコアコンセプトについて説明します。それは基本から始まり、より高度なトピックに移ります。また、いくつかの実用的な例を提供します。ファイルパーミッションの概要とファイルパーミッションの表示方法については、「lsでLinuxファイルパーミッションを確認する」を参照してください。
Linuxのようなマルチユーザー環境では、システム上のさまざまなファイルを変更または削除するユーザーを制御することが重要です。この制御は、必要なセキュリティ対策だけでなく、壊滅的な事故を防ぎます。ユーザーが影響を与えることができるファイルの数が最小限である場合、入力ミスやスクリプトのタイプミスによって重要なファイルが破壊されたり、機密情報が公開Webサイトに公開されたりする可能性は低くなります。
方法を調べる前に ファイルアクセスを管理するには、最初にファイルの所有権とファイルのアクセス許可の概念を理解する必要があります。ファイルシステムに関する限り、ディレクトリは基本的に特別な種類のファイルであるため、所有権と権限はディレクトリにも適用されることに注意してください。ディレクトリにはいくつかの違いがありますが、基本的な概念は同じであるため、この記事で説明するほとんどのファイル権限の概念またはコマンドは、ディレクトリにも適用されます。
Linuxファイルシステム上のすべてのファイルとディレクトリには所有者がいます。ファイルの所有者は、ファイルのアクセス許可を割り当てることができます。ユーザーmom123
の場合 ファイルを所有しているlawndarts 、mom123
からの許可が必要です ローンダートで遊ぶ 。 Shemightはあなたにアクセスを許可するか、アクセスを完全に拒否するか、または単に芝生を見させます。 遊んでいなくても。
ファイルを所有するユーザーは、そのアクセス許可を設定または変更し、誰が(所有者も含めて)ファイルを読み取り、実行、変更、または削除できるかを決定します。単純な特権ですが、広範囲にわたる影響があります。
すべてのファイルには、そのファイルを所有し、その権限を制御できるユーザーがいますが、すべてのファイルはグループにも属しています。 。グループは、通常のユーザーとは異なる可能性のあるファイル権限を共有する一連のユーザーを表します。ユーザーは複数のグループに属することができますが、ファイルは1つのグループにのみ属することができます。
グループの所有権は、ファイルの所有者が知らない人のために1セットの権限をファイルに割り当て(「見ることはできますが、触れることはできません」)、ファイルを信頼する人のために別の権限を割り当てるための便利な方法です。 (「見たり触れたりすることはできますが、他の人はできません。」)
通常のユーザーはファイルの権限を制御できますが、別のユーザーに所有権を割り当てることはできません。所有権を変更するには、一般にroot
として知られるスーパーユーザーを使用する必要があります 。
root
としてログインしていない場合 、sudo
を使用する必要があります rootprivilegesを使用してファイルの所有者を変更するコマンド。
ファイルシステムは、ファイルのグループの変更に関してより柔軟です。ルート権限を使用してグループを変更することはできますが、ファイルの所有者がターゲットグループに属している場合は、ファイルの所有者がファイルをターゲットグループに切り替えることもできます。
ファイルの所有者またはグループを変更するために使用される主なコマンドは、chown
です。 。 chown
で使用される最も一般的な構文 次の例に示されています:
chown user:group file1 file2 file3
user
前の例では、ファイルを所有するユーザーとgroup
ファイルを所属させたいグループです。コロンは、コマンドの2つの要素を区切ります。ユーザーとグループのペアに続いて、変更の影響を受ける1つ以上のファイルを一覧表示します。
注 :chown
また、ユーザー名とグループ名を区切るときに、コロンの代わりにピリオドを受け入れます。ピリオドの使用は時代遅れですが、まだサポートされており、古いスクリプトやドキュメントに表示される場合があります。可能であれば、コロンを使用する必要があります。
ユーザーまたはグループのいずれかを省略できますが、両方を省略できません。ファイルの所有者のみを変更する場合は、次の構文を使用できます。
chown user file1
ピリオドを含むユーザー名があり、グループを変更したくない場合は、次の例に示すように、ユーザーの後にコロンを含めます。
chown john.smith: file1
chown
を使用する場合 次の例に示すようにユーザーを指定しない場合でも、グループを変更するには、グループ名の前にコロンを含めるようにしてください。
chown :group file1
chgrpコマンド
ファイルのグループを変更するだけでコロンを使用したくない場合は、chgrp
を使用できます。 次の例に示すように:
chgrp group file1
これはchown :group file1
と同じように機能します 、ただし、入力して読む方が簡単です。
-Rオプション
所有者を特定のディレクトリとそのファイルおよびサブディレクトリに変更する場合は、-R
を使用します。 次の例に示すように、再帰的な変更を行うオプション:
chown -R user:group directoryname
-R
オプションはchgrp
で機能します 同じように。どちらのコマンドでも、変更は最初に親ディレクトリに適用され、次にディレクトリ内のすべて(サブディレクトリを含む)を繰り返します。
シンボリックリンク(symlinks)には、chown
の特別な処理が必要です。 またはchgrp
オペレーション。シンボリックリンクは、Microsoft®Windows®のショートカットに似た、別のファイルのエイリアスです。ファイルシステムは、シンボリックリンク自体に変更を適用するのではなく、シンボリックリンクのターゲットに変更を適用します。したがって、シンボリックリンクのリンク ファイルthefile.txtを指します 、次のコマンドを検討してください:
chown user:group link
そのコマンドが実行されると、システムはターゲットファイル thefile.txtの所有者とグループを変更します 。シンボリックリンクの所有権、リンク 変わらないままです。
シンボリックリンクの所有者またはグループを変更する場合は、-h
を使用します chown
のフラグ およびchgrp
、次の例に示すように:
chown -h user:group link
権限には2つの部分があります。誰かがファイルで何をすることが許可されているか、そして誰がその誰か できます。
ファイルとディレクトリのユーザーアクションには、読み取り、書き込み、実行の3つのカテゴリがあります。
ファイルの読み取り権限は、ファイルの内容を開いたり表示したりできるユーザーを制御します。
ディレクトリの読み取り権限は、ディレクトリ内のファイルのリストを表示できるかどうかを制御しますが、読み取り権限だけでは不十分です。また、ファイルリストを表示するには、ディレクトリの実行権限が必要です。
ファイルの書き込み権限は、ファイルの内容を変更できるかどうかを制御します。
ディレクトリの書き込み権限は、そのディレクトリ内のファイルを追加、削除、または名前変更できるかどうかを制御します。ディレクトリへの書き込み権限を行使するには、ディレクトリの実行権限も必要です。
注 :ファイルの名前を変更したり、ファイルを削除したりできるかどうかに影響するのは、囲んでいるディレクトリへの書き込み権限だけです。 rm
などの一部の操作 、チェックを行い、所有していないファイルが削除されないようにします。同様のチェックが組み込まれていない別のプログラムが、書き込みできず所有していないファイルを削除するのを止めることはできません。
ファイルの実行権限を使用すると、コマンドラインからそのファイルを実行できます。任意のコマンドを実行するには(chown
、ls
、rm
、など)、そのコマンドを表すファイルに対する実行権限が必要です。コマンドを実行しようとしてpermission denied
を取得した場合 エラー、実行権限がありません。
ディレクトリの実行権限を使用すると、そのディレクトリで操作を実行したり、作業ディレクトリを変更したりできます(cd
)そのディレクトリに移動します。
ディレクトリの読み取り権限がある場合でも、実際にls
を実行することはできません。 実行権限も持っていない限り、そのディレクトリでコマンドを実行してファイルのリストを表示します。それ以外の場合、ls
を実行しようとすると 、システムが読み取り権限を確認する前に、ブロックされます。ディレクトリ内のすべてに影響を与えるには、ディレクトリの実行権限が必要です。
使用可能なアクセス許可がわかったので、それらのアクセス許可の影響を受けるユーザーを制御するために使用されるカテゴリーについて考えてみます。カテゴリは、ユーザー、グループ、その他です。
ユーザー アクセス許可カテゴリは、ファイルの所有者に適用されるアクセス許可を指します。ファイルを所有できるのは1人のユーザーのみであるため、これは特に1人のユーザーのみを対象とする唯一のカテゴリです。
グループ カテゴリは、ファイルと同じグループに属するユーザーを指します。ファイルがグループdevsにある場合 、およびファイルにはそのグループの書き込み権限があります。これは、 devsのユーザーを意味します。 グループはファイルへの書き込みアクセス権を持っています。
その他 カテゴリは、ユーザーまたはグループのカテゴリに該当しないすべての人にとってのキャッチオールです。このカテゴリを使用して、他のユーザーがファイルを読み取るか、編集するか、コマンドとして実行するかを決定します。
権限カテゴリは、orderuser、group、otherに適用されることに注意してください。システムがユーザーに対して最初に検出するアクセス許可カテゴリーは、それが適用する唯一のカテゴリーです。あなたがファイルの所有者である場合、権限はユーザーに設定されているものであるため、システムはファイルのグループやその他の権限をわざわざチェックすることはありません。使用するものはすでに検出されています。
他のユーザーに権限を設定した場合、その権限はファイルの所有者またはそのファイルのグループ内の誰にも適用されないため、この概念は重要です。これらのユーザーは、ユーザーまたはグループのカテゴリにそれぞれ設定された権限を取得します。
グループカテゴリのファイルに読み取り権限を設定せずに、ユーザーと他のカテゴリに設定する場合、ファイルのグループのユーザーには読み取りアクセス権がありませんが、他のすべてのユーザーには読み取りアクセス権があります。
所有権、ユーザーカテゴリ、およびアクセス許可を組み合わせると、ファイルとディレクトリへのアクセスを制御するための多くのオプションが提供されます。次の例は、いくつかの可能性を示しています。
-
他のカテゴリのファイルを読み取り専用にし、ユーザーとグループのカテゴリに書き込みを許可すると、他のユーザーがファイルを読み取れるようにしながら、ファイルの編集者のグループを確立できます。特権ユーザーをファイルと同じグループに追加するだけです。
-
ユーザーカテゴリに読み取り権限を設定し、それをグループや他のカテゴリから削除すると、ファイルの所有者だけがそのコンテンツを表示できるようになります。
-
ファイルの実行権限を設定すると、コマンドとしての実行が許可されます。特定のユーザーのみが実行できるようにするコマンドがある場合は、他のカテゴリのファイルの実行権限を削除します。
ディレクトリも同じように扱われます。多くのシステムログディレクトリは、ユーザーカテゴリ(多くの場合root
)だけで読み取りおよび実行するように設定されています )そして、他のカテゴリからそれらの権限を除外して、ファイル自体に設定されている権限に関係なく、スーパーユーザーアクセス権を持つユーザーのみがログを表示できるようにします。
rootユーザーは、アクセスと制御を提供するために存在します。 rootユーザーは、システム上の任意のファイルまたはディレクトリの所有権と権限を変更できます。そのユーザーは、利用可能な最も寛容な許可を持っているかのように、ファイルやディレクトリを操作することもできます。
ユーザーがファイルを読み取ることはできなくても、他のカテゴリは読み取ることができます。同様に、ユーザーはファイルを読み取ることができても他のカテゴリは読み取ることができない場合でも、rootはファイルを読み取ることができます。ただし、読み取り権限を持っているカテゴリがない場合(ユーザー、グループ、その他ではない場合)、rootもファイルを読み取ることができません。
この動作は、誤って変更したくないファイルに最も役立ちます。ファイルのすべてのカテゴリから書き込み権限が削除された場合、rootでさえ、それらの権限を変更せずにファイルの内容を変更することはできません。
Linuxでファイルのアクセス許可がどのように機能するかについての基本的な理解があれば、偶発的または悪意のある危害からファイルを保護する準備が整います。また、アプリケーションがログに書き込めない(プロセスを所有するユーザーの書き込み権限がないために発生する)、またはサービスを提供できないWebサーバーなど、ファイルの制限的な権限によって引き起こされるエラーに注意することもできます。 htmlファイル(読み取り権限がないか、ディレクトリに実行権限がないことが原因です)。