如何为 NFS、Apache 和 SaMBA 守护程序同时访问服务器端的文件夹层次结构设置 selinux 标签?

如何为 NFS、Apache 和 SaMBA 守护程序同时访问服务器端的文件夹层次结构设置 selinux 标签?

NFS 的强制访问控制或 MAC 标签不同,httpd 的强制访问控制或 MAC 标签不同,SaMBa 的强制访问控制或 MAC 标签也不同。如今,在服务器上标记单个共享文件系统层次结构的正确方法是什么,以便通过restorecon正确地重新标记它,可以由所有三个服务在服务器端成功访问,并在系统更新后继续存在?

换句话说,当服务器端 fs 层次结构被标记为通过 NFS 共享时,就会中断同一服务器上 httpd 和 smb 守护程序的访问。如果标记为 httpd,则 NFS 和 SMB 服务将停止共享,因为文件仅标记为 httpd,因此被拒绝读写。最后,SMB 标签破坏了 NFS 和 httpd 服务。

他们是否采用现代 DevOps 方法来解决这个问题,例如 Ansible 播放列表?我之前制作过自定义标签,但在系统更新后必须重新制作它们,造成了太多摩擦。想知道自定义标签是否仍然如此,但现在有了自动化?

答案1

如果您的 NFS 服务器支持 NFSv4.2 中的“security_label”,那么您可以创建支持用于 SELinux 标签的扩展属性的导出。我不知道任何有效的 smb 实现(也许 SMB3 中的 Posix 扩展将来会得到它?)。

否则,如果您需要通过 NFS 挂载的特定目录具有特定标签,请使用 context=“mylabel_t” 挂载选项。它将具有该共享提供的所有文件和目录的上下文。

SELinux 策略还具有用于各种服务的布尔值,允许它们从 nfs 和 smb 共享中读取。

编辑:如果您要通过 nfs、smb 和 http 导出目录(称为 /data),请尝试使用 public_content_t:

# semanage fcontext -a -t public_content_t "/data(/.*)?" 

# restorecon -F -R -v /data

相关内容