Touch ID per Mac Touch Bar può autenticare utenti sudo e privilegi di amministratore?


53
  • Touch ID per la Touch Bar di MacBook Pro supporta l'elevazione dei privilegi di amministratore in macOS?

  • In qualche modo diverso, il Touch ID può fornire l'accesso sudo nel Terminale?

Mi chiedo questo perché sto pensando di ottenere un YubiKey che può eseguire l'input di stringhe nei campi password, ma Touch ID per Mac potrebbe renderlo non necessario.



@pathikrit - vicino ma sembra che un modulo PAM sia una soluzione molto migliore di un sudo biforcuto. Non ho visto nessuno che sia stato ancora scritto; Potrei cimentarmi
Brad Dwyer il

Risposte:


14
  1. TouchID supporta i privilegi elevati, ma al momento sembra essere supportato solo nelle app di Apple. La mia ipotesi è che, purtroppo, le app di terze parti dovranno essere aggiornate per supportarle. Finisco ancora a digitare molto la mia password.

  2. Vedi la risposta di @ conorgriffin per istruzioni su come abilitare TouchID per sudo.


1
Qualcuno l'ha davvero fatto? Sembra piuttosto spaventoso :)
Nic Cottrell,

@NicCottrell sì, lavorando benissimo da parte mia
swrobel

77

Per consentire a TouchID sul Mac di autenticarti per l' sudoaccesso invece di una password, devi eseguire le seguenti operazioni.

  • aprire il terminale
  • passa all'utente root con sudo su -
  • modificare il /etc/pam.d/sudofile con un editor della riga di comando come vimonano
  • Il contenuto di questo file dovrebbe apparire così

    # sudo: auth account password session
    auth       required       pam_opendirectory.so
    account    required       pam_permit.so
    password   required       pam_deny.so
    session    required       pam_permit.so
    
  • è necessario aggiungere una authriga aggiuntiva all'inizio in modo che ora assomigli a questo:

    # sudo: auth account password session
    auth       sufficient     pam_tid.so
    auth       required       pam_opendirectory.so
    account    required       pam_permit.so
    password   required       pam_deny.so
    session    required       pam_permit.so
    
  • salvare il file ( Nota: questo file è normalmente di sola lettura, quindi il salvataggio delle modifiche potrebbe richiedere di forzare il salvataggio, ad esempio vimsarà necessario utilizzarlo wq!durante il salvataggio)
  • uscire dall'utente root o avviare una nuova sessione terminale
  • prova a utilizzare sudoe ti verrà richiesto di autenticarti con TouchID come mostrato di seguito Richiesta TouchID
  • se fai clic su "Annulla" puoi semplicemente inserire la tua password al prompt del terminale, se fai clic su "Usa password" puoi inserire la tua password nella finestra di dialogo.
  • se si inserisce SSH nella macchina, si dovrà ricorrere solo alla password poiché non è possibile inviare le impronte digitali TouchID su SSH

Nota: vedere la risposta dell'utente Pierz di seguito se si utilizza iTerm in quanto è necessario modificare un'impostazione per abilitare questa funzione.


4
Sembra funzionare! Ci sono implicazioni di sicurezza con questo?
Znarkus,

1
Questa dovrebbe essere la risposta accettata - È chiaro cosa succede, come è fatto e non è necessario installare software di terze parti.
Jeppe Mariager-Lam,

C'è un modo per sostituire tutte le richieste di password con TouchID? Che si trovi nel terminale, nelle Preferenze di Sistema, nel Portachiavi o per le installazioni di pacchetti?
Max Coplan,

@MaxCoplan probabilmente vale la pena fare una domanda separata
conorgriffin

