Kann Touch ID für die Mac Touch Bar sudo-Benutzer und Administratorrechte authentifizieren?

53
  • Unterstützt Touch ID für die MacBook Pro Touch Bar das Erhöhen der Administratorrechte unter macOS?

  • Kann die Touch ID etwas anders Sudo-Zugriff in Terminal gewähren?

Ich frage mich das, weil ich erwäge, einen YubiKey zu bekommen, mit dem Zeichenfolgen in Kennwortfelder eingegeben werden können, aber Touch ID für Macs macht dies möglicherweise unnötig.

Winterflaggen
quelle
2
check this out: github.com/mattrajca/sudo-touchid
pathikrit
@pathikrit - schließen, aber es sieht aus wie ein PAM-Modul wäre eine viel bessere Lösung als ein gegabelter Sudo. Ich habe noch keine gesehen, die geschrieben wurden. Ich kann es versuchen
Brad Dwyer

Antworten:

14
  1. TouchID unterstützt zwar das Erhöhen von Berechtigungen, scheint jedoch derzeit nur in Apples eigenen Apps unterstützt zu werden. Ich vermute, dass Apps von Drittanbietern aktualisiert werden müssen, um dies zu unterstützen. Ich tippe immer noch viel mein Passwort ein.

  2. Siehe @ Antwort des conorgriffin Anweisungen TouchID für sudo zu ermöglichen.

swrobel
quelle
1
Hat das eigentlich jemand gemacht? Sieht ziemlich gruselig aus :)
Nic Cottrell
@ NicCottrell ja, funktioniert gut an meinem Ende
Swrobel
77

Damit TouchID auf Ihrem Mac Sie sudoanstelle eines Kennworts für den Zugriff authentifizieren kann, müssen Sie die folgenden Schritte ausführen .

  • Terminal öffnen
  • Wechseln Sie zum Root-Benutzer mit sudo su -
  • Bearbeiten Sie die /etc/pam.d/sudoDatei mit einem Befehlszeileneditor wie vimodernano
  • Der Inhalt dieser Datei sollte folgendermaßen aussehen

    # 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
    
  • Sie müssen oben eine zusätzliche authZeile einfügen, damit sie jetzt so aussieht:

    # 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
    
  • Speichern Sie die Datei ( Hinweis: Diese Datei ist normalerweise schreibgeschützt. Wenn vimSie Ihre Änderungen speichern, müssen Sie möglicherweise das Speichern erzwingen, z. B. müssen Sie sie wq!beim Speichern verwenden.)
  • Beenden Sie den Root-Benutzer oder starten Sie eine neue Terminalsitzung
  • sudoWenn Sie versuchen, TouchID zu verwenden, werden Sie aufgefordert, sich wie unten gezeigt mit TouchID zu authentifizieren TouchID-Eingabeaufforderung
  • Wenn Sie auf "Abbrechen" klicken, können Sie Ihr Passwort einfach an der Eingabeaufforderung des Terminals eingeben. Wenn Sie auf "Passwort verwenden" klicken, können Sie Ihr Passwort in das Dialogfeld eingeben.
  • Wenn Sie eine SSH-Verbindung zu Ihrem Computer herstellen, wird darauf verzichtet, nur Ihr Kennwort zu verwenden, da Sie Ihre TouchID-Fingerabdrücke nicht über SSH senden können

Hinweis: Siehe die Antwort von Benutzer Pierz unten, wenn Sie iTerm verwenden, da Sie eine Einstellung ändern müssen, um diese Funktion zu aktivieren.

