【发布时间】:2017-05-24 18:03:00
【问题描述】:
我正在设置一个 Centos 7 服务器作为 Rails 应用程序的网络服务器(使用 capistrano 部署),在阅读了相当多的 SELinux 之后,我想我明白需要做什么,但我不知道正是完成它的最佳方法。 问题如下:
我所有的网络应用程序都在同一个目录下,我已经使用以下命令(递归地)设置了上下文 httpd_sys_content_t:
semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
这向我保证,Apache 可以读取所有文件,这是我在 SELinux 方面的第一步。
问题 #1: 在这一步之后,我得到一个权限错误,因为 apache 无法执行 /shared/bundle/ 中的 .so 脚本 em> 目录(其中包含此应用程序的 gem。 为了解决这个问题,我递归地将 shared/bundle 目录的上下文设置为 httpd_sys_script_exec_t。这是错的吗?有没有更好的方法来处理这个问题?
问题 #2: 我还没有达到这一步,但如果不设置 public/uploads 的上下文,我可能无法将文件上传到 Web 应用程序 dir 到 httpd_sys_content_rw_t,这是有道理的。
我最大的问题是: 每次部署新网站时是否需要设置这些上下文,以确保其上传目录具有 httpd_sys_content_rw_t 上下文,并且其捆绑目录具有 httpd_sys_script_exec_t 上下文?必须有一种方法可以永久设置它,而且可能比我上面描述的更优雅,但我不想在不完全了解后果的情况下过多地混淆这些上下文。
有人能告诉我这种情况下最好的设置是什么吗?我是否遗漏了一些可以让这个设置变得更容易的东西?
【问题讨论】:
标签: ruby-on-rails centos centos7 selinux rhel7