Как настроить многофакторную аутентификацию для SSH в Ubuntu 14.04

Вступление

Authentication factor - это единичная часть информации, используемая для подтверждения того, что у вас есть права на выполнение действия, например, входа в систему. Authentication channel - это способ, которым система аутентификации доставляет фактор пользователю или требует от пользователя ответа. Пароли и токены безопасности являются примерами факторов аутентификации; компьютеры и телефоны являются примерами каналов.

SSH использует пароли для аутентификации по умолчанию, и в большинстве инструкций по усилению безопасности SSH рекомендуется использовать вместо этого ключ SSH. Тем не менее, это все еще только один фактор. Если злоумышленник скомпрометировал ваш компьютер, он может использовать ваш ключ и для ваших серверов.

Чтобы бороться с этим, в этом руководстве мы настроим многофакторную аутентификацию. Многофакторная аутентификация (MFA) требует более одного фактора для аутентификации или входа в систему. Это означает, что плохой актер должен был бы скомпрометировать несколько вещей, как ваш компьютер и телефон, чтобы войти. Различные типы факторов часто суммируются как:

  1. Что-то, что вы * знаете *, например пароль или секретный вопрос

  2. Что-то, что у вас есть, например, приложение для аутентификации или токен безопасности

  3. Что-то, что вы * есть *, как ваш отпечаток или голос

Одним из распространенных факторов является приложение OATH-TOTP, такое как Google Authenticator. OATH-TOTP (Одноразовый пароль на основе времени открытой аутентификации) - это открытый протокол, который генерирует одноразовый пароль, обычно это 6-значное число, которое перерабатывается каждые 30 секунд.

В этой статье будет рассказано, как включить аутентификацию SSH с помощью приложения OATH-TOTP в дополнение к ключу SSH. Для входа на сервер через SSH потребуется два фактора по двум каналам, что делает его более безопасным, чем пароль или только ключ SSH.

Предпосылки

