Назад | Перейти на главную страницу

Как заставить SELinux разрешать Apache и Samba в одной папке?

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

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

(CentOS)

Во-первых, вы можете просмотреть контекст чего-либо с помощью 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 доступа к одному и тому же каталогу.

Самый простой способ - разрешить самбе доступ для чтения и записи везде:

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.

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