相信不少数的网站管理员使用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参数啦。
上图是我服务器其中一个FPM的pool的配置文件,根据配置文件,可看出该网站PHP的运行用户为mediawiki,群组为mediawiki。 我Nginx的执行用户为www-data,执行下面命令,就可以把用户www-data加入至群组mediawiki中:
完成上面的步骤后,把网站文件的所有者和群组改成PHP的运行用户与群组:
然后给予所有者与群组对网站文件的读权限与对目录的执行权限(750或者550),因为我不需要写入权限,因此赋予550就够啦:
这样操作后,即可避免其他用户查看网站的文件。 (责任编辑:IT) |