Как создать настраиваемые файлы sudoers в puppet в зависимости от среды, в которой они развернуты?
Системные администраторы присутствуют в файлах sudoers во всех средах, а другие sudoers - нет. В разных средах есть немного разные sudoers. В большинстве случаев 90% пользователей одинаковы, а 10% различаются, поэтому у нас не может быть только одного файла sudoers для всего.
Прямо сейчас мы используем puppet с 10 различными файлами с такими именами, как sudoers.production1, sudoers.production2, sudoers.production3, sudoers.testing1, sudoers.staging1 и так далее.
Затем Puppet выбирает файл для развертывания на основе $ домена сервера (например, dbserver.staging1.acme.com) или $hardwaremodel. Он работает нормально, но это кошмар, чтобы поддерживать так много файлов.
Я хотел бы автоматически генерировать файлы sudoers на основе домена сервера и иметь только один большой файл со всеми разрешениями sudoers для всех пользователей и всех сред. Что-то похожее на:
User_Alias ADMINS = abe, bob, carol, dave
case $domain {
"staging1.acme.com" {
#add dev1,dev2,tester1,tester2 to sudoers file
}
"testing2.acme.com" {
#add tester1, tester3, tester4 to sudoers file
}
Какой лучший способ пойти по этому поводу? Предложения по альтернативам приветствуются. Буду признателен за любые советы.
Обновление 1:
По соображениям безопасности мы не будем объединять кучу файлов из папки, расположенной на марионеточном клиенте, на случай, если кто-то поместит туда файл (злонамеренно или нет) и либо сломает объединенный файл, либо вставит в него что-то.
Для удобства использования мы хотели бы, чтобы количество файлов, связанных с sudoers (фрагментированных или полных) на марионеточном сервере, составляло 3 (prod/stage/test) или, предпочтительно, 1 файл. этот файл (каким-то образом) будет генерировать файлы sudoers на марионеточном сервере и отправлять по одному настроенному файлу каждому марионеточному клиенту.
Целью этого будет только поиск имени пользователя в одном файле и его удаление быстрее, чем в 11 файлах. При добавлении пользователя в группу сред это будет не так быстро, но нужно будет открыть и просмотреть только один файл, что значительно уменьшит вероятность пропуска.
наша версия Sudo - 1.6.9p8, поэтому мы не можем использовать папку /sudoers.d, только файл sudoers.
Update2:
Я гуглил кое-что, и я только что нашел это, на что потратил последний час, глядя на:
https://github.com/saz/puppet-sudo
Я не уверен, но похоже, что это может сработать. Кто-нибудь использовал или слышал об этом?
3 ответа
Какая версия sudo? Поддерживает ли ваша версия sudo использование #includedir
возможность разбить вещи на каталог фрагментов /etc/sudoers.d/
?
Если это так, то я предлагаю вам использовать эту функциональность для создания вашей конфигурации.
Получите ваш основной файл конфигурации /etc/sudoers
это включает в себя все настройки, общие для каждого хоста, которым вы управляете. Затем настройте ролевую конфигурацию в файл в /etc/sudoers.d/
,
Каждый класс или раздел кукол отвечает за обновление небольшой части конфигурации sudo, непосредственно связанной с этим классом.
Посмотрите на виртуальные ресурсы и поймите - http://docs.puppetlabs.com/guides/virtual_resources.html - это именно так - в некоторых системах вы "понимаете" ресурс, а в других - нет.
Вы можете использовать шаблоны Puppet... Конфигурация для конкретного сайта с небольшим фрагментом / переменной ruby для нужного вам пользователя. (Пример выложу позже)
Традиционный способ справиться с этим - использовать определения групп вместо named-users в вашем /etc/sudoers
, Это может быть меньше хлопот в управлении.