CentOS 7 - каталоги, созданные через VSFTPD, не наследующие контексты SELinux


8

У нашей компании есть веб-сервер с 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?


Для безопасности плохая идея вообще поддерживать FTP. Подумайте о том, чтобы избавиться от этого и проинструктировать клиентов о том, как настроить свои клиенты передачи файлов для использования SFTP вместо этого ... что также избавит от этой проблемы.
Майкл Хэмптон

Спасибо, Майкл. Я согласен с вами, но в нашем случае мы не используем «ftp.domain.com» для наших клиентов, а также не раскрываем публичный IP-адрес сервера (сервер находится за прокси-сервером NginX), поэтому безопасность FTP не является проблемой для нас. Только те, кому мы отправляем адрес FTP, могут даже найти IP-адрес сервера для подключения через FTP.
Хуан Пабло Барриос

Ответы:


6

Существует различие между маркировкой по умолчанию, которая происходит во время выполнения, и политикой пост-маркировки на основе регулярных выражений, которая применяется на сервере.

Что вы здесь заметили:

/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

Это политика маркировки постов.

То, что вы обсуждаете в своей проблеме, на самом деле относится к политике выполнения.

Когда запись создается в каталоге с использованием SELinux, правила, определяющие, какой меткой заканчивается файл или каталог, определяются не теми регулярными выражениями, которые вы цитируете, а другими правилами следующим образом (я считаю, что это правильный порядок, но, возможно, что-то пропустило) ,

  1. Существует явное именованное type_transitionправило.
  2. Существует явное безымянное type_transitionправило.
  3. Унаследуйте тот же контекст, что и родительский каталог.
  4. Применить default_context.

Итак, когда я копирую сайт WordPress, скажем, с другого сервера в каталог в / var / www / html / по SSH, папки wp-content / и wp-content / uploads / имеют надлежащий httpd_sys_rw_content_t контекст безопасности.

Так что, да, это так, но не по той причине, о которой вы думаете. Конечно, не из-за политики почтовой маркировки.

Это происходит потому, что существует определенное именованное type_transitionправило, обеспечивающее такое поведение.

$ sesearch -C -T -s unconfined_t -t httpd_sys_content_t -c dir

Found 4 named file transition filename_trans:
type_transition unconfined_t httpd_sys_content_t : dir httpd_sys_rw_content_t "wp-content"; 
type_transition unconfined_t httpd_sys_content_t : dir httpd_sys_rw_content_t "smarty"; 
type_transition unconfined_t httpd_sys_content_t : dir httpd_sys_rw_content_t "uploads"; 
type_transition unconfined_t httpd_sys_content_t : dir httpd_sys_rw_content_t "upgrade"; 

Это в основном говорит.

  • Если вы unconfined_t и
  • Если вы выполняете действие в целевом типе httpd_sys_content_t и
  • Если класс новой записи является каталогом и
  • Если название новой записи «загружает», то
  • Новый тип httpd_sys_rw_content_t

Причина, по которой это работает для SSHD, заключается в том, что после входа в систему вам предоставляется исходный контекст, unconfined_tдля которого применяется это правило.

Это не работает для службы FTP, потому что исходный контекст этой службы, скорее всего, ftpd_tне имеет соответствующего правила.

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

По крайней мере, в Fedora 23 существует интерфейс, позволяющий это сделать, такой модуль политики сделает это.

policy_module(local_ftpd, 7.2.0)

require {
  type ftpd_t;
}

apache_filetrans_named_content(ftpd_t)

Вы можете загрузить это, убедившись, что selinux-policy-develпакет установлен и работает make -f /usr/share/selinux/devel/Makefile load.


1
Привет Мэтью, это сделало трюк !! Спасибо за вашу помощь, поскольку я сходил с ума от этого. Я не был уверен, что делать с модулем политики, который вы написали, поскольку я никогда не настраивал SELinux, поэтому я немного погуглил, и вот что я сделал: я создал файл local_ftpd.teс вашим модулем политики, затем сделал make -f /usr/share/selinux/devel/Makefile local_ftpd.ppи потом semodule -i local_ftpd.pp. Это нормально? Теперь файлы, созданные через FTP, наследуют нужные контексты. Еще раз спасибо!
Хуан Пабло Барриос
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.