我们环境中的主目录使用用户名的前两个字母散列。 例如,用户lars
的主目录是/home/l/a/lars
。
我想使用木偶强制在用户主目录模式0700权限,但我不知道如何定位主目录。 基本上我想这样做:
chmod 700 /home/*/*/*
在没有散列的情况下,这很容易(例如使用recurse
和recurse
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代码片段。