Как создать профиль AppArmor для Nginx в Ubuntu 14.04

Вступление

Хороший администратор сервера высматривает новые уязвимости. Когда вы запускаете сервер с открытыми для общественности портами, вы должны зацикливаться на его безопасности.

К сожалению, даже если вы следите за всеми последними обновлениями безопасности для своих приложений и операционной системы, ваш сервер все еще может быть уязвим к атакам нулевого дня: атакам, направленным на неизвестные уязвимости, которые не имеют исправлений. * AppArmor * - это модуль ядра Linux, который действует как система контроля доступа, которая защищает ваш сервер от таких атак. Этот модуль был доступен в Ubuntu по умолчанию с момента выпуска Ubuntu 8.04.

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

Что охватывает этот учебник

В этом руководстве мы создадим простой профиль безопасности AppArmor, который представляет собой текстовый файл, содержащий сведения о разрешениях для * Nginx *, популярного HTTP-сервера.

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

С помощью этой настройки, когда AppArmor неактивен, внешний пользователь сможет получить доступ к файлам из обоих каталогов. Когда AppArmor активен, пользователь сможет получить доступ только к файлам в.

Предпосылки

Вам понадобится следующее:

  • * Ubuntu 14.04 * сервер

  • Пользователь sudo

Шаг первый - установите Nginx

Используйте для обновления вашего сервера и установки Nginx:

sudo apt-get update
sudo apt-get install nginx

Ваш сервер Nginx теперь работает. Сервер по умолчанию будет работать на порту 80. Вы можете проверить это в браузере, посетив IP-адрес вашего Droplet в качестве URL:. Вы должны увидеть страницу приветствия Nginx по умолчанию.

изображение: https: //assets.digitalocean.com/articles/AppArmor_Nginx/1.jpg [страница приветствия Nginx]

Шаг 2: Настройте Nginx для обслуживания статических файлов

Создайте каталоги, из которых будут обслуживаться статические файлы.

sudo mkdir -p /data/www/safe
sudo mkdir -p /data/www/unsafe

Добавьте файл в каталог, используя:

sudo nano /data/www/safe/index.html

Пусть файл имеет следующее содержимое:

<html>
   <b>Hello! Accessing this file is allowed.</b>
</html>

Аналогичным образом создайте еще один файл с именем со следующим содержимым:

<html>
   <b>Hello! Accessing this file is NOT allowed.</b>
</html>

Файл конфигурации Nginx находится по адресу. Отредактируйте этот файл, чтобы создать новый сервер, который прослушивает порт и обслуживает файлы. Игнорируя закомментированные строки, после редактирования ваш файл должен выглядеть так, как показано ниже. Вам нужно будет добавить хеш-метку, чтобы закомментировать строку + include / etc / nginx / sites-enabled / *; +. Вам также необходимо добавить весь блок * server *, показанный красным цветом ниже:

user www-data;
worker_processes 4;
pid /run/nginx.pid;

events {
   worker_connections 768;
}

