Como acionar o período de carência de sudo para um determinado usuário via Puppet?

2

Estou tentando implantar o servidor Redmine via Puppet. O procedimento de instalação usa o Bundle para instalar suas dependências . Ao ser instalado de forma interativa, sudo solicita a senha do usuário quando o Bundle precisa instalar algumas bibliotecas do sistema. Instalar o Redmine como root não é recomendado.

Eu uso o Ubuntu 14.04 64 bit. O puppet é executado dentro do contêiner sem privilégios do LXC.

Eu costumava ter um walkaround que envolvia tocar nos arquivos /var/lib/sudo apropriados antes da instalação do Bundle. Isso é hacky e deixou de funcionar após a atualização recente do sudo.

Existe alguma outra maneira de fazer isso? Ou talvez o sudo permita conceder período de carência não interativamente e eu simplesmente perdi isso?

Meu arquivo sudoers já contém a entrada Defaults !tty_tickets . Eu preferiria não ter, mas sem essa linha eu acho que há menos esperança de solução.

Aqui está o meu recurso forcesudo :

define forcesudo ($user = $name, $notify = $notify) {
  file { "/etc/sudoers.d/fix-${user}": content => "${user} ALL = (root) NOPASSWD: ALL\n" }

  file { "/etc/sudoers.d/tty_tickets": content => "Defaults         !tty_tickets\n" }

  file { "/var/lib/sudo/${user}":
    ensure => directory,
    owner  => 'root',
    mode   => 700,
    group  => $user
  }

  file { "/var/lib/sudo/${user}/0":
    content => '',
    owner   => 'root',
    mode    => 0600,
    group   => $user
  }

  touch { "/var/lib/sudo/${user}":
    notify  => $notify,
    require => File["/var/lib/sudo/${user}"]
  }

  touch { "/var/lib/sudo/${user}/0":
    notify  => $notify,
    require => File["/var/lib/sudo/${user}"]
  }

}

E aqui está o recurso touch :

define touch ($user = "root", $group = "root", $notify = $notify) {
  exec { "touch ${name}":
    command     => "/usr/bin/touch ${name}",
    user        => $user,
    group       => $group,
    notify      => $notify,
    refreshonly => true,
  }
}

Editar:

O problema pode ser ignorado executando o Bundle como root, embora isso seja desencorajado pelo Bundle: Don't run Bundler as root. Bundler can ask for sudo if it is needed, and installing your bundle as root will break this application for all non-root users on this machine.

É assim que é feito pelo módulo de fantoches link .

Como essa é uma solução alternativa em vez de uma correção, a questão permanece.

    
por Adam Ryczkowski 09.03.2015 / 08:20

1 resposta

2

Atualizar :

Você já tentou usar um módulo de marionetes para fazer isso? Há pelo menos um que afirma ser capaz de instalar o redmine. Pode ser mais fácil apenas alterá-lo para atender às suas necessidades.

Você não nos contou como iniciou a instalação do redmine via fantoche.

Tente adicionar isso ao seu arquivo sudoers.d:

Defaults:username !requiretty

Não deve haver necessidade de o usuário iniciar a instalação do redmine ter um tty. Não deve haver nenhum prompt de senha.

Se o sudo ainda solicitar uma senha, então há algo errado em como o instalador da redmine invoca o sudo.

Quanto às suas preocupações de segurança:

A melhor prática seria usar um pacote (RPM, DEB etc.), mesmo que você tenha que criá-lo por conta própria.

A configuração do fantoche para remover privilégios sudo concedidos temporariamente após a conclusão da instalação deve ser suficiente.

    
por 09.03.2015 / 09:01

Tags