Я понимаю – SELinux – это сложная задача, и когда уровень безопасности препятствует вашим приложениям или службам, вы в первую очередь склоняетесь к тому, чтобы установить для него значение Disabled или Permissive.
Вместо того, чтобы подвергать риску все, почему бы не воспользоваться инструментом, который может вам помочь?
Этот инструмент – semanage – инструмент управления политиками SELinux.
С помощью semanage вы можете настраивать контексты файлов, контексты портов и логические значения, что существенно поможет вам сделать вещи работоспособными, не отключая при этом систему безопасности.
Я хочу познакомить вас со следующими командами:
- semanage boolean
- semanage fcontext
- semanage port
Узнав эти команды, вы сможете лучше работать с SELinux в своих системах Linux.
Как использовать semanage boolean
С помощью semanage boolean вы можете включать и отключать наборы разрешающих правил.
Например, предположим, что у вас есть веб-сервер, который должен разрешать чтение пользовательского контента, такого как данные из их домашних каталогов.
По умолчанию SELinux не позволяет этого допустить.
С помощью логической команды semanage вы можете включить эту функцию.
Вы можете использовать semanage boolean для вывода списка всех доступных политик, связанных с HTTP, с помощью команды:
sudo semanage boolean -l | grep httpd
Вы увидите несколько записей вроде:
httpd_read_user_content (off , off) Allow httpd to read user content
Каждый листинг включает имя логического значения, текущее и постоянное состояние значения и описание.
Как вы можете видеть выше, логическое значение httpd_read_user_content отключено.
Как мы его включим?
sudo semanage boolean -m --on httpd_read_user_content
С помощью опции -m мы указываем SELinux, что мы изменяем запись (в данном случае httpd_read_user_context) с помощью следующей опции (–on).
Вот и все.
Вы только что сделали так, что SELinux позволяет веб-серверу читать пользовательский контент.
Если вы хотите перечислить все логические значения, чтобы увидеть, что еще вы можете сделать, введите команду:
sudo semanage boolean -l
Как использовать semanage fcontext
Команда semanage fcontext используется для управления определениями контекста файлов, которые содержат дополнительную информацию (например, пользователя SELinux, роль, тип и уровень) для принятия решений по управлению доступом.
Контекст файла – одна из самых больших проблем, с которыми сталкиваются администраторы при работе с SELinux.
Возможно, вы создали новый каталог для размещения ключей хоста SSH, но без правильного файлового контекста SELinux не сможет получить доступ к этому каталогу по SSH.
Что нужно сделать?
Надо изменит контекст файла нового каталога с помощью semanage fcontext.
Как и в случае с boolean, у fcontext есть политики, с которыми он может работать.
Чтобы увидеть полный список доступных политик, выполните команду:
sudo semanage fcontext -l
Продолжим наш пример.
Если вы хотите вывести список всех политик, связанных с демоном SSH, введите команду:
В этом списке вы увидите следующие записи:
/etc/ssh/primes regular file system_u:object_r:sshd_key_t:s0
/etc/ssh/ssh_host.*_key regular file system_u:object_r:sshd_key_t:s0
/etc/ssh/ssh_host.*_key\.pub regular file system_u:object_r:sshd_key_t:s0
Допустим, вы хотите разместить ключи хоста SSH в /data/keys.
Вы создаете каталог, перемещаете все ключи в новый каталог и изменяете файл sshd_config в соответствии с новым местом.
Когда вы пытаетесь использовать SSH, это не удается.
Почему?
Поскольку /data/keys не имеет правильного fcontext.
Вы можете исправить это с помощью следующих двух команд:
sudo semanage fcontext -a -t sshd_key_t '/data/keys/*.*'
sudo restorecon -r /data/keys
Мы должны использовать команду restorecon, чтобы установить контекст безопасности для новых файлов – после того, как мы создали новую политику с помощью semanage fcontxt.
Регулярное выражение *. * захватывает все файлы в каталоге.
Как использовать порт semanage port
Как вы, наверное, догадались, semanage port позволяет запускать службу на настраиваемом порту.
Если вы попытаетесь запустить службу на настраиваемом порту, служба завершится ошибкой.
Допустим, вы хотите запустить демон SSH на нестандартном порту.
Если вы просто настроите sshd_config для этого, вы обнаружите, что SELinux заблокирует вам доступ, поскольку SELinux не знает, что вы внесли это изменение.
Если вы хотите изменить порт SSH на 2112:
semanage port -a -t ssh_port_t -p tcp 2112
Затем вам нужно будет добавить порт в брандмауэр с помощью команд:
sudo firewall-cmd --add-port=2112/tcp --permanent
sudo firewall-cmd --reload
На этом этапе вы, наконец, cможете подключиться к серверу с поддержкой SELinux по SSH, используя нестандартный порт.
Чтобы вывести список всех доступных политик портов, введите команду:
sudo semanage port -l
Заключение
SELinux – очень мощный инструмент, который отлично защищает ваши серверы Linux от нежелательных изменений.
Вместо того, чтобы отключать SELinux или устанавливать его режим Permissive, ознакомьтесь с тремя приведенными выше командами, которые должны значительно упростить жизнь администратора.