По каким инструментам можно организовать среду для безопасного запуска скриптов в изолированной среде?

Какие инструменты можно использовать для создания "песочницы" на отдельной виртуальной машине с рядом ограничений: отсутствие сетевого доступа, запрет на создание файлов, ограничение на использование оперативной памяти, запрет на запуск других приложений, возможность установить ограничение на использование процессорного времени и установка таймаута завершения скриптов. Могут ли подходить для этой цели инструменты типа FireJail и cgroups?
  • 5 февраля 2024 г. 10:39
Ответы на вопрос 2
Для организации среды для безопасного запуска скриптов в изолированной среде могут подойти следующие инструменты и технологии:

1. **Docker:** Предоставляет легковесную изоляцию на уровне процессов с помощью контейнеров. Вы можете настроить сетевые политики, ограничить доступ к файловой системе и ресурсам системы при помощи Dockerfile или настроек запуска контейнера.

2. **Virtual Private Servers (VPS)/Virtual Machines (VM):** Виртуальные машины предоставляют полную изоляцию окружения на уровне операционной системы. С помощью гипервизоров, таких как VMware, VirtualBox или QEMU/KVM, вы можете создать полностью изолированную среду и настроить сетевые и ресурсные ограничения.

3. **cgroups (control groups):** Это механизм ядра Linux для ограничения и учета использования ресурсов процессами (например, CPU, память). Используется для создания сценариев, где необходимо строго контролировать количество ресурсов, выделяемых определенному набору процессов.

4. **AppArmor/SELinux:** Это системы мандатного контроля доступа, которые могут быть использованы для ограничения возможностей программы для выполнения действий, которые могут быть небезопасными или нежелательными.

5. **Firejail:** Это инструмент безопасности, который изолирует программы в собственном контейнере с помощью Linux namespaces и seccomp-bpf. С его помощью можно легко ограничить сетевой доступ и доступ к файловой системе. Также Firejail можно использовать для установки запускаемых программ в режиме низких привилегий.

6. **Chroot jails:** Техника, позволяющая изменить корневой каталог для процесса и его потомков, создавая изолированное пространство файловой системы.

7. **nsjail:** Инструмент подобный Firejail, который также использует Linux namespaces для обеспечения изоляции и безопасности.

8. **Security Profiles for Kubernetes (PodSecurityPolicies):** Если вы используете Kubernetes, можно ограничить действия контейнеров на уровне кластера с помощью PodSecurityPolicies.

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

Пример запуска приложения в Firejail со многими ограничениями может выглядеть вот так:

```bash
firejail --net=none --read-only=~/myreadonlydir --private=~/myprivatedir --cpu=1 --memory=256M --time=60 my_script.sh
```

Эта команда запустит `my_script.sh` в изолированной среде без доступа к сети (`--net=none`), с ограниченной файловой системой (`--read-only` и `--private`), ограничением CPU и памяти (`--cpu=1` и `--memory=256M`) и тайм-аутом выполнения (`--time=60`).

Как минимум три варианта (точнее два в одном и один) 
- libvirt - полностью изолированная виртуалка
- контейнеры:
- docker
- или lxc/lxd
Похожие вопросы