conorgriffin
quelle
4
Scheint zu funktionieren! Gibt es Sicherheitsrisiken?
Znarkus
1
Dies sollte die akzeptierte Antwort sein - Es ist klar, was passiert, wie es gemacht wird und es ist nicht erforderlich, Software von Drittanbietern zu installieren.
Jeppe Mariager-Lam
Gibt es eine Möglichkeit, alle Passwortabfragen durch TouchID zu ersetzen? Ob im Terminal, in den Systemeinstellungen, im Schlüsselbund oder für Paketinstallationen?
Max Coplan
@ MaxCoplan wahrscheinlich eine Frage wert als separate Frage
conorgriffin
1
Dies funktionierte erst, nachdem ich apple.stackexchange.com/a/355880/158188 (aber ich habe dies zuerst
getan
29

Wenn Sie iTerm2 (v3.2.8 +) verwenden, kann es sein, dass Touch ID nicht mit sudo im Terminal funktioniert, obwohl Sie die oben beschriebenen pam_tid.soÄnderungen vorgenommen haben und in früheren Versionen. Dies liegt an einer erweiterten Funktion , die jetzt standardmäßig aktiviert zu sein scheint - diese muss hier deaktiviert werden: iTerm2-> Einstellungen> Erweitert> (Gehe zur Überschrift Sitzung)> Erlaube Sitzungen, dass sie das Ab- und Wiedereinloggen überleben .

Alternativ können Sie dieses pam_reattachModul verwenden, um die Sitzungsfunktion und TouchID sudo gleichzeitig beizubehalten.

iTerm-Einstellungen

Pierz
quelle
1
Wenn Sie jedoch die Funktion zum Wiederherstellen von Sitzungen beibehalten möchten, können Sie dieses Repo mit einem benutzerdefinierten Pam-Modul ausprobieren .
Leo
Ich musste diesen Schritt tun, arbeitete aber sofort, nachdem ich sichergestellt Nohatte, dass die Einstellung vorgenommen wurde. Sie können auch nach "touch" suchen und die Option wird angezeigt.
Aubreypwd
Nur getestet: Bei der Verwendung pam_reattachmuss man weder die Einstellung ändern noch iTerm neu starten - alles funktioniert sofort! (Ich habe nicht getestet, ob Sitzungen "tatsächlich überleben", da ich keine Ahnung habe, wie, aber ich musste die Einstellung nicht ändern.)
Blaisorblade
Die Touch-ID-Eingabeaufforderung verbirgt das Hotkey-Fenster im Vollbildmodus. Gibt es eine Problemumgehung?
HappyFace
Du hast mein Leben gerettet ...
Andrew Ravus
3

Sie können Fingerabdrücke verwenden, um Sudo-Zugriff auf das Terminal oder iTerm zu erhalten. Fügen Sie diese einfach auth sufficient pam_tid.soin die erste Zeile Ihrer /etc/pam.d/sudoDatei ein.

0TshEL_n1ck
quelle
4
Für andere könnte es interessant sein zu wissen, dass die aktuelle iTerm-Version v3.2.8 dies nicht zulässt, wenn eine andere Standardoption festgelegt ist. Sie müssen in den Einstellungen -> Erweitert gehen und deaktivieren Allow sessions to survive logging out and back in: gitlab.com/gnachman/iterm2/issues/7608#note_153123852
kossmoboleat
3

Ich habe ein einfaches Skript erstellt, mit dem sudo das TouchID PAM-Modul genau so verwenden kann, wie es conorgriffin erklärt. Dies geschieht in einem einzigen Skript, das Sie kopieren und ganz in ein Terminal einfügen können, oder Sie verwenden die Abkürzung " curlPipe bash":

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

Das komplette Drehbuch :

#!/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

Dieses Skript zeigt ein paar coole Muster, die ich gerne Leuten beibringe, die noch nicht mit Bash oder DevOps vertraut sind.

  1. Erstellen Sie eine Sicherungsdatei, die nicht einfach .bakam Ende nummeriert ist . (Es sieht merkwürdig aus, aber dieses Muster funktioniert mit allem, was vorhanden $fileund wiederverwendbar ist.
  2. Um dies sicher zu machen curl ... | bash, schließen Sie alles in eine Funktion ein und rufen Sie sie in der letzten Zeile auf. Auf diese Weise wird nichts (teilweise) getan, wenn der Download unterbrochen wird.
  3. Rufen Sie sudo bash -euin Ihrem Skript auf, damit Sie den Benutzer nicht dazu auffordern müssen. ( Abkürzung-eu für errexit und nounset und Sie sollten sie verwenden!)
  4. Bash Heredoc 'EOF'mit einfachen Anführungszeichen , um eine vorzeitige Shell-Expansion zu verhindern.
  5. Inline awklesbarer machen.
Bruno Bronosky
quelle
0

Ich habe die folgenden anonymen Aufgaben erstellt, um die Touch-ID für Sudo-Befehle zu aktivieren, sofern Ihr Computer dies unterstützt:

- 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 != ''
Andy
quelle