我正在使用knife
vanilla Debian 7.0 安装来引导我的虚拟机。在引导阶段,我只是设置sources.list
、更新和升级系统,然后安装buil-essential
、rsync
和ruby1.9.1
(使用rubygems
)。最后一步,我的引导模板chef
作为 gem 安装。
砰!此时我的节点已启动并准备好运行配方。但那台机器上仍然只有 root 才能运行chef-solo
。这一点让我感到困惑:
- 我应该使用 root 在目标节点上运行我的配方吗?
sudo
或者我应该通过使用来引导具有提升权限的单独系统用户nopasswd
?- 或者我应该厨师那个单独的 unix 用户使用了一些秘诀?
问题是,当我跑步的时候knife solo
cook [email protected]
我想要厨师(规定)以非 root 用户身份(例如名为 的用户chef
)使用该机器。您知道,我的一些配方将设置sshd
为不接受 root 连接(作为安全措施之一)。
但是如果其他配方将设置名为 unix 的用户,并且为该用户设置chef
另一个用户,那么直到那时我必须sudo
厨师以 root 身份。然后,如果我想以 身份烹饪chef
,我必须knife solo cook ...
再次运行,并使用单独的食谱列表。
对我来说,这是完全反模式的。节点应该一步到位。所以我的问题是,我是否应该放弃以 root 用户身份配置其他用户的想法,并使用 root 运行我的所有厨师食谱?
答案1
在我的项目中,我选择了这种模式(在 AWS 中,“ec2-user”将执行此操作)
使用 nopasswd 通过 sudo 提升引导单独系统用户的权限
以下命令可以正常工作。
ssh wheel_user@some_host sudo /usr/local/bin/chef-solo -c /chef_dir/.chef/solo.rb -j /chef_dir/.chef/chef.json
就我而言,我不会使用“knife solo”,而是使用“chef-solo”。
答案2
Chef 需要以 root 身份运行。一般情况下,除了以 root 进程运行外,没有其他方式来配置盒子。[1]
这意味着您需要以 root 身份运行它,或者通过 sudo 或其他方式以 root 身份在提升的进程中运行它。
您遇到了反模式,因为您使用 chef 的方式不符合预期。即使是 chef-solo,它也被设计为通过 cron 作业或守护进程定期以 root 身份运行。
您的用例可能完全有效,但您可能使用了错误的工具。如果您想要这种仅推送的配置管理,Ansible 可能更适合您尝试执行的操作。如果您不打算定期运行 chef 作为正常工作的一部分,那么 chef 可能不是正确的工具。
[1]- 如果您调整了 chef 想要管理的所有文件的权限,您可以以普通用户的身份运行它,但对于非常简单的食谱来说,这会很困难。