我尝试使用puppet向/root/.ssh/authorized_keys
(它有chmod 600)添加一个键。
我使用ssh_authorized_key
资源。
ssh_authorized_key { 'my@mail.com':
ensure => present,
user => 'root',
type => 'ssh-rsa',
key => 'myKey',
}
当我第一次 <{>} 时,它会抛出此错误:
&#34;错误:Puppet :: Util :: FileType :: FileTypeFlat无法写入/root/.ssh/authorized_keys:权限被拒绝 - /root/.ssh/authorized_keys",
然而,它将上述密钥添加到puppet apply ...
,但删除了所有现有密钥。如果我第二次运行它成功完成没有任何错误。
什么可能导致这种奇怪的行为,我该如何解决这个问题? (我的操作系统是CentOS 6)
答案 0 :(得分:3)
以root身份运行的puppet
无法修改文件但可以删除它强烈建议强制访问控制(SELinux)在此处起作用。如果SELinux在强制模式下启用且puppet
的SELinux执行上下文无权修改标记为/root/.ssh/authorized_keys
的文件最初被标记,那么Puppet确实将被拒绝写入该文件的权限。
但是删除原始文件并在其中写一个新文件只需要该木偶能够修改目录,并且木偶对此具有足够的特权是合理的。新文件将带有一个标签,允许木偶修改它,因此后续的木偶运行不会遇到同样的问题。
结论:这可能是与您的系统配置以及如何运行Puppet相关的问题,而不是Puppet本身内部的固有问题。如果我已正确表征它,那么您可以通过在安全上下文中运行puppet apply
命令来避免此问题,该安全上下文具有对您希望它能够修改的所有文件的必要访问权限,方法是重新标记文件以便可访问在您现在使用的上下文中或通过选择不同的上下文。如果您需要,可以在其他论坛中更详细地寻找详细信息,例如Super User或Unix & Linux SE。