Чи може 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.