Puppet: ssh - authorized_keys - Permissão negada

1

Todas as nossas ~ / .ssh / authorized_keys foram criadas com o modo 0400 (usuário, somente leitura). Queremos gerenciar esses arquivos com o Puppet, então criei o seguinte:

class users {
 user { 'julia':
  home           => '/home/julia',
  ensure         => present,
  purge_ssh_keys => true,
 }
}

ssh_authorized_key { 'julia@dirty':
  ensure => present,
  user   => 'julia',
  type   => 'ssh-ed25519',
  key    => 'AAAAC3NzaC1lvvvvvvxxxxxO1mXiiyj3Af17MviiiiiiiifffffzU5e//e/ffff/y',
}

No entanto, quando eu executo 'puppet agent --test' em um nó, recebo o seguinte erro:

Error: Puppet::Util::FileType::FileTypeFlat could not write /home/julia/.ssh/authorized_keys: Permission denied - /home/julia/.ssh/authorized_keys
Error: /Stage[main]/Profile::Base/Ssh_authorized_key[julia@dirty]: Could not evaluate: Puppet::Util::FileType::FileTypeFlat could not write /home/julia/.ssh/authorized_keys: Permission denied - /home/julia/.ssh/authorized_keys

Eu posso "corrigir" o problema com o seguinte:

file { "/home/julia/.ssh/authorized_keys":
    ensure => present,
    mode => '0600',
}

Estou surpreso que isso seja um problema. Eu pensei que isso funcionaria com qualquer modo válido no arquivo (0600 ou 0400). Não consigo encontrar nada na documentação do módulo de forja sobre modos válidos ou modificando modos. O parâmetro 'file' é uma solução aceitável, mas não funciona como aninhado na seção 'ssh_authorized_key', portanto, não é tão interessante quanto gostaríamos. Além disso, não sei como fazer isso para muitos usuários.

Você pode oferecer sugestões para lidar com isso de uma maneira melhor?

Existem algumas postagens na pesquisa que pedem esse mesmo problema, mas não há boas soluções. Aqui está um de 7 anos atrás. Eu não acho que o patch tenha feito isso na base de código: link

    
por me2017 21.11.2017 / 06:33

1 resposta

1

Acho que authorized_keys precisa ser 0600. 0400 é somente leitura, o que significa que nem o usuário pode escrevê-lo!

A razão pela qual o "modo" não funciona no recurso ssh_authorized_key é que esse recurso apenas adiciona uma entrada, não gerencia o arquivo.

Em termos de solução alternativa / gerenciamento de muitos usuários, eu faria assim (no Puppet 3, mas tenho certeza que isso é melhor em Puppet4 / 5 usando alguma iteração?):

define myuser (
  $user,
  $key,
) {
  user { $user:
    home           => "/home/${user}",
    ensure         => present,
    purge_ssh_keys => true,
  }
  file { "/home/${user}/.ssh/authorized_keys":
    ensure => file,
    mode => "0600",
    require => User[$user],
  }
  ssh_authorized_key { "${user}@${host}":
    ensure => present,
    user   => $user,
    type   => 'ssh-ed25519',
    key    => "${key}",
  }
}

que você pode usar com:

node default {
  myuser { "shearn89":
    user => "shearn89",
    key => "somelongasciistring",
  }
}

Você também pode fazer algumas coisas inteligentes com a definição de usuários (possivelmente no Hiera) e depois criar os recursos .

Você também pode usar uma ferramenta como o Ansible para executar uma tarefa em toda a sua plataforma e corrigir o arquivo. Descobri que Ansible complementa Puppet bem quando usado para esse tipo de tarefa de orquestração / one-off.

    
por 21.11.2017 / 10:37

Tags