Touch ID pour Mac Touch Bar peut-il authentifier les utilisateurs sudo et les privilèges d'administrateur?


53
  • Touch ID pour la barre tactile du MacBook Pro prend-il en charge l'élévation des privilèges d'administrateur dans macOS?

  • Un peu différemment, le Touch ID peut-il donner accès à sudo dans le terminal?

Je me le demande parce que j'envisage d' obtenir une YubiKey qui peut faire une entrée de chaîne dans les champs de mot de passe, mais Touch ID pour Mac peut la rendre inutile.



@pathikrit - close mais il semble qu'un module PAM serait une bien meilleure solution qu'un sudo fourchu. Je n'en ai encore vu aucun qui ait été écrit; Je peux m'y essayer
Brad Dwyer

Réponses:


15
  1. TouchID prend en charge l'élévation des privilèges, mais pour l'instant, il ne semble être pris en charge que dans les propres applications d'Apple. Je suppose que les applications tierces devront être mises à jour pour le prendre en charge, malheureusement. Je finis toujours par taper mon mot de passe.

  2. Voir la réponse de @ conorgriffin pour les instructions pour activer TouchID pour sudo.


1
Est-ce que quelqu'un a vraiment fait cela? Ça a l'air assez effrayant :)
Nic Cottrell

@NicCottrell oui, ça marche bien de ma part
swrobel

79

Pour permettre à TouchID sur votre Mac de vous authentifier pour l' sudoaccès au lieu d'un mot de passe, vous devez effectuer les opérations suivantes.

  • Terminal ouvert
  • passer à l'utilisateur root avec sudo su -
  • modifier le /etc/pam.d/sudofichier avec un éditeur de ligne de commande tel que vimounano
  • Le contenu de ce fichier devrait ressembler à ceci

    # 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
    
  • vous devez ajouter une authligne supplémentaire en haut pour qu'elle ressemble maintenant à ceci:

    # 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
    
  • enregistrer le fichier ( Remarque: ce fichier est normalement en lecture seule, donc l'enregistrement de vos modifications peut vous obliger à forcer l'enregistrement, par exemple vimvous obligera à utiliser wq!lors de l'enregistrement)
  • quitter l'utilisateur root ou démarrer une nouvelle session de terminal
  • essayez d'utiliser sudoet vous devriez être invité à vous authentifier avec TouchID comme indiqué ci-dessous Invite TouchID
  • si vous cliquez sur «Annuler», vous pouvez simplement entrer votre mot de passe à l'invite du terminal, si vous cliquez sur «Utiliser le mot de passe», vous pouvez entrer votre mot de passe dans la boîte de dialogue.
  • si vous SSH dans votre machine, il se contentera d'utiliser votre mot de passe car vous ne pouvez pas envoyer vos empreintes digitales TouchID via SSH

Remarque: Voir la réponse de l'utilisateur Pierz ci - dessous si vous utilisez iTerm car il y a un paramètre que vous devez modifier pour activer cette fonction.


4
Semble fonctionner! Y a-t-il des implications de sécurité avec cela?
Znarkus

1
Cela devrait être la réponse acceptée - Il est clair ce qui se passe, comment cela se fait, et il n'est pas nécessaire d'installer un logiciel tiers.
Jeppe Mariager-Lam

Existe-t-il un moyen de remplacer toutes les invites de mot de passe par TouchID? Que ce soit dans le terminal, dans les Préférences Système, ou dans le Trousseau, ou pour les installations de Package?
Max Coplan

@MaxCoplan mérite probablement d'être posé comme une question distincte
conorgriffin

1
Cela n'a fonctionné qu'après avoir fait apple.stackexchange.com/a/355880/158188 (mais je l'ai fait en premier)
aubreypwd

31

Si vous utilisez iTerm2 (v3.2.8 +), vous avez peut-être vu Touch ID ne pas fonctionner avec sudo dans le terminal malgré la pam_tid.somodification comme ci-dessus, et cela fonctionnait dans les versions précédentes. Il s'agit d'une fonctionnalité avancée qui semble désormais activée par défaut - cela doit être désactivé ici: iTerm2-> Préférences> Avancé> (Aller à l'en-tête de session)> Autoriser les sessions à survivre à la déconnexion et à la reconnexion .

Alternativement, vous pouvez utiliser ce pam_reattachmodule pour conserver la fonction de session et TouchID sudo en même temps.

Préférences iTerm


2
Mais si vous souhaitez conserver la fonctionnalité de restauration des sessions, vous pouvez essayer ce dépôt avec un module pam personnalisé.
Leo

J'ai dû faire cette étape, mais j'ai travaillé juste après avoir vérifié que Nole réglage était réglé. Vous pouvez également rechercher «tactile» et l'option apparaîtra.
aubreypwd

Juste testé: Lors de l'utilisation pam_reattach, il n'est pas nécessaire de modifier le paramètre ou de redémarrer iTerm - tout fonctionne immédiatement! (Je n'ai pas testé si les sessions "survivent réellement" car je ne sais pas comment, mais je n'ai pas eu besoin de changer le réglage).
Blaisorblade

L'invite Touch ID masque la fenêtre de raccourci plein écran. Y at-il un travail autour?
HappyFace

Vous m'avez sauvé la vie ...
Andrew Ravus

3

Vous pouvez utiliser l'empreinte digitale pour obtenir l'accès sudo dans le terminal ou iTerm, ajoutez simplement auth sufficient pam_tid.soà la première ligne de votre /etc/pam.d/sudofichier.


4
Il pourrait être intéressant pour d'autres de savoir que la version actuelle d'iTerm v3.2.8 ne le permet pas lorsqu'une autre option par défaut est définie. Vous devez aller dans Préférences -> Avancé et désactiver Allow sessions to survive logging out and back in: gitlab.com/gnachman/iterm2/issues/7608#note_153123852
kossmoboleat

3

J'ai créé un script simple qui permet à sudo d'utiliser le module TouchID PAM exactement comme l'explique Conorgriffin. Il le fait dans un seul script que vous pouvez copier-coller sur un terminal dans son intégralité ou utiliser le raccourci " curlpipe bash":

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

Le script complet :

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

Ce script montre quelques modèles sympas que j'aime enseigner aux personnes qui débutent en bash ou en DevOps.

  1. Créez un fichier de sauvegarde numéroté plutôt que simplement .bakà la fin. (Il semble noueux, mais ce modèle fonctionne avec tout ce qui se trouve $fileet est réutilisable.
  2. Pour le faire en toute sécurité curl ... | bash, enveloppez tout dans une fonction et appelez-la sur la dernière ligne. De cette façon, si le téléchargement est interrompu, rien n'est (partiellement) fait.
  3. Mettez un appel à sudo bash -eudans votre script afin que vous n'ayez pas à dire à l'utilisateur de le faire. ( -eusont l'abréviation de errexit et nounset et vous devriez les utiliser!)
  4. Hérédoc bash de guillemet simple 'EOF'pour empêcher l'expansion prématurée de la coquille.
  5. Rendre inline awkplus lisible.

0

J'ai créé les tâches ansible suivantes pour activer touch id pour les commandes sudo si votre ordinateur le prend en charge:

- 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 != ''
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.