Чтобы следовать этому уроку, вам понадобится:

  • Одна Ubuntu 14.04 Droplet.

  • Пользователь без полномочий root с добавленным SSH-ключом, который можно настроить, следуя https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-14-04[this Первоначальный сервер Руководство по настройке.

  • Смартфон или планшет с установленным приложением OATH-TOTP, например, Google Authenticator (iOS, https://play.google. .com / магазин / приложений / подробности? ID = com.google.android.apps.authenticator2 & гл = еп [Android]).

Шаг 1 - Установка libpam-google-authenticator

На этом этапе мы установим и настроим PAM Google.

PAM, что означает Pluggable Authentication Module, является инфраструктурой аутентификации, используемой в системах Linux для аутентификации пользователя. Поскольку Google создал приложение OATH-TOTP, они также создали PAM, который генерирует TOTP и полностью совместим с любым приложением OATH-TOTP.

Сначала обновите кеш репозитория Ubuntu.

sudo apt-get update

Далее установите PAM.

sudo apt-get install libpam-google-authenticator

С установленным PAM мы будем использовать вспомогательное приложение, которое было установлено вместе с PAM, чтобы сгенерировать ключ TOTP для пользователя, к которому вы хотите добавить второй фактор. Этот ключ генерируется пользователем для каждого пользователя, а не для всей системы. Это означает, что каждый пользователь, который хочет использовать приложение аутентификации TOTP, должен войти в систему и запустить вспомогательное приложение, чтобы получить свой собственный ключ.

google-authenticator

После запуска команды вам будет задано несколько вопросов. Первый спрашивает, должны ли токены аутентификации основываться на времени.

Этот PAM позволяет использовать токены на основе времени или на основе последовательности. Использование маркеров sequential-based означает, что код начинается в определенной точке, а затем увеличивает код после каждого использования. Использование маркеров _time-based означает, что код изменяется случайным образом по истечении определенного времени. Мы будем придерживаться времени, потому что именно этого ожидают такие приложения, как Google Authenticator, поэтому ответьте «да».

Do you want authentication tokens to be time-based (y/n)

После ответа на этот вопрос будет пролистано много выходных, включая большой QR-код. Убедитесь, что вы записали секретный ключ, проверочный код, аварийные скретч-коды в безопасном месте, например, в диспетчере паролей.

На этом этапе используйте приложение для проверки подлинности на своем телефоне, чтобы отсканировать QR-код, или введите секретный ключ вручную. Если QR-код слишком велик для сканирования, вы можете использовать URL-адрес над QR-кодом, чтобы получить уменьшенную версию. После добавления вы увидите шестизначный код, который меняется каждые 30 секунд в вашем приложении.

Оставшиеся вопросы сообщают PAM, как функционировать. Мы пройдем их один за другим.

Do you want me to update your "~/.google_authenticator" file (y/n)

Это в основном записывает ключ и параметры в файл + .google_authenticator +. Если вы говорите «нет», программа закрывается и ничего не пишется, что означает, что аутентификатор не будет работать.

Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n)

Ответив «да» здесь, вы предотвращаете атаку воспроизведения, заставляя каждый код истечь сразу после использования. Это предотвращает захват злоумышленником кода, который вы только что использовали, и вход в систему с ним.

By default, tokens are good for 30 seconds and in order to compensate for
possible time-skew between the client and the server, we allow an extra
token before and after the current time. If you experience problems with poor
time synchronization, you can increase the window from its default
size of 1:30min to about 4min. Do you want to do so (y/n)

Ответ «да» позволяет вводить до 8 действительных кодов в четырехминутном окне. Отвечая «нет», мы ограничиваем его 3 действительными кодами в скользящем окне продолжительностью 1:30 минуты. Если вы не обнаружите проблем с окном 1:30, нет более безопасного выбора.

If the computer that you are logging into isn't hardened against brute-force
login attempts, you can enable rate-limiting for the authentication module.
By default, this limits attackers to no more than 3 login attempts every 30s.
Do you want to enable rate-limiting (y/n)

Ограничение скорости означает, что удаленный злоумышленник может выполнить только определенное количество предположений, прежде чем его заблокируют. Если вы ранее не настраивали ограничение скорости непосредственно в SSH, то теперь это отличная техника защиты.

Шаг 2 - Настройка OpenSSH

Следующим шагом сейчас является настройка SSH для использования вашего ключа TOTP. Нам нужно сообщить SSH о PAM, а затем настроить SSH для его использования.

Сначала откройте файл конфигурации sshd для редактирования, используя + nano + или ваш любимый текстовый редактор.

sudo nano /etc/pam.d/sshd

Добавьте следующую строку в конец файла.

. . .
# Standard Un*x password updating.
@include common-password

Слово «nullok» в конце говорит PAM, что этот метод аутентификации является необязательным. Это позволяет пользователям без ключа OATH-TOTP по-прежнему входить в систему, используя свой ключ SSH. Когда у всех пользователей есть ключ OATH-TOTP, вы можете удалить «nullok» в этой строке, чтобы сделать его MFA обязательным.

Сохраните и закройте файл.

Далее мы настроим SSH для поддержки этого типа аутентификации. Откройте файл конфигурации SSH для редактирования.

sudo nano /etc/ssh/sshd_config

Найдите + ChallengeResponseAuthentication и установите его значение в` + yes`.

. . .
# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication
. . .

Сохраните и закройте файл, затем перезапустите SSH, чтобы перезагрузить файлы конфигурации.

sudo service ssh restart

Шаг 3 - информирование SSH о MFA

На этом этапе мы проверим, работает ли ключ SSH.

Во-первых, откройте другой терминал и попробуйте SSHing на сервер сейчас. Вы заметите, что вы вошли в этот второй сеанс, используя свой ключ SSH, не вводя свой код подтверждения или пароль. Это потому, что ключ SSH переопределяет все остальные параметры аутентификации по умолчанию. Мы должны указать SSH использовать код TOTP и использовать ваш SSH-ключ вместо вашего пароля.

Теперь снова откройте файл конфигурации sshd.

sudo nano /etc/ssh/sshd_config

Найдите строку + PasswordAuthentication +, раскомментируйте ее, удалив символ + # + в начале строки, и обновите ее значение до + no +. Это говорит SSH не запрашивать пароль.

. . .
# Change to no to disable tunnelled clear text passwords
PasswordAuthentication
. . .

Затем добавьте следующую строку внизу файла. Это сообщает SSH, какие методы аутентификации требуются.

. . .
UsePAM yes

Сохраните и закройте файл.

Затем откройте файл конфигурации PAM sshd.

sudo nano /etc/pam.d/sshd

Найдите строку + @ include common-auth + и закомментируйте ее, добавив символ + # + в качестве первого символа в строке. Это говорит PAM не запрашивать пароль; мы ранее говорили SSH не делать в + sshd_config +.

. . .
# Standard Un*x authentication.
@include common-auth
. . .

Сохраните и закройте файл, затем перезапустите SSH.

sudo service ssh restart

Теперь попробуйте снова войти на сервер. Вы должны увидеть, что вы частично аутентифицировались с помощью вашего SSH-ключа, а затем вас попросили ввести код подтверждения. Это будет выглядеть так:

Пример вывода логина

ssh @

Authenticated with partial success.
Verification code:

Введите свой проверочный код с вашего OAUTH-TOTP ap, и вы войдете на сервер. Теперь у вас включен MFA для SSH!

Заключение

Как и в случае любой системы, которую вы укрепляете и защищаете, вы отвечаете за управление этой безопасностью. В этом случае это означает, что вы не потеряете свой SSH-ключ или ваш секретный ключ TOTP. Однако иногда что-то происходит, и вы можете потерять контроль над ключами, чтобы получить вас.

Вот несколько предложений по восстановлению доступа к вашему серверу:

  • * Если вы потеряете или не имеете доступа к своему приложению TOTP, * используйте свои коды восстановления в качестве кода подтверждения. Это происходит, если вы получаете новый телефон и забыли экспортировать ключи из старого, или если ваш телефон не работает.

  • * Если вы потеряете свой секретный ключ и резервную копию, * используйте консоль через панель управления DigitalOcean для входа в систему. Затем либо переименуйте, либо удалите файл + ~ / .google_authenticator +. Это позволит убедиться, что PAM не знает о вашей конфигурации, и не запросит у вас код. Убедитесь, что в + / etc / pam.d / sshd + по-прежнему добавлен «nullok», как в шаге 2; если вы измените это, обязательно перезапустите SSH.

  • * Если вы потеряете свой ключ SSH, * снова используйте консоль, чтобы войти в систему и удалить старую общедоступную папку из + ~ / .ssh / authorized_hosts +. Затем вы можете либо заменить его новым ключом.

Имея два фактора (ключ SSH + токен MFA) по двум каналам (ваш компьютер + ваш телефон), вы почти исключили возможность для внешнего агента грубо проникнуть в вашу машину через SSH и значительно повысили безопасность твоя машина.

Related