VPNシングルサインオン を実現するための最良の方法を決定するために、OS Xログインプロセスをよりよく理解しようとしています。
私が間違っている場合は修正してください。
launchd(8)
はgettyent(3)
を呼び出すため、ttys(5)
からloginwindow.app
に対して/dev/console
を実行するかどうかを決定します。
loginwindow.app
は、system.login.console
許可権限を取得しようとします。許可データベースは、次のメカニズムを指定します(機能の理解とともにリストされています)。 (rootとして)authd
プロセス内で特権実行されるもの、(_ 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
(authorization
サービスに対してpam_authenticate(3)
を呼び出します。「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
メカニズムが定義されている場所もわかりません。
ソースが利用できない場合、メカニズムはどこかに文書化されていますか?
beforeloginwindow:login
およびbuiltin:forward-login
のいずれかが呼び出された場合、どのようにしてbuiltin:auto-login
は資格情報のプロンプトを表示できますか?そのような資格情報のコンテキストを検査し、存在する場合はそれ自体をスキップしますか?奇妙に思われる。
さらに、Appleの 802.1X認証 テクニカルホワイトペーパーで説明されているように、
ログインウィンドウモードが設定されていて、ユーザーがログインウィンドウでユーザー名とパスワードを入力すると、2つのことが起こります。最初に、ログインウィンドウは、ユーザーが入力したユーザー名とパスワードを使用して、ネットワークに対して802.1X経由でコンピューターを認証します。 802.1X認証が成功した後、ログインウィンドウは同じユーザー名とパスワードを外部ディレクトリに対して認証します。
認証の2番目の段階はpam_opendirectory.so
モジュールによって処理され、存在するネットワークに依存するため、最初の段階(802.1Xを介したネットワークへの認証)は必ずその前に行う必要があります。つまり、builtin:authenticate
メカニズムの前に出現する必要があります。
loginwindow
プラグインバイナリをざっと調べたところ、このような802.1X認証を処理しているようですが、builtin:authenticate
の前にそのプラグイン内で呼び出されるメカニズムはloginwindow:login
のみです。このメカニズムではログインプロンプトが表示されるだけでなく、802.1X認証も試行されると思いますか? (もしそうなら、それは少しずさんなIMHOのように見えるだけでなく、EFI /自動ログインからの資格情報が802.1Xログインウィンドウ認証に使用できないことも示唆しています。)
builtin:forward-login,privileged
成功したFileVaultログインをOS Xログインウィンドウに転送し、そこでログインする必要をバイパスします。シングルサインオンのようなものです。私がセットアップした802.1Xプロファイルを使用していなかったので、私の環境ではこれを無効にします。やってみます。
OS X:FileVaultが有効な場合に自動ログインを無効にする方法
Sudo defaults write /Library/Preferences/com.Apple.loginwindow DisableFDEAutoLogin -bool YES
思い出すと、loginwindow:loginは、builtin:policy-bannerと同様に、GUIログインウィンドウの生成に実際に使用されます。したがって、残りのアクションの前にスポーンするのが論理的です。そのため、GUIウィンドウは実際には無関係/バイパス可能なウィンドウであり、資格情報自体ではありません。
正確に何を変更し、どのような目的に向けますか?たとえば、承認プラグインを他の状況で呼び出す必要がある場合は、auth.dbを編集して実行できます。
また、builtin:authenticateサブシステムは、802.1Xとローカル認証の違いを処理する必要があります。