Как я могу запустить скрипт удара, не влияя на файловую систему?

Я пытаюсь создать некоторых мягких из песочницы для систем Linux (человечность). Моя главная цель состоит в том, чтобы узнать, какие файлы выполняются сценарием удара моего выбора, на самом деле не позволяя ей выполнить их. Я также хочу предотвратить изменения в системе, таким образом, под управлением сценарий будет думать, что у него есть способность записать в файлы, но это на самом деле не делает. Я не хочу запускать скрипт удара в соответствии с низкими полномочиями, потому что их он не будет работать, если он попытается изменить что-то. Не предлагайте выполнить его через виртуальный machince, это слишком медленно для меня.

Единственная вещь, которая прибывает по моему мнению, сцепляет любую запись syscall поэтому, когда она попытается записать в файл, система возвратит УСПЕХ, но ничего не сделает. Также сцепляя любое выполнение syscall, чтобы получить все программы, выполненные сценарием и предотвратить выполнение других файлов при возврате успеха сценарию. Но я имею к подсказке о том, как сделать это.

Какие-либо идеи?Заранее спасибо.

2
задан 12 November 2014 в 11:34

2 ответа

Попытайтесь использовать наложение , с chroot. Во-первых, решите путь, который Вы хотите к chroot к и удостоверяетесь, что это существует, и так же для пути Вы наложите на / (который является, куда модификации пойдут):

mkdir -p /chroot
mkdir -p /tmp/tmproot

я выбрал каталог в /tmp/, как это tmpfs в моей системе (возможно неблагоразумный, но хорошо для меня), таким образом, никакие изменения не должны достигать диска. Можно использовать squashfs и смонтировать его где-нибудь, и использование, что как наложение, но это имеет проблему того, чтобы быть только для чтения, я думаю.

Теперь:

$ mount -t overlayfs -o lowerdir=/,upperdir=/tmp/tmproot overlayfs /chroot/
$ chroot /chroot/ /bin/bash -l
root:/$ touch test
root:/$ ls
...  sys  test  tmp  ...
root:/$ logout
$ ls /
...  sys  tmp  ...
$ ls /tmp/tmproot/
root  test

, Если Вы делаете upperdir независимый от физического диска (возможно, при помощи tmpfs), это должно защитить lowerdir.

Примечание создание root папка - это для моего .bash_history. Копия была сделана из оригинала .bash_history, и затем добавлена к.

4
ответ дан 6 October 2019 в 20:40

Вот результат невозможности: поведение сценария может зависеть от информации, которую оно записало в файл ранее. Если Вы на самом деле не позволяете ему писать в файл (но заставить сценарий полагать, что это действительно писало в файл), то можно влиять на поведение сценария способом, которого не произошло бы, если бы Вы выполнили его "для реального".

, Например:

#!/bin/bash

write_bit_to_file () {
    # write a random bit to a file
    echo $((RANDOM % 2)) >> file.txt
}

get_bit_from_file () {
    # read the random bit from the file
    tail -1 file.txt
}

# MAIN SCRIPT
#############

# ... do some stuff, save some info for later ...
write_bit_to_file
# ... do more stuff, retrieve info from file ...
if (( $(get_bit_from_file) )); then
    # access foo.txt and do something
    echo "I'm going to access foo.txt"
else
    # access bar.txt and do something
    echo "I'm going to access bar.txt"
fi

Это - очевидно, очень искусственный сценарий, но я надеюсь, что Вы понимаете: если сценарий не будет на самом деле писать в file.txt, но будет полагать, что делает, Вы или получите ошибку (например, если file.txt не будет существовать) или неожиданное поведение (например, если file.txt действительно существует, но содержит другую информацию, чем ожидалось, потому что write_bit_to_file на самом деле не записал в файл). При выполнении сценария для реального, однако, он вел бы себя как ожидалось (например, случайным образом доступ или foo.txt или bar.txt).

то, Что может быть возможным, должно записать монитор, который выполняет Ваш сценарий, наблюдает файлы, в которые он пишет, делает резервное копирование этих файлов, прежде чем это произойдет, и в конце сценария восстанавливает те файлы к их исходному состоянию. Но это было бы довольно противно;)

Редактирование: В этот ответ , muru предлагает действительно хороший способ реализовать что-то сродни этому монитору, и еще лучше, так как это никогда не влияет на Вашу фактическую корневую файловую систему и сохраняет модификацию файлов, сделанных сценариями, которые будут снова использованы позже. Это - способ пойти!:-)

2
ответ дан 6 October 2019 в 20:40

Другие вопросы по тегам:

Похожие вопросы: