Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
Хочется двухфакторную аутентификацию, но внутренний параноик запрещает пользоваться сторонними сервисами аутентификации.

Хочу рассмотреть концепт и выслушать замечания от уважаемых людей.

Итак, идея проста.

  1. Прописываем shell-скрипт пользователю в качестве shell. Или группе в ForceCommand в sshd_config.
  2. После первого уровня (пароль или ключ) запускается скрипт.
  3. Скрипт выводит на экран код и отправляет на почту/телегу админу сообщение о попытке аутентификации (ведь первый уровень аутентификации пройден) пользователя с UID (чтобы не светить логины на сторонних ресурсах).
  4. Сам скрипт никаких дополнительных действий от пользователя не требует и завершается через некоторое время (3–15 минут), если от пользователя нет кода.
  5. Пользователь отправляет код по почте и/или боту в телегу. Причём пользователь заранее должен знать, по какому адресу отправлять код.
  6. Скрипт, периодически проверяя почту/телегу, при получении нужного кода передаёт управление Bash. УРА, Я В ДОМИКЕ.
  7. Если код не пришёл, в лог записывается инфа, timestamp, username. Если кто-то попытается досить — другой скрипт (нужны права) может банить.
  8. В качестве дополнительной ограничительной меры в /etc/passwd в поле 5 GECOS можно прописать мыло или номер tg-чата, с которого ожидается код.
  9. Скрипт завершается при любой ошибке.

Ну и, конечно, пользователь отправляет код с телефона, а не с того компа, с которого подключается по SSH.