如何使用 saz-sudo puppet 模块通过 hiera 部署我自己的 sudoers 文件?

如何使用 saz-sudo puppet 模块通过 hiera 部署我自己的 sudoers 文件?

我安装了 saz-sudo,并创建了一个基于(我希望)它的 site_sudo 模块。这是我的 site_sudo/manifest/init.pp 文件中的内容:

class { 'site_sudo': }
    sudo::conf { 'web':
      source => 'puppet:///files/etc/sudoers',
    }
    sudo::conf { 'syseng':
      priority => 10,
      content  => "%sysadm ALL=(ALL) NOPASSWD: ALL",
    }

include sudo

无论我做什么,目标上的 sudoers 文件总是被来自 saz-sudo 模块的 sudoers.rhel6 文件覆盖。

我也在使用 common.yaml:

classes:
  - site_sudo

答案1

这是从您的文件中精确复制的吗?该class { 'site_sudo': }行会将该类包含到配置中,而不是像在init.pp模块中那样定义该类。这将阻止文件中的其余配置被应用(因为仅评估此文件以加载该类;其他行不会像在语句中那样被评估import)。

相反,它应该看起来像这样:

class site_sudo { 
  include sudo
  sudo::conf { 'web':
    source => 'puppet:///files/etc/sudoers',
  }
  sudo::conf { 'syseng':
    priority => 10,
    content  => "%sysadm ALL=(ALL) NOPASSWD: ALL",
  }
}

答案2

根据自述,需要向该类发送一个参数sudo

class { 'sudo':
  config_file_replace => true,
}

而不是简单的

include sudo

这会/etc/sudoers破坏声明

答案3

查看自述和阶级sudo::配置

使用的约定相当奇怪(恕我直言,只需向类 sudo 添加一个哈希参数就更容易了)...但它似乎与 Hiera 配合得很好。

对于您的示例值:

classes:
  - sudo 
  - sudo::configs

sudo::configs:
    'syseng':
        'priority'  : 10
        'content'   : "%sysadm ALL=(ALL) NOPASSWD: ALL"

答案4

saz/sudo 旨在使用 sudoers.d 文件并 #include 该文件。这就是为什么它会用干净的文件覆盖您的 sudoers 文件,以确保它是正确的文件。这些 sudo::conf 声明将导致文件显示在 /etc/sudoers.d 中,而不是直接更改 /etc/sudoers。

相关内容