วิธีจัดการพาร์ติชันที่เมาท์ (fstab + จุดเมานท์) จากหุ่นเชิด


14

ฉันต้องการจัดการพาร์ติชั่นที่ติดตั้งจากหุ่นเชิดซึ่งมีทั้งการแก้ไข/etc/fstabและการสร้างไดเรกทอรีที่ใช้เป็นจุดเมานท์ การmountปรับปรุงประเภททรัพยากรfstabทำได้ดี แต่การใช้fileสำหรับสร้างจุดเมานท์นั้นค่อนข้างยุ่งยาก

ตัวอย่างเช่นโดยค่าเริ่มต้นเจ้าของไดเรกทอรีคือรูทและหากรูท (/) ของพาร์ทิชันที่เมาท์มีเจ้าของอื่นหุ่นเชิดจะพยายามเปลี่ยนมันและฉันไม่ต้องการสิ่งนี้ ฉันรู้ว่าฉันสามารถตั้งค่าเจ้าของไดเรกทอรีนั้นได้ แต่ทำไมฉันต้องดูแลสิ่งที่อยู่ในพาร์ติชันที่เมาท์? สิ่งที่ฉันต้องการทำคือติดตั้ง มีวิธีที่จะทำให้หุ่นเชิดไม่สนใจเกี่ยวกับสิทธิ์ของไดเรกทอรีที่ใช้เป็นจุดเชื่อมต่อหรือไม่?

นี่คือสิ่งที่ฉันใช้อยู่ตอนนี้:

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

ในกรณีที่เป็นเรื่องสำคัญฉันใช้ puppet-0.25.4-1.fc13.noarch.rpm และ puppet-server-0.25.4-1.fc13.noarch.rpm


PS undefทำงานได้ดีสำหรับเจ้าของกลุ่มและสิทธิ์ แต่ไม่ใช่สำหรับ SELinux หากพาร์ติชั่นติดตั้งอยู่แล้วหุ่นเชิดจะบ่น:

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'

สิทธิ์ของพาร์ติชันที่เมาท์คือ:

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

ในขณะที่สิทธิ์ของจุดเชื่อมต่อที่สร้างขึ้นโดยหุ่นเชิดคือ:

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

PPS ฉันได้รายงานข้อบกพร่องสำหรับพฤติกรรมแปลก ๆ นี้แล้ว

คำตอบ:


9

คุณสามารถบอกหุ่นไม่ให้จัดการ metaparameter undefกำหนดโดยการตั้งค่าให้

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

ในกรณีนี้ถ้าไม่มีไดเรกทอรีก่อนที่จะทำการติดตั้งมันจะถูกสร้างขึ้นเป็นผู้ใช้และกลุ่มที่puppetdเริ่มต้นเป็น (น่าจะเป็นรูท: ล้อ) และด้วย umask เริ่มต้น หุ่นเชิดจะไม่สนใจว่าสิ่งเหล่านี้จะถูกตั้งค่าอย่างไรในเวลาที่สร้างหรือในการวิ่งครั้งต่อ ๆ ไป


อีกทางเลือกหนึ่งถ้าคุณต้องการแลกเปลี่ยนความซับซ้อนเล็กน้อยเพื่อการรับรองคุณสามารถใช้ข้อเท็จจริงที่กำหนดเองเพื่อกำหนดว่าการเมาต์แบบแอ็คทีฟคืออะไรและคำสั่งสวิตช์เพื่อตั้งค่าการอนุญาตไดเรกทอรีขึ้นอยู่กับว่าติดตั้งไว้ล่วงหน้าหรือหลัง


undefทำเคล็ดลับ ไดเรกทอรีจะถูกสร้างขึ้นโดยได้รับอนุญาตต่อไปนี้rwxr-xr-x. root root system_u:object_r:mnt_t:s0ซึ่งใช้ได้กับฉัน
Cristian Ciupitu

1
โปรดเพิ่มselrange => undef, selrole => undef, seltype => undef, seluser => undef,คำตอบ
Cristian Ciupitu

จะมีความเสี่ยงต่อการที่หุ่นกระบอกพยายามจัดการรากของระบบไฟล์ด้วย "มั่นใจ => เมาท์" หรือไม่?


2

ฉันมีความจริงที่กำหนดเอง (ใช้ได้กับ Linux เท่านั้น ATM) ที่จะคืนค่าการเมาต์โลคัลที่เมาท์ทั้งหมดบนระบบในปัจจุบัน มันง่ายอย่างน่ากลัว แต่ใช้งานได้สำหรับฉัน - ดูเหมือนว่าคุณอาจพบว่ามีประโยชน์สำหรับมันเช่นกัน อย่างไรก็ตามฉันโยนมันขึ้นมาบน gitHub: https://github.com/justintime/puppet/tree/master/justintime-localmounts

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.