Многофакторная аутентификация SSH на Ubuntu 16.04
Увеличиваем уровень безопасности сервера. Часть 1
Что же такое фактор аутентификации? Данным термином называют единицу информации, подтверждающую возможность юзера совершать какие-то действия. Например, это токены и пароли. Для их передачи необходимы каналы. С такой ролью успешно справляются телефоны, компьютеры.
При аутентификации SSH обычно применяют пароли, однако лучше использовать специальные ключи. Однако, при хакерской атаке все коды окажутся в руках злоумышленника. С их помощью взломать сервер окажется элементарной задачей.
Усложнить задачу взломщику получится посредством многофакторной аутентификации. Ее суть в том, что для идентификации пользователя требуется несколько аспектов: пароль, токен безопасности и биометрические данные.
Можно также применять приложение Google Authenticator. Его суть в генерации паролей, которые можно использовать только один раз в течение 30 сек. Такие приложения еще называются OATH-TOTP. Наша статья покажет вам, как сделать многофакторную аутентификацию посредством SSH-ключа и приложения.
Для воплощения в жизнь наших советов вам потребуется настроенный сервер с Ubuntu 16.04, планшет либо смартфон с установленным Google Authenticator либо аналогичными программами, а также пользователь с настроенным sudo.
Вы можете арендовать у нас Виртуальный сервер(VDS/VPS) или физический Выделенный сервер (Dedicated Server) и установить "чистую" OS Ubuntu Server 16.04 всего за пару кликов.
Pluggable Authentication Module представляет собой аутентификационную инфраструктуру, которая работает в среде Linux. Она полностью совместима с OATH-TOTP программами, например от Google. Первым делом потребуется обновление индекса пакетов Ubuntu:
sudo apt-get update
Чтобы установить PAM, наберите:
sudo apt-get install libpam-google-authenticator
Потом вам потребуется генерация ТОТР-ключа. Это делается индивидуальным образом под конкретного юзера. То есть, если у вас несколько учетных записей, то на каждой запускается приложение и генерируется ключ. Запуск инициализации осуществляется так:
google-authenticator
После этого на экране появится вопрос о необходимости синхронизации авторизирующих токенов по времени, на который нужно ответить, нажав клавишу «У», что значит «yes». РАМ способна генерировать токены, которые синхронизируются по времени либо на основе математических алгоритмов. Последние делаются целыми сериями, в основе которых лежит секретный ключ. Такие токены угадать нельзя. Если установить синхронизацию по времени, то они будут обновляться циклически в установленный временной промежуток.
После этого, на дисплее покажется QR-код, который можно считать с помощью смартфона с установленным приложением. Ключ также можно ввести вручную, если телефона нет под рукой. После сканирования у вас будет циклически обновляемый код. Ключ, код проверки стоит хранить в месте, недоступном для других людей, поскольку только с их помощью вы получите доступ к приложению ТОТР.
Далее, вы сможете продолжить настраивать РАМ. Обновление ключей аутентификации осуществится, если положительно ответить на вопрос:
Do you want me to update your "~/.google_authenticator" file (y/n) y
Чтобы защититься от replay-атак, ответьте утвердительно на:
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) y
Далее, система попросит вас выбрать количество действительных кодов. На вопрос нужно будет ответить отрицательно, чтобы их число за 90 сек ограничилось тремя. Так будет безопаснее.
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:30 min to about 4 min.
Do you want to do so (y/n) n
Вы также можете усложнить жизнь хакеру, уменьшив число попыток угадать код. Для этого ответьте утвердительно на вопрос:
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) y
Чтобы создать копию ключа на всякий случай, просто сделайте копию файла ~/.google-authenticator.
Помните, что соединения SSH нельзя закрывать, ведь с его помощью осуществляются все изменению. После того, как все заработает как надо, можете прервать канал.
При помощи любого текстового редактора, вам нужно будет открыть файл конфигурации sshd:
sudo nano /etc/pam.d/sshd
В самом низу, придется добавить вот такой кусок кода:
. . .
# Standard Un*x password updating.
@include common-password
auth required pam_google_authenticator.so nullok
Последнее слово nullok необходимо для поддержки любый аутентификационных методов. Например, если у юзера нет ТОРТ-ключа, он может ввести SSH-ключ. После внесения изменений в файл, сохраните его снова и закройте.
Вам нужно будет изменить файл:
sudo nano /etc/ssh/sshd_config
В нем предстоит отыскать ChallengeResponseAuthentication и задать ему утвердительное значение:
# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication yes
После изменений, файл нужно сохранить и закрыть. Чтобы настройки обновились, потребуется перезапуск SSH. Помните, что блокировки не произойдет, т.к. само соединение sshd сохранится, несмотря на перезапущенный сервис. Это можно сделать вот так:
sudo systemctl restart sshd.service
Теперь нужно проверить, все ли настройки вступили в силу. Для этого проще всего открыть новый терминал и сделать подключение SSH. Если вы ранее применяли ключи SSH, то повторного ввода пароля не потребуется. В случае, когда вы этого не делали, система попросит у вас ввести пароль и подтверждающий код.
Теперь уже можно приступать к поддержке многофакторной аутентификации
Начать требуется с открытия файла:
sudo nano /etc/ssh/sshd_config
в котором придется дописать немного текста в конце. Код поможет настроить метод SSH-аутентификации. После этого сохраните изменения и закройте файл:
UsePAM yes
AuthenticationMethods publickey,password publickey,keyboard-interactive
Следующие на очереди РАМ настройки:
sudo nano /etc/pam.d/sshd
Внутри, вам потребуется отыскать строчку @include common-auth, чтобы закомментировать ее с помощью символа «#». Эти действия необходимы чтобы РАМ перестала просить ввести пароль.
# Standard Un*x authentication.
#@include common-auth
Изменения в файле нужно сохранить и закрыть его:
sudo systemctl restart sshd.service
Чтобы все проверить, потребуется новое подключение к серверу. Будьте готовы к тому, что SSH опять потребует ввести код подтверждения. После данных манипуляций вы сможете войти на сервер. Вы увидите, что теперь аутентификация проходит в два этапа. Мы можете также сделать созможность расширенного ввода посредством добавления кода:
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /Users/sammy/.ssh/id_rsa
debug1: Server accepts key: pkalg rsa-sha2-512 blen 279
Authenticated with partial success.
debug1: Authentications that can continue: password,keyboard-interactive
debug1: Next authentication method: keyboard-interactive
Verification code:
Вы сможете убедиться, что SSH проводит идентификацию в два этапа. После применения ключа выдается запрос подтверждающего кода. Если будет необходимо, получится добавить и третий аспект.
Нам нужно будет внести изменения в файл конфигурации:
sudo nano /etc/pam.d/sshd
Для этого, нужно раскомментировать вот такую строку, удалив «#»:
#@include common-auth
Чтобы изменения вступили в силу, нужен перезапуск SSH:
sudo systemctl restart sshd.service
Данная активная опция приведет к тому, что система сначала будет просить ввести пароль, потом ключ и в конце – код. При этом будут использоваться целых два канала.
Опубликовано: Февраль 24, 2017