一些披露: 我使用的是主设备/代理设置,我拥有代理但没有主控制台的权限。 puppetmaster是git支持的,我控制有问题的模块的源。
我的问题有2个相关模块。其中一个似乎工作得很好,确保安装autofs并为auto.master提供2个文件资源,并为自定义auto.home安装主目录。
#auto.home
#this file is used by auto.master to automount home directories
#from the nfs cluster when a user logs in.
* -fstype=nfs,rw,nosuid,soft <IPaddress>:/homedirs/&
在添加主目录的模块中,我创建用户并通过文件资源部署他们的公共ssh密钥。这个模块&#34;工作&#34;在系统上我注释掉了Class依赖关系并且我没有挂载/ home到NFS,而且*当我按原样部署它时,它有时会工作。
define local_user(
$fullname,
$username = $title,
$userid,
$gid = 9999,
$homedir_mode = 0700
) {
$white_gid = $gid
user { $username:
ensure => present,
comment => $fullname,
gid => $white_gid,
uid => $userid,
home => $homedir,
require => Group[ "white" ],
}
exec { "chage -M 99999 ${username}":
command => "chage -M 99999 ${username}",
path => "/bin:/sbin:/usr/bin:/usr/sbin",
# chage(1) only works on local users, not on LDAP users,
# so make sure this is a local user before we try to
# change their password expiration.
onlyif => "grep -q '^${username}:' /etc/passwd",
subscribe => User[ $username ],
refreshonly => true,
}
file { $homedir:
ensure => directory,
owner => $username,
group => $white_gid,
mode => $homedir_mode,
require => User[ $username ],
}
file { "$homedir/.ssh":
ensure => directory,
owner => $username,
group => $white_gid,
mode => 0700,
require => File[ "$homedir" ],
}
file { "$homedir/.ssh/authorized_keys":
ensure => present,
owner => $username,
group => $white_gid,
mode => 0600,
source => "puppet:///modules/ssh_keys/${username}_authorized_keys",
require => File["$homedir/.ssh"],
}
}
class ssh_keys {
group { "white":
ensure => present,
gid => 9999,
require => Class["nfs_homedirs"],
}
#### add users below this line
local_user { "userA" : fullname => "userA", userid => "123" }
我感到困惑的一些事情可以使用专业知识:
错误: /舞台[主] / Ssh_keys / Local_user [用户A] /文件[/家庭/用户A] /保证: 从缺席状态更改为目录失败:无法设置&#39;目录&#39;确保: 权限被拒绝 - / home / userA at 80:/app/puppet/conf/environments/puppet_dev/modules/ssh_keys/manifests/init.pp
放置ensure =&gt;似乎无害目前关于这些目录和文件资源的陈述。它们在技术上已经在NFS共享上创建了,但autofs似乎工作的方式是它实际上并没有“安装”#34;该用户共享,直到他们登录为止。这不是我的专业知识,而是我所经历的。当此模块成功运行时,它创建的每个用户的主目录在 df 输出中显示为装载。
我怀疑机器本身有什么能防止这个模块以它应该的方式工作。我知道在这个模块运行干净的机器和不运行的机器之间可能有500种不同的东西,我应该调查哪些地方?
非常感谢任何协助。
答案 0 :(得分:0)
auto.home的工作方式是在用户登录时挂载目录。如果用户没有登录,则不存在挂载 - 因此目录/文件资源失败。
我个人不会尝试通过nfs mount创建主目录。此外,您不希望多台服务器尝试管理相同的物理资源。如果可能,将其拆分为仅在NFS服务器上运行,并运行与主目录相关的所有文件资源。让nfs客户端确保配置nfs并且存在本地用户帐户。
如果您无法在NFS服务器上运行puppet,请选择1个服务器将其作为常规安装进行安装 - 即安装home dirs部分的根目录以使它们全部可见。还设置了no_root_squash。然后你应该能够让puppet创建目录。
ssh_authorized_key资源也很方便。我经常使用它。
答案 1 :(得分:0)
听起来像selinux正在执行,即使你有合适的用户/ uid拥有目录,也会导致permission denied
。如果您执行了selinux
,那么您将要检查是否允许使用nfs_home_dirs。首先,通过运行检查:
getsebool use_nfs_home_dirs
如果它以use_nfs_home_dirs --> off
的形式返回,那么您可以使用setsebool -P use_nfs_home_dirs 1
手动更正此内容,也可以使用puppet来管理它:
include selinux
selinux::boolean {'use_nfs_home_dirs':
ensure => 'on',
}