Unix Like, 操作系统, 服务器, 运营维护

Nginx与PHP FPM环境下的权限分配与防跨站

相信不少数的网站管理员使用Nginx,并配合PHP FPM运行PHP程序。

之前写过一篇文章,讲述了如何使用ACL权限增强Nginx与PHP FPM环境的安全性,这方法步骤有点麻烦,而且OpenVZ下从物理服务器处挂载为ACL,使用过程中也存在一些问题。

先来讲述一下Nginx与PHP FPM环境下的问题:

服务器上有多个站点,为了安全,我会给每个站点的PHP分配不同的用户身份,因此PHP的执行身份会与Nginx的用户身份不同。

扩展名非.php的文件,会由Nginx去处理,扩展名为.php的文件,Nginx会交给FPM处理,因此Nginx与FPM都需要对文件有read的权限,由于Linux下文件的owner只能是唯一的一个用户,这就使得我必须赋予other对网站文件的读权限。意味着其他身份的用户,也能读取我网站的数据。

很明显,我的服务器是不会允许类似的情况发生。

由于文件所有者只能有一个,因此从这里下手就不太可能解决问题。Other是绝对不能允许拥有任何权限。明显,只能对Group下手。

Linux下的Group,可让多个用户加入至一个Group中,也可让一个用户加入至多个Group。既然如此,把nginx的执行用户加入到站点PHP的执行用户的群组就能完美解决此问题了。

要把用户加入至其他群组,使用usermod即可,其中需要以下参数:

-G:把用户加入至指定群组。

-a:配合-G把用户加入到指定群组,允许用户在不退出原群组的情况下加入至新的群组。

要一个用户加入多个群组,就一定要-a参数啦。

POOL

上图是我服务器其中一个FPM的pool的配置文件,根据配置文件,可看出该网站PHP的运行用户为mediawiki,群组为mediawiki。

我Nginx的执行用户为www-data,执行下面命令,就可以把用户www-data加入至群组mediawiki中:

完成上面的步骤后,把网站文件的所有者和群组改成PHP的运行用户与群组:

然后给予所有者与群组对网站文件的读权限与对目录的执行权限(750或者550),因为我不需要写入权限,因此赋予550就够啦:

这样操作后,即可避免其他用户查看网站的文件。

NOTE:Linux KIT使用此方式分配权限,并可通过lkit快速完成对所有站点的设置。

Comments are closed.