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.

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.


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"?


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.