以 chef-solo 身份配置服务器?

以 chef-solo 身份配置服务器?

我正在使用knifevanilla Debian 7.0 安装来引导我的虚拟机。在引导阶段,我只是设置sources.list、更新和升级系统,然后安装buil-essentialrsyncruby1.9.1(使用rubygems)。最后一步,我的引导模板chef作为 gem 安装。

砰!此时我的节点已启动并准备好运行配方。但那台机器上仍然只有 root 才能运行chef-solo。这一点让我感到困惑:

  • 我应该使用 root 在目标节点上运行我的配方吗?
  • sudo或者我应该通过使用来引导具有提升权限的单独系统用户nopasswd
  • 或者我应该厨师那个单独的 unix 用户使用了一些秘诀?

问题是,当我跑步的时候knife solocook [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 想要管理的所有文件的权限,您可以以普通用户的身份运行它,但对于非常简单的食谱来说,这会很困难。

相关内容