macOS で sudo コマンド実行時に、パスワード入力の代わりに Touch ID 認証を使用する

# macOSで`sudo`コマンド実行時に、パスワード入力の代わりにTouch ID認証を使用する設定方法
* この設定は、システムの認証メカニズムを管理するPAM（Pluggable Authentication Modules）の設定ファイルを変更することで実現します。
* 具体的には、`sudo`コマンド用のPAM設定ファイルにTouch ID認証モジュールを追加します。

**はじめに**

* **目的**: `sudo`コマンド実行時の認証を、パスワード入力からTouch IDによる指紋認証に変更する。
* **方法**: `/etc/pam.d/sudo`というPAM設定ファイルを編集し、Touch ID認証モジュール (`pam_tid.so`) を有効にする。
* **前提条件**:
    * Touch IDセンサーが動作すMacを使用している。
        * macOS Sierra以降
        * MacBook Pro 2016以降
    * Touch IDに指紋が登録済みである。
    * 管理者権限を持つユーザーアカウントで操作している。
    * ターミナルとテキストエディタを操作できる。
    * システムファイルの編集に伴うリスクを理解している。

**設定手順**

1.  **PAMについて**:
    * PAMは、macOS（および多くのUnix系OS）で、システムやアプリケーションが「ユーザー認証」を行う方法を柔軟に設定するための仕組みです。
    * 設定ファイル（`/etc/pam.d/`ディレクトリ内にある）を編集することで、認証方法（パスワード、Touch ID、スマートカードなど）の追加や順序変更が可能です。

1.  **必ずバックアップを取ること**:
    * システムファイルを編集する前には、必ずバックアップを作成します。万が一編集に失敗した場合に、元の状態に戻せるようにするためです。ターミナルで以下のコマンドを実行します。
        ```bash:好きなターミナルとテキストエディタで実行
        sudo cp /etc/pam.d/sudo /etc/pam.d/sudo.bak
        ```
    * 管理者パスワードを求められたら入力します（入力中は表示されません）。

1.  **PAM設定ファイルの編集**:
    * テキストエディタ（ここでは`nano`を使用）で`/etc/pam.d/sudo`ファイルを開きます。管理者権限が必要なため`sudo`を使用します。
        ```zsh:好きなターミナルとテキストエディタで実行
        sudo vim /etc/pam.d/sudo
        ```
    * ファイルを開いたら`# sudo: auth account password session`というコメント行の直後に以下の1行を追加します。
        ```zsh:好きなターミナルとテキストエディタで実行
        # sudo: auth account password session
        auth       sufficient     pam_tid.so
        ```
        * **説明**:
            * `auth`: 認証プロセスに関する設定であることを示します。
            * `sufficient`: このモジュールによる認証が成功した場合、後続の認証モジュール（この場合はパスワード認証`pam_unix.so`）はスキップされることを意味します。
            * これにより、Touch IDが利用可能な場合はTouch ID認証が優先され、成功すればパスワード入力は不要になります。
            * Touch IDが利用できない（センサーがない、指紋が登録されていない、蓋が閉じているなど）場合や認証に失敗した場合は、次の認証モジュール（パスワード）に進みます。
            * `pam_tid.so`: Touch ID認証を行うPAMモジュールです。
    * **編集後のファイルの例 (先頭部分)**:
        ```zsh:好きなターミナルとテキストエディタで実行
        # sudo: auth account password session
        auth       sufficient     pam_tid.so  # この行を追加
        auth       required       pam_opendirectory.so
        account    required       pam_nologin.so
        account    required       pam_sacl.so /etc/security/access.conf
        account    required       pam_opendirectory.so
        password   required       pam_opendirectory.so
        session    required       pam_launchd.so
        ```
    * **ファイルの保存**:
        1.  `vim`エディタで、`:wq!` とキー入力すれば保存して終了する。

1.  **動作確認**:
    * 新しいターミナルウィンドウを開くか、現在のターミナルで `sudo ls` のようなコマンドを実行する。
    * パスワード入力プロンプトの代わりに、Touch IDの認証ダイアログ（またはTouch Barへの指示）が表示される。
    * Touch IDセンサーに登録済みの指を置くと、認証が完了しコマンドが実行される。
    * 認証ダイアログで「キャンセル」を押したり、認証に失敗したりした場合は、パスワード入力プロンプトが表示される。

1.  **注意点**

* **システムのアップデートで巻き戻される**: 
    * macOSのシステムアップデートにより、`/etc/pam.d/sudo`ファイルが上書きされ、設定が元に戻ることがある。
    * アップデート後にTouch ID認証が機能しなくなった場合は、再度この手順を実行する必要がある。
* **編集ミスれば sudo コマンドが死ぬ**: 
    * ファイルの編集を誤ると、`sudo`コマンドが使えなくなる可能性がある。
    * 事前に、必ずバックアップを取り、慎重に編集すること。
    * 問題が発生した場合は、リカバリーモードでバックアップファイルから元に戻すこと。
* **セキュリティのトレードオフ**: 
    * Touch IDはパスワードよりも素早く認証できるが、睡眠中などに第三者に指を使われるリスクや、登録された指の持ち主であれば誰でも認証できてしまう点が、複雑なパスワードによる認証と比較してセキュリティレベルが異なる。
    * ゆえに、使用環境やセキュリティ要件によっては、パスワード認証の方が適切な場合がある。
    *また、代替手段として、パスワードマネージャーや他の認証ソリューションを利用する方法もある。
* **故障や状況による問題**: 
    * Touch IDセンサーの故障、または外部ディスプレイ接続などでMacBookの蓋を閉じている場合、この設定を行ってもTouch ID認証は利用できず、パスワード入力が必要になる。
* **OSバージョンや製品による差異**:
    *  古いmacOSバージョンでは`pam_tid.so`が存在しない、あるいは動作が異なる可能性がある。