ユーザーが特定のMLS感度レベルでログインできるかどうかを決定するロジックを理解しようとしています。最初は、pam_selinux.soが/ etc / selinux /.../ seusersファイルを読み取って、どのユーザーがどのseuserにバインドされているかを理解し、MLS範囲の上位コンポーネント以下の感度にユーザーを制限しているのではないかと思いました。
ただし、ソースコードを調べた後、ユーザーにセキュリティコンテキストをデフォルトのコンテキストから変更するかどうかを尋ねた後、pam_selinuxは、カーネルポリシーを呼び出して、新しいMLSラベルが適切かどうかを確認します。
次のコードは、Ubuntulibpam-modules1.1.1-4ubuntu2パッケージのmodules/pam_selinux/pam_selinux.cにあります。
static int mls_range_allowed(pam_handle_t *pamh, security_context_t src, security_context_t dst, int debug)
{
struct av_decision avd;
int retval;
unsigned int bit = CONTEXT__CONTAINS;
context_t src_context = context_new (src);
context_t dst_context = context_new (dst);
context_range_set(dst_context, context_range_get(src_context));
if (debug)
pam_syslog(pamh, LOG_NOTICE, "Checking if %s mls range valid for %s", dst, context_str(dst_context));
retval = security_compute_av(context_str(dst_context), dst, SECCLASS_CONTEXT, bit, &avd);
context_free(src_context);
context_free(dst_context);
if (retval || ((bit & avd.allowed) != bit))
return 0;
return 1;
}
このチェックは、security_compute_av()呼び出しで見られるように、カーネルポリシーで実際にチェックされているように見えます。これにより、SELinuxログインについての私の理解が頭に浮かびました。
だから、誰かが説明してもらえますか?
ユーザーが選択したログインセキュリティレベルの有効性はどのように決定されますか?
そのロジックは、ポリシー、pam_selinux、およびカーネルにどの程度正確に実装されていますか?
現在、私はタイプエンフォースメントマルチ、カテゴリセキュリティ、またはロールベースのアクセス制御にはあまり興味がないので、MLSの感度に影響を与えない場合、これらのコンポーネントがどのように検証されるかを説明する必要はありません。