1 голос
 
1307 просмотров
13.11.2016 / 11:56  aNNiMON

Изоляция процесса

Ищу способ изолировать процесс на линуксе.

Требования:
  1. Ограничение по времени. Процесс не должен выполняться более заданного количества секунд.
  2. Файловая система. Разрешить чтение/запись только из определённой папки. Квота не более N Мб.
  3. Сеть. Запрещать отправку HTTP-запросов, либо ограничить их по количеству и разрешать только из белого списка.
  4. Ограничение по памяти.
  5. Сравнительно быстрый запуск. Максимум 5 секунд.

Выполнять нужно java-приложение, поэтому часть этих требований JVM может удовлетворить сама. Но, к примеру, ограничить запись файлов так, чтоб папка не занимала более 10 Мб, она из коробки не сможет.

Docker не вариант. Ему нужно ядро как минимум версии 3.10.
Ответы
 
1 голос
 
# 15.11.2016 / 19:07  aNNiMON
1. Ограничение по времени: timeout.
  1. timeout 30s ...

2. Изоляция файловой системы: firejail
  1. firejail --private --profile=firejail.profile
  2.  
  3. -----
  4. # firejail.profile
  5.  
  6. # запрет вывода дополнительной информации о работе программы
  7. quiet
  8. # приватный режим - после завершения процесса все созданные файлы удалятся
  9. private
  10. # максимальный размер файла 64кб
  11. rlimit-fsize 65536
  12.  
  13. blacklist *.log
  14. whitelist tmp

3. Ограничение сетевых подключений: Java Security Manager
  1. # два знака равно - замена стандартной политики на указанную, один знак равно - добавление.
  2. java -Djava.security.manager -Djava.security.policy==java.policy
  3.  
  4. -------
  5. # java.policy
  6.  
  7. grant {
  8.     // файлы, в дополнение ко 2 пункту
  9.     permission java.io.FilePermission "*", "read";
  10.     permission java.io.FilePermission "tmp/*", "read,write";
  11.  
  12.     // белый список адресов
  13.     permission java.net.NetPermission "getProxySelector";
  14.     permission java.net.SocketPermission "example.com", "resolve,connect";
  15.     permission java.net.SocketPermission "example.com:3228", "resolve,connect,listen";
  16. }
+ у firejail есть возможность ограничить скорость сети.

4. Ограничение по памяти:
  1. # ограничение 128 Мб. В случае выхода за пределы, получаем OutOfMemory.
  2. java -Xmx128m

5. Быстрый запуск: никакой виртуализации нет, поэтому запускается всё быстро.
Изм. aNNiMON от 15.11.2016 / 19:11
 
0 голосов
 
# 15.11.2016 / 13:26  Devey
Если ответ был найден, то будьте добры, сами отвечайте на свой вопрос.
15.11.2016 / 18:51  aNNiMON
Всё верно. Вчера с телефона не смог, а сегодня забыл.
 
0 голосов
 
# 13.11.2016 / 14:33  Naik
Xen?
13.11.2016 / 14:40  aNNiMON
Мне не столько виртуализация нужна, сколько изоляция. Xen запускать на сервере, запускающемся на Xen? :-D
13.11.2016 / 14:53  Naik
Ну тогдп OpenVZ, вроде для изоляции предназначена
Всего: 3

Реклама

Мы в соцсетях

tw tg yt gt