я использую knife
чтобы загрузить мою виртуальную машину с помощью ванильной установки Debian 7.0. На этапе начальной загрузки я просто устанавливаю sources.list
, обновление и обновление системы, затем я устанавливаю buil-essential
, rsync
и ruby1.9.1
(с участием rubygems
). В качестве последнего шага устанавливаю мой шаблон начальной загрузки. chef
как драгоценный камень.
Взрыв! мой узел в этот момент загружен и готов к запуску рецептов. Но на этой машине все еще может работать только root chef-solo
. И вот здесь я запутался:
sudo
с участием nopasswd
?Дело в том, что когда я бегу knife solo
cook some_user@some.node.tld
я бы хотел готовить (предоставить) этот компьютер как пользователь без полномочий root (например, пользователь с именем chef
). Вы знаете, некоторые из моих рецептов будут настроены sshd
не принимать подключения к root (как одна из мер безопасности).
Но если какой-то другой рецепт настроит пользователя unix с именем chef
и еще кое-что sudo
для этого пользователя, то до этого момента я должен готовить как корень. А потом, если я хочу готовить как chef
, Я должен бежать knife solo cook ...
опять же, с отдельным списком рецептов.
И для меня это полный антипаттерн. Узел должен быть подготовлен за один шаг. Итак, мой вопрос: следует ли мне оставить идею инициализации в качестве другого пользователя с правами root и использовать root для запуска всех моих рецептов шеф-повара?
Chef предназначен для запуска с правами root. В общем случае невозможно предоставить ящик, кроме как в качестве корневого процесса. [1]
Это означает, что вам нужно либо запустить его как root, либо запустить в процессе с повышенными привилегиями как root через sudo или другими способами.
Вы сталкиваетесь с анти-шаблоном, потому что используете chef не так, как предполагалось. Даже будучи шеф-поваром, он предназначен для запуска с правами root через задание cron или демон через регулярные промежутки времени.
Ваш вариант использования может быть полностью допустимым, но вы можете использовать неправильный инструмент. Если вам нужно такое управление конфигурацией только с принудительной отправкой, Ansible может лучше подойти для того, что вы пытаетесь сделать. Если вы не представляете себе, что работа шеф-повара через регулярные промежутки времени является частью вашей обычной работы, то шеф-повар может быть не тем инструментом.
[1] - Если вы настроите все права доступа к файлам, которыми хочет управлять шеф-повар, вы можете запустить его как обычный пользователь, это сложно для более чем очень простых рецептов.
В своем проекте я выбираю этот шаблон (в AWS это будет делать ec2-user)
загрузите отдельного системного пользователя с повышенными правами с помощью sudo с nopasswd
и следующая команда работает нормально.
ssh wheel_user@some_host sudo /usr/local/bin/chef-solo -c /chef_dir/.chef/solo.rb -j /chef_dir/.chef/chef.json
В моем случае я использую не «нож соло», а просто «повар-соло».