Linuxコマンドを利用して、ルビーで書かれたInspecテストとして、Linuxマシンのすべてのホームディレクトリにあるすべてのファイルのファイル所有権をチェックしようとしています。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 を返します。