2016-09-19 3 views
0

Я пытаюсь проверить принадлежность файла к каждому файлу в каждом домашнем каталоге на компьютере Linux в качестве теста Inspec, написанного на рубине, используя команды Linux. У меня есть массив владельцев домашних каталогов, называемый ownerArray (содержащий пользователей, такие как bin, root, daemon, ...), и я пытаюсь использовать класс Dir.glob для получения каждого файла в каждом каталоге для каждого владельца, содержащегося в моем массив, но когда я запускаю свой код, он только петлиет через бит. Есть около 15 владельцев всех из/etc/passwd, которые я бы хотел пропустить, но следующие только проверки bin (я могу сказать, когда я печатаю имя каждого файла по мере его цикла). Является ли это проблемой с разрешениями, или существует ли другой способ использования Dir.glob для получения каждого файла каждого владельца домашнего каталога на моей машине. Спасибо за ваше время и помощь.Ruby Loop, чтобы получить все файлы во всех домашних каталогах на машине Linux (работа Inspec/Chef)

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, если владелец домашнего каталога не является членом группы, владеющей данным файлом в домашнем каталоге пользователей.

+1

Не могли бы вы быть более конкретными? Что значит быть «только петлями через« bin »? Что означает 'ownerArray'? Какие файлы вы зацикливаете; какой результат вы ожидаете увидеть? –

+0

Я бы предположил, что ваша спецификация выполнена на вашем локальном хосте. В этом случае 'Dir.glob' возвращает только папки на вашем локальном, а не удаленном хосте. – slowjack2k

+0

Зачем использовать команды, в которых существуют ресурсы? 'описать файл (файл) {it {shoud_not be_owned_by 'root'}}' См. [документация] (https://github.com/chef/inspec/blob/master/docs/resources.rst#file) – Tensibai

ответ

1

В петле у вас все нормально, но замените command на file InSpec resource. Нужно упростить его. Вы также можете использовать это, чтобы проверить другие параметры файла, такие как группа и режим.

+0

Спасибо, coderanger. Я посмотрю на них и вернусь к вам. Я знаю о файлах ресурсов InSpec для проверки групп и владельцев и т. Д. Трюк здесь, похоже, проверяет, какая группа владеет файлом против того, является ли владелец homedirectory членом этой группы владения. – jstremme

Смежные вопросы