Безопасный SSH с Google Authenticator в Unix/Linux
Google Authenticator обеспечивает новый уровень безопасности от хакеров для SSH сервера. В этой статье «Безопасный SSH с Google Authenticator в Unix/Linux» я расскажу как установить и настройить Google Authenticator чтобы защитить свой SSH сервер с двухфакторной аутентификацией с использованием модуля Google Authenticator PAM. С этим модулем вы должны будите сгенерировать код, используя ваш телефон или другие устройства чтобы войти на сервер через SSH.
Хотите защитить SSH сервер с двухфакторной аутентификацией? Google предоставляет необходимое программное обеспечение для интеграции Google Authenticator на основе одноразового пароля (TOTP) с SSH сервером. Вы должны ввести код с вашего телефона при подключении.
Безопасный SSH с Google Authenticator в Debian/Ubuntu
Для deb-‘s операционных систем, имеется готовый пакет, его нужно просто установить.
Установка Google Authenticator.
Для установки пакета Google Authenticator в Debian или Ubuntu, выполните следующую команду:
# apt-get install libpam-google-authenticator
После этого, переходим к настройке и активации данного модуля.
Безопасный SSH с Google Authenticator в RedHat/Fedora/CentOS
Вот следующие шаги по установки и настройки Google Authenticator в RedHat/Fedora/CentOS
Шаг 1: Добавления репозитория.
Во-первых, необходимо добавить репозиторий RPMForge или EPEL, если не знаете как, то можно прочитать статью тут:
Установка RPMForge репозитория в RHEL / CentOS
Шаг 2: Установка Google Authenticator.
Чтобы установить Google authenticator используйте следующую команду:
# yum install google-authenticator
Безопасный SSH с Google Authenticator с исходного кода.
На самом деле, Google Authenticator является системой с полностью открытым исходным кодом. Вы можете скачать его тут:
# cd /usr/local/src && git clone https://github.com/google/google-authenticator.git
Для этого нужно иметь git.
# cd google-authenticator
Выполняем сборку:
# make && make install
Скопируем библиотеки в нужное место:
# cp pam_google_authenticator.so /lib64/security # cp google-authenticator /usr/local/bin
Настройка безопасного входа через SSH с Google Authenticator в Unix/Linux
Я использую тестовый аккаунт (пользователь captain) для тестирования:
# su - captain
Запускаем google-authenticator:
$ google-authenticator https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/captain@localhost.localdomain%3Fsecret%3DJ4CZKJKMHQYRVPJJ Your new secret key is: J4CZKJKMHQYRVPJJ Your verification code is 477729 Your emergency scratch codes are: 87179898 49162509 72309780 62379946 13687735 Do you want me to update your "~/.google_authenticator" file (y/n) y 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 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) y 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 покажет вам секретный ключ и много «аварийных скретч-кодов». Аварийные коды могут быть использованы только один раз в случае, если вы потеряли секретный ключ, поэтому держите их в безопасном месте.
Используйте Google Authenticator приложения для вашего девайса (Android, iPhone или Blackberry) для того чтобы сгенерировать проверочной код, нужно ввести секретный ключ:
- Статья на английском -> https://support.google.com/accounts/answer/1066447?hl=en
- Статья на русском -> https://support.google.com/accounts/answer/1066447?hl=ru
Вы также можете сканировать штрих-код, предоставляемый по URL, у меня это:
Вы также можете использовать приложения, основанные на Java для генерация кодов проверки:
# cd /usr/local/src && wget http://www.jcuff.net/files/Authenticator.tgz && tar zxfv Authenticator.tgz
Компилируем утилиту:
~/auth$ javac -cp ./ Authenticator/*.java
Выполните (в папке auth, домашней папки локального пользователя):
~/auth$ java -classpath ./ Authenticator.Main /home/jcuff/.google_authenticator
Пример:
Authenticator Started! :----------------------------:--------: : Code Wait Time : Code : :----------------------------:--------: +++++++++++++++++++++++++++++: 977773 : ..............+++++++++++++++: 500007 : .............................: 176547 : .............................: 543540 : ^C ~/auth$
Выбор за вами, но с мобильными девайсами проблем меньше.
Активация Google authenticator
Для того чтобы активировать google authenticator, нужно добавить в конфигурационный файл:
# vim /etc/pam.d/sshd
Строку что ниже:
# auth required pam_google_authenticator.so
Должно выглядеть вот так:
Это позволит активировать Google authentication для входа в ssh. После чего, открываем конфигурационный файл SSH b добавим изменения:
# vim /etc/ssh/sshd_config
И приводим к виду:
[...] ChallengeResponseAuthentication yes [...] PasswordAuthentication yes [...] UsePAM yes [...]
И последнее, перезапустим службу SSH в CentOS/Fedora/RedHat:
# service sshd restart
И последнее, перезапустим службу SSH в Debian/Ubuntu:
# service ssh restart
Чтобы убедиться что все работает, можно проверить лог-файл:
# tail -f /var/log/secure
PS: Примите во внимание что SELinux должен быть выключен, и как это сделать, можно прочитать статью тут:
Как отключить SELinux на CentOS
Вот пример лога:
Dec 17 19:12:42 localhost sshd[13057]: Server listening on 0.0.0.0 port 22. Dec 17 19:12:42 localhost sshd[13057]: Server listening on :: port 22. Dec 17 19:38:26 localhost su: pam_unix(su-l:session): session opened for user root by captain(uid=500)
Пропустить Google Authenticator авторизацию если подключение с локальной сети.
Вы можете добавить IP вашей локальной сети чтобы опустить SSH соединения с использованием Google Authenticator. Если это так, изменим:
# vim /etc/pam.d/sshd
Прописываем:
auth [success=1 default=ignore] pam_access.so accessfile=/etc/security/access-local.conf auth required pam_google_authenticator.so
Затем, открываем:
# vim /etc/security/access-local.conf
Добавляем следующие строки:
# Google Authenticator can be skipped on local network + : ALL : 192.168.0.0/24 + : ALL : LOCAL - : ALL : ALL
Замените 192.168.0.0/24 на вашу локальную сеть.
Тема «Безопасный SSH с Google Authenticator в Unix/Linux» завершена.
Автор а как это выглядит при подключение к серверу клиентом putty?
Не проверял, но думаю одинаково. В консоле появится ввод для пароля и для Google Authenticator-а.
А как можно сделать что-бы сначала ввести пароль от сервера, а затем ключ из аутентификатора?
Да! Можно!
Открываешь:
И, прописываешь ( если имеется строка, модифицируешь ее):
После чего:
PS: Проверялось на CentOS 7 — работает!
Для centOS 5/6, прописываем строку:
Как-то так.