相信不少数的网站管理员使用Nginx,并配合PHP FPM运行PHP程序。 先来讲述一下Nginx与PHP FPM环境下的问题: 服务器上有多个站点,为了安全,我会给每个站点的PHP分配不同的用户身份,因此PHP的执行身份会与Nginx的用户身份不同。 扩展名非.php的文件,会由Ngi
相信不少数的网站管理员使用Nginx,并配合PHP FPM运行PHP程序。
先来讲述一下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中:
usermod -aG mediawiki www-data
usermod-aGmediawikiwww-data
完成上面的步骤后,把网站文件的所有者和群组改成PHP的运行用户与群组:
chown -R mediawiki:mediawiki /var/www/mediawiki
chown-Rmediawiki:mediawiki/var/www/mediawiki
然后给予所有者与群组对网站文件的读权限与对目录的执行权限(750或者550),因为我不需要写入权限,因此赋予550就够啦:
chmod -R 550 /var/www/mediawiki
chmod-R550/var/www/mediawiki
这样操作后,即可避免其他用户查看网站的文件。
NOTE:Linux KIT使用此方式分配权限,并可通过lkit快速完成对所有站点的设置