これは、AuthenticatingユーザーのセッションごとのブートストラップネームスペースをMACOSに再取り付けするためのPAMモジュールです。これにより、ユーザーはTMUX内からpam_tidモジュール(Touch ID)を利用できます。
MacOSでは、ログインセッション全体でバックグラウンドでユーザープログラムが生き残る場合がありますが、いくつかのサービス(主にPasteboardやTouch IDなどのGUIに関連しています)は、ユーザーのログインセッションに厳密に結び付けられており、バックグラウンドセッションのプログラムには利用できません。したがって、ログインセッション全体で生き残るためにバックグラウンドで実行されるTMUXやGNU画面などのプログラムのユーザーは、Touch IDなどのいくつかのサービスが利用できないか、適切に機能しないことがわかります。
このPAMモジュールは、現在のプログラム( sudoなど)を現在のアクティブログインセッションに移動しようとします。その後、残りのPAMモジュールは、Touch IDなどのセッションごとのサービスにアクセスできます。
追加のreattach-to-session-namespace(8)プログラムをインストールした場合、ユーザーのログインセッションのバックグラウンドから任意のプログラムを実行することもできます。
MacOSのブートストラップ名空間の詳細については、TN2083を参照してください。
このモジュールは、認証されているユーザーのセッションごとのブートストラップ名前空間に入れたいモジュールの前に呼び出す必要があります。モジュールは認証フェーズで実行され、 optionalまたはrequiredとしてマークされる必要があります(バグの場合にロックアウトを防ぐためにoptional使用することをお勧めします)
説明されているように、 /etc/pam.d/ /(/ /etc/pam.d/sudoなど)でターゲットサービスを変更します。
auth optional pam_reattach.so
auth sufficient pam_tid.so
...
モジュールがインストールされていることを確認してください。モジュールが/usr/lib/pamまたは/usr/local/lib/pamにインストールされていない場合(たとえば、homebrewが/opt/homebrewにインストールされているM1 Mac)、以下に示すようにPAMサービスファイルのモジュールへのフルパスを指定する必要があることに注意してください。
auth optional /opt/homebrew/lib/pam/pam_reattach.so
auth sufficient pam_tid.so
...
pam_tidモジュールは、SSHまたは別のリモートログインメソッドを介して接続すると、タッチのプロンプトを避けないようにします。ただし、現在のTTYがリモートセッションによって生成される可能性がありますが、 pam_tidによってそのようには検出されない状況(TMUXやスクリーンの使用など)があります。これを緩和するために、次のようにpam_reattachの構成にignore_sshオプションを追加できます。
auth optional pam_reattach.so ignore_ssh
auth sufficient pam_tid.so
...
これにより、環境内の$SSH_CLIENT 、 $SSH_CONNECTION 、または$SSH_TTYのいずれかの存在が検出され、このモジュールがNo-opになります。
詳細については、 reattach_aqua(3) 、 pam_reattach(8) 、およびreattach-to-session-namespace(8)参照してください。
モジュールはHomeBrewで利用できます。次のコマンドを使用してインストールしてください。
$ brew install pam-reattach次のコマンドを使用して、MacPortsでこのモジュールをインストールすることもできます。
$ sudo port install pam-reattachまたは、モジュールを手動で構築することもできます。モジュールはcmake 3を使用して構築されます。プロジェクトディレクトリに次のコマンドをコマンドプロンプトに入力します。
$ cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr/local
$ cmake --build buildApple SiliconとX86の両方で使用するためのユニバーサルバイナリを作成するには(Rosetta Supportなど)、使用してください。
$ cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr/local -DCMAKE_OSX_ARCHITECTURES= " arm64;x86_64 "
$ cmake --build build cmakeがlibpam自動的に見つけることができない場合(たとえば、nix)、プレフィックスパスを手動で指定する必要がある場合があります。
$ cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr/local -DCMAKE_PREFIX_PATH= " /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib/ "
$ cmake --build build次に、モジュールをインストールするには、次のコマンドを実行するだけです。
$ cmake --install buildインストール後、生成されたinstall_manifest.txtファイルをビルドフォルダーに保持していることを確認してください。
コマンドプロンプトで次のコマンドを実行して、システムからインストールを削除します。
$ xargs rm < build/install_manifest.txt install_manifest.txt紛失した場合、これはインストールされているファイルのリストです。
/usr/local/lib/libreattach.a
/usr/local/include/reattach.h
/usr/local/share/man/man3/reattach_aqua.3
/usr/local/lib/pam/pam_reattach.so
/usr/local/share/man/man8/pam_reattach.8
/usr/local/bin/reattach-to-session-namespace
/usr/local/share/man/man8/reattach-to-session-namespace.8
さらに、cmakeを呼び出すときに-DENABLE_CLI=ONオプションを指定することによりreattach-to-session-namespaceコマンドラインユーティリティを構築できます。このコマンドを使用すると、コマンドラインからユーザーのセッション名空間にreattachを使用できます。
詳細についてはreattach-to-session-namespace(8)参照してください。
sudoのタッチID認証を有効にするには、この記事を参照してください。
コードはMITライセンスの下でリリースされます。 license.txtを参照してください。