У нашей компании есть веб-сервер с CentOS 7, и наши клиенты управляют своими сайтами через FTP (vsftpd). SELinux находится в принудительном режиме.
Проблема заключается в том, что данные, созданные / загружаемые через VSFTPD, не наследуют соответствующий контекст SELinux. Позволь мне объяснить.
Например, для сайтов WordPress на сервере уже есть несколько правил, которые можно увидеть, используя semanage fcontext -l |grep '/var/www'
:
/var/www/html(/.*)?/uploads(/.*)? all files system_u:object_r:httpd_sys_rw_content_t:s0
/var/www/html(/.*)?/wp-content(/.*)? all files system_u:object_r:httpd_sys_rw_content_t:s0
Итак, когда я копирую сайт WordPress, скажем, с другого сервера в каталог /var/www/html/
по SSH, папки wp-content/
и wp-content/uploads/
имеют надлежащий httpd_sys_rw_content_t
контекст безопасности. ОДНАКО, когда эти папки создаются через FTP, контекст, который они получают, httpd_sys_content_t
(без rw ). Это означает, что сайты, которые наши клиенты загружают на сервер, не могут записывать в эти каталоги, даже если они дают разрешения на запись для пользователя / группы apache, поэтому администратор WordPress не работает. Поэтому, когда они загружают сайт, они должны запросить поддержку у нас, чтобы это исправить, что является пустой тратой времени для всех участников.
Допустим, клиент загрузил свой сайт httpdocs
, если через SSH я решу mv httpdocs/ httpdocs.2/ && cp -pr httpdocs.2/ httpdocs/ && rm httpdocs.2/ -fr
проблему, поэтому с данными все в порядке.
Я также могу сделать, restorecon -Rv httpdocs/
чтобы решить проблему.
Итак, вопрос: как я могу создать каталоги, созданные / загруженные через VSFTPD, наследовать надлежащие контексты SELinux так же, как они наследуются, когда каталоги создаются / загружаются через SSH?
Ответы:
Существует различие между маркировкой по умолчанию, которая происходит во время выполнения, и политикой пост-маркировки на основе регулярных выражений, которая применяется на сервере.
Что вы здесь заметили:
Это политика маркировки постов.
То, что вы обсуждаете в своей проблеме, на самом деле относится к политике выполнения.
Когда запись создается в каталоге с использованием SELinux, правила, определяющие, какой меткой заканчивается файл или каталог, определяются не теми регулярными выражениями, которые вы цитируете, а другими правилами следующим образом (я считаю, что это правильный порядок, но, возможно, что-то пропустило) ,
type_transition
правило.type_transition
правило.default_context
.Так что, да, это так, но не по той причине, о которой вы думаете. Конечно, не из-за политики почтовой маркировки.
Это происходит потому, что существует определенное именованное
type_transition
правило, обеспечивающее такое поведение.Это в основном говорит.
unconfined_t
иhttpd_sys_content_t
иhttpd_sys_rw_content_t
Причина, по которой это работает для SSHD, заключается в том, что после входа в систему вам предоставляется исходный контекст,
unconfined_t
для которого применяется это правило.Это не работает для службы FTP, потому что исходный контекст этой службы, скорее всего,
ftpd_t
не имеет соответствующего правила.Таким образом, вам нужно изменить политику, чтобы изменить поведение SELinux, чтобы также соблюдать правила именованных файлов, которые вы видите в других записях для FTP тоже.
По крайней мере, в Fedora 23 существует интерфейс, позволяющий это сделать, такой модуль политики сделает это.
Вы можете загрузить это, убедившись, что
selinux-policy-devel
пакет установлен и работаетmake -f /usr/share/selinux/devel/Makefile load
.источник
local_ftpd.te
с вашим модулем политики, затем сделалmake -f /usr/share/selinux/devel/Makefile local_ftpd.pp
и потомsemodule -i local_ftpd.pp
. Это нормально? Теперь файлы, созданные через FTP, наследуют нужные контексты. Еще раз спасибо!