設計上、Linuxはマルチユーザーオペレーティングシステムです。エンタープライズシステムでは、同じシステムにアクセスする複数のユーザーが存在します。ただし、他のユーザーまたはシステムファイルに属するすべてのファイルにアクセスして変更できるユーザーがいる場合、これは確かにセキュリティ上のリスクになります。
これが、UNIX、つまりLinux(LinuxはUnixライクなシステム)にセキュリティ対策が組み込まれている理由です。これにより、目的のユーザーのみがファイルまたはディレクトリにアクセス、変更、または実行できるようになります。
Linuxでは、どのユーザーがどのファイルにアクセスするかは、次の2つの要素によって決まります。
- ファイルの所有権
- ファイルのアクセス許可
Linuxユーザーにとって、ファイルの所有権とアクセス許可を理解することは非常に重要です。これらの用語については、ここで詳しく説明します。
Linuxでのファイルの所有権
注:ここではファイルという用語を使用する場合がありますが、ディレクトリにも適用できます。とにかくディレクトリはファイルであることをご存知だと思います。
Linuxのすべてのファイルとディレクトリには、次の3種類の所有者がいます。
ユーザーはファイルの所有者です。ファイルを作成すると、ファイルの所有者になります。所有権も変更できますが、後で確認します。
すべてのユーザーは特定のグループの一部です。グループは複数のユーザーで構成され、これはマルチユーザー環境でユーザーを管理する1つの方法です。
たとえば、開発チーム、QAチーム、およびsysadminチームが同じシステムにアクセスしている場合は、それらに対して別々のグループを作成する必要があります。このようにして、システムのファイルとセキュリティを効果的に管理できます。各ユーザーのアクセス許可を手動で追加する代わりに、ユーザーをグループに追加してグループのアクセス許可を変更するだけで済むため、時間を節約できます。この方法については、この記事の後半で説明します。
システムの唯一のユーザーであっても、多くのグループに参加できます。 Ubuntuのようなディストリビューションでも、ユーザーの名前と同じ名前のグループが作成されます。
💡コマンドgroupsを実行します 所属しているユーザーグループを確認します。「その他」は、システム上のすべてのユーザーがいるスーパーグループと見なすことができます。基本的に、システムにアクセスできる人は誰でもこのグループに属します。
つまり、「ユーザー」は単一のユーザーであり、グループはユーザーのコレクションであり、その他はシステム上のすべてのユーザーで構成されます。
Linuxでのファイルのアクセス許可
Linuxのすべてのファイルとディレクトリには、3種類の所有者すべてに対して次の3つの権限があります。
ファイルの権限
- 読み取り–ファイルの内容を表示またはコピーできます
- 書き込み–ファイルの内容を変更できます
- 実行–ファイルを実行できます(実行可能ファイルの場合)
ディレクトリの権限
- 読み取り–すべてのファイルを一覧表示し、ディレクトリからファイルをコピーできます
- 書き込み–ディレクトリにファイルを追加または削除できます(実行権限も必要です)
- 実行–ディレクトリに入ることができます
Linuxでのファイルのアクセス許可と所有権について
ファイルのアクセス許可と所有権の基本的な用語を理解したので、次はそれが実際に動作することを確認します。
「statコマンド」または「lsコマンド」を使用して、ファイルのアクセス許可を確認できます。
ファイルに対してオプション-lを指定してlsコマンドを使用すると、次のような出力が表示されます。
-rwxrw-r-- 1 abhi itsfoss 457 Aug 10 11:55 agatha.txt
この出力を写真で説明しましょう:
出力全体についてさらに詳しく説明します:
- ファイルの種類 :ファイルの種類を示します。 dはディレクトリを意味し、–は通常のファイルを意味し、lはシンボリックリンクを意味します。
- 許可 :このフィールドには、ファイルに設定されている権限が表示されます。次のセクションで詳しく説明します。
- ハードリンク数 :ファイルにハードリンクがあるかどうかを示します。デフォルトのカウントは1です。
- ユーザー :ファイルを所有するユーザー。
- グループ :このファイルにアクセスできるグループ。一度に1つのグループのみがファイルの所有者になることができます。
- ファイルサイズ :ファイルのサイズ(バイト単位)。
- 変更時間 :ファイルが最後に変更された日時。
- ファイル名 :明らかに、ファイルまたはディレクトリの名前。
ls -lコマンドの出力を理解したので、ファイルパーミッションの部分に焦点を当てましょう。
上記のコマンドでは、このようなファイル権限が9桁の形式で表示されます。 :
rwxrw-r--
各文字は特定の許可を示します:
- r:読み取り許可
- w:書き込み許可
- x:実行権限
- –:権限が設定されていません
権限は常に読み取り、書き込み、実行の順序になります。つまり、rwxです。次に、これらの権限は、ユーザー、グループ、その他の順序で3種類すべての所有者(所有権のセクションを参照)に設定されます。
この写真は物事をよりよく説明します:
したがって、上の画像を見ると、ファイルのアクセス許可について次のように言うことができます。
- ファイルには、ユーザー所有者の読み取り、書き込み、および実行のアクセス許可があります。しかし、このファイルの使用所有者は誰ですか?この情報は、ls -l(つまり、ユーザーabhi)の出力にあります。
- ファイルにはグループの読み取りおよび書き込み権限がありますが、実行はできません。それはどのグループですか?コマンドls-lの出力にグループ情報があります(つまり、グループitsfoss)。
- ファイルには、他のユーザー、つまりシステムにアクセスできるすべてのユーザーの読み取り権限のみがあります。 「その他」はすべてのユーザーを意味するため、他がどれであるかを知る必要はありません。
これで、ls -lコマンド全体がもう一度表示されたら、ファイルのアクセス許可と所有権を一緒に読み取ることができます。
-rwxrw-r-- 1 abhi itsfoss 457 Aug 10 11:55 agatha.txt
ファイルagatha.txtはユーザーabhiが所有しており、abhiには読み取り、書き込み、および実行の権限があります。グループistfossのすべてのメンバーは、このファイルへの読み取りおよび書き込みアクセス権を持っていますが、他のすべてのメンバーは、このファイルへの読み取りアクセス権しか持っていません。
注:rootユーザーには優れた権限があり、通常、ファイルのアクセス許可に表示されていなくても、すべてのファイルに対する読み取り、書き込み、実行のアクセス許可があります。
1人のユーザーが複数のグループのメンバーになる場合がありますが、ユーザーが作成したファイルのグループ所有者は、ユーザーのプライマリグループのみです。ユーザーのプライマリグループは、 id -gn <username>
のようなidコマンドを使用して見つけることができます。 。独自のプライマリグループを検索する場合は、ユーザー名を空白のままにします。
ファイルの権限を確認する方法がわかったところで、ファイルの権限と所有権を変更する方法を見てみましょう。
Linuxでファイルのアクセス許可を変更する
Linuxでファイルの権限を変更するには、chmodコマンドを使用できます。
📚パーミッションは、以前はアクセスモードと呼ばれていました したがって、chmodはアクセスモードの変更の短縮形でした。 。chmodコマンドを使用する方法は2つあります。
- 絶対モード
- シンボリックモード
絶対モードでは、権限は数値形式で表されます(正確には8進数システム)。このシステムでは、各ファイルのアクセス許可は数字で表されます。
- r(読み取り)=4
- w(書き込み)=2
- x(実行)=1
- –(許可なし)=0
これらの数値を使用すると、それらを組み合わせることができるため、1つの数値を使用して権限セット全体を表すことができます。
Number | 許可 |
---|---|
0 | — |
1 | –x |
2 | -w- |
3(つまり、2 + 1) | -wx |
4 | r– |
5(つまり、4 + 1) | r-x |
6(つまり、4 + 2) | rw- |
7(つまり、4 + 2 + 1) | rwx |
これまでの例では、agatha.txtファイルのファイルパーミッションを数字で推測できますか?そうです、764です。
どの番号がどの権限を表すかがわかったので、この知識を使用してファイル権限を変更する方法を見てみましょう。
誰もが読み書きできるが誰も実行できないように、agatha.txtのファイル権限を変更したいとしますか?その場合、次のようにchmodコマンドを使用できます。
chmod 666 agatha.txt
ここでagatha.txtをリストすると、権限が変更されたことがわかります。
-rw-rw-rw- 1 abhishek abhishek 457 Aug 10 11:55 agatha.txt
絶対モードの問題は、1人の所有者のみに設定された権限を変更する場合でも、3人の所有者すべてに常に3つの番号を指定する必要があることです。
ここで、chmodコマンドでシンボリックモードを使用できます。
シンボリックモードでは、所有者は次のシンボルで示されます。
- u=ユーザー所有者
- g=グループ所有者
- o=その他
- a =すべて(ユーザー+グループ+その他)
シンボリックモードでは、数学演算子を使用して権限の変更を実行します。
- +権限を追加するための
- –権限を削除するため
- =既存の権限を新しい値で上書きする場合
シンボリックモードでchmodコマンドを使用する方法を見てみましょう。
前の例では、グループ所有者の実行権限を追加する場合は、次のようにchmodコマンドを使用できます。
chmod g+x agatha.txt
このファイルの権限を確認すると、実行権限が追加されていることがわかります。
-rw-rwxrw- 1 abhi itsfoss 457 Aug 10 11:55 agatha.txt
1つのコマンドで複数の権限の変更を組み合わせることもできます。読み取りおよび書き込み権限を削除し、Otherの実行権限を追加するとします。また、ユーザー所有者の実行権限を追加する必要があります。すべてを1つのコマンドで実行できます:
chmod o-rw+x,u+x agatha.txt
結果の権限は次のようになります:
-rwxrwx--x 1 abhi itsfoss 457 Aug 10 11:55 agatha.txt
3種類のユーザーすべての権限を同時に変更する場合は、次の方法で使用できます。
chmod a-x agatha.txt
これにより、全員の実行権限が削除されます。
-rw-rw---- 1 abhi itsfoss 457 Aug 10 11:55 agatha.txt
一部の人々は、ファイルのパーミッションをあるモードから別のモードに変換するのは面倒な作業だと感じています。これが、オンラインでさまざまなモードでLinuxファイルのパーミッションを計算できるこの小さなツールを作成した理由です。
Linuxでファイルの所有権を変更する
ファイルの所有権を変更するには、コマンドchownを使用できます。 chownはchangeownerの略であると簡単に推測できます。
ファイルのユーザー所有者は、次の方法で変更できます。
chown <new_user_name> <filename>
グループだけでなくユーザーも変更したい場合は、次のようなchownコマンドを使用できます。
chown <new_user_name>:<new_user_group> <filename>
グループを変更したいだけの場合は、次のようにchownコマンドを使用できます。
chown :<new_user_group> <filename>
または、ファイルまたはディレクトリのグループ所有者を変更するために特に使用されるchgrpコマンドを使用します。 chgrpは変更グループの略であると推測できます。
chgrp <new_user_group> <filename>
これまでの例では、ユーザーの所有者とグループをrootに変更する場合は、次のようにchownコマンドを使用できます。
sudo chown root:root agatha.txt
これにより、ユーザーとグループの両方のファイルの所有権がrootに変更されます。
-rw-rw---- 1 root root 457 Aug 10 11:55 agatha.txt
chownでsudoを使用する必要があることに注意してください。これは、ルートがここに関係しているためです。ルートを処理するには、スーパーユーザー権限が必要です。
ヒント :2つのグループが同じファイルを所有することはできません。
ボーナスのヒント:ファイルのアクセス許可に優先順位はありますか?
ユーザーの所有者に権限がなく、グループには読み取り権限があり、他のグループには読み取りと書き込みの権限がある状況を考えてみてください。
----r--rw- 1 abhi itsfoss 457 Aug 10 11:55 agatha.txt
さて、ユーザーabhiがcat以下のコマンドを使用してファイルを読み取ろうとした場合、彼はそれを実行できますか?読み取り権限がないため、答えはノーです。
ただし、ユーザーabhiはグループitsfossの一部であり、グループには読み取りアクセス権があります。なんてこった!他には読み取りおよび書き込み権限があります。これは、すべての人(ユーザーabhiを含む)がファイルを読み書きできることを意味するはずですよね?間違っています!
Linuxでは、優先順位はユーザー、グループ、その他の順になります。 Linuxシステムは、誰がプロセスを開始したかをチェックします(この例ではcat以下)。プロセスを開始したユーザーがファイルのユーザー所有者でもある場合は、ユーザー権限ビットが設定されます。
ファイルの所有者がプロセスを開始しなかった場合、Linuxシステムはグループをチェックします。プロセスを開始したユーザーがファイルの所有者グループと同じグループに属している場合、グループ権限ビットが設定されます。
このプロセス所有者がファイルのグループ所有者としてグループに含まれていない場合は、他のアクセス許可ビットが設定されます。
この記事が気に入って、Linuxでファイルパーミッションがどのように機能するかをよりよく理解できたことを願っています。
必要に応じて、次に学習できるSUID、GUID、スティッキービットなどの高度なファイル権限があります。
質問や提案がある場合、または単に感謝を言いたい場合は、以下にコメントを残してください。この記事が気に入ったら、ソーシャルメディアやさまざまなフォーラムで共有してください。これは、私たちや他のLinuxユーザーにも役立ちます。