gpt4 book ai didi

linux - puppet 模块获取 'Permission denied' 应用基于 NFS 的主目录

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:34:07 24 4
gpt4 key购买 nike

一些披露:我正在使用我拥有代理但无权访问主控制台的主/代理设置。 puppetmaster 由 git 支持,我控制相关模块的源代码。

我的问题有 2 个相关模块。其中一个似乎工作正常,确保安装了 autofs,并有 2 个文件资源供 auto.master 和一个自定义 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/&

在添加主目录的模块中,我正在创建用户并通过文件资源部署他们的公共(public) ssh key 。当我注释掉类依赖并且我没有将/home 安装到 NFS 时,这个模块在系统上“工作”,并且它*有时在我通过 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" }

有些事情我很困惑,但可以用专业知识来解决:

  • 为了让 NFS 主目录正常工作,我必须在一台机器上运行该模块以在本地创建用户,然后挂载主目录的 NFS 挂载的根目录并创建这些用户的文件夹归他们所有autofs 在登录时实际工作的 uid/gid。
  • 当模块无法对 NFS 安装的主目录“工作”时,当它尝试创建主文件夹时会出现“权限被拒绝”的错误。我试过 no_root_squash 来解决这个错误,但无济于事。我试过以 root 身份运行代理,通过 sudo 以非 root 身份运行代理,根本不是 root 身份,等等。

Error: /Stage[main]/Ssh_keys/Local_user[userA]/File[/home/userA]/ensure: change from absent to directory failed: Could not set 'directory' on ensure: Permission denied - /home/userA at 80:/app/puppet/conf/environments/puppet_dev/modules/ssh_keys/manifests/init.pp

  • 在这些目录和文件资源上放置 ensure => present 语句似乎是无害的。它们在技术上已经在 NFS 共享上创建,但 autofs 的工作方式似乎是在用户登录之前它不会真正“挂载”该用户的共享。这不是我的专长,但这是我的经验。当此模块成功运行时,它创建的每个用户的主目录都会在 df 输出中显示为挂载。

  • 我怀疑机器本身有什么东西阻止了这个模块正常工作。知道在一台机器上这个模块可以正常运行和没有正常运行的机器之间可能有 500 件事我可以区分,我应该调查哪些地方?

如有任何帮助,我们将不胜感激。

最佳答案

auto.home 的工作方式是在用户登录时挂载目录。如果用户尚未登录,则不存在挂载——因此您的目录/文件资源将失败。

就我个人而言,我不会尝试在 nfs 挂载上创建主目录。另外,您不希望多个服务器试图管理相同的物理资源。如果可能,将其拆分为仅在 NFS 服务器上运行,并运行与那里的主目录相关的所有文件资源。让 nfs 客户端确保 nfs 已配置并且本地用户帐户存在。

如果您不能在 NFS 服务器上运行 puppet,请选择 1 个服务器将其作为常规挂载进行挂载——即挂载主目录部分的根目录,以便它们都可见。还设置了 no_root_squash。然后您应该能够让 puppet 创建目录。

ssh_authorized_key 资源也很方便。我经常使用它。

关于linux - puppet 模块获取 'Permission denied' 应用基于 NFS 的主目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22521390/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com