如何在 chef 中查找所有本地用户帐户

如何在 chef 中查找所有本地用户帐户

使用 opscode chef,有没有办法查找或循环遍历所有用户帐户?

我需要在每个用户的主目录中创建一个配置文件。我不想为此循环遍历任何目录结构。

答案1

Chef 运行时,ohai 会自动检测系统上的所有用户,并在node['etc']属性空间中可用。用户是node['etc']['passwd']。您可以像哈希一样对其进行迭代。您可以通过比较用户的数字 ID 是否超过系统 /etc/login.defs UID_MIN 中定义的任何值来排除“系统”或“由包预先创建”。

配方中的示例用法是创建一个存储在食谱中的配置文件,每个用户都有一个不同的文件。

node['etc']['passwd'].each do |user, data|
  if data['uid'].to_i > 1000

    cookbook_file "#{data['dir']}/custom_config" do
      source "#{user}_custom_config"
      owner user
      group data['gid']
      mode 0644
    end

  end
end

将“custom_config”替换为您的配置文件的名称。

答案2

ohai 的 etc.passwd 支持似乎基于 Ruby等密码读取/etc/passwd文件。

如果您的用户是像这样静态定义的,那么这可能没问题。如果您的服务器在 LDAP 或 NIS 等远程系统中定义了用户,那么这些用户将不会在 /etc/passwd 中。您可以使用以下命令列出它们

`getent passwd`

相关内容