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

Как сгенерировать настроенные файлы sudoers в марионетке в зависимости от среды, в которой они развернуты?

системные администраторы присутствуют в файлах sudoers всех сред, но другие sudoers нет. В разных средах есть немного разные sudoers. В большинстве случаев 90% пользователей одинаковы, а 10% различаются, поэтому у нас не может быть только один файл sudoers для всех.

Сейчас мы используем марионетку с 10 различными файлами с такими именами, как sudoers.production1, sudoers.production2, sudoers.production3, sudoers.testing1, sudoers.staging1 и т. Д.

Затем Puppet выбирает файл для развертывания на основе $ domain сервера (например, 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.

Обновление2:

Я немного погуглил, и я только что нашел это, на что я потратил последний час, глядя на:

https://github.com/saz/puppet-sudo#readme

Я не уверен, но похоже, что это может помочь. Кто-нибудь им пользовался или слышал об этом?

Какая версия sudo? Ваша версия sudo поддерживает использование #includedir возможность разбить вещи на каталог фрагментов /etc/sudoers.d/?

Если да, то я предлагаю вам использовать эту функциональность для создания вашей конфигурации.

Ваш основной файл конфигурации доставлен в /etc/sudoers который включает в себя все настройки, общие для каждого хоста, которым вы управляете. Затем поместите конфигурацию для конкретной роли в файл внутри /etc/sudoers.d/.

Каждый класс или секция марионетки отвечает за обновление небольшой части конфигурации sudo, непосредственно связанной с этим классом.

Вы можете взглянуть на виртуальные ресурсы и понять: https://puppet.com/docs/puppet/latest/lang_virtual.html.

Это именно так: в некоторых системах вы «осознаете» ресурс, а в некоторых - нет.

Вы можете использовать шаблоны Puppet ... Конфигурация для конкретного сайта с небольшим фрагментом / переменной ruby ​​для нужного вам пользователя. (Пример я выложу позже)

Традиционный способ справиться с этим - использовать определения групп вместо именованных пользователей в вашем /etc/sudoers. Управлять этим, возможно, будет проще.