httpd_read_user_content 和 httpd_enable_homedirs 之间有什么区别?

httpd_read_user_content 和 httpd_enable_homedirs 之间有什么区别?

SELinux 的 apache 模块有两个类似的布尔参数:httpd_read_user_contenthttpd_enable_homedirs

手册页说前者允许 httpd 读取用户内容后者允许 httpd 读取主目录

它们之间有什么区别?

如果我想允许 httpd 读取/home/foo目录中的文件,我应该将哪个参数设置为 true?

答案1

httpd_read_user_content允许任何受限的 Web 服务器读取用户主目录中的文件/home

httpd_enable_homedirs允许 Apache 使用其UserDir指令(即类似于的 URL http://www.example.com/~username/)。

如果您只是将域名映射到用户目录,则启用第一个就足够了,httpd_read_user_content但如果您想使用 Apache 用户目录,则应该启用两者。

答案2

经过我自己的一些研究后,我使用sesearch命令调查了它们之间的区别:

$ sesearch --allow -s httpd_t -b httpd_read_user_content
找到了 5 条语义 av 规则:
   允许 httpd_t user_home_dir_t:dir {ioctl 读取 getattr 锁搜索打开};
   允许 httpd_t user_home_t:文件{ioctl 读取 getattr 锁打开};
   允许 httpd_t user_home_t:dir {ioctl 读取 getattr 锁搜索打开};
   允许 httpd_t home_root_t:dir { getattr 搜索打开 };
   允许 httpd_t home_root_t:lnk_file {读取 getattr};
$ sesearch --allow -s httpd_t -b httpd_enable_homedirs
找到 15 条语义 av 规则:
   允许 httpd_t user_home_dir_t:dir {ioctl 读取 getattr 锁搜索打开};
   允许 httpd_t user_home_dir_t:lnk_file {读取 getattr};
   允许 httpd_t autofs_t:dir { ioctl 读取 getattr 锁搜索打开};
   允许 httpd_t cifs_t:文件 { ioctl 读取 getattr 锁打开 };
   允许 httpd_t cifs_t:dir {ioctl 读取 getattr 锁搜索打开};
   允许 httpd_t cifs_t:lnk_file {读取 getattr};
   允许 httpd_t nfs_t:文件 { ioctl 读取 getattr 锁打开 };
   允许 httpd_t nfs_t:dir {ioctl 读取 getattr 锁搜索打开};
   允许 httpd_t nfs_t:lnk_file {读取 getattr};
   允许 httpd_t user_home_t:文件{ioctl 读取 getattr 锁打开};
   允许 httpd_t user_home_t:dir {ioctl 读取 getattr 锁搜索打开};
   允许 httpd_t user_home_type:dir { getattr 搜索打开 };
   允许 httpd_t user_home_type:lnk_file { 读取 getattr };
   允许 httpd_t home_root_t:dir {ioctl 读取 getattr 锁搜索打开};
   允许 httpd_t home_root_t:lnk_file {读取 getattr};

的所有规则http_read_user_content都包含在 中httpd_t -b httpd_enable_homedirs。也就是说,后者的范围比前者更广。

正如迈克尔正确指出的那样,如果我们只想将文档根目录放在用户的主目录中,我们应该只启用第一个。

相关内容