バックグラウンド
私は、VPNシングルサインオンを達成するための最良の方法を決定するために、OS Xログインプロセスのより良い理解を収集しようとしています。
間違っている場合は修正してください。
launchd(8)
を呼び出してgettyent(3)
、ttys(5)
実行元loginwindow.app
を決定し/dev/console
ます。loginwindow.app
system.login.console
認可データベースが以下のメカニズムを指定する認可権限の取得を試みます(それらの機能の私の理解とともにリストされています)。特権のあるものはauthd
プロセス内で(rootとして)実行され、特権のないものはSecurityAgent
プロセス内で(_securityagentとして)実行されます。builtin:policy-banner
(設定されている場合、ログインウィンドウバナーを表示します)。loginwindow:login
(資格情報のプロンプト)。builtin:login-begin
builtin:reset-password,privileged
(Apple IDを使用してパスワードをリセットします)。builtin:forward-login,privileged
(起動時にEFIから資格情報を転送します)。builtin:auto-login,privileged
(ブート時に自動ログイン資格情報を適用します)。builtin:authenticate,privileged
(呼び出すpam_authenticate(3)
ためのauthorization
サービス、設定、「UID」コンテキスト値)。PKINITMechanism:auth,privileged
(TGTを取得してKerberosを初期化します)。builtin:login-success
loginwindow:success
(ログインセッションを不正なリモートアクセスから保護します;システムのutmpおよびutmpxデータベースにログインを記録します;コンソール端末の所有者と許可を設定します)。HomeDirMechanism:login,privileged
(ユーザーのホームディレクトリをマウントします)。HomeDirMechanism:status
(ホームディレクトリのマウントの進行状況を表示します)。MCXMechanism:login
(構成プロファイルを適用します)。loginwindow:done
(ユーザーの設定をリセットして、グローバルシステムのデフォルトを設定し、ユーザーの設定を使用してマウス、キーボード、およびシステムサウンドを設定し、ユーザーのグループ権限を設定し、ディレクトリサービスからユーザーレコードを取得し、その情報をセッションに適用し、ユーザーのコンピューティングをロードします環境-設定、環境変数、デバイスとファイルのアクセス許可、キーチェーンアクセスなどを含む、Dock、Finder、およびSystemUIServerを起動し、ユーザーのログイン項目を起動します)。
ご質問
各メカニズムの機能の理解を確認したいと思います。
ソースコードは公然と利用可能ですか? 非
builtin
メカニズムは、の下/System/Library/CoreServices/SecurityAgentPlugins
にあるプラグインによって定義されていることは知っていますが、ビルド元のソースは見つかりません。また、builtin
メカニズムがどこで定義されているかもわかりません。ソースが利用できない場合、メカニズムはどこにも文書化されていますか?
観察
どのようにすることができ
loginwindow:login
、それが呼び出された場合は資格情報を要求する前builtin:forward-login
とbuiltin:auto-login
、GUIをバイパスさせることがそのいずれか?そのような資格情報のコンテキストを検査し、存在する場合はスキップしますか?奇妙に思えます。さらに、アップルの802.1X認証テクニカルホワイトペーパーで説明されているように:
ログインウィンドウモードが設定され、ユーザーがログインウィンドウでユーザー名とパスワードを入力すると、2つのことが起こります。まず、ログインウィンドウは、ユーザーが入力したユーザー名とパスワードを使用して、802.1X経由でコンピューターをネットワークに対して認証します。802.1X認証が成功すると、ログインウィンドウは同じユーザー名とパスワードを外部ディレクトリに対して認証します。
その認証の第2段階は
pam_opendirectory.so
モジュールによって処理され、存在するネットワークに依存しているため、第1段階(802.1Xを介したネットワークへの認証)は必ずその前に発生する必要があります。つまり、builtin:authenticate
メカニズムの前に発生する必要があります。loginwindow
プラグインバイナリの簡単な検査から、このような802.1X認証を処理しているように見えますが、そのプラグイン内で呼び出される唯一のメカニズムbuiltin:authenticate
はloginwindow:login
です。このメカニズムはログインプロンプトを表示するだけでなく、802.1X認証も試みると考えるのは正しいですか?(もしそうなら、それは少しずさんな私見のように見えるだけでなく、EFI /自動ログインからのクレデンシャルを802.1Xログインウィンドウ認証に使用できないことを示唆しています。)