Como gerenciar partições montadas (fstab + pontos de montagem) do fantoche

14

Eu quero gerenciar as partições montadas do fantoche, que inclui modificar /etc/fstabe criar os diretórios usados ​​como pontos de montagem. O mounttipo de recurso é atualizado fstab, mas o uso filepara criar os pontos de montagem é um pouco complicado.

Por exemplo, por padrão, o proprietário do diretório é root e se a raiz (/) da partição montada tiver outro proprietário, o puppet tentará alterá-lo e eu não quero isso. Eu sei que posso definir o proprietário desse diretório, mas por que devo me importar com o que está na partição montada? Tudo o que eu quero fazer é montá-lo. Existe uma maneira de fazer o fantoche não se importar com as permissões do diretório usado como o ponto de montagem?

É isso que estou usando agora:

define extra_mount_point(
    $device,
    $location = "/mnt",
    $fstype = "xfs",
    $owner = "root",
    $group = "root",
    $mode = 0755,
    $seltype = "public_content_t"
    $options = "ro,relatime,nosuid,nodev,noexec",
) {
    file { "${location}/${name}":
        ensure  => directory,
        owner   => "${owner}",
        group   => "${group}",
        mode    => $mode,
        seltype => "${seltype}",
    }

    mount { "${location}/${name}":
        atboot  => true,
        ensure  => mounted,
        device  => "${device}",
        fstype  => "${fstype}",
        options => "${options}",
        dump    => 0,
        pass    => 2,
        require => File["${location}/${name}"],
    }
}

extra_mount_point { "sda3": 
    device   => "/dev/sda3",
    fstype   => "xfs",
    owner    => "ciupicri",
    group    => "ciupicri",
    $options => "relatime,nosuid,nodev,noexec",
}

Caso isso importe, estou usando o puppet-0.25.4-1.fc13.noarch.rpm e o puppet-server-0.25.4-1.fc13.noarch.rpm.


O PS undeffunciona bem para o proprietário, grupo e permissões, mas não para o SELinux. Se as partições já estiverem montadas, o fantoche reclama:

puppetd[18052]: Failed to set SELinux context system_u:object_r:public_content_t:s0 on /mnt/sda3
puppetd[18052]: (/File[/mnt/sda3]/seluser) seluser changed 'unconfined_u' to 'system_u'
puppetd[18052]: Failed to set SELinux context unconfined_u:object_r:mnt_t:s0 on /mnt/sda3
puppetd[18052]: (/File[/mnt/sda3]/seltype) seltype changed 'public_content_t' to 'mnt_t'

As permissões da partição montada são:

drwxr-xr-x. root root unconfined_u:object_r:public_content_t:s0 /mnt/sda3/

enquanto as permissões do ponto de montagem criadas pelo fantoche são:

 drwxr-xr-x. root root system_u:object_r:mnt_t:s0       /mnt/sda3/

PPS Eu relatei um bug para esse comportamento estranho.

Cristian Ciupitu
fonte

Respostas:

9

Você pode dizer ao Puppet para não gerenciar um determinado parâmetro, configurando-o para undef.

file { "${location}/${name}":
    ensure                  => directory,
    owner                   => undef,
    group                   => undef,
    mode                    => undef,
    selinux_ignore_defaults => true,
}

Nesse caso, se o diretório não existir antes da montagem, ele será criado como usuário e grupo puppetdiniciado como (presumivelmente root: wheel) e com umask padrão. O Puppet não se importará com o que eles estão definidos no momento da criação ou em quaisquer execuções subsequentes.


Como alternativa, se você quiser trocar um pouco de complexidade por garantia, poderá usar um fato personalizado para determinar quais são as montagens ativas e uma instrução switch para definir as permissões do diretório, dependendo de serem pré ou pós-montadas.

Dan Carley
fonte
undeffez o truque. Os diretórios são criados com a seguinte permissão, o rwxr-xr-x. root root system_u:object_r:mnt_t:s0que é bom para mim.
Cristian Ciupitu
1
Por favor, adicione selrange => undef, selrole => undef, seltype => undef, seluser => undef,à resposta.
Cristian Ciupitu
Não haveria risco de fantoches tentando gerenciar a raiz do sistema de arquivos com "garantir => montado"?
7

Não é realmente uma resposta, mas isso foi corrigido no boneco 2.6.7: http://projects.puppetlabs.com/issues/3999

neal
fonte
Sim, você está certo, de alguma maneira eu esqueci essa pergunta. Obrigado!
precisa saber é o seguinte