C ++, linux: как ограничить доступ функции к файловой системе? - PullRequest
1 голос
/ 16 июня 2011

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

Обновление: Итак, я вижу, что нет способа отключить только один поток из всех ФС, кроме одной папки ...

Я прочитал ваши предложения, дорогие пользователи SO, и разместил здесь некий аналог этого вопроса , так что там они дали нам ссылку на песочницу с неплохим API , но я на самом деле не знаю, будет ли он работать на анетинге, кроме GentOS (но в любом случае такой сценарий выглядит довольно интересным в случае использования командной строки Boost.Process для его запуска и запуска -поток (который был перенесен в отдельное приложение =)).

Ответы [ 4 ]

3 голосов
/ 16 июня 2011

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

Возможно, вам захочется переосмыслить, как вы реализуете свое приложение - запуск собственного ненадежного кода, запускаемого как su, не совсем хорошая идея.Возможно использовать другой процесс и общаться через.RPC или используйте интерпретированный язык, с которым вы можете проверить во время выполнения.

2 голосов
/ 16 июня 2011

На мой взгляд, лучшей стратегией будет:

  1. Не запускать этот код в другом потоке, а запускать в другом процессе .

  2. Когда вы создаете этот процесс (после fork, но перед любым вызовом execve), используйте chroot, чтобы изменить корень файловой системы..

Это обеспечит вам хорошую изоляцию ... Однако, из-за этого ваш код будет нуждаться в корне ... Не запускайте дочерний процесс от имени пользователя root, так как root может тривиально обойти эту проблему.это.

1 голос
/ 16 июня 2011

Это не похоже на то, что нужно делать.Если вы думаете об этом, то, что вы пытаетесь предотвратить, является проблемой, хорошо известной индустрии компьютерных игр.Наиболее распространенный подход к решению этой проблемы - это просто кодирование или шифрование данных, к которым другие пользователи не имеют доступа, таким образом, что только вы знаете, как читать/ понять это.

1 голос
/ 16 июня 2011

Вставить замену для open(2), которая проверяет аргументы и возвращает -EACCES в зависимости от ситуации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...