Как усилить безопасность Ubuntu

Продолжаем знакомиться с документами, опубликованными британской правительственной комиссией Communications-Electronics Security Group, которая на днях назвала дистрибутив Ubuntu самой безопасной операционной системой для конечного пользователя.

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

Пункт 8 документа «End User Devices Security Guidance: Ubuntu 12.04» называется Policy Recommendations и содержит конкретные советы администраторам компьютеров с Ubuntu.

Отключите командные оболочки (shell) по умолчанию

Уберите доступ к командным интерпретаторам: настройте программы добавления пользователей (например, useradd) таким образом, чтобы в качестве оболочки по умолчанию использовался файл /bin/false. Для этого нужно внести изменения в конфигурационные файлы /etc/default/useradd и /etc/adduser.conf.

Отдельные разделы для /tmp и /home с запретом на запуск файлов

Для директорий /tmp и /home требуется задать отдельные разделы и в конфигурационном файле /etc/fstab запретить для этих разделов запуск любых файлов, разрешив только чтение и запись. Делается это с помощью опций «noexec,nosuid,nodev».

Найдите и закройте все доступные для записи директории вне /home и /tmp

Иногда так получается, что на файловой системе появляются места за пределами директорий /home и /tmp, где непривилегированный пользователь может создавать и запускать файлы. Ищутся такие места довольно просто. Разумеется, команду нужно запускать от имени непривилегированного пользователя:

find / -type d -writable

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

Ограничьте использование скриптовых языков

Скриптовые языки (такие как Python, например) используются операционной системой для обеспечения нормального функционирования и не могут просто так быть деинсталлированы. Однако, скрипты создают дополнительную опасность, позволяя злоумышленнику загружать и исполнять собственные программы. Выход заключается в соответствующей настройке AppArmor. Необходимо разрешить запуск только системных сценариев (из /bin, /usr/bin и т.п.), а во всех остальных директориях запретить (/home, /tmp и т.д.). На примере Python:

#File: /etc/apparmor.d/usr.bin.python2.7
/usr/bin/python {
#include
/usr/bin/python2.7 mr,
deny /home/** rw,
deny /tmp/** rw,
deny /some/user/writable/directory/** rw,
/** rw,
}

Грамотная настройка файервола в Ubuntu

Файервол должен быть сконфигурирован таким образом, чтобы блокировать все входящие соединения, разрешая только те, которые явно предоставляются внешним пользователям. Следующий пример запрещает через iptables все входящие соединения, кроме доступа к ssh (22 порт):

# разрешаем все исходящие и запрещаем все входящие
/sbin/iptables -F
/sbin/iptables -X
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD DROP
/sbin/iptables -P INPUT DROP

# разрешаем входящий ssh
/sbin/iptables -A INPUT -p tcp —dport 22 -j ACCEPT

# разрешаем stateful return traffic
/sbin/iptables -A INPUT -m conntrack —ctstate RELATED,ESTABLISHED -j ACCEPT

# разрешаем любой трафик на интерфейсе lo
/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A OUTPUT -o lo -j ACCEPT

Сохраняем настройки в конфигурационном файле /etc/fw-rules и не забываем закрыть к нему доступ посторонним:

iptables-save > /etc/fw-rules
chmod 400 /etc/fw-rules

Остается заставить систему загружать правила при каждом включении. Для этого создаем файл /etc/init/netfilter.conf со следующим содержанием:

description "netfilter firewall"
start on (starting networking)
pre-start script
iptables-restore < /etc/fw-rules
end script

Готово. Теперь можно расслабить булки.