【Linux】パーミッションの問題

1. Linux 権限の概念

Linuxでは、スーパー ユーザー (root) と一般ユーザーの 2 種類のユーザーが存在します。
スーパー ユーザー: Linuxシステムで制限なく何でもできる;
一般ユーザー: Linuxで制限されたことしかできない。
スーパーユーザーのコマンドプロンプトは「#」、一般ユーザーのコマンドプロンプトは「$」です。

コマンド: su [ユーザー名]
機能: ユーザーを切り替えます。
たとえば、rootユーザーから通常のユーザーuserに切り替えるにはsu user を使用します。一般ユーザーuserからrootユーザーに切り替えるにはsu root (root は省略可能)を使用しますが、このとき、以下に示すように、 rootユーザーのパスワードの入力を求めるプロンプトが表示されます。

ここに画像の説明を挿入します

2. Linuxの権限管理

llコマンドを使用すると、通常、ファイル名またはディレクトリ名の前にデータ文字列が表示されますが、これらは何を意味するのでしょうか? たとえば、以下の赤いボックス内では次のようになります。

ここに画像の説明を挿入します

まず、次の 3 つの列が、正確には、ファイルまたはディレクトリが最後に変更された時刻であることがわかります。

ここに画像の説明を挿入します

次の列には、ファイルまたはディレクトリのサイズを示す数値が表示されます。

ここに画像の説明を挿入します
次に、lmy の2 つの列が何を表すかを理解しましょう。

1. ファイル訪問者の分類

まず、ファイル訪問者の分類は次の 3 つのカテゴリに分類されることを理解する必要があります。

  1. ファイルとファイル ディレクトリの所有者: u - ユーザー
  2. ファイルおよびファイル ディレクトリの所有者が属するグループのユーザー: g - グループ
  3. 他のユーザー: o - その他

以下の図の2 つの列lmyでは、次に示すように、最初の列lmy はuserを表し、2 番目の列はgroupを表します。

ここに画像の説明を挿入します

usergroupに加えて、他のグループに属しています他のグループに属しているユーザーには、このファイルまたはディレクトリにアクセスする権限がありません。

2. ファイルの種類とアクセス権限(モノの属性)

最初の文字は次のようになります。

ここに画像の説明を挿入します

この文字の意味は何ですか? この文字の意味は次のとおりです。

ここに画像の説明を挿入します

ファイルタイプの意味は次のとおりです。

		d:文件夹
		-:普通文件
		l:软链接(类似Windows的快捷方式)
		b:块设备文件(例如硬盘、光驱等)
		p:管道文件
		c:字符设备文件(例如屏幕等串口设备)
		s:套接口文件

訪問者の権限の基本的な表現は次のとおりです。

  • Read (r): Readは、ファイルの場合はファイルの内容を読み取る権限を持ち、ディレクトリの場合はディレクトリ情報を参照する権限を持ちます。
  • Write (w): Writeには、ファイルの場合はファイルの内容を変更する権限があり、ディレクトリの場合は、移動されたディレクトリ内のファイルを削除する権限があります。
  • Execute (x): execute、ファイルの場合はファイルを実行する権限を持ち、ディレクトリの場合はディレクトリに入る権限を持ちます。
  • -この権限がないことを示します

たとえば、以下に示すようにTestディレクトリ内にあります。

ここに画像の説明を挿入します

最初の数字のd は、ファイルの種類がディレクトリであることを示します。2 ~ 4 桁は、ユーザーが所有するアクセス許可(読み取り、書き込み、および実行) を表します。5 ~ 7 桁は、グループが所有するアクセス許可を示します。これらは読み取り、書き込み、および実行でもあり、最後の 3 桁は次のとおりです。他のユーザーの権限には読み取りおよび実行権限のみがあり、書き込み権限はありません。

3. ファイルアクセス権限の関連設定方法

コマンド:chmod
機能:ファイルアクセス権限の設定
書式:chmod [パラメータ] 権限ファイル名

注:ファイルの権限を変更できるのは、ファイルの所有者ルートだけです。

