Чи може Touch Touch для Mac Touch Bar автентифікувати користувачі sudo та привілеї адміністратора?


53
  • Чи підтримує Touch ID для сенсорної панелі MacBook Pro підвищення привілеїв адміністратора в macOS?

  • Чи може дещо інакше Touch ID надати sudo доступ у Терміналі?

Мені це цікаво, тому що я розглядаю можливість отримати YubiKey, який може робити рядок введення в поля паролів, але Touch ID для Macs може зробити його непотрібним.


2
перевірити це: github.com/mattrajca/sudo-touchid
pathikrit

@pathikrit - близько, але схоже, що модуль PAM був би набагато кращим рішенням, ніж роздвоєне судо. Я ще не бачив жодного написаного; Я можу спробувати свої сили
Бред Дуайер

Відповіді:


14
  1. TouchID дійсно підтримує привілеї для підвищення, але, як видається, він підтримується лише у власних додатках Apple. Я здогадуюсь, що додатки сторонніх розробників доведеться оновити, щоб підтримувати їх, на жаль. Я все ще сильно вводя свій пароль.

  2. Дивіться відповідь @ conorgriffin для вказівок, щоб включити TouchID для sudo.


1
Хтось насправді це робив? Виглядає досить страшно :)
Нік Коттрелл

@NicCottrell так, добре працюю на моєму кінці
swrobel

77

Щоб дозволити TouchID на вашому Mac аутентифікувати вас для sudoдоступу замість пароля, вам потрібно зробити наступне.

  • відкритий термінал
  • перейти на кореневого користувача за допомогою 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!під час збереження)
  • вийти з кореневого користувача або розпочати новий термінальний сеанс
  • спробуйте використовувати, sudoі вам буде запропоновано пройти автентифікацію з TouchID, як показано нижче Підказка TouchID
  • Якщо ви натиснете "Скасувати", ви можете просто ввести свій пароль у вікні терміналу, якщо ви натиснете "Використовувати пароль", ви можете ввести свій пароль у діалоговому вікні.
  • якщо ви запустили SSH у свою машину, він просто використає ваш пароль, оскільки ви не можете надсилати свої відбитки TouchID через SSH

Примітка. Дивіться відповідь користувача Pierz нижче, якщо ви використовуєте iTerm, оскільки є налаштування, яке потрібно змінити, щоб увімкнути цю функцію.


4
Здається, працює! Чи є якісь наслідки для цього щодо безпеки?
Знаркус

1
Це має бути прийнятою відповіддю. Зрозуміло, що відбувається, як це робиться, і немає необхідності встановлювати сторонне програмне забезпечення.
Jeppe Mariager-Lam

Чи є спосіб замінити всі підказки пароля на TouchID? Чи це в терміналі, або в системних налаштуваннях, або в брелоку, або для пакетних установок?
Макс Коплан

@MaxCoplan, напевно, варто задати як окреме запитання
conorgriffin

1
Це спрацювало лише після того, як я зробив apple.stackexchange.com/a/355880/158188 (але я це зробив першим)
aubreypwd

29

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

Крім того, ви можете використовувати цей pam_reattachмодуль, щоб одночасно зберегти функцію сеансу та TouchID sudo.

Налаштування iTerm


1
Але якщо ви хочете зберегти функцію відновлення сеансів, ви можете спробувати це репо за допомогою спеціального модуля пам’яті.
Лев

Я повинен був зробити цей крок, але працював одразу після того, як я переконався, що Noвстановлений в налаштуваннях. Ви також можете шукати "touch", і опція з'явиться.
aubreypwd

Щойно перевірена: При використанні pam_reattachне потрібно ні змінювати налаштування, ні перезавантажувати iTerm - все працює відразу! (Я не перевіряв, чи сеанси "насправді виживають", оскільки я не маю поняття як, але мені не потрібно було змінювати налаштування).
Blaisorblade

Підказка про ідентифікатор дотику приховує повноекранне вікно швидкої клавіші. Чи існує рішення?
HappyFace

Ти врятував мені життя ...
Андрій Равус

3

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


4
Іншим може бути цікаво знати, що поточна версія iTerm v3.2.8 не дозволяє цього, коли встановлено інший параметр за замовчуванням. Вам потрібно зайти в Налаштування -> Розширені та відключити Allow sessions to survive logging out and back in: gitlab.com/gnachman/iterm2/isissue/7608#note_153123852
kossmoboleat

3

Я створив простий скрипт, який дозволяє sudo використовувати модуль TouchID PAM саме так, як пояснює conorgriffin. Це робиться в одному сценарії, що ви можете скопіювати і вставити в термінал повністю, або скористатися ярликом " curlтруба 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

Цей сценарій демонструє кілька класних моделей, які я люблю навчати людей, які не знайомі з басом або DevOps.

  1. Створіть файл резервного копіювання, який пронумеровано, а не просто .bakна кінці. (Це виглядає привабливо, але ця модель працює з тим, що є, $fileі є багаторазовим.
  2. Щоб зробити це безпечно curl ... | bash, оберніть все у функції та зателефонуйте до останнього рядка. Таким чином, якщо завантаження буде перервано, нічого (частково) не буде зроблено.
  3. Покладіть дзвінок sudo bash -euу свій сценарій, щоб у вас не було сказати користувачеві робити це. ( -euкороткі для errexit і іменника, і ви повинні їх використовувати!)
  4. Одноразове цитування bash heredoc 'EOF'для запобігання передчасного розширення оболонки.
  5. Зробити вбудований текст awkбільш зрозумілим.

0

Я створив такі відповідні завдання, щоб увімкнути сенсорний ідентифікатор для команд 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 != ''
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.