![如何让 SELinux 允许 Apache 和 Samba 位于同一文件夹?](https://linux22.com/image/510841/%E5%A6%82%E4%BD%95%E8%AE%A9%20SELinux%20%E5%85%81%E8%AE%B8%20Apache%20%E5%92%8C%20Samba%20%E4%BD%8D%E4%BA%8E%E5%90%8C%E4%B8%80%E6%96%87%E4%BB%B6%E5%A4%B9%EF%BC%9F.png)
在我设置的配置中,我希望允许 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:
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/