1
Questo ha funzionato solo dopo aver fatto apple.stackexchange.com/a/355880/158188 (ma l'ho fatto prima io)
aubreypwd il

29

Se stai usando iTerm2 (v3.2.8 +) potresti aver visto Touch ID non funzionare con sudo nel terminale nonostante abbia apportato le pam_tid.somodifiche come sopra e funzionasse nelle versioni precedenti. Questo dipende da una funzionalità avanzata che sembra essere ora abilitata per impostazione predefinita - questo deve essere disattivato qui: iTerm2-> Preferenze> Avanzate> (Vai all'intestazione della sessione)> Consenti alle sessioni di sopravvivere alla disconnessione e al ritorno .

In alternativa, è possibile utilizzare questo pam_reattachmodulo per conservare contemporaneamente la funzione sessione e TouchID sudo.

Preferenze iTerm


1
Ma se vuoi continuare a ripristinare le sessioni, puoi provare questo repository con un modulo pam personalizzato.
Leo

Ho dovuto fare questo passaggio, ma ho lavorato subito dopo essermi assicurato che Nofosse ambientato. Puoi anche cercare "touch" e l'opzione verrà visualizzata.
aubreypwd il

Appena testato: quando si utilizza pam_reattach, non è necessario modificare l'impostazione o riavviare iTerm: tutto funziona subito! (Non ho testato se le sessioni "sopravvivono" in quanto non ho idea di come, ma non ho bisogno di cambiare l'impostazione).
Blaisorblade,

Il prompt Touch ID nasconde la finestra di scelta rapida a schermo intero. C'è una soluzione?
HappyFace,

Mi hai salvato la vita ...
Andrew Ravus il

3

È possibile utilizzare l'impronta digitale per ottenere l'accesso sudo nel terminale o iTerm, basta aggiungere auth sufficient pam_tid.soalla prima riga del /etc/pam.d/sudofile.


4
Potrebbe essere interessante per gli altri sapere che l'attuale versione iTerm v3.2.8 non lo consente quando è impostata un'altra opzione predefinita. Devi andare in Preferenze -> Avanzate e disattivare Allow sessions to survive logging out and back in: gitlab.com/gnachman/iterm2/issues/7608#note_153123852
kossmoboleat

3

Ho creato un semplice script che consente a sudo di utilizzare il modulo TouchID PAM esattamente come spiega Conorgriffin. Lo fa in un singolo script che è possibile copiare e incollare su un terminale nella sua interezza o utilizzare il collegamento " curlpipe bash":

curl -sL https://gist.githubusercontent.com/RichardBronosky/31660eb4b0f0ba5e673b9bc3c9148a70/raw/touchid_sudo.sh | bash

Lo script completo :

#!/bin/bash

# curl -sL https://gist.githubusercontent.com/RichardBronosky/31660eb4b0f0ba5e673b9bc3c9148a70/raw/touchid_sudo.sh | bash
# This script is ready to copy-paste in whole, or just the line above (without the leading #)

# Use TouchID for sudo on modern MacBook Pro machines
# This script adds a single line to the top of the PAM configuration for sudo
# See: https://apple.stackexchange.com/q/259093/41827 for more info.

touchid_sudo(){
  sudo bash -eu <<'EOF'
  file=/etc/pam.d/sudo
  # A backup file will be created with the pattern /etc/pam.d/.sudo.1
  # (where 1 is the number of backups, so that rerunning this doesn't make you lose your original)
  bak=$(dirname $file)/.$(basename $file).$(echo $(ls $(dirname $file)/{,.}$(basename $file)* | wc -l))
  cp $file $bak
  awk -v is_done='pam_tid' -v rule='auth       sufficient     pam_tid.so' '
  {
    # $1 is the first field
    # !~ means "does not match pattern"
    if($1 !~ /^#.*/){
      line_number_not_counting_comments++
    }
    # $0 is the whole line
    if(line_number_not_counting_comments==1 && $0 !~ is_done){
      print rule
    }
    print
  }' > $file < $bak
EOF
}

touchid_sudo

Questo script mostra alcuni fantastici schemi che adoro insegnare alle persone che non conoscono Bash o DevOps.

  1. Crea un file di backup numerato anziché semplicemente .bakalla fine. (Sembra nodoso, ma quel modello funziona con qualsiasi cosa sia dentro $fileed è riutilizzabile.
  2. Per renderlo sicuro curl ... | bash, avvolgi tutto in una funzione e chiamalo sull'ultima riga. In questo modo se il download viene interrotto, nulla viene (parzialmente) fatto.
  3. Effettua una chiamata sudo bash -eunel tuo script in modo da non dover dire all'utente di farlo. ( -eusono l'abbreviazione di errexit e nounset e dovresti usarli!)
  4. Heredoc bash a virgoletta singola 'EOF'per prevenire l'espansione prematura del guscio.
  5. Rendere inline awkpiù leggibile.

0

Ho creato le seguenti attività rispondibili per abilitare l'ID touch per i comandi sudo se il tuo computer lo supporta:

- name: detect touch id support
  shell: pgrep ControlStrip
  ignore_errors: true
  register: touch_id_result

- name: enable touch id for sudo commands
  lineinfile:
    path: /etc/pam.d/sudo
    line: 'auth       sufficient     pam_tid.so'
    insertbefore: '^auth       sufficient     pam_smartcard.so$'
  become: yes
  when: touch_id_result.rc == 0 and touch_id_result.stdout != ''
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.