用nginx的安全

介绍

好吧,我很快就会成为新的生产networking,这个问题相当复杂(至less对我来说)。 我正在寻找来自更有经验的用户与Linux的build议,特别是安全的方式build立netwerk我是关于描述的build议。 我仍然是一个新手,但我现在负责build立这个新的networking。

目前,我正在使用一个负载均衡器,三个Web服务器和一个Apache数据服务器的设置上运行150多个网站。 现在所有的罚款,但是我正试图build立一个新的debiannetworkingnginx,因为性能的巨大增加。

我读了很多关于nginx和apache的信息,运行了几十个testing来比较两种情况下的性能,并得出结论:nginx在高压下(我们几乎只运行WordPress网站)处理请求的速度比apache快得多由于静态文件(有时在一个页面中有时超过100,浏览器可以明显但仍然可以兑现)。

当前设置

  • Debian 9
  • nginx 1.10.3
  • php-fpm(7.0)
  • ldap 3

我把所有来自网站的数据都安装在每个networking服务器上的/ websites目录中。 nginx和fpm的configuration文件也位于那里的configuration目录中。 每个网站(我将使用example.com)都有自己的用户(通过ldap进行身份validation),并且位于组网站(也在ldap中)。 因此,每个用户的拥有700个所有者example.com和组网站的/ websites文件夹中都有他的主目录。 这样做是为了让每个网站都运行在他自己的孤岛上。

这意味着对于每个网站configuration我有一个php fpmconfiguration,为每个用户使用不同的套接字。 这意味着,它只能在自己的网站目录下执行php文件,对吗? 对于PHP这工作正常,我宁愿不改变这种configuration。

问题

问题在于,nginx的速度更快,因为它直接与静态文件相比,而mpm-itk模块为每个用户创build单独的进程,然后为静态文件或PHP提供服务。

Nginx做了这样的不同,通过使用不同的套接字为每个用户(至less在php),与mpm-itk模块为apache做的一样。 然而,nginx无法做到这一点,并尝试提供所有的静态文件,因为用户nginx运行(默认为www数据)。 所以输出是由PHP生成(工作正常),但nginx没有权限来显示静态文件。

我一直在努力寻找更多的一天的解决scheme,并得出了几个不同的结论。

以root身份运行

我的同事说,以root身份运行nginx将会解决这个问题,当然这样做对我来说似乎并不安全。 如果我在这里,也可能删除整个“每个网站都有自己的用户”政策。

将www数据添加到网站组

如果我可以添加一个unix用户(在这种情况下www数据)到一个LDAP组(显然我不能),我可以给组(网站)读取权限(而不是当前的700),所以它可以读取静态文件到处。 唯一的问题是,网站可以读取彼此的文件,而我试图避免。 所以这似乎也不是一个合适的解决scheme。

SELinux的

我读了一些关于SELinux的文档和介绍,对我来说,这似乎是一个解决这个问题的复杂的方法。 我从来没有使用它,并在这样的生产networking上运行这似乎不是一个好主意,因为我不知道我在做什么。

结论

那么,我现在从哪里经验丰富的用户将采取什么样的path? 在SELinux做更多的研究? AppArmor的? 还是有另一种更简单的方法来获得相同的安全apaches mpm_itk提供。

这是我有的最后一个问题,我没有find所有的configuration文件来设置这个,我需要执行的确切命令都完成了。

我希望有更多经验的人能给我一些build议,或者指点一下正确的方向。 无论如何非常感谢!

SELinux是值得的时间投资恕我直言,其实并没有像你只是想要确定文件夹的权利时那么复杂。

但是,让我抛出一个曲线球…如果它主要是WordPress的,我会与Wordpresscaching插件Litespeed Web服务器。 你通过caching在Web服务器级别快速的WordPress的:

https://www.litespeedtech.com/products/cache-plugins/wordpress-acceleration

而且Litespeed有一个很容易实现的内置chrootfunction,将会照顾到你的安全问题:

https://www.litespeedtech.com/support/wiki/doku.php/litespeed_wiki:config:chroot

“chroot”是Unix系统上的一个function,它可以改变进程的根目录。 已更改的根进程及其subprocess无法访问新根目录之外的任何文件。 这就像是把一个进程放在一个监狱里,而这个机制通常被称为“chroot jail”。

当然,Nginx也可以使用chroot:

https://gir.me.uk/posts/nginx-php-fpm-with-chroot.html

Litespeed的Admin GUI使它变得非常简单,可能比CLI中的所有事情都更符合您的体验级别。

除了Chroot之外,还有SuEXEC选项:

https://www.litespeedtech.com/support/wiki/doku.php/litespeed_wiki:config:suexec-mode

SuEXEC是允许LiteSpeed Web服务器运行CGI / FastCGI / LSAPI / PHP / Ruby或UID(用户ID)下的任何外部Web应用程序的function,除了Web服务器进程的UID外。

这进一步解决了您以root身份运行Nginx的主要担忧。

我目前使用Nginx和Litespeed来制作Wordpress网站。 对于你所描述的高stream量情况,我会在任何一天推荐Litespeed的专用插件。 另外,还有快速文件服务的所有其他好处,将Nginx和Litespeed从Apache中分离出来。