В конфигурации, которую я установил, я хочу разрешить 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