如何让 SELinux 允许 Apache 和 Samba 位于同一文件夹?

如何让 SELinux 允许 Apache 和 Samba 位于同一文件夹?

在我设置的配置中,我希望允许 samba 和 apache 访问 /var/www。我可以设置上下文以允许 samba 访问,但 httpd 却无权访问。使用 setenforce 为 0 可以消除问题,所以我知道这是 SELinux。

另外:如何查看文件夹的上下文,一个文件夹可以有多个上下文吗?

(CentOS)

答案1

首先,你可以使用 ls -Z 查看 ls 的上下文

[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)则不是。如果您想更改所有内容,请在 chcon 中添加 -R:

chcon -R -t public_content_rw_t /var/www

您可以浏览这个 CentOS wiki 页面获取有关其他 SELinux 布尔值的提示。

答案2

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

答案3

对于 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

笔记

如果您不希望 setsebool 更改在重启后仍然存在,请不要使用 -P 选项。

.................... 注意:要查看目录的当前 seLinux 上下文设置(在下面的示例 /shares/ 目录中):

ls -dZ /shares/

可以排除-d来查看目录下文件和文件夹的上下文:

ls -Z /shares/

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

使用 public_content_t 类型标记 /shares/ 允许 Apache HTTP Server、FTP、rsync 和 Samba 进行只读访问。以 root 身份输入以下命令将标签更改添加到文件上下文配置:

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

以 root 身份使用 restorecon 实用程序来应用标签更改:

~]# restorecon -R -v /shares/

注意:对于我来说,我不确定 restorecon 命令的用途,并且最初没有运行它,并且想知道为什么在我运行它之后 semanage 命令更改没有应用。参考文章指出 restorecon 命令应用了 semanage 命令的上下文更改。

应用更改后,您可以通过运行以下命令查看上下文设置:

ls -dZ /shares/

相关内容