如何配置puppet sudo模块中的参数来替换客户端sudoer?

如何配置puppet sudo模块中的参数来替换客户端sudoer?

我正在根据此代码在 Puppet 中配置 sudo 模块

class sudo {
 package { sudo:
   ensure => present,
 }
 if $operatingsystem == "Ubuntu" {
   package { "sudo-ldap":
     ensure => present,
     require => Package["sudo"],
   }
 }
 file { "/etc/sudoers":
    owner => "root",
    group => "root",
    mode => 0440,
    source => "puppet://$puppetserver/modules/sudo/etc/sudoers",
    replace => true,
    require => Package["sudo"],
  }
}

并收到以下错误:

如果您已经安排了其他方式来访问 root 帐户,并且您确定这是您想要的,则您可以通过设置环境变量(export SUDO_FORCE_REMOVE=yes)来绕过此检查。

我应该将什么参数以及将其放入代码的哪里,以使 sudo 命令仅满足 ssh-key 而不询问密码。

任何建议都将受到赞赏。

答案1

您收到的错误消息表明,通过安装sudo-ldapdpkg 正在删除sudo,并且删除脚本试图警告您这可能会导致您处于没有 root 访问权限的状态。

您无法从 Puppet 为 dpkg 设置环境变量,因此您需要在已设置环境的情况下启动 Puppet 代理(可能是从中导出/etc/default/puppet或类似内容,例如初始化脚本)。

但是,您下面提出的问题与 sudo 本身有关,并且可能通过使用文件NOPASSWD中的选项来满足/etc/sudoers

username ALL=(ALL) NOPASSWD: ALL

这允许“用户名”对任何用户执行 sudo 操作,无需密码即可运行任何命令。此阶段不检查 SSH 密钥(这没有意义),但用户可以使用 SSH 密钥连接到系统。

答案2

这不起作用,这意味着每次运行 puppet 时,puppet 都会删除 sudo-ldap 并尝试安装 sudo,然后再次安装 sudo-ldap。

通过使用导出语句创建可执行文件并使用 exec 运行它,修复了“export SUDO_FORCE_REMOVE=yes”部分:

> ... 
>     if $ldap {
>     file {
>       '/tmp/delsudo.sh':
>         ensure  => present,
>         mode    => '0700',
>         content => 'export SUDO_FORCE_REMOVE=yes';
>     } ->
>     exec { '/tmp/delsudo.sh':
>       logoutput => on_failure;
>     } 
>     ...

相关内容