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

puppet nis управление пользователями

Я начал использовать марионетку для управления нашими серверами RHEL. На этом этапе я пытаюсь настроить управление пользователями. Мы запускаем среду NIS в нашем кампусе, поэтому до сих пор я добавлял строку + testuser ::::: в файл / etc / passwd, который затем получал информацию о пользователе через NIS. Я хочу добиться того, чтобы у меня был набор пользователей-администраторов (admin1, admin2 и admin3), которые могут входить в систему на каждой машине, и набор пользователей (user1, user2 и user3), которые различны на каждой машине. В конце файла passwd мне нужна строка ввода + :::::: / sbin / nologin, чтобы иметь доступ ко всей информации о пользователях, но не предоставлять им доступа.

Итак, / etc / passwd на одной машине будет выглядеть так:

+admin1::::::
+admin2::::::
+admin3::::::
+user1::::::
+user2::::::
+::::::/sbin/nologin

и на другой машине

+admin1::::::
+admin2::::::
+admin3::::::
+user1::::::
+user3::::::
+::::::/sbin/nologin

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

Моя первая проблема - как отредактировать файл / etc / passwd, чтобы добавить строки. Кроме того, важно, чтобы сортировка была правильной, чтобы строка nologin находилась в конце. У вас есть идеи, как добиться этого гибким образом?

Спасибо и привет

В последней версии stdlib есть функция - (https://forge.puppetlabs.com/puppetlabs/stdlib) - называется 'file_line', который может помочь вам достичь того, к чему вы стремитесь:

Я не тестировал это, но ресурс, скорее всего, будет выглядеть примерно так:

file_line { 'nis_admin_users':
  path  => '/etc/passwd',
  line  => '+::::::/sbin/nologin',
}

Однако я не уверен, как обеспечить размещение строки прямо внизу, поскольку вы упомянули, что порядок имеет значение. Вероятно, что в исходном файле уже будет такая же строка? Если это так, вы можете использовать дополнительный необязательный параметр для file_line, называемый 'match', и создать регулярное выражение для сопоставления.

В качестве альтернативы, посмотрите на использование augues -> http://projects.puppetlabs.com/projects/1/wiki/puppet_augeas#Using+Puppet+with+Augeas

Марионетка будет редактировать /etc/passwd сам по себе, когда вы добавляете user ресурсы в ваш манифест, такие как

user {
    'admin1':
        ensure => present,
        uid => 1003,
        password => '$6$...',
}

Заказ существующих линий будет в лучшем случае непростым. Puppet изначально не поддерживает ничего подобного. Мой совет - использовать exec ресурс вроде этого:

exec {
    '/path/to/script-that-moves-nologin-line-to-the-end':
        unless => '/script/that/returns-true-if-nologins-line-is-currently-at-the-end'
}

Вы бы хотели, чтобы Puppet выполнил это после синхронизации всех пользовательских ресурсов с вашей системой. Есть разные способы добиться этого, все со своими плюсами и минусами.

Предполагая, что ваши манифесты не слишком сложны, вы, вероятно, можете обойтись глобальными настройками по умолчанию для user тип.

User { before => Exec['/path/to/script-that-moves-nologin-line-to-the-end'] }

Просто будь осторожен, чтобы нет user ресурсы перезаписывают это другим before стоимость.

Другие альтернативы включают

Среди других, которые, вероятно, мыслимы.