O Touch ID para Mac Touch Bar pode autenticar usuários sudo e privilégios de administrador?

53
  • O Touch ID para a barra de toque do MacBook Pro suporta a elevação de privilégios de administrador no macOS?

  • De maneira um pouco diferente, o Touch ID pode dar acesso ao sudo no Terminal?

Gostaria de saber isso, porque estou pensando em obter um YubiKey que pode fazer a entrada de strings nos campos de senha, mas o Touch ID para Macs pode torná-lo desnecessário.

Winterflags
fonte
2
verifique isso: github.com/mattrajca/sudo-touchid
pathikrit
@pathikrit - close, mas parece que um módulo PAM seria uma solução muito melhor do que um sudo bifurcado. Ainda não vi nada que tenha sido escrito; I podem tentar a minha mão a ele
Brad Dwyer

Respostas:

14
  1. O TouchID suporta a elevação de privilégios, mas, a partir de agora, apenas parece ser suportado nos aplicativos da Apple. Meu palpite é que aplicativos de terceiros precisarão ser atualizados para suportá-lo, infelizmente. Eu ainda acabo digitando muito minha senha.

  2. Consulte a resposta de @ conorgriffin para obter instruções sobre como ativar o TouchID para sudo.

swrobel
fonte
11
Alguém realmente fez isso? Parece bastante assustador :) #
44650 Nic Cottrell
@NicCottrell sim, funcionando bem no meu fim
swrobel
77

Para permitir que o TouchID no seu Mac o autentique para sudoacesso em vez de uma senha, faça o seguinte.

  • Terminal aberto
  • alterne para o usuário root com sudo su -
  • edite o /etc/pam.d/sudoarquivo com um editor de linha de comando como vimounano
  • O conteúdo deste arquivo deve ficar assim

    # 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
    
  • você precisa adicionar uma authlinha adicional ao topo, para que fique assim:

    # 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
    
  • salve o arquivo ( Nota: este arquivo normalmente é somente leitura, portanto, salvar suas alterações pode exigir que você force o salvamento, por exemplo vim, exigirá que você use wq!ao salvar)
  • sair do usuário root ou iniciar uma nova sessão de terminal
  • tente usar sudoe você será solicitado a se autenticar com o TouchID, como mostrado abaixo Prompt TouchID
  • se você clicar em 'Cancelar', basta digitar sua senha no prompt do terminal; se você clicar em 'Usar senha', poderá digitar sua senha na caixa de diálogo.
  • se você fizer o SSH em sua máquina, ele voltará a usar sua senha, pois você não pode enviar suas impressões digitais do TouchID por SSH

Nota: Veja a resposta do usuário Pierz abaixo se você estiver usando o iTerm, pois há uma configuração que você precisa alterar para ativar esse recurso.

Conorgriffin
fonte
4
Parece funcionar! Existem implicações de segurança nisso?
Znarkus
11
Essa deve ser a resposta aceita - fica claro o que acontece, como é feito e não é necessário instalar software de terceiros.
Jeppe Mariager-Lam
Existe uma maneira de substituir todas as solicitações de senha pelo TouchID? Seja no terminal, nas Preferências do sistema, no Keychain ou nas instalações de pacotes?
Max Coplan
@MaxCoplan provavelmente vale a pena perguntar como uma questão separada
conorgriffin
11
Isso funcionou somente depois que fiz apple.stackexchange.com/a/355880/158188 (mas fiz isso primeiro)
aubreypwd 18/06
29

Se você estiver usando o iTerm2 (v3.2.8 +), poderá ter visto o Touch ID falhar ao trabalhar com o sudo no terminal, apesar de ter feito a pam_tid.somodificação como acima e estar funcionando nas versões anteriores. Isso se resume a um recurso avançado que agora parece estar ativado por padrão - isso precisa ser desativado aqui: iTerm2-> Preferências> Avançado> (Vá para o cabeçalho da sessão)> Permitir que as sessões sobrevivam ao sair e entrar novamente .

Como alternativa, você pode usar este pam_reattachmódulo para manter o recurso de sessão e o TouchID sudo ao mesmo tempo.

preferências do iTerm

Pierz
fonte
11
Mas se você quiser manter as sessões restaurando o recurso, tente este repositório com um módulo pam personalizado.
Leo
Eu tive que fazer essa etapa, mas trabalhei logo após garantir que a Noconfiguração estivesse definida. Você também pode procurar por "toque" e a opção será exibida.
aubreypwd 18/06
Acabado de testar: ao usar pam_reattach, não é necessário alterar a configuração ou reiniciar o iTerm - tudo funciona imediatamente! (Não testei se as sessões "realmente sobrevivem", pois não tenho idéia de como, mas não precisava alterar a configuração).
Blaisorblade
O prompt de identificação por toque oculta a janela de teclas de atalho em tela cheia. Existe uma solução alternativa?
HappyFace
Você salvou minha vida ...
Andrew Ravus
3

Você pode usar a impressão digital para obter acesso ao sudo no terminal ou no iTerm, basta adicionar auth sufficient pam_tid.soà primeira linha do seu /etc/pam.d/sudoarquivo.

0TshEL_n1ck
fonte
4
Pode ser interessante para outros saberem que a versão atual do iTerm v3.2.8 não permite isso quando outra opção padrão está definida. Você deve acessar Preferências -> Avançado e desativar Allow sessions to survive logging out and back in: gitlab.com/gnachman/iterm2/issues/7608#note_153123852
kossmoboleat
3

Eu criei um script simples que permite ao sudo usar o módulo TouchID PAM exatamente como o conorgriffin explica. Ele faz isso em um único script que você pode copiar e colar em um terminal em sua totalidade ou usar o atalho " curlpipe bash":

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

O 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

Esse script demonstra alguns padrões interessantes que eu adoro ensinar às pessoas que são novas no bash ou no DevOps.

  1. Crie um arquivo de backup numerado, e não simplesmente .bakno final. (Parece genial, mas esse padrão funciona com o que está dentro $filee é reutilizável.
  2. Para torná-lo seguro curl ... | bash, envolva tudo em uma função e chame-a na última linha. Dessa forma, se o download for interrompido, nada será (parcialmente) feito.
  3. Coloque uma chamada sudo bash -euno seu script para que você não precise dizer ao usuário para fazê-lo. ( -eusão abreviações de errexit e nounset e você deve usá-las!)
  4. Citação única do heredoc do bash 'EOF'para impedir a expansão prematura do shell.
  5. Tornando o inline awkmais legível.
Bruno Bronosky
fonte
0

Criei as seguintes tarefas ansible para ativar o touch id para comandos sudo, se o seu computador suportar:

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