Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails应用程序的SELinux上下文_Ruby On Rails_Centos_Centos7_Selinux_Rhel7 - Fatal编程技术网

Ruby on rails rails应用程序的SELinux上下文

Ruby on rails rails应用程序的SELinux上下文,ruby-on-rails,centos,centos7,selinux,rhel7,Ruby On Rails,Centos,Centos7,Selinux,Rhel7,我正在设置一个Centos 7服务器,作为rails应用程序(与capistrano一起部署)的Web服务器,在阅读了相当多关于SELinux的内容后,我想我知道需要做什么,但我不知道确切地说最好的方法是什么。 问题如下: 我的所有web应用程序都在同一个目录下,我使用以下命令(递归)为其设置了上下文httpd_sys_content\t: semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?" 这让我确信所有文件都可

我正在设置一个Centos 7服务器,作为rails应用程序(与capistrano一起部署)的Web服务器,在阅读了相当多关于SELinux的内容后,我想我知道需要做什么,但我不知道确切地说最好的方法是什么。 问题如下:

我的所有web应用程序都在同一个目录下,我使用以下命令(递归)为其设置了上下文httpd_sys_content\t:

semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
这让我确信所有文件都可以被apache读取,这是我关于SELinux的第一步

问题#1:在这一步之后,我得到了一个权限错误,因为apache无法执行/shared/bundle/目录(其中包含此应用程序的精华)中的.so脚本。 为了解决这个问题,我递归地将shared/bundle目录的上下文设置为httpd_sys_script_exec_t。这是错误的吗?有没有更好的方法来处理这个问题

问题2:我还没有达到这一步,但是如果不将public/uploads dir的上下文设置为httpd\u sys\u content\u rw\t,我可能无法将文件上载到web应用程序,这是有意义的

我最大的问题是: 我是否需要在每次部署新网站时设置这些上下文,以确保其上载目录具有httpd_sys_content_rw_t上下文,其捆绑目录具有httpd_sys_script_exec_t上下文?必须有一种方法永久地设置这些上下文,并且可能比我上面描述的更精致,但我不想太麻烦h在没有充分理解后果的情况下处理这些上下文


有人能告诉我这种情况下最好的设置是什么吗?我是否遗漏了一些可以使此设置更容易的内容?

一切都取决于您使用的应用程序服务器以及它在哪个域中运行。看起来您的应用程序服务器在httpd_t SELinux域下运行,该域可能是mod_passenger。然后您需要根据httpd\u t域的要求更改文件上下文。非常好的资源包括:

您的工作进展顺利,但在某个时候,您需要开始编写自己的策略。当您的应用程序需要执行某些不允许使用httpd的操作(例如连接到远程HTTP)时,这将成为一个问题服务或打开/var/www之外的文件。在这种情况下,正确的方法是为应用程序编写自己的SELinux策略

我已经去过那里好几次了,我为开源应用程序Foreman维护SELinux策略,默认情况下,它是与Passenger一起部署的。在Passenger世界中,事情有点复杂,因为不可能完成干净的初始转换,所以你最终会得到Passenger\t域(理想情况下,它应该是我的超级棒的应用程序).无论如何,这里是最重要的文件:

编写SELinux策略是一个痛苦的过程,但它可以极大地提高应用程序的安全性。它还可以帮助您强化代码库。我在这里的演讲中将详细介绍这一点:


祝你好运!

一切都取决于你使用的应用程序服务器以及它运行在哪个域中。看起来你的应用程序服务器运行在httpd_t SELinux域下,该域可能是mod_passenger。然后你需要根据httpd_t域的要求更改文件上下文。非常好的资源包括:

您的工作进展顺利,但在某个时候,您需要开始编写自己的策略。当您的应用程序需要执行某些不允许使用httpd的操作(例如连接到远程HTTP)时,这将成为一个问题服务或打开/var/www之外的文件。在这种情况下,正确的方法是为应用程序编写自己的SELinux策略

我已经去过那里好几次了,我为开源应用程序Foreman维护SELinux策略,默认情况下,它是与Passenger一起部署的。在Passenger世界中,事情有点复杂,因为不可能完成干净的初始转换,所以你最终会得到Passenger\t域(理想情况下,它应该是我的超级棒的应用程序).无论如何,这里是最重要的文件:

编写SELinux策略是一个痛苦的过程,但它可以极大地提高应用程序的安全性。它还可以帮助您强化代码库。我在这里的演讲中将详细介绍这一点:


祝你好运!

非常感谢你的insight mate,我将查看你链接的信息,找出将其应用于我的场景的最佳方法。由于时间限制,我认为我必须采取更快的方法。你认为我编写一套适用于我所有rails应用程序的规则并允许它们运行会太糟糕吗现在是否正确执行?类似于:semanage fcontext-a-t httpd\u sys\u rw\u content\u t“/var/www/html/(*)?/public/uploads(/*)”这将在我在该服务器上的每个站点上的所有上载目录上设置RW上下文?然后我会对脚本目录执行相同的操作。您认为如何?这不是最安全的方法,您实际上允许对所有应用程序进行读写访问,这正是SELinux试图阻止的。如果您需要快速方法,您可以简单地将其设置为r域进入许可模式,同时限制系统的其余部分(在强制模式下)。这将是semanage permissive domain_t。使用我前面介绍的命令,我只允许RW访问所有站点的所有上载目录,而不是站点本身。这是我最终采取的方法,我使用2个semanage命令设置了所有站点所需的所有权限,而不影响安全性(只有上载目录具有RW,只有脚本目录具有脚本执行权限)。虽然这可能不是一个完美的方法,但在安全方面似乎也不太糟糕。哦,是的,我错过了上载子目录,这样做是安全的。非常感谢您的insight mate,我将查看您链接的信息,以找出将其应用于我的场景的最佳方法。由于时间限制,我认为我必须加快速度er应用程序