¿Puede Touch ID para Mac Touch Bar autenticar usuarios de sudo y privilegios de administrador?

53
  • ¿Touch ID para MacBook Pro Touch Bar admite elevar los privilegios de administrador en macOS?

  • De manera algo diferente, ¿puede el Touch ID dar acceso a sudo en la Terminal?

Me pregunto esto porque estoy considerando obtener un YubiKey que pueda ingresar cadenas a los campos de contraseña, pero Touch ID para Mac puede hacer que sea innecesario.

Banderas de invierno
fuente
2
mira
pathikrit
@pathikrit: cierra, pero parece que un módulo PAM sería una solución mucho mejor que un sudo bifurcado. No he visto ninguno que se haya escrito todavía; Puedo intentarlo
Brad Dwyer

Respuestas:

14
  1. TouchID admite privilegios elevados, pero a partir de ahora, solo parece ser compatible con las propias aplicaciones de Apple. Supongo que, desafortunadamente, las aplicaciones de terceros deberán actualizarse para admitirlo. Todavía termino escribiendo mi contraseña mucho.

  2. Consulte la respuesta de @ conorgriffin para obtener instrucciones para habilitar TouchID para sudo.

swrobel
fuente
1
¿Alguien ha hecho esto realmente? Parece bastante aterrador :)
Nic Cottrell
@NicCottrell sí, trabajando bien por mi parte
swrobel
78

Para permitir que TouchID en su Mac lo autentique para sudoacceder en lugar de una contraseña, debe hacer lo siguiente.

  • Terminal abierta
  • cambiar al usuario root con sudo su -
  • edite el /etc/pam.d/sudoarchivo con un editor de línea de comandos como vimonano
  • El contenido de este archivo debería verse así

    # 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
    
  • necesita agregar una authlínea adicional en la parte superior para que ahora se vea así:

    # 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
    
  • guardar el archivo ( Nota: este archivo normalmente es de solo lectura, por lo que guardar sus cambios puede requerir que fuerce el guardado, por ejemplo vim, requerirá que lo use wq!al guardar)
  • salir del usuario root o iniciar una nueva sesión de terminal
  • intente usar sudoy se le pedirá que se autentique con TouchID como se muestra a continuación Indicador de TouchID
  • si hace clic en 'Cancelar', puede ingresar su contraseña en el indicador del terminal, si hace clic en 'Usar contraseña', puede ingresar su contraseña en el cuadro de diálogo.
  • si ingresa SSH en su máquina, volverá a utilizar su contraseña, ya que no puede enviar sus huellas digitales TouchID a través de SSH

Nota: Vea la respuesta del usuario Pierz a continuación si está usando iTerm, ya que hay una configuración que debe cambiar para habilitar esta función.

conorgriffin
fuente
44
¡Parece funcionar! ¿Hay alguna implicación de seguridad con esto?
Znarkus
1
Esta debería ser la respuesta aceptada: está claro lo que sucede, cómo se hace y no es necesario instalar software de terceros.
Jeppe Mariager-Lam
¿Hay alguna forma de reemplazar todas las solicitudes de contraseña con TouchID? ¿Ya sea en terminal, en Preferencias del sistema, en Llavero o en instalaciones de Paquetes?
Max Coplan
@MaxCoplan probablemente vale la pena preguntar como una cuestión separada
conorgriffin
1
Esto funcionó solo después de que hice apple.stackexchange.com/a/355880/158188 (pero hice esto primero)
aubreypwd
30

Si está usando iTerm2 (v3.2.8 +), es posible que haya visto que Touch ID no funciona con sudo en el terminal a pesar de haber realizado la pam_tid.somodificación como se indica arriba, y funciona en versiones anteriores. Esto se debe a una función avanzada que parece estar ahora habilitada de forma predeterminada; esto debe desactivarse aquí: iTerm2-> Preferencias> Avanzado> (Ir al encabezado de la sesión)> Permitir que las sesiones sobrevivan al cerrar sesión y volver a iniciarla .

Alternativamente, puede usar este pam_reattachmódulo para retener la función de sesión y el sudo TouchID al mismo tiempo.

Preferencias de iTerm

Pierz
fuente
2
Pero si desea mantener la función de restauración de sesiones, puede probar este repositorio con un módulo de pam personalizado.
Leo
Tuve que hacer este paso, pero funcionó justo después de asegurarme de que Noestaba configurado en el entorno. También puede buscar "tocar" y aparecerá la opción.
aubreypwd
Recién probado: cuando se usa pam_reattach, no es necesario cambiar la configuración o reiniciar iTerm, ¡todo funciona de inmediato! (No he probado si las sesiones "realmente sobreviven" ya que no tengo idea de cómo, pero no necesitaba cambiar la configuración).
Blaisorblade
La solicitud de ID táctil oculta la ventana de teclas de acceso rápido con pantalla completa. ¿Hay alguna solución?
HappyFace
Me salvaste la vida ...
Andrew Ravus
3

Puede usar la huella digital para obtener acceso a sudo en el terminal o iTerm, simplemente agregue auth sufficient pam_tid.soa la primera línea de su /etc/pam.d/sudoarchivo.

0TshEL_n1ck
fuente
44
Puede ser interesante para otros saber que la versión actual de iTerm v3.2.8 no permite esto cuando se establece otra opción predeterminada. Tienes que ir a Preferencias -> Avanzado y desactivar Allow sessions to survive logging out and back in: gitlab.com/gnachman/iterm2/issues/7608#note_153123852
kossmoboleat
3

He creado un script simple que permite a sudo usar el módulo TouchID PAM exactamente como explica conorgriffin. Lo hace en un solo script que puede copiar y pegar en un terminal en su totalidad o usar el acceso directo " curlpipe bash":

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

El guión 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

Este script muestra algunos patrones geniales que me encanta enseñar a las personas que son nuevas en bash o DevOps.

  1. Cree un archivo de copia de seguridad numerado en lugar de simplemente .bakal final. (Parece retorcido, pero ese patrón funciona con lo que sea que esté dentro $filey sea reutilizable.
  2. Para que sea seguro hacerlo curl ... | bash, envuelva todo en una función y llámelo a la última línea. De esa manera, si la descarga se interrumpe, no se hace nada (parcialmente).
  3. Realice una llamada a sudo bash -eusu script para que no tenga que decirle al usuario que lo haga. ( -euson la abreviatura de errexit y nounset y deberías estar usándolos)
  4. Cita simple bash heredoc 'EOF'para evitar la expansión prematura del shell.
  5. Hacer en línea awkmás legible.
Bruno Bronosky
fuente
0

Creé las siguientes tareas ansibles para habilitar la identificación táctil para los comandos sudo si su computadora lo admite:

- 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
fuente