Библиотека сайта rus-linux.net
Как в Linux получить доступ через SSH с помощью одноразовых паролей
Оригинал: How to secure SSH login with one-time passwords on LinuxАвтор: Dan Nanni
Дата публикации: March 30, 2015
Перевод: Н.Ромоданов
Дата перевода: июнь 2015 г.
Как кто-то сказал, безопасность не результат, а процесс. Хотя сам по себе протокол SSH является криптографически безопасным, кто-нибудь может создать хаос в сервисе SSH, если он не ведется правильно, будь то использование слабых паролей, скомпрометированных ключей или устаревшие клиентских программ SSH.
Что касается аутентификации SSH, то аутентификация с открытым ключом в общем считается более безопасной, чем аутентификации по паролю. Но использование ключа аутентификации на самом деле нежелательно и даже менее безопасно в случае, если вы входите с публичного компьютера или компьютера общего пользования, в которых всегда есть место таким вещам, как стелс-кейлоггеры или сканеры памяти. Если вы не можете довериться компьютеру, с которого работаете, то лучше воспользоваться чем-нибудь иным. Это как раз такой случай, когда могут пригодиться "одноразовые пароли". Как следует из названия, каждый одноразовый пароль подходит для однократного использования. Такие одноразовые пароли можно безопасно использовать в ненадежных средах, поскольку даже если их украдут, ими нельзя воспользоваться повторно.
Один из способов генерации одноразовых паролей — использование сервиса Google Authenticator. В этой статье я собираюсь рассказать еще об одном способе создания одноразовых паролей для входа через SSH: о пакете OTPW, создающим одноразовые пароли для входа в систему. В отличие от сервиса Google Authenticator, вам не потребуется полагаться на средства генерации одноразовых паролей и их проверки, осуществляемые какой-либо третьей стороной.
Что такое OTPW?
OTPW состоит из генератора одноразовых паролей и процедур проверки, интегрированных в PAM. В OTPW, одноразовые пароли генерируются с помощью генератора заранее и передаются пользователю надежным способом (например, в напечатанном на бумаге виде). Затем криптографический хэш сгенерированных паролей сохраняется на сервере SSH. Когда пользователь входит в систему с одноразовым паролем, модуль PAM пакета OTPW проверяет пароль и помечает его с тем, чтобы его нельзя было использовать повторно.
Шаг 1: Установка и конфигурирование пакета OTPW на Linux
Debian, Ubuntu или Linux Mint:
Установите пакеты OTPW с помощью команды apt-get
.
$ sudo apt-get install libpam-otpw otpw-bin
Откройте с помощью текстового редактора конфигурационный файл PAM для SSH (/etc/pam.d/sshd) и закомментируйте следующую строку (для того, чтобы отключить аутентификацию по паролю).
#@include common-auth
и добавьте следующие две строки (чтобы включить аутентификацию с помощью одноразовых паролей):
auth required pam_otpw.so session optional pam_otpw.so
Fedora или CentOS/RHEL:
В системах, базирующихся на Red Hat, пакет OTPW не доступен в двоичным виде. Поэтому давайте соберем пакет OTPW из исходного кода.
Во-первых, установите пакеты, необходимые для сборки:
$ sudo yum git gcc pam-devel $ git clone https://www.cl.cam.ac.uk/~mgk25/git/otpw $ cd otpw
Откройте в текстовом редакторе файл Makefile и отредактируйте строку, которая начинается с "PAMLIB=" следующим образом.
На 64-разрядной системе:
PAMLIB=/usr/lib64/security
На 32-разрядной системе:
PAMLIB=/usr/lib/security
Откомпилируйте и установите пакет. Обратите внимание на то, что при установке пакета сервер SSH будет автоматически перезапущен. Так что будьте готовы к потере соединения SSH в случае, если вы его используете.
$ make $ sudo make install
$ sudo grep sshd /var/log/audit/audit.log | audit2allow -M mypol $ sudo semodule -i mypol.pp
Затем с помощью текстового редактора откройте конфигурационный файл PAM для SSH (/etc/pam.d/sshd), и закомментируйте следующую строку (чтобы отключить аутентификацию по паролю).
#auth substack password-auth
и добавьте следующие две строки (чтобы включить аутентификацию с помощью одноразовых паролей):
auth required pam_otpw.so session optional pam_otpw.so
Шаг 2: Конфигурируем сервер SSH для использование одноразовых паролей
Следующим шагом является настройка сервера SSH так, чтобы он мог принимать одноразовые пароли.
Откройте с помощью текстового редактора файл /etc/ssh/sshd_config и задайте следующие три параметра. Убедитесь в том, что вы добавили следующие строки только один раз, поскольку в противном случае сервер SSH работать не будет.
UsePrivilegeSeparation yes ChallengeResponseAuthentication yes UsePAM yes
Вы также должны отключить аутентификацию по паролю, используемую по умолчанию. При необходимости включите аутентификацию по открытым ключам с тем, чтобы у вас осталась возможность использовать такую аутентификацию в случае, если у вас нет одноразовых паролей.
PubkeyAuthentication yes PasswordAuthentication no
Теперь перезапустите сервер SSH.
Debian, Ubuntu или Linux Mint:
$ sudo service ssh restart
Fedora или CentOS/RHEL 7:
$ sudo systemctl restart sshd
Шаг 3: С помощью OTPW создаем одноразовые пароли
Как уже упоминалось ранее, вам нужно создать одноразовые пароли заранее и сохранить их на сервере SSH. Для этого запустите команду otpw-gen
как пользователь, в роли которого вы будет входить в систему.
$ cd ~ $ otpw-gen > temporary_password.txt
Вам будет предложено установить префикс пароля. При последующем входе в систему вам потребуется ввести этот префикс пароля и одноразовый пароль. По существу префикс пароля является еще одним уровнем защиты. Даже если лист с паролями попадает в чужие руки, префикс пароль вынудит использовать для подбора метод грубой силы (brute-force).
После того, как префикс пароля будет установлен, команда сгенеририрует 280 одноразовых паролей и сохранит их в текстовом файле (например, в temporary_password.txt). Каждому паролю (его длина 8 символов по умолчанию) предшествует трехзначный индекс. Вы должны распечатать файл и носить распечатку с собой.
Вы также увидите созданный файл ~/.otpw, в котором хранятся криптографические хеши этих паролей. Первые три цифры в каждой строке указывают индекс пароля, который будет использоваться для входа в систему через SSH.
$ more ~/.otpw OTPW1 280 3 12 8 191ai+:ENwmMqwn 218tYRZc%PIY27a 241ve8ns%NsHFmf 055W4/YCauQJkr: 102ZnJ4VWLFrk5N 2273Xww55hteJ8Y 1509d4b5=A64jBT 168FWBXY%ztm9j% 000rWUSdBYr%8UE 037NvyryzcI+YRX 122rEwA3GXvOk=z
Проверяем одноразовые пароли с помощью SSH
Теперь давайте войдите на сервер SSH обычным образом:
$ ssh user@remote_host
Если установлен пакет OTPW, то вы увидите несколько иной запрос пароля:
Password 191:
Теперь откройте свой список паролей и найдите в нем индекс "191"
023 kBvp tq/G 079 jKEw /HRM 135 oW/c /UeB 191 fOO+ PeiD 247 vAnZ EgUt
Согласно списку указанному выше, одноразовый пароль для индекса "191" будет является "fOO+PeiD". Вы должны добавить к нему ваш префикс пароля. Например, если ваш префикс пароля "000", то в качестве текущего одноразового пароля необходимо ввести "000fOO+PeiD".
После того как вы успешно вошли, использованный пароль автоматически будет аннулирован. Если вы проверите файл ~/.otpw, вы увидите, что соответствующая строка будет заменена на "---------------", что означает, что пароль "191" был аннулирован.
OTPW1 280 3 12 8 --------------- 218tYRZc%PIY27a 241ve8ns%NsHFmf 055W4/YCauQJkr: 102ZnJ4VWLFrk5N 2273Xww55hteJ8Y 1509d4b5=A64jBT 168FWBXY%ztm9j% 000rWUSdBYr%8UE 037NvyryzcI+YRX 122rEwA3GXvOk=z
Заключение
В этой статье я рассказал о том , как с помощью пакета OTPW создать одноразовый пароль входа через SSH. Вы должны понимать, что распечатанный список паролей можно считать менее симпатичным вариантом токена безопасности двухфакторной аутентификации. Тем не менее, это проще, и вы не полагаетесь на какую-либо третью сторону при ее реализации. Какой бы механизм вы не использовали для создания одноразовых паролей, каждый из них может быть полезен в случае, когда вам нужно войти на сервер SSH с общественного компьютера, не обладающего достаточной надежностью. Не стесняйтесь поделиться своим опытом или мнением на эту тему.