Impor permissões de diretórios home com hash com fantoche

3

Os diretórios iniciais em nosso ambiente são codificados usando as duas primeiras letras de um nome de usuário. Por exemplo, o diretório inicial do usuário lars é /home/l/a/lars .

Eu gostaria de usar o fantoche para impor as permissões do modo 0700 nos diretórios iniciais do usuário, mas não sei como segmentar os diretórios base. Essencialmente, eu gostaria de fazer isso:

chmod 700 /home/*/*/*

Na ausência de hash isso seria fácil (usando por exemplo recurse e recurselimit ), mas o hashing me deixou procurando uma solução.

UPDATE : Eu não estou olhando para enumerar nossos usuários no fantoche (porque os diretórios pessoais são criados como parte do nosso processo de gerenciamento de contas).

Pensando nisso, eu também me tornei mais confuso. Mesmo se os nossos diretórios pessoais não fossem criptografados, como eu conseguiria que o fantoche aplicasse permissões ao conteúdo de um diretório sem afetar o próprio diretório principal? Eu estava pensando em algo assim:

file { '/home:
  ensure => directory,
  mode => 0700,
  recurse => true,
  recurselimit => 1,
  }

Mas isso aplicaria o modo a /home e seu conteúdo imediato. Modo 700 em /home/lars está bem. O modo 700 em /home é um grande problema. Isso é possível?

    
por larsks 09.09.2011 / 17:35

3 respostas

2

Parece que você enfrentou uma das limitações do fantoche. Eu acabei de escrever um script de shell que faria isso.

Outra possível solução pode ser escrever um plugin para fantoche que permita usar um novo tipo de dados (digamos, file_wildcard) ou algo parecido. Isso deveria ser possível escrever um em rubi, mas eu nunca fiz isso.

    
por 11.09.2011 / 09:34
0

O Puppet não entende curingas no tipo de arquivo. Se você usa algo assim:

file { "/home/*":
            ensure  => directory,
            owner   => $username,
            group   => $username,
            mode    => 700,
            require => [ User[$username], Group[$username] ]
    }

ele criará a pasta /home/\* .

Portanto, você deve criar a estrutura de diretório que deseja como abaixo:

define add_user ( $fullname, $uid ) {

    $username = $title
    $firstletter = regsubst($username, '(.).*', '')
    $secondletter = regsubst($username, '.(.).*', '')

    user { $username:
            comment => "$fullname",
            home    => "/home/$firstletter/$secondletter/$username",
            shell   => "/bin/bash",
            uid     => $uid,
            require => [ File["/home/$firstletter"], File["/home/$firstletter/$secondletter"] ]
    }

    group { $username:
            gid     => $uid,
            require => User[$username]
    }

    file { "/home/$firstletter":
            ensure  => directory,
            owner   => root,
            group   => root,
            mode    => 755
    }
    file { "/home/$firstletter/$secondletter":
            ensure  => directory,
            owner   => root,
            group   => root,
            mode    => 755,
            require => File["/home/$firstletter"]
    }
    file { "/home/$firstletter/$secondletter/$username":
            ensure  => directory,
            owner   => $username,
            group   => $username,
            mode    => 700,
            require => [ File["/home/$firstletter/$secondletter"], User[$username], Group[$username] ]
    }

    file { "/home/$firstletter/$secondletter/$username/.ssh":
            ensure  => directory,
            owner   => $username,
            group   => $username,
            mode    => 700,
            require => File["/home/$firstletter/$secondletter/$username"]
    }

    # now make sure that the ssh key authorized files is around
    file { "/home/$firstletter/$secondletter/$username/.ssh/authorized_keys":
            ensure  => present,
            owner   => $username,
            group   => $username,
            mode    => 600,
            require => File["/home/$firstletter/$secondletter/$username"]
    }
}

e ligue para:

node 'test_node' {
    add_user { lars:
        fullname    => "Larry Page",
        uid         => 510
    }
}
    
por 10.09.2011 / 16:13
0

Você precisa declarar o (s) recurso (s) de arquivo que você deseja que o Puppet gerencie (o Puppet é uma linguagem declarativa ...) como fantoche ou como você está usando o exec digite para executar o trecho de código chmod que você forneceu.

    
por 14.09.2011 / 12:23