Mac Dokunma Çubuğu için Dokunma Kimliği, sudo kullanıcılarının ve yönetici ayrıcalıklarının kimliğini doğrulayabilir mi?


53
  • MacBook Pro Dokunmatik Çubuk için Dokunma Kimliği, macOS'ta yükselen yönetici ayrıcalıklarını destekliyor mu?

  • Biraz farklı bir şekilde, Touch ID Terminal'de sudo erişimi sağlayabilir mi?

Bunu merak ediyorum, çünkü şifre alanlarına string girişi yapabilen bir YubiKey almayı düşünüyorum , fakat Mac'ler için Touch ID gereksiz hale getirebilir.



@pathikrit - close ancak bir PAM modülünün çatallı bir sudodan çok daha iyi bir çözüm olacağına benziyor. Henüz yazılmış hiçbir şey görmedim; Elimi deneyebilirim
Brad Dwyer

Yanıtlar:


14
  1. TouchID, yükselen ayrıcalıkları destekliyor, ancak şu andan itibaren, yalnızca Apple'ın kendi uygulamalarında destekleniyor gibi görünüyor. Tahminim, 3. parti uygulamaların ne yazık ki desteklemesi için güncellenmesi gerekeceği yönünde. Yine de şifremi çok yazmaya başladım.

  2. Sudo için TouchID özelliğini etkinleştirmek için talimatlar için @ conorgriffin yanıtına bakın .


1
Bunu gerçekten yapan var mı? Oldukça korkutucu görünüyor :)
Nic Cottrell

@NicCottrell evet, benim
tarafımdan

77

Mac'inizdeki TouchID'in sudobir şifre yerine erişim için sizi doğrulamasını sağlamak için aşağıdakileri yapmanız gerekir.

  • Terminali aç
  • ile kök kullanıcıya geç sudo su -
  • /etc/pam.d/sudodosyayı, vimveya gibi bir komut satırı düzenleyicisiyle düzenlemenano
  • Bu dosyanın içeriği şöyle görünmelidir

    # 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
    
  • Tepeye ek bir authsatır eklemeniz gerekir, böylece şimdi şöyle görünür:

    # 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
    
  • dosyayı kaydedin ( Not: bu dosya normalde salt okunurdur, bu nedenle değişikliklerinizi kaydetmeniz, kaydetmeyi zorlamanız gerekebilir, örneğin kaydederken vimkullanmanız gerekir wq!)
  • kök kullanıcıdan çık ya da yeni bir terminal oturumu başlat
  • kullanmaya çalışın sudove aşağıda gösterildiği gibi TouchID ile kimlik doğrulamanız istenir TouchID istemi
  • 'İptal'i tıklarsanız, terminal isteminde şifrenizi girebilirsiniz,' Şifreyi Kullan'ı tıklarsanız, iletişim kutusuna şifrenizi girebilirsiniz.
  • Eğer makinenize SSH yazarsanız, TouchID parmak izlerinizi SSH üzerinden gönderemediğiniz için şifrenizi kullanmak sadece geri düşecektir.

Not: Bkz aşağıdaki Kullanıcı Pierz tarafından cevap Bu özelliği etkinleştirmek için değiştirmeniz gereken bir ayar var gibi ITERM kullanıyorsanız.


4
İşe benziyor! Bununla ilgili herhangi bir güvenlik çıkarımı var mı?
Znarkus

1
Bu kabul edilen cevap olmalıdır - Ne olduğu, nasıl yapıldığı ve üçüncü taraf yazılımı yüklemeye gerek olmadığı açıktır.
Jeppe Mariager-Lam,

Tüm parola istemlerini TouchID ile değiştirmenin bir yolu var mı? Terminalde mi yoksa Sistem Tercihleri'nde mi yoksa Anahtarlık'te mi yoksa Paket kurulumlarında mı?
Max Coplan

@MaxCoplan muhtemelen ayrı bir soru olarak sormaya değer
conorgriffin

1
Bu sadece apple.stackexchange.com/a/355880/158188 yaptıktan sonra çalıştı (ama önce bunu yaptım)
aubreypwd

