Может ли Touch ID для Mac Touch Bar аутентифицировать пользователей sudo и права администратора?

53
  • Поддерживает ли Touch ID для MacBook Pro Touch Bar повышение прав администратора в macOS?

  • Несколько иначе, Touch ID может дать доступ sudo в Терминале?

Мне это интересно, потому что я подумываю получить YubiKey, который может вводить строки в поля пароля, но Touch ID для Mac может сделать это ненужным.

Winterflags
источник
2
проверить это: github.com/mattrajca/sudo-touchid
pathikrit
@pathikrit - близко, но похоже, что модуль PAM будет гораздо лучшим решением, чем раздвоенный sudo. Я еще не видел ни одного написанного; Я могу попробовать свои силы в этом
Брэд Дуайер

Ответы:

14
  1. TouchID поддерживает повышение привилегий, но на данный момент он поддерживается только в собственных приложениях Apple. Я предполагаю, что сторонние приложения должны быть обновлены, чтобы поддержать это, к сожалению. Я до сих пор часто набираю свой пароль.

  2. См . Ответ @ conorgriffin для получения инструкций по включению TouchID для sudo.

swrobel
источник
1
Кто-нибудь на самом деле сделал это? Выглядит довольно страшно :)
Ник Коттрелл
@NicCottrell да, отлично работает на моем конце
swrobel
78

Чтобы TouchID на вашем Mac мог аутентифицировать вас для sudoдоступа вместо пароля, вам нужно сделать следующее.

  • открыть терминал
  • переключиться на пользователя root с помощью sudo su -
  • отредактируйте /etc/pam.d/sudoфайл с помощью редактора командной строки, например vimилиnano
  • Содержимое этого файла должно выглядеть так

    # 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
    
  • вам нужно добавить дополнительную authстроку в начало, чтобы она выглядела следующим образом:

    # 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
    
  • сохранить файл ( Примечание: этот файл обычно доступен только для чтения, поэтому для сохранения ваших изменений может потребоваться принудительное сохранение, например vim, вам потребуется использовать его wq!при сохранении)
  • выйти из пользователя root или начать новый сеанс терминала
  • попробуйте использовать, sudoи вам будет предложено пройти аутентификацию с TouchID, как показано ниже TouchID подсказка
  • Если вы нажмете «Отмена», вы можете просто ввести свой пароль в окне терминала, если вы нажмете «Использовать пароль», вы можете ввести свой пароль в диалоговом окне.
  • если вы подключите SSH к своей машине, он просто использует ваш пароль, поскольку вы не можете отправлять отпечатки пальцев TouchID через SSH

Примечание. См. Ответ пользователя Pierz ниже, если вы используете iTerm, поскольку для настройки этой функции необходимо изменить настройку.

conorgriffin
источник
4
Кажется, работает! Есть ли какие-либо последствия для безопасности с этим?
Знаркус
1
Это должен быть принятый ответ - понятно, что происходит, как это делается, и нет необходимости устанавливать стороннее программное обеспечение.
Jeppe Mariager-Lam
Есть ли способ заменить все запросы пароля на TouchID? Будь то в терминале, или в системных настройках, или в связке ключей, или для установки пакетов?
Макс Коплан,
@MaxCoplan, вероятно, стоит задать в качестве отдельного вопроса
conorgriffin
1
Это сработало только после того, как я сделал apple.stackexchange.com/a/355880/158188 (но я сделал это первым)
aubreypwd
30

Если вы используете iTerm2 (v3.2.8 +), возможно, вы столкнулись с тем, что Touch ID не работает с sudo в терминале, несмотря на pam_tid.soвнесение изменений, как указано выше, и это работало в предыдущих версиях. Это до расширенной функции, которая, по-видимому, теперь включена по умолчанию - ее необходимо отключить здесь: iTerm2-> Предпочтения> Дополнительно> (Перейти к заголовку сеанса)> Разрешить сеансам выход из системы при выходе из системы и обратно .

В качестве альтернативы вы можете использовать этот pam_reattachмодуль для сохранения функции сеанса и TouchID sudo одновременно.

iTerm предпочтения

Пирз
источник
2
Но если вы хотите сохранить функцию восстановления сеансов, вы можете попробовать сделать это с помощью специального модуля pam.
Лев
Я должен был сделать этот шаг, но сработал сразу после того, как я убедился, Noбыл установлен в настройках. Вы также можете выполнить поиск «прикосновение», и опция включится.
aubreypwd
Только что протестировано: при использовании pam_reattachне нужно менять настройку или перезапускать iTerm - все работает сразу же! (Я не проверял, действительно ли сеансы «выживают», поскольку понятия не имею, как, но мне не нужно было менять настройку).
Blaisorblade
Подсказка Touch ID скрывает полноэкранное окно горячих клавиш. Есть ли обходной путь?
HappyFace
Ты спас мне жизнь ...
Эндрю Равус
3

Вы можете использовать отпечаток пальца для получения доступа к sudo в терминале или iTerm, просто добавьте auth sufficient pam_tid.soв первую строку своего /etc/pam.d/sudoфайла.

0TshEL_n1ck
источник
4
Другим может быть интересно знать, что текущая версия iTerm v3.2.8 не позволяет этого, если установлена ​​другая опция по умолчанию. Вы должны войти в Настройки -> Дополнительно и деактивировать Allow sessions to survive logging out and back in: gitlab.com/gnachman/iterm2/issues/7608#note_153123852
kossmoboleat
3

Я создал простой скрипт, который позволяет sudo использовать модуль TouchID PAM в точности так, как объясняет conorgriffin. Он делает это одним скриптом, который вы можете скопировать и вставить в терминал полностью или использовать ярлык " curlpipe bash":

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

Полный скрипт :

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

Этот скрипт демонстрирует несколько интересных шаблонов, которые я люблю учить людей, которые плохо знакомы с bash или DevOps.

  1. Создайте файл резервной копии с нумерацией, а не просто .bakв конце. (Это выглядит грубовато, но этот шаблон работает с тем, что есть, $fileи его можно использовать повторно.
  2. Чтобы сделать это безопасным curl ... | bash, оберните все в функцию и вызовите ее в последней строке. Таким образом, если загрузка прерывается, ничего (частично) не делается.
  3. Поместите вызов sudo bash -euв ваш скрипт, чтобы у вас не было указания пользователю сделать это. ( -euсокращенно от errexit и nounset, и вы должны их использовать!)
  4. Одиночные кавычки bash heredoc 'EOF'для предотвращения преждевременного расширения оболочки.
  5. Делая inline awkболее читабельным.
Бруно Броноски
источник
0

Я создал следующие доступные задачи, чтобы включить touch id для команд sudo, если ваш компьютер поддерживает это:

- 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 != ''
Энди
источник