
Одобряйте sudo на рабочей станции Linux с помощью отпечатка пальца на вашем Android-телефоне. Только локальная сеть; ключ ECDSA никогда не покидает TEE телефона и взаимодействует по протоколу ssh-agent с pam_rssh.
Подтверждайте sudo на своей Linux-машине, касаясь датчика отпечатков пальцев на Android-телефоне.
Введите sudo, телефон завибрирует, вы касаетесь датчика, команда выполняется. Пароль не вводится,
ничего не уходит в облако: телефон отвечает по вашей локальной сети, а отпечаток пальца проверяется
защищённым оборудованием телефона (TEE / StrongBox), а не кодом приложения. Если что-то пойдёт не так
(телефон выключен, вне зоны действия, вы нажали «Отклонить», прошло 60 секунд), sudo просто вернётся к
обычному запросу пароля. Это может сделать sudo удобнее; заблокировать вас оно не может.
![]() 1. sudo на хосте На телефоне всплывает, кто спрашивает. Отклонить можно прямо здесь. |
![]() 2. Нажмите Обратный отсчёт, хост и время, предупреждение для никогда не виденных хостов. Затем системный запрос отпечатка пальца. |
![]() 3. Коснитесь датчика TEE подписывает, sudo продолжает работу, приложение закрывается само. |
![]() Первый запуск Три шага и одна кнопка. Предлагает настроить отпечаток пальца, если на телефоне его нет. |
![]() Настройка Живой чек-лист: слушатель, уведомления, батарея, режим «Не беспокоить». «Готово» только когда всё пройдено. |
![]() Отклонено или истекло время Никакая подпись не покидает телефон; хост запрашивает пароль. |
Скриншоты с эмулятора Pixel 7 (отсюда 10.0.2.2 — хост эмулятора). Системное окно
отпечатка пальца, появляющееся на шаге 2, является защищённым окном и не отображается на
скриншотах.
sudo on the host
-> PAM: pam_rssh (third-party) dials the phone over the LAN, as an ssh-agent
-> phone: "Approve sudo? From 192.168.1.10" (notification)
-> tap -> BiometricPrompt -> fingerprint
-> the phone's TEE signs pam_rssh's fresh 32-byte challenge
-> pam_rssh verifies against the pinned public key -> sudo proceeds
pam_rssh —
существующим поддерживаемым модулем. Ничто из написанного здесь не выполняется от имени root на хосте
в момент аутентификации.setUserAuthenticationParameters(0, AUTH_BIOMETRIC_STRONG): свежая строгая биометрия для
каждой подписи, проверяемая внутри TEE (или StrongBox). Вредоносное ПО на телефоне тоже не сможет подписать
без вашего пальца, а ключ невозможно экспортировать.В SECURITY.md описана полная модель угроз, включая то, от чего она не защищает. В docs/DESIGN.md описаны дизайн и обоснование, лежащее в его основе.
Телефон: Android 11+ (API 30, где стали выразимы ключи с биометрией на каждое использование) с датчиком отпечатков пальцев класса 3 («строгий»).
Хост: любая из платформ ниже. Установщик приносит с собой
pam_rssh: пакет, если он существует, иначе
собранный из закреплённого, проверенного коммита.
| Платформа | Статус |
|---|---|
| Arch, Manjaro, EndeavourOS | ✅ протестировано от начала до конца в CI |
| Debian 12 / 13, Ubuntu 24.04, Mint, Pop!_OS | ✅ протестировано от начала до конца в CI |
| Fedora, RHEL / Rocky / Alma 9 | ✅ протестировано от начала до конца в CI |
| openSUSE Tumbleweed | ✅ протестировано от начала до конца в CI |
| Windows, через WSL (любой дистрибутив выше) | 🧪 должно работать, не тестировалось; обнаружение может не видеть телефон через NAT WSL2, поэтому передайте --phone |
macOS 14+ (через /etc/pam.d/sudo_local) | 🧪 экспериментально, не тестировалось |
FreeBSD (порт security/pam_rssh) | 🧪 экспериментально, не тестировалось |