Bisakah Touch ID untuk Mac Touch Bar mengesahkan pengguna sudo dan hak istimewa admin?

53
  • Apakah Touch ID untuk MacBook Pro Touch Bar mendukung peningkatan hak admin di macOS?

  • Agak berbeda, bisakah Touch ID memberi akses sudo di Terminal?

Saya ingin tahu ini karena saya sedang mempertimbangkan untuk mendapatkan YubiKey yang dapat melakukan input string ke bidang kata sandi, tetapi Touch ID untuk Mac mungkin membuatnya tidak perlu.

Bendera musim dingin
sumber
2
lihat ini: github.com/mattrajca/sudo-touchid
pathikrit
@pathikrit - close tapi sepertinya modul PAM akan menjadi solusi yang jauh lebih baik daripada sudo bercabang dua. Saya belum melihat apa pun yang telah ditulis; Saya dapat mencoba tangan saya
Brad Dwyer

Jawaban:

14
  1. TouchID memang mendukung peningkatan hak, tetapi sampai sekarang, sepertinya hanya didukung di aplikasi Apple sendiri. Tebakan saya adalah bahwa aplikasi pihak ketiga harus diperbarui untuk mendukungnya, sayangnya. Saya masih banyak mengetik kata sandi.

  2. Lihat jawaban @ conorgriffin untuk instruksi mengaktifkan TouchID for sudo.

swrobel
sumber
1
Adakah yang benar-benar melakukan ini? Terlihat sangat menakutkan :)
Nic Cottrell
@NicCottrell ya, bekerja dengan baik pada akhir saya
swrobel
77

Untuk memungkinkan TouchID di Mac Anda untuk mengotentikasi Anda untuk sudoakses alih-alih kata sandi, Anda harus melakukan yang berikut.

  • buka Terminal
  • beralih ke pengguna root dengan sudo su -
  • edit /etc/pam.d/sudofile dengan editor baris perintah seperti vimataunano
  • Isi file ini akan terlihat seperti ini

    # 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
    
  • Anda perlu menambahkan authbaris tambahan ke atas sehingga sekarang terlihat seperti ini:

    # 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
    
  • simpan file ( Catatan: file ini biasanya hanya-baca sehingga menyimpan perubahan Anda mungkin mengharuskan Anda untuk memaksa save, misalnya vimakan mengharuskan Anda untuk menggunakannya wq!saat menyimpan)
  • keluar dari pengguna root atau memulai sesi terminal baru
  • coba gunakan sudodan Anda akan diminta untuk mengautentikasi dengan TouchID seperti yang ditunjukkan di bawah ini TouchID prompt
  • jika Anda mengklik 'Batal' Anda hanya dapat memasukkan kata sandi Anda di terminal prompt, jika Anda mengklik 'Gunakan Kata Sandi' Anda dapat memasukkan kata sandi Anda di kotak dialog.
  • jika Anda memasukkan SSH ke mesin Anda, itu akan kembali menggunakan kata sandi Anda karena Anda tidak dapat mengirim sidik jari TouchID Anda melalui SSH

Catatan: Lihat jawaban oleh pengguna Pierz di bawah ini jika Anda menggunakan iTerm karena ada pengaturan yang perlu Anda ubah untuk mengaktifkan fitur ini.

Conorgriffin
sumber
4
Tampaknya bekerja! Apakah ada implikasi keamanan dengan ini?
Znarkus
1
Ini harus menjadi jawaban yang diterima - Jelas apa yang terjadi, bagaimana hal itu dilakukan, dan tidak perlu menginstal perangkat lunak pihak ketiga.
Jeppe Mariager-Lam
Apakah ada cara untuk mengganti semua permintaan kata sandi dengan TouchID? Apakah itu di terminal, atau di System Preferences, atau di Keychain, atau untuk instalasi Paket?
Max Coplan
@ Maxcoplan mungkin layak ditanyakan sebagai pertanyaan terpisah
conorgriffin
1
Ini bekerja hanya setelah saya melakukan apple.stackexchange.com/a/355880/158188 (tapi saya memang melakukan ini dulu)
aubreypwd
29

