Как заключить в тюрьму fastcgi сервер (или проксированный сетью сервер)?

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

  • wolny представляет "свободный как в 'свободе'" (или 'свобода слова') понятие

  • darmowy представляет понятие "свободного как в 'бесплатном пиве'" (что-то, что Вы не должны оплачивать),

6
16.01.2015, 01:52
3 ответа

В соответствии с Ubuntu, другим способом заключить в тюрьму является apparmor!

Это - находящийся на пути Модуль безопасности Linux (LSM) мандатного управления доступом (MAC). В Ubuntu 10.04 это включено по умолчанию для выбранных сервисов.

Документация вполне фрагментируется. Документация Ubuntu могла быть... лучше. Даже восходящая документация не дает хорошее введение. Состояния ссылочной страницы:

ПРЕДУПРЕЖДЕНИЕ: этот документ находится на очень ранней стадии создания, это не находится ни в какой форме все же, чтобы использоваться в качестве справочника

Однако начало работы относительно легко. Профиль AppAmor соответствует исполняемому пути, например. /var/www/slave/slave. Правило по умолчанию профиля, отклоняют (который является большим), если ничто иное не соответствует. Отклонять-правила профиля соответствуют всегда перед позволять-правилами. Пустой профиль отклоняет все.

Профили для различных двоичных файлов хранятся под /etc/apparmor.d. apparmor_status дисплеи, какие профили активны, что находится в (хорошем) осуществлять-режиме, или только в, жалуются режим (только сообщения журнала печатаются).

Создание нового профиля для /var/www/slave/slave справедливо:

aa-genprof /var/www/slave/slave

Запустите в другом терминале /var/www/slave/slave и сделайте типичный вариант использования. После того, как это закончено нажатие s и f в предыдущем терминале.

Теперь /etc/apparmor.d содержит файл профиля var.www.slave.slave. Если ведомое устройство делает некоторое разветвление профиля, только очень редко - все доступы childs проигнорированы.

Так или иначе профиль теперь активен в, осуществляют режим, и можно просто многократно инициировать действия в ведомом устройстве и часах tail -f /var/log/messages для нарушений. В другом терминале Вы редактируете файл профиля и выполняетесь aa-enforce var.www.slave.slave после каждого изменения. Журнал отображается затем:

audit(1308348253.465:3586):  operation="profile_replace" pid=25186 name="/var/www/slave/slave"

Нарушение похоже:

operation="open" pid=24583 parent=24061 profile="/var/www/slave/slave" 
  requested_mask="::r" denied_mask="::r" fsuid=10004 ouid=10000 name="/var/www/slave/config"

Правило профиля как:

/var/www/slave/config r,

предоставил бы доступ в будущем.

Это является все довольно прямым.

AppAmor поддерживает крупномодульные сетевые правила, например.

network inet stream,

Без этого правила никакой доступ в Интернет не возможен (включая localhost), т.е. с тем правилом можно использовать iptables для правил с более прекрасными зернами (например, на основе ведомого устройства uid).

Другой фрагмент документации содержит что-то о профилях sub для сценариев PHP.

Скелет профиля var.www.slave.slave похож:

#include <tunables/global>

/var/www/gapapp/gap.wt {

  #include <abstractions/base>

  network inet stream,

  /var/www/slave/config r,
  /var/www/slave/exehelper/foo ix,
  /var/www/slave/db/* rw,

  ...
}

С таким профилем ведомое устройство не может больше назвать утилиты как mail или sendmail.

1
27.01.2020, 20:30

Существует другой способ заключить в тюрьму его вниз: iptables использование владельца соответствует расширению!

С iptables это возможно к блоку, исходящему (ВЫВОД) сетевой трафик всеми процессами ведомого пользователя. Это очень легко установить, т.е. это удобно.

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

$ iptables -N slave_chain
$ iptables -A slave_chain -m owner --uid-owner 10004 -p tcp --dport 1:1024 -j REJECT
$ iptables -A slave_chain -m owner --uid-owner 10004 -p tcp -d 127.0.0.1 -j ACCEPT
$ iptables -A slave_chain -m owner --uid-owner 10004 -j REJECT
$ iptables -A OUTPUT -j slave_chain

Где 10004 uid ведомого пользователя. Ведомое устройство должно только ответить на проксированные запросы веб-сервера. Все остальное отклоняется, например, попытка подключения к MTA в localhost порте 25 для отправки СПАМА.

Обратите внимание, что ведомое устройство могло отправить, почте через команды нравится mail или sendmail, если они - доступное, т.е. дальнейшее заключение в тюрьму местоположений фс (например, chroot/cgroups) необходимо, или нужно настроить MTA для запрещения исходящей почты ведомым пользователем.

1
27.01.2020, 20:30
  • 1
    Если ведомое устройство могло бы отправить почту путем вызова mail, это могло также отправить почту включением кода в mail двоичный файл. Соответствие сделано UID. Вы все еще должны к chroot препятствовать тому, чтобы CGI получил доступ к файлам и вызвал setxid программы, и удостовериться, что у Вас нет setuid двоичного файла в chroot. –  Gilles 'SO- stop being evil' 17.06.2011, 23:21
  • 2
    @Gilles, да, например, в системе с exim, mail вызовы sendmail, который является ссылкой на sbin/exim4 который является setuid. –  maxschlepzig 18.06.2011, 01:15

Cgroups являются путем к заключению в тюрьму. С 2007, cgroups подсистемы даже содержит так называемые сетевые пространства имен.

Текущие дистрибутивы поставляют инструменты пространства пользователя контейнеров Linux, наборы инструментов командной строки (lxc-*) и конфигурационные файлы в качестве примера. Они также включают сетевой пример пространства имен.

К сожалению, Ubuntu 10.04 (LTS) повреждает сетевые пространства имен с недавним обновлением ядра.

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

Не ясно, что лучшая практика должна установить беспочвенные контейнеры.

0
27.01.2020, 20:30

Теги

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