Cara mengelola partisi yang dipasang (fstab + mount points) dari boneka

14

Saya ingin mengelola partisi yang dipasang dari boneka yang mencakup memodifikasi /etc/fstabdan membuat direktori yang digunakan sebagai titik pemasangan. The mounttipe sumber daya update fstabbaik-baik saja, tetapi menggunakan fileuntuk menciptakan mount point sedikit rumit.

Sebagai contoh, secara default pemilik direktori adalah root dan jika root (/) dari partisi yang dipasang memiliki pemilik lain, boneka akan mencoba mengubahnya dan saya tidak menginginkannya. Saya tahu bahwa saya dapat mengatur pemilik direktori itu, tetapi mengapa saya harus peduli apa yang ada di partisi yang di-mount? Yang ingin saya lakukan adalah me-mount-nya. Apakah ada cara untuk membuat boneka tidak peduli tentang izin direktori yang digunakan sebagai titik mount?

Inilah yang saya gunakan saat ini:

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

Dalam hal ini penting, saya menggunakan puppet-0.25.4-1.fc13.noarch.rpm dan puppet-server-0.25.4-1.fc13.noarch.rpm.


PS undefberfungsi dengan baik untuk pemilik, grup, dan izin, tetapi tidak untuk SELinux. Jika partisi sudah terpasang, boneka mengeluh:

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'

Izin partisi yang dipasang adalah:

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

sedangkan izin mount point yang dibuat oleh boneka adalah:

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

PPS Saya telah melaporkan bug untuk perilaku aneh ini.

Cristian Ciupitu
sumber

Jawaban:

9

Anda dapat memberi tahu Wayang untuk tidak mengelola metaparameter yang diberikan dengan menyetelnya ke undef.

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

Dalam acara ini, jika direktori tidak ada sebelum pemasangan, itu akan dibuat sebagai pengguna dan grup yang puppetddimulai sebagai (mungkin root: wheel) dan dengan umask default. Wayang tidak akan peduli dengan apa yang akan diatur pada saat penciptaan atau pada proses selanjutnya.


Sebagai alternatif, jika Anda ingin menukar sedikit kompleksitas untuk jaminan, Anda dapat menggunakan fakta khusus untuk menentukan apa pemasangan aktif dan pernyataan sakelar untuk mengatur izin direktori tergantung pada apakah itu dipasang sebelum atau sesudah dipasang.

Dan Carley
sumber
undefmelakukan trik. Direktori dibuat dengan izin berikut rwxr-xr-x. root root system_u:object_r:mnt_t:s0yang tidak masalah bagi saya.
Cristian Ciupitu
1
Silakan tambahkan selrange => undef, selrole => undef, seltype => undef, seluser => undef,jawabannya.
Cristian Ciupitu
Tidakkah akan ada risiko bagi boneka yang mencoba mengelola root dari sistem berkas dengan "pastikan => dipasang"?
7

Tidak benar-benar jawaban tetapi ini telah diperbaiki di wayang 2.6.7: http://projects.puppetlabs.com/issues/3999

neal
sumber
Ya, Anda benar, saya entah bagaimana melupakan pertanyaan ini. Terima kasih!
Cristian Ciupitu
2

Saya memiliki fakta khusus (hanya bekerja dengan ATM Linux) yang akan mengembalikan semua mount lokal yang saat ini terpasang pada suatu sistem. Ini sangat sederhana, tetapi bekerja untuk saya - sepertinya Anda mungkin menemukan kegunaan untuk itu juga. Bagaimanapun, saya melemparkannya ke github: https://github.com/justintime/puppet/tree/master/justintime-localmounts

Justin Ellison
sumber