我正在尝试在 2 个 CentOS 服务器 (filesrv 和 websrv) 之间为需要由 Apache 进程读取和写入的文件夹设置 NFS 共享。我在可写入方面遇到了麻烦,我已将其缩小到 SELinux 配置:如果我setenforce 0
在 NFS 客户端上,Apache 可以写入共享。
NFS 服务器的导出文件中的相关行是:
/data/files/sitefiles websrv(rw,sync,no_root_squash)
NFS 服务器上共享文件夹的 SELinux 上下文是:
system_u:object_r:httpd_sys_rw_content_t:s0
NFS 客户端上的 fstab 中的条目是:
filesrv:/data/files/sitefiles /var/www/html/webroot/files nfs context="system_u:object_r:httpd_sys_rw_content_t:s0" 0 0
据我所知,这应该使用上下文安装 NFS 共享httpd_sys_rw_content_t
,但当我检查它时,它实际上是:
system_u:object_r:httpd_sys_content_t:s0
什么原因会导致它将更严格的上下文应用于共享?
答案1
简单的解决方案应该是使用 SELinux 布尔值httpd_use_nfs
来允许您的 Web 服务器显示和写入存储在 NFS 共享上的内容:
setsebool -P httpd_use_nfs=1
答案2
出现此问题的原因是我从同一台服务器挂载了多个 NFS 共享,但并非所有 NFS 共享都具有相同的上下文。
根据有关多个 NFS 挂载的 RedHat 文档,我需要补充无共享缓存到我的 fstab 行中,用于挂载。然后,将根据每个挂载应用正确的 SELinux 上下文。
我的 fstab 中的工作行如下:
filesrv:/data/files/sitefiles /var/www/html/webroot/files nfs nosharecache,context="system_u:object_r:httpd_sys_rw_content_t:s0" 0 0