Jika Anda menggunakan iTerm2 (v3.2.8 +), Anda mungkin telah melihat Touch ID gagal berfungsi dengan sudo di terminal meskipun telah membuat pam_tid.somodifikasi seperti di atas, dan itu berfungsi di versi sebelumnya. Ini karena fitur lanjutan yang tampaknya sekarang diaktifkan secara default - ini perlu dimatikan di sini: iTerm2-> Preferensi> Tingkat Lanjut> (Menuju sesi Sesi)> Izinkan sesi untuk bertahan logout dan kembali lagi .

Atau Anda dapat menggunakan pam_reattachmodul ini untuk mempertahankan fitur sesi dan sudo TouchID secara bersamaan.

Preferensi ITerm

Pierz
sumber
1
Tetapi jika Anda ingin menjaga fitur sesi memulihkan, Anda dapat mencoba repo ini dengan modul pam kustom.
Leo
Saya harus melakukan langkah ini, tetapi bekerja tepat setelah saya memastikan Nodiatur dalam pengaturan. Anda juga dapat mencari "sentuh" ​​dan opsi akan muncul.
aubreypwd
Baru diuji: Saat menggunakan pam_reattach, seseorang tidak perlu mengubah pengaturan atau memulai kembali iTerm - semuanya langsung berfungsi! (Saya belum menguji apakah sesi "benar-benar bertahan" karena saya tidak tahu caranya, tapi saya tidak perlu mengubah pengaturan).
Blaisorblade
Prompt touch ID menyembunyikan jendela hotkey layar penuh. Apakah ada solusinya?
HappyFace
Anda menyelamatkan hidup saya ...
Andrew Ravus
3

Anda dapat menggunakan sidik jari untuk mendapatkan akses sudo di terminal atau iTerm, cukup tambahkan auth sufficient pam_tid.sobaris pertama ke /etc/pam.d/sudofile Anda .

0TshEL_n1ck
sumber
4
Mungkin menarik bagi orang lain untuk mengetahui bahwa versi iTerm saat ini v3.2.8 tidak mengizinkan ini ketika opsi default lain disetel. Anda harus masuk ke Preferensi -> Tingkat lanjut dan nonaktifkan Allow sessions to survive logging out and back in: gitlab.com/gnachman/iterm2/issues/7608#note_153123852
kossmoboleat
3

Saya telah membuat skrip sederhana yang memungkinkan sudo untuk menggunakan modul PAM TouchID persis seperti yang dijelaskan oleh conorgriffin. Itu melakukannya dalam satu skrip yang dapat Anda salin-tempel ke terminal secara keseluruhan atau gunakan pintasan " curlpipa bash":

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

Script lengkap :

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

Script ini menunjukkan beberapa pola keren yang saya sukai untuk mengajar orang-orang yang baru mengenal bash atau DevOps.

  1. Buat file cadangan yang diberi nomor alih-alih hanya .bakdi bagian akhir. (Kelihatannya keriput, tetapi pola itu bekerja dengan apa pun yang ada di dalam $filedan dapat digunakan kembali.
  2. Untuk membuatnya aman untuk dilakukan curl ... | bash, bungkus semuanya dalam suatu fungsi dan panggil di baris terakhir. Dengan cara itu jika unduhan terputus, tidak ada yang dilakukan (sebagian).
  3. Masukkan panggilan ke sudo bash -eudalam skrip Anda sehingga Anda tidak harus memberi tahu pengguna untuk melakukannya. ( -eukependekan dari errexit dan nounset dan Anda harus menggunakannya!)
  4. Bash heredoc kutipan tunggal 'EOF'untuk mencegah ekspansi shell prematur.
  5. Membuat inline awklebih mudah dibaca.
Bruno Bronosky
sumber
0

Saya membuat tugas yang memungkinkan berikut ini untuk mengaktifkan id sentuh untuk perintah sudo jika komputer Anda mendukungnya:

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