macOSのsudo認証をTouch IDで行う方法
2016年以降に発売されたMacBook Proには指紋認証機能であるTouch IDが搭載されています。スリープからの復帰やブラウザ内でのパスワード入力などでパスワードを使うことなく,右上のTouch IDセンサに指を乗せるだけで認証できるので、非常に便利です。今回はこの機能をコマンドラインのsudo
で使う方法を紹介します。
コマンドラインでパスワードを入力すると,認証が必要ないときに間違ってパスワードを入力してしまい履歴に残してしまうような事故が起こりえますが,Touch IDを使うことでそのような事故を回避できます。
通常,sudo
の設定は/etc/sudoers
で行いますが,sudo
コマンドでプロンプトされるパスワード認証はPluggable Authentication Modules (PAM)により行われています。Touch IDを使うにはsudo
のPAM設定ファイルである/etc/pam.d/sudo
を変更します。macOSの/etc/pam.d/sudo
は何も変更していなければ以下のようになっていると思います。それぞれのカラムは左から「モジュールインターフェイス」,「コントロールフラグ」,「モジュール名」,「モジュールの引数」(以下ではすべての行で省略されています)を表しています。具体的な説明はpam.d
を参照してください。
# 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
Touch IDによる認証を有効にするには以下の行を1行目に追加します。
auth sufficient pam_tid.so
3カラム目のpam_tid.so
がTouch ID (tid)の認証モジュールです。2カラム目のsufficient
は,この認証が失敗した場合には無視されるが,成功した場合にはこれより上の行にrequired
がなければ,この認証結果で認証が成功することを意味しています。
変更後の/etc/pam.d/sudo
は以下のようになります。
# sudo: auth account password session
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のプロンプトが表示されるようになります。Touch IDの認証をキャンセルするなど,失敗した場合はパスワード認証にフォールバックします。
(2022年10月29日追記)
OSのアップデートをすると /etc/pam.d/sudo
の内容が戻る場合があります。現状、先祖返りを防ぐ方法は(私が知る限り)見つかっていないので、その都度追記するしかないと思います。
また、メジャーアップデートをすると、Terminal.app の Full Disk Access 権限がなくなっていていることがあり、その場合は /etc/pam.d/sudo
ファイルが編集できないので、 Terminal.app に Full Disk Access 権限を付与する必要があります(Terminal.appから書き換える場合)。