Я пытаюсь создать централизованную базу данных для моих пользователей для моего доступа к серверу и в Интернете, чтобы я мог разрешить этим пользователям входить в систему через ssh, если у них есть доступ, и через мои веб-службы для просмотра своей учетной записи и системной информации.
Я читал о LDAP, но хочу иметь возможность управлять пользователями в другой базе данных, такой как Postgresql, чтобы мне было проще связать базу данных с моими веб-службами и контролировать миграции и схемы SQL, если мне нужны дополнительные сведения о пользователе. .
Я искал что-то вроде Puppet, но это слишком много для того, чем я собираюсь заниматься, и в данный момент мне не нужно управлять несколькими серверами. Я попытался изучить, как Puppet обрабатывает аутентификацию пользователя сервера, но не нашел слишком много информации.
Мой вопрос: есть ли способ создать централизованную базу данных с информацией о пользователях в чем-то другом, кроме LDAP, например Postgres, который я могу использовать для аутентификации ssh и веб-пользователей?
На машинах с Linux LDAP действительно выполняет три функции:
Аутентификация:
Это область PAM, он использует имя пользователя / пароль для проверки того, что пользователь является пользователем.
Авторизация:
Вот где PAM не отвечает потребностям, PAM включен / выключен, вы либо получаете одобрение, либо нет. Авторизация касается членства в группе.
Атрибуты:
Где твой домашний каталог? Как вас зовут?
Последние два элемента обрабатываются серверной частью nss. Если вы заглянете в /etc/nsswitch.conf, то обнаружите, что он использует стандартные бэкенды для преобразования системных вызовов в поиск ldap.
Если вы не хотите использовать LDAP, вам необходимо использовать другую версию библиотек подключаемых модулей nss, которая поддерживает базу данных, которую вы хотите использовать. Некоторые из них существуют, но вы изобретаете довольно большое колесо.
Что касается марионетки, она использует сертификаты ssl для аутентификации клиента. В чем-то похоже на то, как работает ssh.
Да.
Системная аутентификация в системах Linux и UNIX десятилетиями проходила через подключаемые модули аутентификации PAM.
Принцип PAM заключается в том, что если вы хотите использовать новую серверную часть аутентификации, вам не нужно перекомпилировать все приложения, которые используют аутентификацию, такие как системная аутентификация, ssh, ftp, telnet sudo и т. Д. Просто загрузите правильный модуль и все, что использует PAM может автоматически использовать новый сервер аутентификации.
Итак, если ваши приложения используют PAM (а многие, многие используют) и он либо уже существует, либо вы можете создать модуль PAM для своего альтернативного хранилища пользователей / аутентификации, все готово.
pam-pgsql - один из таких модулей PAM, который использует таблицу в базе данных PostGres SQL. Это также упростило бы интеграцию с веб-приложением, или вы могли бы использовать интеграцию PAM вашего веб-сервера также для аутентифицированного доступа.
Кроме того, некоторые приложения имеют встроенную интеграцию с бэкэндами баз данных за пределами PAM.
Ваш марионеточный вопрос действительно должен быть другим вопросом, поскольку он на самом деле не связан.
Я подумал о том, о чем вы спрашиваете немного больше, и один из способов реализовать то, что вы хотите, - это использовать запрос к базе данных из модуля марионетки. Поскольку марионеточный язык - это отдельная вещь, а не расширение языка общего назначения, вам, вероятно, придется написать / найти поставщика ресурсов марионетки, который бы возвращал список имен пользователей, а затем марионетку управлял / etc / passwd и т. Д. файлы на машине.
Это было бы проще реализовать в chef. Я уверен, что в марионетке это возможно. Также возможно (и это лучшая практика IMHO) обновить ваш сервер LDAP из записей базы данных. Это действительно зависит от масштаба, в котором вы работаете, и от того, насколько быстро вы хотите, чтобы изменения распространялись.