正确设置网站文件所有者-提高网站安全性-防止被挂木马分析

上传人:jiups****uk12 文档编号:90850687 上传时间:2019-06-19 格式:DOC 页数:7 大小:222.51KB
返回 下载 相关 举报
正确设置网站文件所有者-提高网站安全性-防止被挂木马分析_第1页
第1页 / 共7页
正确设置网站文件所有者-提高网站安全性-防止被挂木马分析_第2页
第2页 / 共7页
正确设置网站文件所有者-提高网站安全性-防止被挂木马分析_第3页
第3页 / 共7页
正确设置网站文件所有者-提高网站安全性-防止被挂木马分析_第4页
第4页 / 共7页
正确设置网站文件所有者-提高网站安全性-防止被挂木马分析_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《正确设置网站文件所有者-提高网站安全性-防止被挂木马分析》由会员分享,可在线阅读,更多相关《正确设置网站文件所有者-提高网站安全性-防止被挂木马分析(7页珍藏版)》请在金锄头文库上搜索。

1、设置安全的nginx+PHP网站目录权限基于linux系统的web服务器架构听说过很多年了,也用了好几年,不过都是用现成的运行环境,比如虚拟主机、共用VPS。亲手配置、把玩,我还是第一回,初学过程的曲折在意料之中,反复折磨了两三天,终于搞清楚一些linux基础概念和nginx+php配置。今天主要记录nginx+php环境下,原先理解的很混乱的网站目录权限设置。由于对linux文件权限的概念不清楚,迁移网站到VPS上时,担心设置错了影响网站安全,刚好之前一个网站被挂了马,配置服务器时就特别在意这事了。配置权限的原则是,在保证网站正常运行下,尽量给最低权限。我的配置:1、nginx进程用户是默认

2、用户wwwboy;(暂时还不知道nginx进程用户会对服务器什么地方的权限有影响,配置nginx好像都没碰到权限设置问题)2、php-fpm进程用户配置为wwwboy;3、网站目录所有者设置为ftpuser,由于需要在FTP中对网站文件进行下载(读取)、上传(写入),ftpuser肯定对网站目录有读写权限。关键点:php-fpm 子进程所使用的用户,不能是网站文件所有者。这里推荐一篇关于权限设置的文章正确设置网站文件所有者 提高网站安全性 防止被挂木马,我就是读完这篇文章才理解nginx、php-fpm、网站文件权限之间的关系以及如何设置才安全。上面推荐的文章里也写了,网站文件所有者和php-

3、fpm进程用户设为不同的好处是在PHP程序中无法对网站文件进行修改,这样即使网站被挂马了,也能降低很多损失,例如,对方无法在你的正常代码里混入后门。以前总习惯性地把缓存目录权限设置为777,这回既然注意到安全问题,就想顺便弄清楚一下缓存目录怎么设置才正确合理并安全。其实,了解清楚linux文件权限分配方式,这个疑惑也就明朗了:假设网站缓存目录名为cache,其所有者为ftpuser。缓存文件是由php-fpm进程执行写入,相当于用户wwwboy要在用户ftpuser的目录cache里写文件,不被允许的!因此,要分配给wwwboy对cache目录的写权限,chmod o+w -R cache即可

4、,如果ftpuser与wwwboy同一个用户组,就chmod g+w -R cache。缓存目录不需要执行权限,所以以往设置777权限的做法相当粗糙,不过在使用虚拟主机的时候,自己无法把握服务器上各种设置,777也是最便捷做法了。2013-3-25更新:缓存目录需要o+wx,添加x的原因是读取目录的时候需要执行权限,否则文件是写不成功的。除非要生成的文件和写文件的脚本在同一个目录内,不需要读取目录的权限,也就不需要执行权限。原理:(此处感谢 lanisle)On a directory, the execute permission (also called the search bit) a

5、llowsyou to access files in the directory and enter it, with the cd command, forexample. However, note that although the execute bit lets you enter thedirectory, youre not allowed to list its contents, unless you also have theread permissions to that directory.以上便是对nginx+php网站目录权限安全设置的表述和理解,看起来像菜鸟基础

6、班的笔记。此外,以往我对开源的伟大魅力不以为然,学习使用linux几天,开始有所体会#正确设置网站文件所有者 提高网站安全性 防止被挂木马核心总结:php-fpm/apache进程所使用的用户,不能是网站文件所有者。凡是违背这个原则,则不符合最小权限原则。根据生产环境不断反馈,发现不断有php网站被挂木马,绝大部分原因是因为权限设置不合理造成。因为服务器软件,或是php程序中存在漏洞都是难免的,在这种情况下,如果能正确设置Linux网站目录权限,php进程权限,那么网站的安全性实际上是可以得到保障的。那么,造成网站被挂木马的原因是什么?1.ftp连接信息被破解,对这个原因,可行的办法就是使用非

7、常复杂的FTP用户名(不要使用常用的用户名),如果是固定作业,可考虑使用iptables防火墙限制来源IP。但是一些情景下,可能需要使用VPN以便远程维护。即网站维护者需要使用FTP修改网站文件时,必须先登录到IDC机房的VPN服务器上,再进行后续的操作。2.网站服务器软件/配置/php程序存在漏洞,被利用在讨论这个问题前,先说明文件及进程权限的几个概念:A.FTP用户对网站目录具有最大修改权限,那么网站的文件所有者一定属于FTP,这是毋庸置疑的,否则如何修改文件呢?B.php-fpm/apache/nginx进程对网站文件至少需要有读取权限,例如,以下命令即可查看这两个进程所使用的账号:通过

