Ruby 在chef中添加sudoers文件在验证时失败 目标
我正在尝试在中添加/编辑sudoers文件 在经历了大量的赛拉赫(和破碎的苏多尔人)之后,我发现并似乎正是我所追求的Ruby 在chef中添加sudoers文件在验证时失败 目标,ruby,chef-infra,verification,sudoers,Ruby,Chef Infra,Verification,Sudoers,我正在尝试在中添加/编辑sudoers文件 在经历了大量的赛拉赫(和破碎的苏多尔人)之后,我发现并似乎正是我所追求的 我的食谱 因此,在我的厨师中,我添加了以下visudocookbook: 食谱:~/chef repo/cookbook/visudo/recipes/allowUpgrade.rb template '/etc/sudoers.d/allowUpgrade' do cookbook 'visudo' source 'allowUpgrade.erb'
我的食谱 因此,在我的厨师中,我添加了以下
visudo
cookbook:
食谱:~/chef repo/cookbook/visudo/recipes/allowUpgrade.rb
template '/etc/sudoers.d/allowUpgrade' do
cookbook 'visudo'
source 'allowUpgrade.erb'
owner'root'
group 'root'
mode '0440'
verify "visudo -c -f %{path}"
end
我的模板:~/chef repo/cookbooks/visudo/templates/allowUpgrade.erb
username ALL=(ALL) NOPASSWD: /usr/local/bin/upgrade
模板和验证工作手动进行 当我使用
sudo nano /etc/sudoers.d/allowUpgrade
(我知道不应该)然后使用
visudo -c -f /etc/sudoers.d/allowUpgrade
我明白了
这意味着我可以跑步
sudo upgrade
没有提示输入sudo密码
运行Chef时验证失败 但是,使用Chef不起作用。我先在本地机器上用
sudo chef client-z--runlist'recipe[visudo::allowUpgrade]'
但是我得到了这个错误
执行操作“在资源模板上创建”时出错[/etc/sudoers.d/allowUpgrade]
Chef::异常::验证失败
为什么chef中的验证失败?我做错了什么?
下面是完整的错误消息
配方:visudo::allowUpgrade
*模板[/etc/sudoers.d/allowUpgrade]操作创建[2017-12-07T08:24:50+01:00]信息:处理模板[/etc/sudoers.d/allowUpgrade]操作创建(visudo::allowUpgrade第7行)
================================================================================
在资源模板[/etc/sudoers.d/allowUpgrade]上执行操作“创建”时出错
================================================================================
Chef::异常::验证失败
----------------------------------
/etc/sudoers.d/allowUpgrade的建议内容验证失败#
资源声明:
---------------------
#在/home/username/chef repo/.chef/local mode cache/cache/cookbooks/visudo/recipes/allowUpgrade.rb中
7:模板“/etc/sudoers.d/allowUpgrade”do
8:所有者“根”
9:组“根”
10:模式“0440”
11:来源“allowUpgrade.erb”
12:验证'visudo-c-f%{path}'
13:完
汇编资源:
------------------
#在/home/username/chef repo/.chef/local mode cache/cache/cookbooks/visudo/recipes/allowUpgrade.rb:7:in“from_file”中声明
模板(“/etc/sudoers.d/allowUpgrade”)do
动作[:创建]
默认\u保护\u解释器:默认值
来源“allowUpgrade.erb”
声明的类型:模板
食谱名称“visudo”
配方名称“allowUpgrade”
所有者“根”
组“根”
模式“0440”
验证[#]
路径“/etc/sudoers.d/allowUpgrade”
结束
更新:
当我不做验证就这么做的时候
template '/etc/sudoers.d/allowUpgrade' do
cookbook 'visudo'
source 'allowUpgrade.erb'
owner 'root'
group 'root'
mode '0440'
verify { 1 == 1 }
end
sudo坏了!在恢复模式下,我检查了根控制台,它看起来和我手动插入它时一样(什么工作正常) 感谢这里的帮助和lineendings
的提示,我终于解决了这个问题
事实上,正如中所述,问题在于线条端点
我在Ubuntu服务器16.04上生成了食谱、食谱和模板,但我在Windows上的存储库中编辑了所有内容
这使得模板(和其他)文件具有CRLF
而不是LF
行尾,因为括号似乎自动使用它运行的操作系统的行尾。这当然使/etc/sudoers.d/allowUpgrade
文件阻止了sudoers
,因为它必须以新行结束
经过一些研究,我发现这是一个问题,可以通过
安装此插件后,我确实可以看到该文件具有CRLF
lineendings
我通过点击CRLF
将其切换到LF
,多亏了插件。现在我的食谱按预期运行,我可以运行了
sudo upgrade
没有提示输入密码-这意味着它可以工作。多亏了这里的帮助和lineendings
的提示,我终于解决了这个问题
事实上,正如中所述,问题在于线条端点
我在Ubuntu服务器16.04上生成了食谱、食谱和模板,但我在Windows上的存储库中编辑了所有内容
这使得模板(和其他)文件具有CRLF
而不是LF
行尾,因为括号似乎自动使用它运行的操作系统的行尾。这当然使/etc/sudoers.d/allowUpgrade
文件阻止了sudoers
,因为它必须以新行结束
经过一些研究,我发现这是一个问题,可以通过
安装此插件后,我确实可以看到该文件具有CRLF
lineendings
我通过点击CRLF
将其切换到LF
,多亏了插件。现在我的食谱按预期运行,我可以运行了
sudo upgrade
没有提示输入密码-这意味着密码有效。在NOPASSWD:和命令之间不应该有空格。我假设您的控制台测试根本不测试渲染文件。顺便说一句,有一个与一个供应商处理的工作fine@Tensibai感谢sudo食谱中的提示。因为在中,它们总是在
NOPASSWD:
和命令之间有一个空格,我认为这是必须的。这并不能解释为什么如果我手动操作,它会起作用。你是从windows盒子里创建食谱的吗?如果模板有CRLF行结尾,而不是LF,这可能是问题所在。我在ubuntu服务器16.04.2上的chef工作站上使用chef generate cookbook/recipe/template
创建它们。我试着在同一台机器上本地运行它。我正在编辑Windows上括号内的食谱。。但我不认为这是个问题,寿