Skip to content

Commit 8a5e0e9

Browse files
committed
feat(setup): ✨ enable Touch ID sudo authentication in tmux sessions
1 parent 56617bd commit 8a5e0e9

2 files changed

Lines changed: 53 additions & 5 deletions

File tree

homebrew/Brewfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ brew "libpcap"
4848
brew "lolcat"
4949
brew "node"
5050
brew "markdownlint-cli2"
51+
brew "pam-reattach"
5152
brew "minikube"
5253
brew "mongocli"
5354
brew "mosh"

setup.sh

Lines changed: 52 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -256,18 +256,65 @@ step "Configuring Touch ID for sudo"
256256
# Check if Touch ID is already enabled
257257
if sudo grep -q "^auth.*pam_tid.so" /etc/pam.d/sudo_local 2>/dev/null; then
258258
info "Touch ID for sudo already enabled"
259-
add_summary "Touch ID for sudo (already enabled)"
259+
260+
# Check if pam-reattach is also configured (needed for tmux)
261+
if sudo grep -q "^auth.*pam_reattach.so" /etc/pam.d/sudo_local 2>/dev/null; then
262+
info "pam-reattach already configured for tmux support"
263+
add_summary "Touch ID for sudo (already enabled with tmux support)"
264+
else
265+
info "Adding pam-reattach for tmux support..."
266+
# Find the pam_reattach.so path
267+
if [ -f "/opt/homebrew/lib/pam/pam_reattach.so" ]; then
268+
PAM_REATTACH_PATH="/opt/homebrew/lib/pam/pam_reattach.so"
269+
elif [ -f "/usr/local/lib/pam/pam_reattach.so" ]; then
270+
PAM_REATTACH_PATH="/usr/local/lib/pam/pam_reattach.so"
271+
else
272+
warn "pam_reattach.so not found - install with: brew install pam-reattach"
273+
add_summary "Touch ID for sudo (tmux support needs pam-reattach)"
274+
fi
275+
276+
if [ -n "${PAM_REATTACH_PATH:-}" ]; then
277+
# Add pam_reattach.so before pam_tid.so
278+
sudo sed -i '' "s|^auth.*sufficient.*pam_tid\.so|auth optional $PAM_REATTACH_PATH\nauth sufficient pam_tid.so|" /etc/pam.d/sudo_local
279+
success "pam-reattach configured - Touch ID now works in tmux"
280+
add_summary "Configured pam-reattach for Touch ID in tmux"
281+
fi
282+
fi
260283
elif [ -t 0 ]; then
261284
# Only prompt if stdin is a terminal
262285
printf "\n"
263286
read -r -p "$(printf "${CYAN}Enable Touch ID for sudo operations? [y/N]${RESET} ")" response
264287
case "$response" in
265288
[yY][eE][sS] | [yY])
266-
if sudo sh -c 'sed "s/^#auth.*pam_tid\.so/auth sufficient pam_tid.so/" /etc/pam.d/sudo_local.template > /etc/pam.d/sudo_local' 2>/dev/null; then
267-
success "Touch ID enabled for sudo"
268-
add_summary "Enabled Touch ID for sudo"
289+
# Find the pam_reattach.so path
290+
if [ -f "/opt/homebrew/lib/pam/pam_reattach.so" ]; then
291+
PAM_REATTACH_PATH="/opt/homebrew/lib/pam/pam_reattach.so"
292+
elif [ -f "/usr/local/lib/pam/pam_reattach.so" ]; then
293+
PAM_REATTACH_PATH="/usr/local/lib/pam/pam_reattach.so"
294+
else
295+
PAM_REATTACH_PATH=""
296+
fi
297+
298+
if [ -n "$PAM_REATTACH_PATH" ]; then
299+
# Create sudo_local with both pam_reattach and pam_tid
300+
sudo sh -c "cat > /etc/pam.d/sudo_local <<EOF
301+
# sudo_local: local config file which survives system update and is included for sudo
302+
# pam_reattach.so enables Touch ID to work inside tmux sessions
303+
auth optional $PAM_REATTACH_PATH
304+
# pam_tid.so enables Touch ID for sudo
305+
auth sufficient pam_tid.so
306+
EOF"
307+
success "Touch ID enabled for sudo (with tmux support)"
308+
add_summary "Enabled Touch ID for sudo with tmux support"
269309
else
270-
warn "Failed to enable Touch ID (may require manual setup)"
310+
# Fallback to just pam_tid if pam_reattach not found
311+
if sudo sh -c 'sed "s/^#auth.*pam_tid\.so/auth sufficient pam_tid.so/" /etc/pam.d/sudo_local.template > /etc/pam.d/sudo_local' 2>/dev/null; then
312+
success "Touch ID enabled for sudo"
313+
warn "Install pam-reattach for tmux support: brew install pam-reattach"
314+
add_summary "Enabled Touch ID for sudo (tmux support requires pam-reattach)"
315+
else
316+
warn "Failed to enable Touch ID (may require manual setup)"
317+
fi
271318
fi
272319
;;
273320
*)

0 commit comments

Comments
 (0)