29

İTerm2 (v3.2.8 +) kullanıyorsanız pam_tid.so, yukarıdaki gibi bir değişiklik yapmasına rağmen önceki sürümlerde çalışmasına rağmen, Touch ID'nin terminalde sudo ile çalışamadığını görmüş olabilirsiniz . Bu, şu anda varsayılan olarak etkinleştirilmiş gibi görünen gelişmiş bir özelliğe bağlıdır - burada kapatılması gerekir: iTerm2-> Tercihler> Gelişmiş> (Oturum başlığına gidin)> Oturumların oturumu kapatıp tekrar hayatta kalmasına izin verin .

Alternatif olarak, bu pam_reattachözelliği oturum özelliğini ve TouchID sudo'yu aynı anda korumak için kullanabilirsiniz .

iTerm tercihleri


1
Ancak, oturumları geri yükleme özelliğini korumak istiyorsanız, bu repoyu özel bir pam modülüyle deneyebilirsiniz .
Leo,

Bu adımı atmak zorunda kaldım, ancak Noortamın kurulmasından emin olduktan hemen sonra çalıştım . Ayrıca "dokunma" için arama yapabilirsiniz ve seçenek açılacaktır.
aubreypwd

Yeni test edildi: Kullanırken pam_reattachayarın değiştirilmesi veya iTerm'in yeniden başlatılması gerekmiyor - her şey hemen çalışıyor! (Seanslar "gerçekten hayatta kaldıysa" denemedim, çünkü nasıl yapılacağına dair hiçbir fikrim yok, ama ayar değişikliği yapmam gerekmedi).
Blaisorblade

Dokunma kimliği istemi, tam ekranlı kısayol tuşu penceresini gizler. Bir geçici çözüm var mı?
HappyFace

Hayatımı kurtardın ...
Andrew Ravus

3

Terminalde veya iTerm'de sudo erişimi sağlamak için parmak izinizi kullanabilirsiniz auth sufficient pam_tid.so, /etc/pam.d/sudodosyanızı ilk satıra ekleyin .


4
Başka bir varsayılan seçenek belirlendiğinde mevcut iTerm sürüm v3.2.8'in buna izin vermediğini bilmek ilginç olabilir. Tercihler -> Gelişmiş ve devre dışı bırakmak zorundasınızAllow sessions to survive logging out and back in : gitlab.com/gnachman/iterm2/issues/7608#note_153123852
kossmoboleat

3

Sudo TouchID PAM modülünü tam anlamıyla conorgriffin'in açıkladığı şekilde kullanmasını sağlayan basit bir betik oluşturdum. Tek bir komut dosyasında bütünüyle bir terminale kopyalayıp yapıştırabilir veya " curlpipe bash" kısayolunu kullanabilirsiniz:

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

Komut dizisinin tamamı :

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

Bu senaryo, bash ya da DevOps için yeni olan insanlara öğretmeyi sevdiğim birkaç harika modeli gösteriyor.

  1. .bakSonunda değil, numaralı bir yedekleme dosyası oluşturun . (Gnarly görünüyor, ama bu desen içinde olan $fileve yeniden kullanılabilir olanlarla çalışır.
  2. Bunu güvenli hale getirmek için curl ... | bash, her şeyi bir fonksiyona sarın ve son satırda arayın. Bu şekilde indirme işlemi durdurulursa hiçbir şey (kısmen) yapılmaz.
  3. sudo bash -euKomut dosyanızda bir çağrı yapın , böylece kullanıcıya yapmasını istemediğiniz için. ( -euKısaltması olan errexit ve nounset ve bunları kullanarak olmalı!)
  4. Tek tırnaklı bash heredoc 'EOF'erken kabuk genişlemesini önlemek için.
  5. Satır içi awkdaha okunabilir yapma .

0

Bilgisayarınız destekliyorsa, sudo komutları için dokunma kimliğini etkinleştirmek üzere aşağıdaki yanıtlanabilir görevleri oluşturdum:

- 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 != ''
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.