如何从人偶管理已挂载的分区(fstab +挂载点)


14

我想从puppet管理已安装的分区,包括修改/etc/fstab和创建用作安装点的目录。在mount资源类型更新fstab就好了,但使用file创建的挂载点是有点棘手。

例如,默认情况下,目录的所有者为root,如果安装的分区的根(/)具有另一个所有者,则puppet会尝试更改它,但我不希望这样做。我知道我可以设置该目录的所有者,但是为什么我应该关心挂载分区上的内容?我要做的就是挂载它。有没有办法使p不关心用作安装点的目录的权限?

这是我现在正在使用的:

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/

而由puppet创建的安装点的权限为:

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

PPS我已经报告了这种奇怪行为的错误

Answers:


9

通过将其设置为,可以告诉Puppet不要管理给定的元参数undef

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

在这种情况下,如果目录在挂载之前不存在,它将以用户和组创建,该用户和组puppetd以(大概是root:wheel)和默认的umask启动。Puppet不会在创建时或随后的任何运行中关心这些设置。


另外,如果您想以某种程度的复杂性来保证,您可以使用自定义事实来确定活动挂载是什么,并使用switch语句根据是预先挂载还是后挂载来设置目录权限。


undef做到了。使用以下权限创建目录rwxr-xr-x. root root system_u:object_r:mnt_t:s0对我来说是很好的。
克里斯蒂安·丘皮图

1
请添加selrange => undef, selrole => undef, seltype => undef, seluser => undef,到答案。
克里斯蒂安·丘皮图

木偶尝试使用“确保=>挂载”来管理文件系统根目录是否存在风险?


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.