8、上图,我们可以发现,nginx和php-fpm子进程账号是nobody。我们再查看网站文件目录的权限:发现网站文件所有者是www账号,那说明:|nginx和php对网站只有读取权限,无写入权限l如果php程序需要对网站某些文件有写入权限,需要手工将文件或目录权限修改为777l因为php-fpm子进程是以nobody运行,那么php-fpm生成的新文件所有者也是nobody,这时ftp用户将无法修改这些文件,解铃还需系铃人,当php生成文件后,需要调用chmod(/somedir/somefile,0777)将文件权限修改为777,以便FTP用户也可以修改这个文件。l经常有开发人员找我请求重设p

9、hp生成的文件的权限。l如果php-fpm/apache/nginx进程以网站文件所有者用户运行,那意味着php-fpm/apache/nginx进程对整个网站目录具有可写权限,噩梦也就由此开始。但是我们发现,有不少系统管理员为了省事,违背了Linux最小化权限的原则,设置php-fpm/apache/nginx进程以网站文件所有者账号运行,当然这样可能会方便php开发人员(php-fpm进程对整个网站目录具有可写权限),但是这样一来,Linux体系的文件系统权限原则将被打破,所有的安全措施将形同虚设。可以想象的是,万一php程序中有漏洞,攻击者上传木马,便可以修改网站的所有文件,网站首页被黑

10、,也就不足为怪了。退一步,如果我们设置了较严格的权限,就算php程序中存在漏洞,那么攻击者也只能篡改权限为777的目录,其它的文件是无法被改写的,网站不就就得更安全了吗?核心总结:php-fpm/apache/nginx进程所使用的用户,不能是网站文件所有者。凡是违背这个原则,则不符合最小权限原则。经过我参阅网上关于nginx,php-fpm配置的文章教程和市面上的一些书籍,发现有不少人受这些文章的误导,直接让php-fpm/apache/nginx进程以网站所有者账号运行,例如张宴的实战nginx取代apache的高性能Web服务器一书的52页中,存在以下设置:wwwwww而在第50页,设置

11、网站文件所有者也为www用户:chown-Rwww:www/data0/htdocs/blog显然,此书的这部分内部,对初学者有误导,针对这个问题,我已经向本书作者发邮件,希望其能在第二版中进行强调声明,以免由于过度宽松的权限配置,造成一些安全隐患。官方提供的配置文件中,php-fpm子进程使用nobody用户,这完全是合理的,无须修改。那么nginx的子进程用户,如何设置合理?我的建议是也使用nobody(对错误日志写入等无影响),设置方法如下:nginx.conf文件第一行设置为usernobody;,再执行nginx-sreload即可。php-fpm子进程用户设置方法:编辑文件php-

12、fpm.conf(一般位于/usr/local/php/etc/php-fpm.conf,视安装参数为准),找到user、group两个参数的定义,将其设置为nobody(默认已经是nobody),再重启php-fpm进程即可。网站可写目录的特殊注意这里的可写,是相对php-fpm子进程而言。一个网站最容易出安全问题的即是可写目录,如果可写目录权限能控制严格,安全系数也将大大提高。我们认为,一个网站可写目录主要分为以下几种:1.php数据缓存目录,如discuz的forumdata目录,就存放了大量数据缓存文件。此类目录一般会禁止用户直接访问,但是discuz在这个目录下又存放了不少js,cs

13、s文件,我们并不能简单地拒绝用户访问这个目录。显然,这个目录下的所有文件,不能直接交给php解析,我们后面会给出解决方案。2.附件上传目录。显然此类目录需要开启访问,但不能交由php引擎解析(即这个目录下的所有文件均视为普通静态文件)。3.静态文件生成目录,这类目录下的文件全部应视为静态文件。4.日志目录,一般都会拒绝用户直接访问之。也就是说对网站开发人员而言,需要对可写目录实现动静分离,不同性能的文件,应该区别对待之,这样也就方便系统管理员,设置合理的nginx规则,以提高安全性。简单地去掉php文件的执行权限,并不能阻止php-fpm进程解析之。接下来,根据以上总结,系统管理员如何配置ng

14、inx的目录规则,才更安全呢?1.数据缓存目录/cache/这个目录的特点是需要777权限,无须提供给用户访问,那么可以按以下参考配置nginxlocation/cachereturn403;location.php$fastcgi_pass127.0.0.0:9000;.这时,任何用户将无法访问/cache/目录内容,即使2.附件上传目录attachments此目录的特点是需要开放访问权限,但所有文件不能由php引擎解析(包括后缀名改为gif的木马文件)location/attachmentslocation.php$fastcgi_pass127.0.0.0:9000;.注意,上面对attachments目录的location定义中是没有任何语句的。nginx对正则表达式的location匹配优先级最高,任何一个用正则表达式定义的location,只要匹配一次,将不会再匹配其它正则表达式定义的location。现在,请在attachments目录下建立一个p

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号