Carpe Diem

備忘録

Macのsudoでパスワード入力でなくTouch IDを使う

概要

MacにはTouch IDがあり、インストールなど様々なところでこれまでパスワード入力が必要だった箇所がTouch IDによる指紋認証が使えるようになっています。

その中でターミナルでのsudoのパスワード入力もTouch IDに替えることができるので対応します。

環境

  • macOS 10.15.3
  • pam_reattach v1.2

PAM (Pluggable Authentication Modules)

UnixLinuxではPAMというプラガブルな認証システムが用意されており、sudoもPAMを利用しています。

PAMの詳細は以下で説明しています。

christina04.hatenablog.com

プラガブルとあるように、既存の設定を変更したり、独自のPAMモジュールを使うことで認証部分を柔軟に変更することが可能です。

通常のターミナル

Touch IDで認証したい場合はpam_tid.soというPAMモジュールを使います。

/etc/pam.d/sudopam_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モジュールも利用します。

github.com

インストールは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 を復元 - よせなべ

参考