pam_tid.so と pam_reattach.so
-
pam_tid.so
は TouchID 認証を利用するための macOS 付属の PAM モジュール。 -
pam_reattach.so
はpam_tid.so
が tmux 内だと利用できない問題を解決してくれる PAM モジュール。
これら2つの設定を /etc/pam.d/sudo
に追記してやることで、sudo で TouchID が使い放題になる。
設定スクリプト
新しい Macbook のセットアップの際に手順書だと面倒なのでワンライナーでセットアップできるようにした。
元コードを修正した際に Qiita に再貼り付けするのは面倒なのでソース確認したい人は Gist: macOSの sudo で TouchID が使えるようにする(tmux内の利用も対応) を参照。
curl -sL https://gist.githubusercontent.com/kawaz/d95fb3b547351e01f0f3f99783180b9f/raw/0edc285a737df1c8b5bd9b8db0fad8bae33d672b/install-pam_tid-and-pam_reattach.sh | bash
こいつは以下のことをやってくれる。
-
pam_tid.so
が未設定なら/etc/pam.d/sudo
に追記する。 -
pam_reattach.so
が未インストールなら brew install を使ってインストールする。 -
pam_reattach.so
が未設定なら/etc/pam.d/sudo
に追記する。
Before/After
PAMモジュールのインストール実行前後で /etc/pam.d/sudo
はこんな感じに変わる。
diff --git a/etc/pam.d/sudo.bak b/etc/pam.d/sudo
index 1869df8..3e6f2e2 100644
--- a/etc/pam.d/sudo.bak
+++ b/etc/pam.d/sudo
# sudo: auth account password session
+auth optional /path/to/pam_reattach.so
+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
-
pam_reattach.so
のパスは Mac のアーキテクチャによって変わります。- Intel Mac なら /usr/local/lib/pam/
- Apple Silicon Mac なら /opt/homebrew/lib/pam/
- ファイル名のみを書く場合、/usr/local/lib/pam/ は探してくれるが /opt/homebrew/lib/pam/ は見てくれないので、アーキテクチャに寄らず利用出来るようフルパスで書くようにしてます。
問題が起きたら
もし何か問題が発生し /etc/pam.d/sudo
が壊れて sudo
が利用出来なくなると、sudo を利用して /etc/pam.d/sudo を編集する事も出来なくなってしまい困ります。万が一の際に備えて、sudo 以外の手段でこのファイルを編集する方法を知っておくことは重要です。
以下は実際に自分が試して上手くいった、Finder を使って回復する手順です。
- Finder で /etc/pam.d/ を開く(
open -R /etc/pam.d/sudo
) - sudo ファイルを選択してコンテキストメニューの「情報を見る」を開く
- 情報ダイアログの下の方にある「共有とアクセス」の + ボタンを押して自分のユーザで書き込み可能になるようアクセス権を追加する(アクセス権の変更の為には情報ダイアログの右下に表示された鍵マークをクリックして解除する必要があります)
- アクセス権を付けたら適当なエディタで編集出来るようになるので問題が起きる前の内容に書き換えて保存する
- sudo が無事使えるようになった事を確認し、問題なければ 3 の手順で追加した不要なアクセス権を削除しておく