パーミッション文字の変更:
+: パーミッションコードで表されるパーミッションをパーミッション範囲に追加
-: パーミッションコードで表されるパーミッションをパーミッション範囲から削除
=: パーミッションコードで表されるパーミッションをパーミッション範囲に付与

ユーザー記号:
u: 所有者
g: 同じグループ内の所有者
o: 他のユーザー
a: すべてのユーザー

たとえば、ファイルをタッチすると、そのデフォルトのアクセス許可は次のようになります。

ここに画像の説明を挿入します

x 個の権限をユーザーに追加します。

ここに画像の説明を挿入します

現時点では、test.c のユーザー user には x 権限があり、次に示すように、他のユーザーに rwx 権限を追加します。

ここに画像の説明を挿入します

最後に、以下に示すように、グループ group のすべての権限を削除します。

ここに画像の説明を挿入します

アクセス許可を変更する操作は上に示したとおりですが、実際には、バイナリ メソッドを使用してアクセス許可を変更する別の方法もあります。

たとえば、rwxは 3 桁の文字で、0または1を使用してそのアクセス許可の有無を示すことができるため、これら 3 つの文字を全体として 8 進数とみなして、ユーザーのアクセス許可が有効かどうかを判断できます。使用できるrx などの存在2進数101 は8 進数 5 で表されます; –xは 2 進数001で表すことができ、その8 進数は 1 です; rwx は2 進数111で表すことができ、その8 進数は 7 です

したがって、アクセス許可を変更するときは、3 つの 8 進数を使用して変更することもできます。たとえば、以下に示すように、他のすべてのアクセス許可を削除し、すべてのユーザーおよびグループのアクセス許可を追加します。

ここに画像の説明を挿入します

別の例として、図に示すように、すべてのグループの権限を削除します。

ここに画像の説明を挿入します

上記は、権限の変更に関連する内容です。

3. デフォルトの権限

1. ファイルとディレクトリを操作するために必要な権限

デフォルトのアクセス許可について学ぶ前に、ファイルまたはディレクトリを操作するために必要なアクセス許可を理解する必要があります。

まず、ディレクトリに入るにはどのような権限が必要なのかを理解しましょう。一つずつ試してみましょう。まず読み取り (r)権限を予約します。

ここに画像の説明を挿入します

読み取り (r)権限ではディレクトリに入ることができないため、それぞれ書き込み (w)権限と実行 (x)権限のみが保持されます。

ここに画像の説明を挿入します

ここに画像の説明を挿入します

ディレクトリに入るには実行 (x)権限のみが必要であることがわかります。

次に、次のようにdirの権限を解放し、その中に新しいファイルをいくつか作成します。

ここに画像の説明を挿入します

次に、dirに 読み取り (r) と書き込み (w) を行い、このディレクトリに入りますが、図に示すように、ファイルの表示と作成ができないことがわかります。

ここに画像の説明を挿入します

理由は非常に単純で、dirディレクトリには実行 (x)権限のみがあり、ファイル属性を表示するllコマンドには読み取り (r)権限が必要ですが、新しいファイルの作成には書き込み (w)権限が必要であり、自分で確認できるためです。 。

要約すると次のようになります。

  1. 指定したユーザーにディレクトリのファイル リストの表示を許可するかどうか (読み取り (r) 権限を必要とする)。
  2. 指定したユーザーに現在のディレクトリ内のファイルの新規作成または削除を許可するかどうかには、書き込み (w) 権限が必要です。
  3. ディレクトリに入るには、実行 (x) 権限が必要です。
  4. ファイルはディレクトリに属している必要があり、ファイルを表示できるかどうかはディレクトリの権限によって決まります。
  5. ファイルはディレクトリに属している必要があります。ファイルを削除できるかどうかは、ファイル自体ではなく、ファイルが属するディレクトリと対応するアカウントに書き込み (w) 権限があるかどうかによって決まります。

2. ファイルとディレクトリのデフォルトのアクセス許可

