Jak zarządzać zamontowanymi partycjami (fstab + punkty montowania) z kukiełki

14

Chcę zarządzać zamontowanymi partycjami z marionetki, która obejmuje zarówno modyfikowanie, jak /etc/fstabi tworzenie katalogów używanych jako punkty montowania. Typ mountzasobu aktualizuje się fstabdobrze, ale używanie go filedo tworzenia punktów montowania jest nieco trudne.

Na przykład domyślnie właścicielem katalogu jest root, a jeśli root (/) zamontowanej partycji ma innego właściciela, marionetka spróbuje go zmienić i nie chcę tego. Wiem, że mogę ustawić właściciela tego katalogu, ale dlaczego miałbym przejmować się tym, co jest na zamontowanej partycji? Wszystko, co chcę zrobić, to zamontować. Czy istnieje sposób, aby marionetka nie przejmowała się uprawnieniami katalogu używanego jako punkt montowania?

Z tego właśnie korzystam:

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

W razie potrzeby używam puppet-0.25.4-1.fc13.noarch.rpm i puppet-server-0.25.4-1.fc13.noarch.rpm.


PS undefdziała dobrze dla właściciela, grupy i uprawnień, ale nie dla SELinux. Jeśli partycje są już zamontowane, marionetka narzeka:

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'

Uprawnienia zamontowanej partycji to:

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

podczas gdy uprawnienia do punktu montowania utworzonego przez marionetkę to:

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

PPS Zgłosiłem błąd dotyczący tego dziwnego zachowania.

Cristian Ciupitu
źródło

Odpowiedzi:

9

Możesz powiedzieć Puppetowi, aby nie zarządzał danym metaparametrem, ustawiając go na undef.

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

W takim przypadku, jeśli katalog nie istnieje przed montażem, zostanie utworzony jako użytkownik i grupa, które puppetdzostały uruchomione jako (prawdopodobnie root: wheel) i z domyślnym umask. Puppet nie będzie dbał o to, jakie są one ustawione w momencie tworzenia lub podczas kolejnych serii.


Alternatywnie, jeśli chciałbyś wymienić trochę złożoności dla pewności, możesz użyć niestandardowego faktu, aby określić, jakie są aktywne podłączenia oraz instrukcji switch, aby ustawić uprawnienia do katalogu w zależności od tego, czy jest on zamontowany przed, czy po.

Dan Carley
źródło
undefwykonał lewę. Katalogi są tworzone z następującym uprawnieniem, rwxr-xr-x. root root system_u:object_r:mnt_t:s0co jest dla mnie w porządku.
Cristian Ciupitu
1
Dodaj selrange => undef, selrole => undef, seltype => undef, seluser => undef,do odpowiedzi.
Cristian Ciupitu
Czy nie istniałoby ryzyko, że marionetka spróbuje zarządzać rootem systemu plików przy pomocy „sure => mounted”?
7

Naprawdę nie jest to odpowiedź, ale zostało to naprawione w lalce 2.6.7: http://projects.puppetlabs.com/issues/3999

neal
źródło
Tak, masz rację, jakoś zapomniałem o tym pytaniu. Dziękuję Ci!
Cristian Ciupitu,