Это пример использования учётных данных, определённых через в веб-интерфейс кинетика для авторизации пользователей в chroot-среде Debian с помощью модуля pam_ndm.
Для упрощения все действия лучше вести прямо на кинетике, используя нативную компиляцию.
Сборка libndm
pam_ndm
использует libndm для обращению к ядру NDMS. Подготовка среды сборки и получение исходников:
# cd ~
# apt-get install build-essential git
# git clone https://github.com/ndmsystems/libndm.git
# cd libndm
Есть нюанс: в новых версиях прошивки обращение к ядру NDMS ведётся не через TCP-соединение, а через UNIX socket, который в chroot-среде не доступен, поэтому надо скачать патч, возвращающий поддержку работу через TCP, благо этот способ всё ещё работает:
# wget https://raw.githubusercontent.com/ndmsystems/entware/master/libndm/patches/010-legacy-tcp-support.patch
# patch -p1 -i 010-legacy-tcp-support.patch
# make install
Сборка pam_ndm
Получение необходимых файлов:
# cd ~
# apt-get install libpam0g-dev
# git clone https://github.com/ndmsystems/pam_ndm.git
# cd pam_ndm
Сборка и установка:
# make
# strip pam_ndm.so
# chmod 644 pam_ndm.so
# chown root:root pam_ndm.so
# mv pam_ndm.so /lib/mipsel-linux-gnu/security
Настройка
Минимально необходимая настройка сводится к добавлению в начало /etc/pam.d/common-auth
строчек
auth sufficient pam_ndm.so
account sufficient pam_ndm.so
и созданию пары пользователей: в Debian и в веб-интерфейсе кинетика. К примеру, создайте в Debian пользователя testuser:
# adduser testuser
с присвоением произвольного пароля. Затем создайте пользователя прошивки testuser с одноимённым паролем. У пользователя обязательно должен быть тег доступа OptWare
.
Проверка
Если всё сделано правильно, то можно начать SSH-сеанс, используя учётные данные testuser:testuser
. При этом в логе роутера будут видны обращения к ядру прошивки следующего вида:
[W] Jun 23 17:06:05 ndm: Core::Server: started obsoleted TCP Session 127.0.0.1:48348.
[I] Jun 23 17:06:05 ndm: Core::Authenticator: generating.
[I] Jun 23 17:06:05 ndm: Core::Authenticator: user "testuser" authenticated, realm "", tag "opt".
[I] Jun 23 17:06:05 ndm: Core::Server: client disconnected.
[I] Jun 23 14:06:05 sshd[6259]: Accepted password for testuser from 192.168.6.2 port 52393 ssh2
[I] Jun 23 14:06:05 sshd[6259]: pam_unix(sshd:session): session opened for user testuser by (uid=0)