Как я могу получить 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:
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/