http {
   sendfile on;
   tcp_nopush on;
   tcp_nodelay on;
   keepalive_timeout 65;
   types_hash_max_size 2048;

   include /etc/nginx/mime.types;
   default_type application/octet-stream;

   access_log /var/log/nginx/access.log;
   error_log /var/log/nginx/error.log;

   gzip on;
   gzip_disable "msie6";

   include /etc/nginx/conf.d/*.conf;







}

Сохраните изменения и загрузите новую конфигурацию, выполнив следующую команду:

sudo nginx -s reload

На этом этапе, так как AppArmor еще не был включен для Nginx, вы должны иметь возможность посещать оба и. Безопасная страница выглядит так:

изображение: https: //assets.digitalocean.com/articles/AppArmor_Nginx/2.jpg [Безопасная страница]

Настройка Nginx завершена.

Шаг третий - проверка существующих профилей AppArmor

Ubuntu 14.04 поставляется с несколькими предварительно загруженными профилями AppArmor. Установите больше из них с помощью этой команды:

sudo apt-get install apparmor-profiles

Перечислите все доступные профили, выполнив эту команду:

sudo apparmor_status

Вы должны увидеть довольно много профилей. Некоторые из них будут в принудительном режиме, а некоторые в режиме жалоб. Когда профиль приложения находится в режиме «жалоб» *, AppArmor регистрирует действия приложения, не ограничивая его каким-либо образом.

Когда есть что зарегистрировать, в каталоге вы найдете файлы журнала для сервера Nginx.

AppArmor ограничивает возможности приложения, только если его профиль находится в * принудительном режиме *.

Вы также заметите, что для сервера Nginx нет профиля. Мы создадим один на следующем шаге.

Шаг четвертый - Создайте новый профиль AppArmor для Nginx

Установить. Это набор утилит, которые помогут вам управлять AppArmor.

sudo apt-get install apparmor-utils

Теперь вы готовы начать профилирование деятельности Nginx. Используйте команду для создания нового пустого профиля. Профиль будет создан в.

cd /etc/apparmor.d/
sudo aa-autodep nginx

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

sudo aa-complain nginx

Перезапустите Nginx.

sudo service nginx restart

Откройте браузер и зайдите. Это приведет к тому, что обычные записи для доступа к безопасному веб-сайту появятся в ваших журналах Nginx.

Вернитесь к терминалу. Теперь мы будем использовать утилиту AppArmor для просмотра журналов Nginx и одобрения или отклонения каждого найденного там действия.

sudo aa-logprof

Эта команда сканирует файлы журнала и обновляет профиль AppArmor Nginx. Вам будет несколько раз предложено разрешить или запретить возможность. Предполагая, что ваш сервер в настоящее время не подвергается атаке, вы можете нажимать * A * каждый раз, так как все требуемые возможности необходимы для правильной работы Nginx. Наконец, когда будет предложено сохранить изменения, нажмите * S *.

Этот общий процесс включения AppArmor для нового приложения выглядит следующим образом:

  • Создайте новый пустой профиль для приложения

  • Переведите его в режим жалоб

  • Выполните обычные действия с приложением, чтобы соответствующие записи были добавлены в журналы

  • Запустите утилиту AppArmor, чтобы просмотреть журналы и одобрить или отклонить различные действия приложения.

Шаг 5: отредактируйте профиль AppArmor Nginx

В частности, для Nginx вам нужно будет внести некоторые изменения в автоматически сгенерированный файл, чтобы он работал правильно. Откройте файл + / etc / apparmor.d / usr.sbin.nginx + для редактирования.

sudo nano /etc/apparmor.d/usr.sbin.nginx

Вы должны внести как минимум следующие изменения:

  • Добавьте строку + # include <abstractions / apache2-common> + - да, хеш-знак является намеренным

  • Добавьте строку

  • Добавьте строку

  • Обновите строку, чтобы включить весь каталог звездочкой (*)

  • Добавьте строку, включая запятую

  • Убедитесь, что Nginx может записывать в журнал ошибок, установив * w * для

Включение позволяет Nginx прослушивать различные порты. Новые строки *ability * позволяют Nginx запускать новые процессы. Правило * deny * позволяет нам заблокировать Nginx доступ к каталогу.

Один рабочий профиль выглядит так:

#include <tunables/global>

/usr/sbin/nginx {

 #include <abstractions/base>
 #include <abstractions/nis>

 capability dac_override,
 capability dac_read_search,
 capability net_bind_service,



 /data/www/safe/ r,

 /etc/group r,
 /etc/nginx/conf.d/ r,
 /etc/nginx/mime.types r,
 /etc/nginx/nginx.conf r,
 /etc/nsswitch.conf r,
 /etc/passwd r,
 /etc/ssl/openssl.cnf r,
 /run/nginx.pid rw,
 /usr/sbin/nginx mr,
 /var/log/nginx/access.log w,
 /var/log/nginx/error.log ,
}

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

Профиль AppArmor Nginx готов. Используйте, чтобы перевести профиль в принудительный режим.

sudo aa-enforce nginx

Рекомендуется перезагрузить все профили и перезапустить Nginx, чтобы убедиться, что последние изменения вступили в силу. Введите следующее:

sudo /etc/init.d/apparmor reload
sudo service nginx restart

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

Проверьте статус AppArmor:

sudo apparmor_status

Вы должны увидеть процессы Nginx, работающие в принудительном режиме.

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

изображение: https: //assets.digitalocean.com/articles/AppArmor_Nginx/3.jpg [Запрещенная ошибка]

Поиск проблемы

Если ваш сервер Nginx не запускается после принудительного применения профиля, скорее всего, профиль не содержит разрешения, которое требуется Nginx. Вы должны проверить:

  • Текст ошибки

  • {} Пусто

  • {} Пусто

Затем вам придется изменить свой профиль на основе этих ошибок.

Например, если вы забыли включить в профиль, вы увидите ошибку вроде:

[emerg] 3611#0: socket() 0.0.0.0:8080 failed (13: Permission denied)

В реальном сценарии получение полезного профиля AppArmor для нового приложения требует большого количества проб и ошибок, а также отнимает много времени.

Заключение

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

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

Related