Linux の認可確認は、入力されたユーザー名へ直接作用するのではなく、プロセスの資格情報へ作用します。プロセスには役割の異なる複数のユーザー ID とグループ ID があります。多くの通常プログラムは一致する識別情報で開始しますが、特権プログラムは意図的に異なる値を使う場合があります。
パーミッション · レッスン 7
プロセスパーミッション
実ユーザー ID、実効ユーザー ID、保存ユーザー ID が、呼び出し元の追跡と権限管理に役立つ仕組みを学びます。
実ユーザー ID
実ユーザー ID は、プロセスを開始したアカウント、またはその祖先となるログインセッションを識別します。プログラムはこれを参照し、呼び出し元と昇格済みの実効識別情報を区別できます。
ユーザー Bob が開始した通常コマンドでは、実ユーザー ID は通常 Bob の UID と等しくなります。別のプロセスを作成するだけで、新しいアカウントが作られたり、この識別情報が変わったりはしません。
プロセスの実ユーザー ID は通常何を識別しますか?
実効ユーザー ID
実効ユーザー ID は、多くのファイルシステムと特権の確認に使われるユーザー資格情報です。通常は実 UID と一致します。有効な setuid プログラムを実行すると、代わりに実行ファイルの所有者から初期化される場合があります。
たとえば、慎重に設計されたパスワードツールは、保護された認証データを更新できるよう、昇格済みの実効 UID で動くことがあります。それでもプログラムは、呼び出し元、要求対象のアカウント、PAM の結果などのコンテキストに基づいてポリシーを強制しなければなりません。ある実効 UID を持つだけで、要求されたすべての操作が正当になるわけではありません。
プロセスのために行われる多くのアクセス制御判断で使われるユーザー ID はどれですか?
保存 Set-User-ID
保存 set-user-ID によって、プログラムはシステムコールの規則に従い、後で復元できる識別情報を保持できます。特権プログラムは、実効 UID を一時的に低い権限の値へ切り替え、通常作業を縮小された権限で行い、範囲を絞った操作に限って保存済み識別情報を復元できます。
正しく実装されている場合、プログラム全体で昇格権限を維持するより安全です。不要になった権限は恒久的に破棄し、資格情報を変更するすべての呼び出しが成功したか確認しなければなりません。
特権プログラムが保存 set-user-ID を保持する理由は何ですか?
ユーザー ID は資格情報の一部にすぎない
プロセスは実、実効、保存、補助のグループ資格情報も持ちます。ファイルシステム ID、ケーパビリティ、名前空間、セキュリティモジュール、ACL、マウントオプション、サービスのポリシーも認可へ影響します。したがって、「その UID だから許可される」という説明だけでは不完全な場合がよくあります。
Linux では ps や /proc/PROCESS/status などで資格情報を調べられます。利用可能なフィールドと表示形式は異なるため、ローカル文書を参照し、共有システムでの実験のためだけに資格情報を変更してはいけません。
権限移行のない通常コマンドでは、実 UID と実効 UID はどのような関係になりますか?
レッスン完了
プロセスパーミッション を完了しました
Linux プロセスが複数のユーザー識別情報を持つ理由を説明できるようになりました。
実 UID で元の呼び出し元を識別する。
実効 UID を有効な認可確認へ関連付ける。
制御された権限移行を理解するために保存済み識別情報を使う。
完全な判断の一部として、グループ ID と追加のセキュリティ機構を考慮する。