Как я могу получить SELinux, чтобы разрешить Apache и Samba в одной папке?

26

В конфигурации, которую я настроил, я хочу разрешить samba и apache доступ к / var / www. Я могу установить контекст, разрешающий доступ samba, но тогда httpd не имеет доступа. Использование setenforce для 0 устраняет проблемы, поэтому я знаю, что это SELinux.

Кроме того: Как я могу просмотреть контекст папки, и может ли папка иметь несколько контекстов?

(CentOS)

Джошуа Энфилд
источник
Вы пытались использовать логическую опцию system-config-selinux?

Ответы:

39

Во-первых, вы можете просмотреть контекст чего-либо с помощью ls, используя ls -Z

[root@servername www]# ls -dZ /var/www
drwxr-xr-x  root root system_u:object_r:httpd_sys_content_t /var/www

Во-вторых, есть два варианта предоставления Samba и Apache доступа к одному и тому же каталогу.

Простой способ - просто разрешить доступ samba для чтения / записи везде:

setsebool -P samba_export_all_rw 1

Это просто, легко и не мешает каким-либо странным свойствам SELinux.

Если вы обеспокоены тем, что Samba имеет полный доступ ко всем каталогам и хотите изменить только / var / www, попробуйте:

chcon -t public_content_rw_t /var/www
setsebool -P allow_smbd_anon_write 1
setsebool -P allow_httpd_anon_write 1

Это позволит и Samba, и Apache иметь доступ на запись в любые каталоги с контекстом public_content_rw_t. Обратите внимание, что chcon только изменяет / var / www. Любые новые каталоги, созданные в / var / www, будут public_content_rw_t, но не существующие каталоги, такие как / var / www / html или / var / www / manual. Если вы хотите все изменить, добавьте -R к chcon:

chcon -R -t public_content_rw_t /var/www

Вы можете просмотреть эту вики-страницу CentOS, чтобы получить подсказки по другим логическим выражениям SELinux.

Дэвид
источник
Я попробовал это, и он жалуется, что контекст уже определен.
Джошуа Энфилд
Вы правы, похоже, все изменилось с тех пор, как я в последний раз связывался с SELinux. Я обновлю свой ответ с некоторыми другими вариантами.
Дэвид
3
@ Дэйв, ты спас мой зад Увидимся завтра на работе.
Джоэл Э Салас
Я хотел бы упомянуть, что если ваш webroot вложен в общий ресурс samba, вам также необходимо установить контекст родительских каталогов. Например:chcon -t public_content_rw_t /mnt/share/webroot(/.*)? chcon -t public_content_rw_t /mnt/share
Грег Шеремета
1
Спасибо, я боролся с чем-то похожим, но с ftp, и все работает после выполненияsetsebool -P ftpd_full_access=1
giorgiline
9
SHARING FILES
   If you want to share files with multiple domains (Apache,  FTP,  rsync,
   Samba),  you can set a file context of public_content_t and public_content_rw_t.
   These context allow any of the above domains  to  read  the
   content.   If  you want a particular domain to write to the public_con‐
   tent_rw_t   domain,   you   must   set   the    appropriate    boolean.
   allow_DOMAIN_anon_write.  So for samba you would execute:

       setsebool -P allow_smbd_anon_write=1

Например:

semanage fcontext -a -t public_content_rw_t '/var/www(/.*)?'
restorecon -R /var/www
setsebool -P allow_smbd_anon_write 1
hm2k
источник