0

我正在尝试使用 Linux 命令检查 Linux 机器上每个主目录中每个文件的文件所有权,作为用 ruby​​ 编写的 Inspec 测试。我有一个名为 ownerArray 的主目录所有者数组(包含 bin、root、daemon 等用户),并且我正在尝试使用 Dir.glob 类来获取包含在我的每个所有者的每个目录中的每个文件数组,但是当我运行我的代码时,它只循环通过 bin。大约有 15 个所有者都来自 /etc/passwd 我想循环通过,但以下只检查 bin(我可以知道当我在循环时打印每个文件的名称)。这是权限问题,还是我应该以不同的方式使用 Dir.glob 来获取我机器上主目录的每个所有者的每个文件。感谢您的时间和帮助。

ownerArray = %w()

  command("cut -d : -f1 /etc/passwd").stdout.each_line do |line|
    if (command("echo ~#{line}").stdout != "/\n")
      user = "/" + line.chomp()
      ownerArray.push user
    end
  end

ownerArray.each do |owner|
  Dir.glob("#{owner}/**/*", File::FNM_DOTMATCH).each do |file| 
    next if File.basename(file) == '.' || File.basename(file) == '..'
    group = command("stat -c %G #{file}").stdout
    describe command("id -Gn #{owner} | grep -c '\b{group}\b'") do
      its ('stdout') {should_not match "0\n"}
    end
  end
end

请参阅上面添加的 ownerArray。它只是从 /etc/passwd 中获取用户。对于输出,我希望每次在拥有这些文件的组不是主目录所有者所属的组的主目录中存在文件时,测试都会失败。如果主目录所有者不是拥有用户主目录中给定文件的组的成员,则 grep 返回 0。

4

1 回答 1

1

你的循环没问题,但是用InSpec resourcecommand替换你的东西。应该简化一点。您还可以使用它来检查其他文件参数,例如组和模式。file

于 2016-09-19T18:25:54.993 回答