Лучший способ песочницы Apache на Linux - PullRequest
18 голосов
/ 28 сентября 2008

У меня Apache работает на общедоступном сервере Debian, и я немного обеспокоен безопасностью установки. Это машина, на которой размещается несколько проектов, посвященных хобби в свободное время, поэтому ни у кого из нас, кто использует эту машину, нет времени постоянно следить за вышестоящими патчами, быть в курсе проблем с безопасностью и т. Д. Но я хотел бы не пускать плохих парней или, если они попадут, храните их в песочнице.

Так что же самое лучшее, простое в настройке, простое в обслуживании решение здесь? Легко ли установить песочницу linux в пользовательском режиме на Debian? Или, может быть, тюремная тюрьма? Я хотел бы иметь легкий доступ к файлам внутри sadbox снаружи. Это один из тех случаев, когда мне становится ясно, что я программист, а не системный администратор. Любая помощь будет высоко ценится!

Ответы [ 11 ]

15 голосов
/ 28 сентября 2008

Chroot-тюрьмы могут быть действительно небезопасными, когда вы работаете в полной среде песочницы. Злоумышленники имеют полный доступ к функциям ядра и, например, могут монтировать диски для доступа к системе «хоста».

Я бы посоветовал вам использовать linux-vserver. Вы можете увидеть linux-vserver как улучшенную chroot-тюрьму с полной установкой Debian внутри. Это действительно быстро, так как он работает внутри одного ядра, и весь код выполняется изначально.

Я лично использую linux-vserver для разделения всех своих сервисов, и есть только едва заметные различия в производительности.

Ознакомьтесь с linux-vserver wiki для инструкций по установке.

С уважением, Деннис

4 голосов
/ 28 сентября 2008

Я второй, что говорит xardias, но рекомендую OpenVZ .

Он похож на Linux-Vserver, поэтому вы можете сравнить эти два при прохождении этого маршрута.

Я настроил веб-сервер с прокси-сервером http ( nginx ), который затем делегирует трафик различным контейнерам OpenVZ (в зависимости от имени хоста или запрошенного пути). Внутри каждого контейнера вы можете установить Apache или любой другой веб-сервер (например, nginx, lighttpd, ..). Таким образом, у вас не будет одного Apache для всего, но вы можете создать контейнер для любого подмножества сервисов (например, для проекта).

Контейнеры OpenVZ довольно легко могут быть полностью обновлены («для i в $ (vzlist); выполнить обновление vzctl exec apt-get; сделано»)

Файлы разных контейнеров хранятся на аппаратном узле, и поэтому вы можете легко получить к ним доступ, SFTPing на аппаратном узле. Кроме того, вы могли бы добавить публичный IP-адрес для некоторых ваших контейнеров, установить там SSH и затем получить к ним доступ непосредственно из контейнера. Я даже слышал от прокси-серверов SSH, поэтому дополнительный публичный IP-адрес может оказаться ненужным даже в этом случае.

3 голосов
/ 28 сентября 2008

Я нахожу поразительным, что никто не упомянул mod_chroot и suEXEC , которые являются базовыми вещами, с которых вы должны начать, и, скорее всего, единственными вещами, которые вам нужны.

3 голосов
/ 28 сентября 2008

Без обид, но если у вас нет времени, чтобы следить за обновлениями безопасности и не забывать о проблемах безопасности, вы должны быть обеспокоены, независимо от того, какие у вас настройки. С другой стороны, сам факт того, что вы думаете об этих проблемах, отличает вас от других 99,9% владельцев таких машин. Вы на правильном пути!

3 голосов
/ 28 сентября 2008

Чтобы убедиться в том, что сказано, CHRoot Jails редко бывают хорошей идеей, но, несмотря на намерение, очень легко вырваться из нее, на самом деле, я видел, что пользователи сделали это случайно!

3 голосов
/ 28 сентября 2008

Вы всегда можете настроить его на виртуальной машине и сохранить его образ, чтобы при необходимости можно было перекатить его. Таким образом, сервер абстрагируется от вашего реального компьютера, а любые вирусы и т. Д. Содержатся внутри виртуальной машины. Как я уже говорил, если вы сохраняете образ в качестве резервной копии, вы можете легко восстановить прежнее состояние.

1 голос
/ 30 декабря 2008

Если вы используете Debian, debootstrap - ваш друг вместе с QEMU, Xen, OpenVZ, Lguest или множеством других.

1 голос
/ 30 декабря 2008

Хотя все вышеперечисленное является хорошим предложением, я также предлагаю добавить правило iptables, чтобы запретить неожиданные исходящие сетевые подключения. Поскольку первое, что делает большинство автоматизированных веб-эксплойтов, - это загрузка остальной части полезной нагрузки, предотвращение сетевого подключения может замедлить злоумышленника.

Можно использовать некоторые правила, подобные этим (будьте осторожны, вашему веб-серверу может потребоваться доступ к другим протоколам): iptables --append OUTPUT -m владелец --uid-владелец apache -m состояние - состояние УСТАНОВЛЕНО, СВЯЗАНО --jump ПРИНЯТЬ iptables --append OUTPUT -m владелец --uid-владелец apache --protocol udp --destination-port 53 --jump ПРИНЯТЬ iptables --append OUTPUT -m владелец --uid-владелец apache --jump REJECT

1 голос
/ 03 ноября 2008

Вы должны использовать SELinux. Я не знаю, насколько хорошо это поддерживается в Debian; если это не так, просто установите Centos 5.2 с включенным SELinux в виртуальной машине. Не должно быть слишком много работы и намного безопаснее, чем любая любительская обработка, что не так безопасно, как думает большинство людей. SELinux имеет репутацию сложного в администрировании, но если вы просто запускаете веб-сервер, это не должно быть проблемой. Возможно, вам просто нужно сделать несколько «sebool», чтобы позволить httpd подключиться к БД, но это все.

0 голосов
/ 28 сентября 2008

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

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

  1. запустить ОС, которая предоставляет вам простой механизм для обновления ОС.
  2. используйте программное обеспечение, поставляемое поставщиком.
  3. часто делайте резервные копии.
...