使用puppet强制散列主目录权限

我们环境中的主目录使用用户名的前两个字母散列。 例如,用户lars的主目录是/home/l/a/lars

我想使用木偶强制在用户主目录模式0700权限,但我不知道如何定位主目录。 基本上我想这样做:

 chmod 700 /home/*/*/* 

在没有散列的情况下,这很容易(例如使用recurserecurse recurselimit ),但散列让我寻找一个解决scheme。

更新 :我不想列举我们的用户在puppet(因为主目录是作为我们的帐户pipe理过程的一部分创build的)。

在思考这个问题的时候,我也变得更加混乱了。 即使我们的主目录没有被散列,我怎样才能让puppet在不影响顶层目录本身的情况下对目录的内容应用权限呢? 我正在想这样的事情:

 file { '/home: ensure => directory, mode => 0700, recurse => true, recurselimit => 1, } 

但是这会将模式应用于/home及其直接内容。 /home/lars上的模式700正常。 /home模式700是一个大问题。 这甚至有可能吗?

看来你已经遇到了傀儡的局限之一。 我只是写一个shell脚本来做到这一点。

另一个可能的解决scheme可能是为puppet编写一个插件,这将允许您使用新的数据types(比如file_wildcard)或类似的东西。 应该可以写一个ruby,但我从来没有这样做过。

木偶不理解文件types中的通配符。 如果你使用这样的东西:

 file { "/home/*": ensure => directory, owner => $username, group => $username, mode => 700, require => [ User[$username], Group[$username] ] } 

它会创build/home/\*文件夹。

所以,你必须创build你想要的目录结构如下:

 define add_user ( $fullname, $uid ) { $username = $title $firstletter = regsubst($username, '(.).*', '\1') $secondletter = regsubst($username, '.(.).*', '\1') user { $username: comment => "$fullname", home => "/home/$firstletter/$secondletter/$username", shell => "/bin/bash", uid => $uid, require => [ File["/home/$firstletter"], File["/home/$firstletter/$secondletter"] ] } group { $username: gid => $uid, require => User[$username] } file { "/home/$firstletter": ensure => directory, owner => root, group => root, mode => 755 } file { "/home/$firstletter/$secondletter": ensure => directory, owner => root, group => root, mode => 755, require => File["/home/$firstletter"] } file { "/home/$firstletter/$secondletter/$username": ensure => directory, owner => $username, group => $username, mode => 700, require => [ File["/home/$firstletter/$secondletter"], User[$username], Group[$username] ] } file { "/home/$firstletter/$secondletter/$username/.ssh": ensure => directory, owner => $username, group => $username, mode => 700, require => File["/home/$firstletter/$secondletter/$username"] } # now make sure that the ssh key authorized files is around file { "/home/$firstletter/$secondletter/$username/.ssh/authorized_keys": ensure => present, owner => $username, group => $username, mode => 600, require => File["/home/$firstletter/$secondletter/$username"] } } 

并用以下方式调用它:

 node 'test_node' { add_user { lars: fullname => "Larry Page", uid => 510 } } 

您需要声明您希望Puppetpipe理的文件资源(Puppet是一种声明性语言…),或者您使用exectypes执行您提供的chmod代码片段。