SELinux 的 apache 模块有两个类似的布尔参数:httpd_read_user_content
和httpd_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
。也就是说,后者的范围比前者更广。
正如迈克尔正确指出的那样,如果我们只想将文档根目录放在用户的主目录中,我们应该只启用第一个。