我如何告诉 SELinux 授予 vsftpd 对特定目录的写访问权限?

Alp*_*rae 5 permissions selinux ftp vsftpd

我已经在 Fedora 12 服务器上设置了 vsftpd,并且希望进行以下配置。每个用户都应该有权访问:

  • 他的主目录(/home/USER);
  • 我为他创建的 Web 目录 (/web/USER)。

为了实现这一点,我首先将 vsftpd 配置为将每个用户 chroot 到他的主目录。然后,我使用/web/USER正确的权限创建并使用,mount --bind /web/USER /home/USER/Web以便用户可以/web/USER通过/home/USER/Web.

我还打开了 SELinux 布尔值ftp_home_dir,以便允许 vsftpd 在用户的主目录中写入。

这工作得很好,除了当用户尝试上传或重命名 中的文件时/home/USER/Web,SELinux 会禁止它,因为更改也必须对 进行/web/USER,并且 SELinux 不授予 vsftpd 向该目录写入任何内容的权限。

allow_ftpd_full_access我知道我可以通过打开 SELinux 布尔值或来解决问题ftpd_disable_trans。我还尝试使用audit2allow来生成策略,但它的作用是生成一个策略,为ftpd提供对类型目录的写访问权限public_content_t;如果我理解正确的话,这相当于打开allow_ftpd_full_access

我想知道是否可以配置 SELinux 以允许对特定目录/web/USER及其内容进行 FTP 写访问,而不是完全禁用 SELinux 的 FTP 控制。

ILM*_*o_7 4

# semanage fcontext -a -t public_content_rw_t "/myftp/pub(/.*)?"
Run Code Online (Sandbox Code Playgroud)

请务必(/.*)?在目录名称末尾包含 。


我还尝试使用audit2allow来生成策略,但它的作用是生成一个策略,为ftpd提供对public_content_t类型的目录的写访问权限;如果我理解正确的话,这相当于打开allow_ftpd_full_access

本质上是的;因为 SELinux 允许标记为 的目录/文件public_content_t在不同服务之间共享。然而,通过使用sebooleans(或sebool更准确地说,)可以进行进一步的访问控制。

给予“ftpd 完全访问权限”并不意味着赋予它执行/读取/写入所需内容和位置的权利。SELinux 已为您系统上的服务制定了指定的策略;意思是,如果目录的文件上下文 ( ) 是ftpd,则允许读取文件。如果目录的 fcontext 为 ;,SELinux 将向 ftp 服务器授予写权限;根据相关的RedHat 文档,其他服务(例如 samba、apache 等)必须通过布尔值获得对这些目录的写权限。如果您的“本地策略”在标记为 的目录中授予 ftpd 写入访问权限,那么它实际上会剥夺一层安全性。因此,我建议使用上下文标记目录,并删除自定义生成的本地策略。fcontextpublic_content_tpublic_content_rw_tpublic_content_tpublic_content_rw_t

有关更多信息和详细信息,请参阅SELinux wiki 页面