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

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

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

(CentOS)

3 ответа

Решение

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

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

Для Red Hat Linux:

Источник:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/selinux_users_and_administrators_guide/sect-managing_confined_services-the_apache_http_server-configuration_examples

13.4.2. Совместное использование томов NFS и CIFS По умолчанию монтирования NFS на стороне клиента помечаются контекстом по умолчанию, определенным политикой для томов NFS. В общих политиках этот контекст по умолчанию использует тип nfs_t. Кроме того, по умолчанию общие ресурсы Samba, подключенные на стороне клиента, помечаются контекстом по умолчанию, определенным политикой. В общих политиках этот контекст по умолчанию использует тип cifs_t. В зависимости от конфигурации политики службы могут не иметь возможности читать файлы, помеченные типами nfs_t или cifs_t. Это может помешать файловым системам, помеченным этими типами, монтироваться, а затем читаться или экспортироваться другими службами. Логические значения можно включить или отключить, чтобы контролировать, каким службам разрешен доступ к типам nfs_t и cifs_t. Включите логическое значение httpd_use_nfs, чтобы разрешить httpd доступ и совместное использование томов NFS (помеченных типом nfs_t):

      ~]# setsebool -P httpd_use_nfs on

Включите логическое значение httpd_use_cifs, чтобы разрешить httpd доступ и совместное использование томов CIFS (помеченных типом cifs_t):

      ~]# setsebool -P httpd_use_cifs on

Примечание

Не используйте опцию -P, если вы не хотите, чтобы изменения setsebool сохранялись после перезагрузки.

............. ПРИМЕЧАНИЕ. Чтобы просмотреть текущие настройки контекста seLinux для каталога (в приведенном ниже примере каталога /shares/):


Вы можете исключить -d, чтобы просмотреть контекст файлов и папок в каталоге:

      ls -Z /shares/

........................

Маркировка /shares/ типом public_content_t обеспечивает доступ только для чтения для HTTP-сервера Apache, FTP, rsync и Samba. Введите следующую команду от имени пользователя root, чтобы добавить изменение метки в конфигурацию контекста файла:

      ~]# semanage fcontext -a -t public_content_t "/shares(/.*)?"

Используйте утилиту восстановления от имени пользователя root, чтобы применить изменения меток:

      ~]# restorecon -R -v /shares/

ПРИМЕЧАНИЕ. Я не был уверен, для чего предназначена команда восстановления, и не запускал ее изначально, и мне было интересно, почему изменения команды semanage не были применены после ее запуска. В справочной статье указано, что команда восстановления применяет изменения контекста из команды semanage.

После применения изменений вы можете просмотреть настройки контекста, выполнив:

      ls -dZ /shares/
Другие вопросы по тегам