この記事では主に、Linux システムにおけるアクセス許可制御の基本原則を紹介します。
セキュリティモデルLinux システムでは、すべての操作は基本的にファイルにアクセスするプロセスの操作です。ファイルにアクセスするには、まず対応するアクセス許可を取得する必要があります。アクセス許可は、Linux システムのセキュリティ モデルを通じて取得されます。
Linux システムのセキュリティ モデルについては、次の 2 つの点を知っておく必要があります。
MAC と DAC は相互に排他的ではないことに注意してください。DAC は最も基本的なセキュリティ モデルであり、通常、Linux に必要な最も一般的に使用されるアクセス制御メカニズムです。MAC は、DAC 上に構築された拡張セキュリティ メカニズムです。 はオプションのモジュールです。 。 Linux システムは通常、アクセスする前に最初に DAC チェックを実行します。これが失敗した場合、操作は直接失敗します。DAC チェックに合格し、システムが MAC モジュールをサポートしている場合は、次に MAC アクセス許可チェックを実行します。
この 2 つを区別するために、MAC をサポートする Linux システムを SELinux と呼びます。これは、Linux 用のセキュリティが強化されたシステムであることを意味します。
ここでは、Linux システムにおける DAC セキュリティ モデルについて説明します。
DACセキュリティモデルDAC の中心的な内容は次のとおりです。 Linux では、理論上、プロセスはそれを実行するユーザーと同じ権限を持ちます。関係するものはすべてこのコアを中心に展開されます。
ユーザーおよびグループ ID 情報の管理ユーザー、グループ、パスワード情報
/etc/passwd および /etc/group を介してユーザーとグループの情報を保存し、/etc/shadow を介してパスワードとその変更情報を 1 行に 1 つのレコードで保存します。
ユーザーとグループは、それぞれ UID と GID で表されます。ユーザーは同時に複数のグループに属することができます。デフォルトでは、各ユーザーは同じ UID 値と同じ名前の GID に属する必要があります。
/etc/passwd の場合、各レコード フィールドはユーザー名: パスワード (暗号化され、/etc/shadow に保存されます): UID: GID (デフォルトの UID): 説明コメント: ホーム ディレクトリ: ログイン シェル (最初の実行プログラム)
/etc/group の場合、各レコードのフィールドは、グループ名: パスワード (通常、グループ パスワードはありません): GID: グループ メンバー ユーザー リスト (カンマ区切りのユーザー UID リスト)
/etc/shadow の場合、各レコードのフィールドは次のとおりです: ログイン名: 暗号化されたパスワード: 最終変更時刻: 最小時間間隔: 最大時間間隔: 警告時間: 非アクティブ時間:
######例######次に、ユーザーおよびグループ情報の例を示します。 /etc/shadow 内のパスワード情報は暗号化されて保存されますが、例は示されていません。
ファイル権限制御情報
######ファイルの種類###### Linux のファイル タイプは次のとおりです: テキスト ファイルやバイナリ ファイルなどの通常のファイルをタッチで作成できます;ネットワーク通信に使用されるソケット ファイルは、通常、実行中にアプリケーションによって間接的に作成されます。 パイプ ファイルは名前なしパイプではなく名前付きパイプであり、mkfifo を使用して作成できます;
キャラクター ファイルとブロック ファイルはデバイス ファイルであり、mknod で作成できます;
グループには、ファイル グループに設定された権限が含まれます others には、他の人に設定された権限が含まれます
w は書き込み権限があることを意味します。 x は通常、実行可能ファイル/ディレクトリ用であり、実行/検索権限があることを示します。
s は通常、実行可能ファイル/ディレクトリ用であり、ファイル所有者に権限を付与する権限があることを示します。この権限を設定できるのはユーザーおよびグループ グループだけです。
出力の最初の文字は、通常ファイル (-)、ディレクトリ ファイル (d)、ソケット ファイル (s)、パイプ ファイル (p)、キャラクタ ファイル (c)、ブロック ファイルのファイル タイプを示します。 (b)、リンクファイル(l); 2文字目から始まる-rwxr-xr-xの部分はファイルの許可ビットを表し、合計9ビットになります。
ファイル /usr/bin/qemu-i386 の場合、この権限制御の意味は次のとおりです:
各権限制御グループの
プロセス権限
プロセスの場合、次の属性はファイル アクセス許可に関連します:
を表示します。 トップから表示する例:
まず「top」と入力すると、次のような内容が表示されます
ここでは、操作を容易にするために -d オプションを使用して top の更新頻度を延長しています。ここでわかるように、USER フィールドのみが、対応するプロセスの実効ユーザー ID を表します。
読み取りユーザーIDの表示オプションを開きます:a. top コマンドの実行中に「f」と入力すると、次のような行が表示されます。
b. c と入力して、実ユーザー名の表示スイッチをオンにします。c. 最後に、Return キーを押して先頭に戻ると、実際のユーザー ID オプションが表示されます。この時点で「o」を入力して列の順序を調整します。最後に、次のように「実効ユーザー ID」と「実際のユーザー ID」を含む出力が表示されます。 プロセス アクセス ファイルのアクセス許可制御ポリシー ######ルール######
プロセスアクセスファイルの大まかな権限制御戦略
ファイルにアクセスするプロセスにとって最も重要なのは euid であるため、そのアクセス許可属性はすべて euid を中心としています。
プロセスの euid は通常、その ruid 値にデフォルト設定されます。 実行可能ファイルの実行許可ビットが s の場合、プロセスがそのファイルに対して exec を呼び出した後、その euid は実行可能ファイルのユーザー ID に設定されます。 プロセスの保存セット ユーザー ID は euid.からコピーされます。 プロセスのeuidがファイルのユーザーIDと一致する場合、プロセスにはファイルのユーザー許可ビットによって設定された許可のみが与えられます
グループ権限 egid の制御ルールも同様です。
exec 実行ファイルを使用して権限属性を変更する
setuid(uid) を通じて権限属性を変更する場合:
スーパーユーザーは、ruid、euid、保存されたセットユーザー ID を正常に変更できます;
前述したように、この出力の意味は、/usr/bin/sudo ファイルの場合、
通常のユーザー プロセスが sudo コマンドを実行すると、他のプロセスの x を通じて実行権限を取得し、ユーザーの s を使用して sudo 実行可能ファイルの所有者 (ルート) の権限、つまりスーパー権限を一時的に取得します。 。
これは、一般ユーザーが sudo コマンドを使用して管理者権限で多くのコマンドを実行できる理由でもあります。
スティックビットが設定されました
この設定後は、誰もが /tmp ディレクトリに対する読み取り、書き込み、および実行のアクセス許可を持ちます。これは変わりません。ただし、スティッキービット t はその他の部分に設定されており、その機能はまったく異なります。
ディレクトリにスティッキー ビットが設定されていない場合、ディレクトリへの書き込み権限を持つ人は、対応するファイルの所有者ではなく、読み取りまたは書き込み権限を持っていない場合でも、そのディレクトリ内のファイルおよびサブディレクトリを削除できます。スティッキー ビットが設定された後、ユーザーは自分に属するファイルとサブディレクトリのみを書き込みまたは削除できます。
これが、誰でも /tmp ディレクトリにファイルやディレクトリを書き込むことができますが、書き込んだり削除したりできるのは自分が所有するファイルやディレクトリのみである理由です。
set-user-id と保存された set-user-id の使用を説明する man プログラムのアプリケーション フラグメントを提供します。
man プログラムを使用すると、オンライン ヘルプ マニュアルを表示できます。man プログラムをインストールすると、指定したユーザーまたはグループの set-user-ID または set-group-ID を指定できます。man プログラムは、特定の場所にあるファイルを読み取りまたは上書きできます。ファイルは通常、設定ファイル (通常は /etc/man.config または /etc/manpath.config) またはコマンド ライン オプションによって設定されます。
man プログラムは、表示された man ページを含むファイルを処理するために他のコマンドを実行する場合があります。
処理エラーを防ぐために、man は、man コマンドを実行するユーザーの権限と man プログラムの所有者の権限という 2 つの権限を切り替えます。
把握する必要があるメインスレッド: man のみが実行される場合、プロセス権限は man ユーザーの権限になります。man を介して子プロセスが実行される場合 (!bash を介したシェルコマンドなど)、ユーザー現在のユーザーに切り替えます。実行後、ユーザーは現在のユーザーに切り替わります。また、元のユーザーに戻ります。
プロセスは次のとおりです:
以上がLinux 権限制御の基本原則の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。