我尝试使用Linux命令检查Linux机器上每个主目录中每个文件的文件所有权,作为使用ruby编写的Inspec测试。我有一个名为ownerArray的主目录所有者数组(包含bin,root,daemon等用户),我试图使用Dir.glob类来获取每个所有者的每个目录中的每个文件在我的数组中,但是当我运行我的代码时,它只通过bin循环。我想通过/ etc / passwd大约有15个所有者循环,但是下面只检查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。