Вступление
Хороший администратор сервера высматривает новые уязвимости. Когда вы запускаете сервер с открытыми для общественности портами, вы должны зацикливаться на его безопасности.
К сожалению, даже если вы следите за всеми последними обновлениями безопасности для своих приложений и операционной системы, ваш сервер все еще может быть уязвим к атакам нулевого дня: атакам, направленным на неизвестные уязвимости, которые не имеют исправлений. * AppArmor * - это модуль ядра Linux, который действует как система контроля доступа, которая защищает ваш сервер от таких атак. Этот модуль был доступен в Ubuntu по умолчанию с момента выпуска Ubuntu 8.04.
Когда AppArmor активен для приложения, операционная система позволяет приложению получать доступ только к тем файлам и папкам, которые указаны в его профиле безопасности. Таким образом, при хорошо спланированном профиле безопасности, даже если приложение скомпрометировано во время атаки, оно не сможет причинить много вреда.
Что охватывает этот учебник
В этом руководстве мы создадим простой профиль безопасности AppArmor, который представляет собой текстовый файл, содержащий сведения о разрешениях для * Nginx *, популярного HTTP-сервера.
Чтобы продемонстрировать, как работает AppArmor, мы настроим Nginx для обслуживания статических файлов из двух каталогов: и, а также настроим AppArmor для ограничения Nginx.
С помощью этой настройки, когда AppArmor неактивен, внешний пользователь сможет получить доступ к файлам из обоих каталогов. Когда AppArmor активен, пользователь сможет получить доступ только к файлам в.
Шаг первый - установите 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 для большого приложения.
Сначала включите режим жалоб с помощью команды. Затем системные администраторы обычно ждут несколько дней перед запуском команды, чтобы дать системному времени занести в журнал более общие действия для приложения. Рекомендуется сделать то же самое, если вы собираетесь создать профиль, который будет использоваться в производственных системах.