Wie man gemountete Partitionen (fstab + mount points) von Puppet aus verwaltet

14

Ich möchte die gemounteten Partitionen von Puppet aus verwalten, wozu sowohl das Ändern /etc/fstabals auch das Erstellen der als Mountpunkte verwendeten Verzeichnisse gehört. Der mountRessourcentyp wird problemlos aktualisiert fstab, die Verwendung filezum Erstellen der Einhängepunkte ist jedoch etwas schwierig.

Beispielsweise ist der Eigentümer des Verzeichnisses standardmäßig root, und wenn der Stamm (/) der bereitgestellten Partition einen anderen Eigentümer hat, versucht Puppet, diesen zu ändern, und ich möchte dies nicht. Ich weiß, dass ich den Eigentümer dieses Verzeichnisses festlegen kann, aber warum sollte es mich interessieren, was sich auf der bereitgestellten Partition befindet? Alles was ich tun möchte, ist es zu montieren. Gibt es eine Möglichkeit, Puppet dazu zu bringen, sich nicht um die Berechtigungen des Verzeichnisses zu kümmern, das als Mount-Punkt verwendet wird?

Das verwende ich gerade:

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

Falls es darauf ankommt, verwende ich puppet-0.25.4-1.fc13.noarch.rpm und puppet-server-0.25.4-1.fc13.noarch.rpm.


PS undeffunktioniert gut für Eigentümer, Gruppen und Berechtigungen, aber nicht für SELinux. Wenn die Partitionen bereits montiert sind, beschwert sich Marionette:

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'

Die Berechtigungen der gemounteten Partition sind:

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

während die Berechtigungen des von puppet erstellten Einhängepunkts sind:

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

PPS Ich habe einen Fehler für dieses seltsame Verhalten gemeldet .

Cristian Ciupitu
quelle

Antworten:

9

Sie können Puppet anweisen, einen bestimmten Metaparameter nicht zu verwalten, indem Sie ihn auf einstellen undef.

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

Wenn das Verzeichnis vor dem Mounten nicht existiert, wird es in diesem Fall als der Benutzer und die Gruppe erstellt, die puppetdals (vermutlich root: wheel) und mit einer Standard-umask gestartet wurden. Puppet ist es egal, auf was diese zum Zeitpunkt der Erstellung oder bei nachfolgenden Läufen eingestellt sind.


Wenn Sie jedoch ein wenig Komplexität gegen Sicherheit eintauschen möchten, können Sie mithilfe eines benutzerdefinierten Fakts bestimmen, was die aktiven Bereitstellungen sind, und mithilfe einer switch-Anweisung die Verzeichnisberechtigungen festlegen, je nachdem, ob sie vor oder nach der Bereitstellung vorliegen.

Dan Carley
quelle
undefhat den Trick gemacht. Die Verzeichnisse werden mit der folgenden Erlaubnis erstellt, rwxr-xr-x. root root system_u:object_r:mnt_t:s0die für mich in Ordnung ist.
Cristian Ciupitu
1
Bitte ergänzen Sie selrange => undef, selrole => undef, seltype => undef, seluser => undef,die Antwort.
Cristian Ciupitu
Wäre es nicht riskant, dass Puppet versucht, das Stammverzeichnis des Dateisystems mit "verify => mounted" zu verwalten?
7

Keine wirkliche Antwort, aber dies wurde in Puppet 2.6.7 behoben: http://projects.puppetlabs.com/issues/3999

Neal
quelle
Ja, du hast recht, ich habe diese Frage irgendwie vergessen. Vielen Dank!
Cristian Ciupitu
2

Ich habe eine benutzerdefinierte Tatsache (funktioniert nur mit Linux ATM), die alle derzeit gemounteten lokalen Bereitstellungen auf einem System zurückgibt. Es ist schrecklich einfach, funktioniert aber für mich - es sieht so aus, als ob Sie auch eine Verwendung dafür finden könnten. Wie auch immer, ich habe es auf Github geworfen: https://github.com/justintime/puppet/tree/master/justintime-localmounts

Justin Ellison
quelle