Назад | Перейти на главную страницу

Использовать базу данных для sudo

я попросил аналогичный вопрос сегодня о том, как аутентифицировать пользователей моего сервера в базе данных postgres вместо /etc/passwd файл или LDAP, и я получил там несколько полезных ответов. Я понял, что мне нужно позаботиться о трех элементах аутентификации на моем сервере: вход в систему, установка их uid и gid и предоставление им sudo доступ при необходимости.

Мне удалось найти модули NSS и PAM для postgres, но нет информации о том, как использовать базу данных, особенно postgres, для sudo вместо того sudoers и sudoers.d. Я пытался найти плагин для sudo, но похоже, что он не существует - я нашел только один плагин на страница плагина веб-сайта sudo.

Можно ли использовать внешнюю базу данных для sudo?

На вашем месте я бы использовал LDAP для решения всех трех ваших проблем:

  1. Вход / выход пользователей (аутентификация).
    pam_ldap/nss_ldap, pam_ldapd, или любое количество других вариантов существует здесь.
    Все они хорошо зарекомендовали себя и активно используются (что означает, что поставщики ОС следят за их работой), так почему бы не использовать их?

  2. Установка их UID и GID (атрибутов. Также такие вещи, как домашний каталог, оболочка, и т.д).
    Уже решено теми же инструментами, которые решают (1) - в каталоге LDAP есть информация о пользователях и группах благодаря RFC 2307 расширения схемы который поддерживает практически каждый сервер LDAP.

  3. Выдача людям 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, что является хорошей возможностью.


У вас есть два других варианта, но они действительно не привлекательны, ИМХО:

  1. Напиши sudo плагин для просмотра базы данных.
    Это имеет то преимущество, что выполняется в режиме реального времени, как при использовании LDAP. Вы должны быть довольно приличным программистом (или иметь такой доступный), но если бы вы написали такой плагин, я уверен, вы могли бы открыть его исходный код и найти людей, желающих помочь с разработкой.

  2. Храните данные в базе данных и синхронизируйте серверы с заданием 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 по умолчанию.

Теперь просто управляйте своей базой данных пользователей / групп с помощью любых инструментов, которые работают лучше всего.