我想允许httpd
从用户主目录执行文件。据audit2allow
我了解,这意味着以下策略:
allow httpd_t user_home_t:file execute;
如何将其转换为在 CentOS 服务器上启用此策略的脚本?我已经启用了布尔值httpd_read_user_content
,httpd_enable_homedirs
但这没有帮助。
答案1
网页服务器的常用 SELinux 安全策略提供了一组类型,普通用户可以使用这些类型来告诉 SELinux 网页服务器如何操作指定的文件。用户可以使用 chcon 命令将这些类型与指定的文件和目录关联起来。
每种类型都有特定的属性,旨在用于特定目的。
httpd_user_script_exec_t 类型是您的 Web 服务器允许执行的类型。此外,还有与该类型相关的规则,指示 SELinux 使用所谓的“自动进程类型转换”来运行脚本进程,从 Web 服务器进程类型转换为专为常见用户 CGI 脚本进程设计的进程类型。此类型与大多数 CGI 脚本进程共有的一组特定权限相关联。
httpd_user_rw_content_t 类型是您的 Web 服务器允许读取和写入的类型。(例如 ~/public_content/myblog/wp_content)
httpd_user_content_t 类型是你的 Web 服务器允许读取的类型(例如 ~/public_content)
httpd_user_content_ra_t 类型是你的 Web 服务器允许读取和附加的类型(例如 ~/public_content/myblog/logs)
当您将 httpd_enable_homedirs 布尔值切换为开启时,这些类型通常很有用。此布尔值与允许您的 Web 服务器遍历 $HOME 的规则相关联,以便它可以访问 ~/public_content。
使用上述类型和布尔值应能确保相当好的完整性。例如,您的网络服务器将无法读取您的 ~/.ssh 或 ~/Documents,但可以读取您的网站。
用户 cgi 脚本进程也将被包含,这样如果它受到损害,其造成的损害将被控制在合理的范围内。
答案2
使用 chcon 是可行的,但是当您重新启动服务器时,您会丢失 selinux 标签,更清晰的方法是使用 semange 和 restorecon
例子:
semanage fcontext -a -t httpd_user_script_exec_t '/home/pippo/file.bash'
restorecon -v /home/pippo/file.bash
restorecon reset /home/pippo/file.bash context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_user_script_exec_t:s0
-rwxr-xr-x. root root unconfined_u:object_r:httpd_user_script_exec_t:s0 /home/pippo/file.bash