Last active
February 22, 2025 01:45
-
-
Save kawaz/d95fb3b547351e01f0f3f99783180b9f to your computer and use it in GitHub Desktop.
macOSの sudo で TouchID が使えるようにする(tmux内の利用も対応)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Qiita記事 https://qiita.com/kawaz/items/0593163c1c5538a34f6f | |
set -e | |
set -o pipefail | |
# pam_tidの存在チェック(間違えてLinux環境などで実行されたら中断する) | |
[[ -f /usr/lib/pam/pam_tid.so.2 ]] || exit 1 | |
[[ "${OSTYPE:0:6}" == "darwin" ]] || exit 1 | |
# /etc/pam.d/sudo の修正 | |
## include sudo_localが無かったら追加する(macOS Squoia 14以降はデフォである) | |
if ! grep -Eq '^auth[ \t]+include[ \t/]+sudo_local$' /etc/pam.d/sudo; then | |
# /etc/pam.d/sudo を念のためターミナルに出力しておく(似非バックアップ) | |
echo "### /etc/pam.d/sudo (original)" | |
cat /etc/pam.d/sudo | |
echo | |
( set -e; set -o pipefail; | |
# 最初の auth として pam_tid.so を追加 | |
pam_sudo=$( | |
awk ' | |
!fixed && /^auth[ \t]/ { | |
print "auth include sudo_local"; | |
fixed=1 | |
} | |
{ print } | |
' /etc/pam.d/sudo | |
) | |
echo "### /etc/pam.d/sudo (include sudo_local was added)" | |
sudo tee /etc/pam.d/sudo <<<"$pam_sudo" | |
echo | |
) | |
fi | |
# /etc/pam.d/sudo_local の修正(無ければ作る) | |
if [[ ! -f /etc/pam.d/sudo_local ]]; then | |
{ echo '# sudo_local: local config file which survives system update and is included for sudo' | |
echo '# uncomment following line to enable Touch ID for sudo' | |
} | sudo tee /etc/pam.d/sudo_local | |
fi | |
## /etc/pam.d/sudo_local を念のためターミナルに出力しておく(似非バックアップ) | |
echo "### /etc/pam.d/sudo_local (original)" | |
cat /etc/pam.d/sudo_local | |
echo | |
## TouchIDが使えるようにする | |
if ! grep -Eq '^auth[ \t].*[ \t/]pam_tid\.so$' /etc/pam.d/sudo_local; then | |
( set -e; set -o pipefail; | |
# 最初の auth として pam_tid.so を追加 | |
pam_sudo=$( | |
awk ' | |
!fixed && /^auth[ \t]/ { | |
print "auth sufficient pam_tid.so"; | |
fixed=1 | |
} | |
{ print } | |
END { | |
# auth が1つも見つからなかった場合も追加 | |
if(!fixed) { | |
print "auth sufficient pam_tid.so"; | |
} | |
} | |
' /etc/pam.d/sudo_local | |
) | |
echo "### /etc/pam.d/sudo_local (pam_tid.so was added)" | |
sudo tee /etc/pam.d/sudo_local <<<"$pam_sudo" | |
echo | |
) | |
fi | |
## pam_reattach.so を有効にする | |
if ! grep -Eq '^auth[ \t].*[ \t/]pam_reattach\.so$' /etc/pam.d/sudo_local; then | |
( set -e; set -o pipefail; | |
# pam_reattach.so の場所は Intel Mac と Apple Silicon Mac で異なるので brew を元にパスを決定 | |
pam_reattach_so="$(brew --prefix)/lib/pam/pam_reattach.so" | |
# pam_reattach.so が無ければ入れる | |
if [[ ! -f $pam_reattach_so ]]; then | |
brew install pam-reattach | |
fi | |
# pam_tid.so の手前に pam_reattach.so を追加 | |
pam_sudo=$( | |
awk ' | |
!fixed && /^auth[ \t].*[ \t\/]pam_tid\.so$/ { | |
print "auth optional '"$pam_reattach_so"'"; | |
fixed=1 | |
} | |
{ print } | |
' /etc/pam.d/sudo_local | |
) | |
echo "### /etc/pam.d/sudo_local (pam_reattach.so was added)" | |
sudo tee /etc/pam.d/sudo_local <<<"$pam_sudo" | |
echo | |
) | |
fi | |
echo -en "\x1b[1m" # bold | |
echo "If you have problems, please see the comments at this URL to try to recover." | |
echo -en "\x1b[4m" # underline | |
echo "https://gist.github.com/kawaz/d95fb3b547351e01f0f3f99783180b9f?permalink_comment_id=4325824#gistcomment-4325824" | |
echo -en "\x1b[0m" # reset |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
もし何か問題が発生して
/etc/pam.d/sudo
が壊れて sudo が利用出来なくなると、sudo を利用して /etc/pam.d/sudo を編集する事も出来なくなってしまい困ります。万が一の際に備えて、sudo 以外の手段でこのファイルを編集する方法を知っておくことは重要です。以下は実際に自分が試して上手くいった、Finderを使って回復する方法です。open -R /etc/pam.d/sudo
)+
ボタンを押して自分のユーザで書き込み可能になるようアクセス権を追加する(アクセス権の変更の為には情報ダイアログの右下に表示された鍵マークをクリックして解除する必要があります)sudo
が無事使えるようになった事を確認し、問題なければ 3 の手順で追加した不要なアクセス権を削除しておく