Intereting Posts
Как заставить Minicom ждать подключения к несуществующему устройству? Может ли путь -prefix быть таким же, как каталог, в который я загрузил / распаковал исходный код? Откройте любой файл .c с Sublime Text, используя команду терминала Полностью не GUI (или терминал) способ подключения к проводной сети 802.1x Запуск просмотра VNC без открытия консоли Установите переменную окружения $ PATH глобально на Ubuntu 14.04 Запуск нового экземпляра GDM в Fedora 19 Присоединение всех mp3-файлов в файле m3u в один mp3-файл Откройте приложение на обычном рабочем столе в xmonad Внезапный сбой и черный экран в Ubuntu, возможный перегрев Как сделать работу беспроводной карты TP-LINK TL-WN321G? (Сахар на палочке, Fedora 23) Как сменить ключ GPG на обычный пароль? Как использовать результаты «файла» (Имя приложения: Microsoft Word) для поиска определенной строки? sed – сохранить новую строку при записи в новый файл Почему мне нужно нажать enter, чтобы получить приглашение моей оболочки после завершения скрипта init.d?

Аутентификация PAM и SSH-доступ на основе информации о пользователе, хранящейся в sqlite3

У меня есть приложение, которое работает в ящике Linux . Приложение хранит всю свою пользовательскую информацию (например, username , password , ssh-allowed и т. Д.) В базе данных sqlite3 следующим образом.

 username password ssh-allowed admin X y regularuser X n 

Пользователи приложения будут подключаться к графическому интерфейсу для использования приложения. Но всем пользователям приложения, у которых есть ssh-allowed как y , разрешено входить в ящик Linux с помощью ssh . Другие пользователи приложений (с ssh-allowed as n ) не могут войти в ящик Linux с помощью ssh .

Таким образом, в приведенном выше случае admin будет разрешено ssh в поле Linux но у regularuser будет отказано в доступе ssh к ящику Linux .

Вставьте GUI, чтобы выполнить authentication с помощью PAM для информации пользователя, хранящейся в sqlite , я использую libpam-sqlite . Фактически, я изменил его для работы с базой данных sqlite3 и он доступен здесь .

Теперь на вопрос: когда пользователь приложения пытается войти в ящик Linux , как я могу выполнить authentication а затем решил либо разрешить, либо запретить доступ ssh на основе параметра ssh-allowed который хранится в базе данных sqlite3 используя PAM (или Любым другим путем)?

ВНИМАНИЕ: Вся информация о пользователе хранится только в базе данных sqlite3 и НЕ в /etc/passwd , /etc/shadow , /etc/group . IOW приложение не имеет прав на добавление / удаление записей в файлах /etc

ПРИМЕЧАНИЕ 2. У меня был тот же вопрос, который был опубликован в SO ; подумал, что это лучший форум для вопросов, связанных с Linux.

pam_exec

Я думаю, вы можете делать то, что хотите, используя модуль PAM pam_exec . Элементы PAM передаются скрипту, который определяется как переменная среды. Вот пример скрипта уведомления, который показывает передаваемые переменные:

Настроить

 #!/bin/sh [ "$PAM_TYPE" = "open_session" ] || exit 0 # echo "User: $PAM_USER" # echo "Ruser: $PAM_RUSER" # echo "Rhost: $PAM_RHOST" # echo "Service: $PAM_SERVICE" # echo "TTY: $PAM_TTY" result=$(sqlite3 /path/to/file.db \ "select ssh-allow from sometable where user = \"$PAM_USER\"") if [ "$results" == "y" ]; then ...login... else ...no login... fi 

Затем вы создаете соответствующее правило PAM следующим образом:

 session   optional    pam_exec.so /usr/local/bin/checkssh-login 

Сценарий, использующий этот подход, может быть создан, чтобы выполнить поиск в вашем файле базы данных sqlite с использованием имени пользователя, которое было передано как $PAM_USER . Если этому пользователю разрешен SSH, тогда сценарий может просто пропустить, иначе он может заблокировать пользователя от продолжения с попыткой входа в систему.

Рекомендации

  • Входные уведомления, pam_exec scripting