Cómo administrar particiones montadas (fstab + puntos de montaje) desde la marioneta

14

Quiero administrar las particiones montadas desde la marioneta, que incluye modificar /etc/fstaby crear los directorios utilizados como puntos de montaje. El mounttipo de recurso se actualiza fstabmuy bien, pero usarlo filepara crear los puntos de montaje es un poco complicado.

Por ejemplo, por defecto, el propietario del directorio es root y si la raíz (/) de la partición montada tiene otro propietario, Puppet intentará cambiarlo y no quiero esto. Sé que puedo configurar el propietario de ese directorio, pero ¿por qué debería importarme lo que hay en la partición montada? Todo lo que quiero hacer es montarlo. ¿Hay alguna manera de hacer que Puppet no se preocupe por los permisos del directorio utilizado como punto de montaje?

Esto es lo que estoy usando ahora:

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",
}

En caso de que sea importante, estoy usando puppet-0.25.4-1.fc13.noarch.rpm y puppet-server-0.25.4-1.fc13.noarch.rpm.


PS undeffunciona bien para el propietario, el grupo y los permisos, pero no para SELinux. Si las particiones ya están montadas, la marioneta se queja:

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'

Los permisos de la partición montada son:

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

mientras que los permisos de punto de montaje creados por puppet son:

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

PPS He informado un error para este comportamiento extraño.

Cristian Ciupitu
fuente

Respuestas:

9

Puede indicarle a Puppet que no administre un metaparámetro dado configurándolo en undef.

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

En este caso, si el directorio no existe antes del montaje, se creará como el usuario y el grupo que puppetdse inició como (presumiblemente root: wheel) y con una umask predeterminada. Puppet no se preocupará por lo que están configurados en el momento de la creación o en cualquier ejecución posterior.


Alternativamente, si desea cambiar un poco la complejidad por seguridad, puede usar un hecho personalizado para determinar cuáles son los montajes activos y una instrucción de cambio para establecer los permisos del directorio dependiendo de si está pre o post montado.

Dan Carley
fuente
undefHizo el truco. Los directorios se crean con el siguiente permiso, lo rwxr-xr-x. root root system_u:object_r:mnt_t:s0cual está bien para mí.
Cristian Ciupitu
1
Por favor agregue selrange => undef, selrole => undef, seltype => undef, seluser => undef,a la respuesta.
Cristian Ciupitu
¿No habría riesgo de que la marioneta intente administrar la raíz del sistema de archivos con "sure => montado"?