This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
безопасное_подключение_с_чужого_компьютера [2023/01/29 20:03] val |
безопасное_подключение_с_чужого_компьютера [2023/01/30 08:58] val |
||
---|---|---|---|
Line 9: | Line 9: | ||
Итак, задача: Нужно подключиться SSH клиентом к "работе" с чужого компьютера и не хочется вводить пароль, "мало ли что":) На следующей итерации можно так же подключиться по RDP или VNC добавив в настройки соединения SSH туннель, правда, пароль этих сервисов придется вводить явно, но, будем считать SSH первым "фактором" двух факторной авторизации без доступа к которому скомпрометированный пароль RDP/VNC не угрожает безопасности. | Итак, задача: Нужно подключиться SSH клиентом к "работе" с чужого компьютера и не хочется вводить пароль, "мало ли что":) На следующей итерации можно так же подключиться по RDP или VNC добавив в настройки соединения SSH туннель, правда, пароль этих сервисов придется вводить явно, но, будем считать SSH первым "фактором" двух факторной авторизации без доступа к которому скомпрометированный пароль RDP/VNC не угрожает безопасности. | ||
- | Одним из вариантов решения этой задачи является использование одноразовых паролей, и, в состав базового ПО FreeBSD, уже давно входит реализация пакета OPIE, которую мы и рассмотрим. Буду рад, если сообщество меня поправит, но в "мире" Linux дистрибутивов удалось обнаружить только пакет OTPW, требующий (опять, буду рад, если это не так) предварительной печати множества одноразовых паролей, например на бумаге. | + | Одним из вариантов решения этой задачи является использование одноразовых паролей, и, в состав базового ПО FreeBSD, уже давно входит реализация пакета OPIE (One time Passwords In Everything), которую мы и рассмотрим. Буду рад, если сообщество меня поправит, но в "мире" Linux дистрибутивов удалось обнаружить только пакет OTPW, требующий (опять, буду рад, если это не так) предварительной печати множества одноразовых паролей, например на бумаге. |
Возвращаемся к FreeBSD, скачать свежий дистрибутив можно здесь: | Возвращаемся к FreeBSD, скачать свежий дистрибутив можно здесь: | ||
Line 15: | Line 15: | ||
https://www.freebsd.org/ru/where/ | https://www.freebsd.org/ru/where/ | ||
- | Установка не сильно отличается от установки большинства Linux дистрибутивов. В процессе инсталляции будет предложено задать пароль root и создать учетную запись пользователя, входящего в группу wheel, для которой разрешено использовать команду su. Здесь же можно настроить подключение к сети и, для нашей задачи, система должна быть расположена так, что бы быть доступна "снаружи" и, в свою очередь, иметь доступ "внутрь". Сервер SSH, с необходимыми параметрами, будет запущен по умолчанию. | + | Установка не сильно отличается от установки Debian/Ubuntu, для большинства экранов можно оставить значение по умолчанию. Здесь же можно настроить подключение к сети (для нашей задачи, система должна быть расположена так, что бы быть доступна "снаружи" и, в свою очередь, иметь доступ "внутрь"). Сервер SSH, с необходимым для работы OPIE параметром ChallengeResponseAuthentication yes, будет запущен по умолчанию. Нюансом может показаться отсутствие sudo, поэтому, в процессе инсталляции надо будет задать пароль root а так же, создать учетную запись для администрирования системы (например, admin) включив ее в группу wheel, для которой разрешено использовать команду su. Если что-то упустили, всегда можно повторить, подключившись к консоли как root и набрав команду bsdconfig |
- | На следующем этапе создаем учетную запись пользователя, которым будем подключаться (ту, которая была создана на этапе установки оставим для задач администрирования системы) | + | По окончании процесса инсталляции подключаемся учетной записью администратора и поднимаем себе привилегии |
+ | <code> | ||
+ | admin@bsdgate:~ $ su - | ||
+ | Password: | ||
+ | root@bsdgate:~ # | ||
+ | </code> | ||
+ | Cоздаем учетную запись пользователя, которым будем подключаться (команды и ключи напоминают аналогичные в Linux) | ||
+ | <code> | ||
+ | root@bsdgate:~ # pw useradd user1 -m | ||
+ | </code> | ||
+ | Теперь, ближе к нашей задаче, во FreeBSD уже "из коробки" библиотека PAM для сервиса sshd поддерживает OPIE | ||
+ | <code> | ||
+ | root@bsdgate:~ # cat /etc/pam.d/sshd | ||
+ | ... | ||
+ | auth sufficient pam_opie.so no_warn no_fake_prompts | ||
+ | ... | ||
+ | </code> | ||
+ | Это позволяет, даже не задавая unix пароль, задать для пользователя user1 "мастер" пароль (в документации - "защищенный пароль") для генерации одноразовых паролей OPIE | ||
+ | <code> | ||
+ | root@bsdgate:~ # su - user1 | ||
+ | user1@bsdgate:~ $ opiepasswd -c -f | ||
+ | ... | ||
+ | Enter new secret pass phrase: opassword1 | ||
+ | Again new secret pass phrase: opassword1 | ||
+ | ID user1 OTP key is 499 bs6909 | ||
+ | SHOD VINE REAM HAIR JUDY BUST | ||
+ | </code> | ||
+ | |||
+ | В результате будет сгенерирован не являющийся секретом ключ (bs6909) и, на основе этого ключа и "мастер" пароля, одноразовый 499-й пароль (SHOD VINE REAM HAIR JUDY BUST) | ||
+ | |||
+ | Однако, если мы попробуем подключиться этим пользователем к нашей системе по ssh, нам потребуется уже 498-й пароль | ||
+ | |||
+ | <code> | ||
+ | login as: user1 | ||
+ | Keyboard-interactive authentication prompts from server: | ||
+ | | otp-md5 498 bs6909 ext | ||
+ | | Password: | ||
+ | </code> | ||
+ | |||
+ | Получить его можно, например, используя телефон с Android в программе OTPdroid | ||
+ | |||
+ | https://play.google.com/store/apps/details?id=de.ub0r.android.otpdroid | ||
+ | |||
+ | Для удобства, можно нажать на Enter, что позволит вводить одноразовый пароль с отображением его на экране, а так же не обязательно делать это в верхнем регистре: | ||
+ | |||
+ | <code> | ||
+ | ... | ||
+ | | otp-md5 498 bs6909 ext | ||
+ | | Password [echo on]: lurk flag at len hug bite | ||
+ | End of keyboard-interactive prompts from server | ||
+ | ... | ||
+ | Welcome to FreeBSD! | ||
+ | ... | ||
+ | </code> | ||
+ | |||
+ | Магия в том, что "мастер" пароль хранится только в голове пользователя (ну или в программе OTPdroid на его телефоне), его НЕТ во FreeBSD! В системе есть такой файл: | ||
+ | |||
+ | <code> | ||
+ | root@bsdgate:~ # cat /etc/opiekeys | ||
+ | user1 0499 bs6909 dabea335c94a38c3 Jan 30,2023 10:10:36 | ||
+ | </code> | ||
+ | |||
+ | и на этом этапе в нем хранится хэш 499-й итерации функции MD5 над ключом и "мастер" паролем. От пользователя в этот момент потребуется 498 пароль, над ним произведут операцию MD5 и сравнят со значением в /etc/opiekeys. Если значения совпадут, пользователя "пустят" в систему (на самом деле, успешно отработает подсистема auth библиотеки PAM) | ||
+ | |||
+ | root@bsdgate:~ # cat /etc/opiekeys | ||
+ | user1 0498 bs6909 b4b034101201c6b1 Jan 30,2023 10:59:38 | ||
+ | </code> | ||
+ | |||
+ | и хорошо написано в системе документации к FreeBSD - Handbook | ||
+ | |||
+ | https://docs.freebsd.org/doc/8.4-RELEASE/usr/share/doc/freebsd/ru_RU.KOI8-R/books/handbook/one-time-passwords.html | ||
+ | |||
+ | В заключение могу порекомендовать поменять порт ssh сервера на какой ни будь другой и усилить в систему сервисом fail2ban. | ||
+ | |||
+ | Спасибо, что дочитали до конца, буду рад, если попробуете и поделитесь мнением в комментариях! |