я попросил аналогичный вопрос сегодня о том, как аутентифицировать пользователей моего сервера в базе данных postgres вместо /etc/passwd
файл или LDAP, и я получил там несколько полезных ответов. Я понял, что мне нужно позаботиться о трех элементах аутентификации на моем сервере: вход в систему, установка их uid и gid и предоставление им sudo
доступ при необходимости.
Мне удалось найти модули NSS и PAM для postgres, но нет информации о том, как использовать базу данных, особенно postgres, для sudo
вместо того sudoers
и sudoers.d
. Я пытался найти плагин для sudo, но похоже, что он не существует - я нашел только один плагин на страница плагина веб-сайта sudo.
Можно ли использовать внешнюю базу данных для sudo
?
На вашем месте я бы использовал LDAP для решения всех трех ваших проблем:
Вход / выход пользователей (аутентификация).
pam_ldap
/nss_ldap
, pam_ldapd
, или любое количество других вариантов существует здесь.
Все они хорошо зарекомендовали себя и активно используются (что означает, что поставщики ОС следят за их работой), так почему бы не использовать их?
Установка их UID и GID (атрибутов. Также такие вещи, как домашний каталог, оболочка, и т.д).
Уже решено теми же инструментами, которые решают (1) - в каталоге LDAP есть информация о пользователях и группах благодаря RFC 2307 расширения схемы который поддерживает практически каждый сервер LDAP.
Выдача людям sudo (особый случай авторизации).
Sudo может разговаривать с каталогом LDAP, и он поставляется со спецификацией схемы.
Добавить это в свой каталог несложно, и изменения принимаются мгновенно.
Если у вас есть религиозные возражения против LDAP и вы настаиваете на управлении этой информацией в базе данных SQL, вы можете использовать SQL как серверную часть для OpenLDAP, но, честно говоря, я думаю, что это было бы неправильно - данные не являются "реляционными" по своей природе, и вы не должны пытаться заставить их быть такими.
Если вы хотите сделать это, потому что у вас уже есть существенные вложения в хранилище пользователей с поддержкой SQL, вы можете рассмотреть это как переходный шаг к подключению этих пользователей к LDAP и преобразованию других ваших приложений для аутентификации / авторизации в каталоге LDAP.
LDAP / RFC 2307 - действительно хорошая модель для управления учетными записями пользователей (хотя отнюдь не идеальная - у нее есть несколько безумных вариантов, с которыми я не согласен).
В качестве бонуса целая куча других вещей разговаривать по LDAP изначально (например, Microsoft Active Directory - это просто LDAP с некоторыми дополнительными функциями, на которых висит, и MS поддерживает расширение AD с помощью схемы RFC 2307; Apache имеет модули аутентификации, которые говорят на LDAP), поэтому, используя LDAP, вы на правильном пути к единый вход и может взаимодействовать с продуктами Microsoft, что является хорошей возможностью.
У вас есть два других варианта, но они действительно не привлекательны, ИМХО:
Напиши sudo
плагин для просмотра базы данных.
Это имеет то преимущество, что выполняется в режиме реального времени, как при использовании LDAP. Вы должны быть довольно приличным программистом (или иметь такой доступный), но если бы вы написали такой плагин, я уверен, вы могли бы открыть его исходный код и найти людей, желающих помочь с разработкой.
Храните данные в базе данных и синхронизируйте серверы с заданием cron.
В основном генерировать новый sudoers
file периодически - действительно легко кодировать, но это определенно неэлегантный взлом. Тот факт, что обновления не происходят в режиме реального времени, означает, что они не запускаются во многих средах.
Обычный способ - относиться к sudo как к набору файлов конфигурации. Управляйте ими с помощью любого выбранного вами управления конфигурацией, пусть это будет chef, puppet, CFengine, subversion, git и т. Д., Или просто отредактируйте их вручную.
Когда привилегии / правила в sudo предоставляются группам, а не отдельным лицам, по моему опыту, они становятся довольно статичными, команде администраторов баз данных необходимо su - oracle; su - sybase ; /etc/init.d/oracle * ; /etc/init.d/sybase *
и что больше всего меняется - это члены команды администраторов баз данных.
Затем ваше управление sudo сводится к аутентификации, управлению пользователями и группами. Вот где снова появляется PAM. Настройте PAM для использования централизованно управляемой базы данных пользователей, пусть это будет LDAP, NIS, Active Directory (LDAP + Kerberos) или даже база данных MySQL или Postgresql. sudo уже использует PAM по умолчанию.
Теперь просто управляйте своей базой данных пользователей / групп с помощью любых инструментов, которые работают лучше всего.