概要
MacにはTouch IDがあり、インストールなど様々なところでこれまでパスワード入力が必要だった箇所がTouch IDによる指紋認証が使えるようになっています。
その中でターミナルでのsudoのパスワード入力もTouch IDに替えることができるので対応します。
環境
- macOS 10.15.3
- pam_reattach v1.2
PAM (Pluggable Authentication Modules)
UnixやLinuxではPAMというプラガブルな認証システムが用意されており、sudoもPAMを利用しています。
PAMの詳細は以下で説明しています。
プラガブルとあるように、既存の設定を変更したり、独自のPAMモジュールを使うことで認証部分を柔軟に変更することが可能です。
通常のターミナル
Touch IDで認証したい場合はpam_tid.soというPAMモジュールを使います。
/etc/pam.d/sudoにpam_tid.soを使うように設定します。
# sudo: auth account password session
auth sufficient pam_smartcard.so
auth required pam_opendirectory.so
account required pam_permit.so
password required pam_deny.so
session required pam_permit.so
デフォルトだと↑のようになっていますが、
# sudo: auth account password session auth sufficient pam_tid.so # here auth sufficient pam_smartcard.so auth required pam_opendirectory.so account required pam_permit.so password required pam_deny.so session required pam_permit.so
このように追記します。
追記したらターミナルを再起動します。
tmuxの場合
tmuxの場合は先程の設定だけではうまく動かないので、以下のPAMモジュールも利用します。
インストールはbrewでできます。
$ brew install pam-reattach
↑でpam_reattach.soのインストールができたら設定を追記します。
# sudo: auth account password session auth optional pam_reattach.so # here auth sufficient pam_tid.so auth sufficient pam_smartcard.so auth required pam_opendirectory.so account required pam_permit.so password required pam_deny.so session required pam_permit.so
M1 Macの場合
M1 Macの場合はpathが異なるので以下のようにフルパスで設定してください。
# sudo: auth account password session auth optional /opt/homebrew/lib/pam/pam_reattach.so # here auth sufficient pam_tid.so auth sufficient pam_smartcard.so auth required pam_opendirectory.so account required pam_permit.so password required pam_deny.so session required pam_permit.so
追記したらターミナルを再起動します。
動作確認
sudoを使ってみると

このようにパスワード入力でなくTouch IDでできるようになりました。
その他
注意点
単に認証失敗であればsufficientは無視されて次のモジュールへと進みますが、アップグレードなどによって
sudo: unable to initialize PAM: Invalid argument
といったPAMモジュール自体でエラーが出てしまうことがあるようです。
すると/etc/pam.d/sudoの編集にsudoが必要で編集できない、という詰んだ状態なりかねません。
sudoは重要なコマンドなので、こういった問題が起きても以下のように対処できるようにしておきましょう。
MacBook の pam.d sudo を復元 - よせなべ
追記(2024/10/28)
Mac Sonoma以降では以下の様に変わっており、ソフトウェアアップデートを行っても維持される構成で sudo に Touch ID を許可するには、/etc/pam.d/sudo_local を使用します。
# sudo: auth account password session
auth include sudo_local
auth sufficient pam_smartcard.so
auth required pam_opendirectory.so
account required pam_permit.so
password required pam_deny.so
session required pam_permit.so
なので/etc/pam.d/sudo_local.templateをコピーして/etc/pam.d/sudo_localとし、
# sudo_local: local config file which survives system update and is included for sudo # uncomment following line to enable Touch ID for sudo auth optional /opt/homebrew/lib/pam/pam_reattach.so auth sufficient pam_tid.so
とします。