Настройка взаимодействия с RADIUS-сервером для аутентификации при подключении пользователя через SSH
Настоящий документ содержит описание способа совместного использования Продуктов компании ООО
«С-Терра СиЭсПи» и Продуктов третьих производителей.
ООО «С-Терра СиЭсПи» осуществляет сопровождение настоящего сценария в части настроек Продуктов Компании. Упоминание наименований, продуктов, торговых марок третьих организаций исключительно неформально и не является поддержкой, рекомендацией, либо рекламой. ООО «С-Терра СиЭсПи» не несет какой-либо ответственности в отношении работоспособности и использования этих Продуктов.
Документ имеет статус вспомогательного материала, который может быть использован технологическими партнерами, компаниями-интеграторами, при разработке собственных решений.
Решения, разработанные на базе данного сценария, могут применяться в действующих сетях/системах
только после тестовой и/или опытной эксплуатации.
Дополнительные файлы:
Данный документ описывает настройку взаимодействия с RADIUS сервером для аутентификации при подключении пользователя через SSH.
Схема стенда (Рисунок 1):
Рисунок 1
При попытке подключения на шлюз GW1 по протоколу SSH, будет отправлен запрос на RADIUS сервер и, в зависимости от ответа, аутентификация пользователя завершится успехом или неудачей. При аутентификации используются модули PAM (pluggable authentication module). За связь с RADIUS-сервером на шлюзе отвечает модуль pam-radius-auth.
При недоступности RADIUS сервера, попытка аутентификации завершится неудачей.
При локальном подключении к шлюзу, аутентификация с помощью RADIUS производится не будет. По умолчанию, локальную аутентификацию смогут пройти пользователи cscons и root (при условии установленного пароля).
При попытке подключения посредством SSH происходит проверка наличия локального пользователя на шлюзе. Если пользователь отсутствует, попытка будет неудачной. Данная проверка происходит с использованием NSS (Name Service Switch). В данном документе описывается поведение при использовании только локальных файлов (/etc/passwd, /etc/group и т.д.). Взаимодействие NSS с сетевыми протоколами (например, LDAP) в данном документе не рассматривается.
Чтобы избежать проблемы с отсутствующими локальными пользователями и не задавать их вручную, будет использован модуль pam-script для выполнения пользовательского скрипта. В данном скрипте будет выполнятся команда для добавления нового пользователя (подробнее в п. 5 раздела «Настройка шлюза GW1»).
Важно! Первая попытка подключения пользователя, отсутствующего в локальных файлах, будет всегда неудачной. Дальнейшие подключения будут происходить без проблем. Подробнее в разделе «Проверка работоспособности»
1. Предполагается, что инициализация шлюза пройдена, заданы корректные сетевые настройки и RADIUS-сервер доступен по сети.
2 Настройте доступ к RADIUS серверу. Для этого измените файл /etc/pam_radius_auth.conf. В данном файле необходимо указать адрес RADIUS сервера (в данном случае – 192.168.1.5:1812), пароль для доступа к нему (в данном случае – secret1) и таймаут в секундах (3). Остальные строки закомментируйте или удалите.
root@sterragate:~# vi /etc/pam_radius_auth.conf
192.168.1.5:1812 secret1 3
3 Измените настройки аутентификации для SSHD модуля. Для этого в файле /etc/pam.d/sshd пропишите использование модулей pam_script.so и pam_radius_auth.so. Остальные строки закомментируйте или удалите.
root@sterragate:~# vi /etc/pam.d/sshd
# PAM configuration for the Secure Shell service
auth optional pam_script.so
auth required pam_radius_auth.so
Где:
· optional – успешность выполнения модуля не будет влиять на процесс аутентификации.
· required – успешность выполнения модуля обязательна для успешной аутентификации.
3.1 Действий, описанных выше, достаточно для успешной аутентификации с помощью RADIUS для локальных пользователей уже существующих на шлюзе GW1 (при условии наличия записей для них на RADIUS-сервере).
4 Задайте скрипт для автоматического создания новых пользователей, при попытке подключения через SSH.
root@sterragate:~# vi /usr/share/libpam-script/pam_script_auth
#!/bin/bash
if ! getent passwd $PAM_USER > /dev/null 2>&1; then
adduser $PAM_USER --disabled-password --quiet --gecos "" --shell /opt/VPNagent/bin/cs_console
fi
Где:
· if ! getent passwd $PAM_USER > /dev/null 2>&1 – проверка, существует ли данный пользователь в системе; при отсутствии локального пользователя будет выполнятся команда adduser.
· adduser – команда для добавления пользователя;
· %PAM_USER – переменная для подстановки имени пользователя с помощью PAM;
· --disabled-password – у создаваемых пользователей будет отсутствовать локальный пароль;
· --quiet – режим без вывода на экран;
· --gecos “” – не задавать дополнительных полей для пользователя;
· --shell – задать оболочку по умолчанию;
· /opt/VPNagent/bin/cs_console – создаваемый пользователь будет попадать в cisco-like console.
5 Пропишите права на выполнение скрипта pam_script_auth:
root@sterragate:~# chmod +x /usr/share/libpam-script/pam_script_auth
6 Заданные настройки будут использоваться со следующей попытки подключения к шлюзу по SSH. Сервис sshd перезапускать нет необходимости.
7
1. Сделайте первую попытку подключится по SSH с новым пользователем с устройства IPHost1.
root@Host1:~# ssh sshuser1@192.168.1.1
sshuser1@192.168.1.1's password:
Permission denied, please try again.
sshuser1@192.168.1.1's password:
Permission denied, please try again.
sshuser1@192.168.1.1's password:
Permission denied (publickey,password).
Попытка подключения будет неудачной.
7.1 При этом в системных логах будут следующие записи:
root@sterragate:~# cat /var/log/auth.log
Aug 31 15:17:55 sterragate sshd[2669]: Invalid user sshuser1 from 192.168.1.100
Aug 31 15:17:55 sterragate sshd[2669]: input_userauth_request: invalid user sshuser1 [preauth]
Aug 31 15:18:02 sterragate sshd[2669]: Failed password for invalid user sshuser1 from 192.168.1.100 port 62656 ssh2
Aug 31 15:18:18 sterragate sshd[2669]: Failed password for invalid user sshuser1 from 192.168.1.100 port 62656 ssh2
Aug 31 15:18:21 sterragate sshd[2669]: Failed password for invalid user sshuser1 from 192.168.1.100 port 62656 ssh2
Aug 31 15:18:26 sterragate sshd[2669]: Failed password for invalid user sshuser1 from 192.168.1.100 port 62656 ssh2
Aug 31 15:18:30 sterragate sshd[2669]: Failed password for invalid user sshuser1 from 192.168.1.100 port 62656 ssh2
Aug 31 15:18:33 sterragate sshd[2669]: Failed password for invalid user sshuser1 from 192.168.1.100 port 62656 ssh2
root@sterragate:~# cat /var/log/auth_priv.log
Aug 31 15:18:02 sterragate groupadd[2676]: group added to /etc/group: name=sshuser1, GID=1000
Aug 31 15:18:02 sterragate groupadd[2676]: group added to /etc/gshadow: name=sshuser1
Aug 31 15:18:02 sterragate groupadd[2676]: new group: name=sshuser1, GID=1000
Aug 31 15:18:02 sterragate useradd[2680]: new user: name=sshuser1, UID=1001, GID=1000, home=/home/sshuser1, shell=/opt/VPNagent/bin/cs_console
Aug 31 15:18:02 sterragate usermod[2687]: change user 'sshuser1' password
Aug 31 15:18:02 sterragate chfn[2692]: changed user 'sshuser1' information
7.2 Пользователь помечен как invalid, дальнейшие попытки оканчиваются неудачей.
7.3 Также по логам видно, что создан новый локальный пользователь sshuser1.
8 Сделайте повторную попытку подключиться по SSH:
root@Host1:~# ssh sshuser1@192.168.1.1
sshuser1@192.168.1.1's password:
sterragate>
Повторная попытка подключения будет удачной.
Пользователь будет попадать в режим непривилегированного пользователя cisco-like консоли.
8.1 Логи операционной системы:
root@sterragate:~# cat /var/log/auth.log
Aug 31 15:19:31 sterragate sshd[2706]: Accepted password for sshuser1 from 192.168.1.100 port 62665 ssh2
Aug 31 15:19:31 sterragate sshd[2706]: lastlog_openseek: Couldn't stat /var/log/lastlog: No such file or directory
Aug 31 15:19:31 sterragate sshd[2706]: lastlog_openseek: Couldn't stat /var/log/lastlog: No such file or directory
root@sterragate:~# cat /var/log/auth_priv.log
Aug 31 15:19:31 sterragate sshd[2706]: pam_unix(sshd:session): session opened for user sshuser1 by (uid=0)
8.2 Логи cspvpngate.log:
root@sterragate:~# cat /var/log/cspvpngate.log
May 5 15:54:54 localhost cs_console: 0072500b Command interpreter started
May 5 15:54:54 localhost cs_console: 00725001 Cisco-like console started by user "sshuser1"