我正在根据此代码在 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-ldap
dpkg 正在删除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;
> }
> ...