新しいファイルのデフォルトのパーミッションは666で、新しいディレクトリのデフォルトのパーミッションは777であることを知っておく必要があります。しかし、実際には、新しいファイルとディレクトリを作成して観察すると、以下に示すように、デフォルトのパーミッションは前述したものと異なります。 :

ここに画像の説明を挿入します

図に示すように、新しく作成されたtestディレクトリのデフォルトのアクセス許可は776であり、新しく作成されたtest.cファイルのデフォルトのアクセス許可は664であることがわかります。これは、ファイルまたはディレクトリの作成時に、それらも影響を受けるためです。umask許可マスクによって。umask関数: ファイルマスクを表示または変更します。

以下に示すように、コマンド ラインでumask を入力すると、権限マスクを表示できます

ここに画像の説明を挿入します

権限マスクを変更するには、umask の後に権限マスクを指定するだけです。

ここに画像の説明を挿入します

では、なぜ許可マスクがあるのでしょうか? 許可マスクとは何ですか? 何に使われますか? 以下で分析してみましょう。

アクセス許可マスクによる制限がないと仮定して、図に示すように、アクセス許可マスクを 000 に変更し、ディレクトリを作成します。

ここに画像の説明を挿入します

次に、このディレクトリに入り、ファイルを作成します。

ここに画像の説明を挿入します

権限マスクが000に変更されているため、このファイルのデフォルトの権限は666 です。このファイルでは、他のグループが(w) を書き込む権限を持っているため、誰もがこのファイルを変更できることを意味します。このファイルは安全でなくなるため、以下に示すように、このファイル内の他のグループの書き込み (w)権限を削除する必要があります。

ここに画像の説明を挿入します

このファイルはもう安全ですか? いいえ!このファイルでは、他のグループには(w) を書き込む権限がありませんが、前に述べたように、ファイルを削除できるかどうかは、ファイル自体ではなく、そのファイルが属するディレクトリとそのファイルが削除できるかどうかによって決まります。該当アカウントは(w)を書く権限を持っています。)権限によって決定されます! このディレクトリは他のグループにすべての権限を解放することを知る必要があります。権限マスクは000であるため、誰もがこのディレクトリに入ってこのファイルを削除できることを意味します。つまり、私に見せないと、私は削除することになります。破壊してしまいます。負けてください!これは、このディレクトリ全体が安全ではないことを意味します。

したがって、振り返ってみると、なぜアクセス許可マスクがあるのか​​、もう推測できるはずです。それは、ディレクトリとファイルのセキュリティを保護するためです。具体的には、他のグループがディレクトリやファイルに脅威を与えることを防ぐためです。 。

では、アクセス許可のマスキングはどのように行われるのでしょうか? その理由は、アクセス許可マスクに表示されるすべてのアクセス許可が、最終的には開始時のアクセス許可から削除されるためです。たとえば、次の図:

ここに画像の説明を挿入します

したがって、アクセス許可マスクは他のグループの書き込み (w) アクセス許可を削除し、ディレクトリとディレクトリ内のファイルのセキュリティを効果的に保護します。上図の具体的な実装は次のとおりです:最終的な権限 = 初期の権限 & (~umask)

これは、新しいディレクトリを作成するための実際のデフォルトの権限が775 である理由と、新しいファイルを作成するための実際のデフォルトの権限が664である理由を説明しています。

3. スティッキービット

一般的に、異なるアカウントが同じディレクトリに存在しないため、上記の状況が発生する可能性はほとんどありませんが、特別な状況がある場合、複数のアカウントが相互に連携してデータを共有したいと考えていますが、それを望まない場合があります。他の人が私たちのデータを変更しようとしているでしょうか?

このとき、スティッキー ビットを使用する必要があります。 chmod +t 目录名スティッキー ビットはディレクトリにのみ設定できます。使用方法は次のとおりです。

ここに画像の説明を挿入します

ディレクトリがスティッキー ビットに設定されている場合、ディレクトリ内のファイルには次のユーザーのみがアクセスできます。

  1. スーパー管理者(root)の削除
  2. ディレクトリの所有者が削除します
  3. ファイルの所有者が削除する

おすすめ

転載: blog.csdn.net/YoungMLet/article/details/132239178