移动安全安全管理 应用案例 网络威胁 系统安全 应用安全 数据安全 云安全
当前位置: 主页 > 信息安全 > 安全管理 >

准确设置网站文件所有者 避免php网站被挂木马

时间:2013-06-08 10:53来源:TuZhiJiaMi企业信息安全专家 点击:
核心总结:php-fpm/apache 过程所利用的用户,不克不及是网站文件所有者。 凡是背反这个原则,则不合适最小权限原则。 按照出产环境不竭反馈,发现不竭有 php网站被挂木马,尽大年夜部门启
Tags安全管理(325)木马文件(4)网站文件(1)php网站(1)  

  核心总结:php-fpm/apache 过程所利用的用户,不克不及是网站文件所有者。 凡是背反这个原则,则不合适最小权限原则。

  按照出产环境不竭反馈,发现不竭有 php网站被挂木马,尽大年夜部门启事是因为权限设置不合理造成。因为办事器软件,或是 php 法度中存在缝隙都是不免的,在这类环境下,假定能准确设置 Linux 网站目次权限, php 过程权限,那么网站的安然性实际上是可以获得保障的。

  那么,造成网站被挂木马的启事是甚么?

  1.  ftp 连接信息被破解,对这个启事,可行的编制就是利用很是复杂的FTP 用户名(不要利用常常利用的用户名),假定是固定功课,可考虑利用 iptables 防火墙限制来历 IP 。可是一些景象下,可能需要利用 VPN 以便长途保护。 即网站保护者需要利用 FTP 点窜网站文件时,必需先登录到IDC机房的VPN 办事器上,再进行后续的把持。

  2.  网站办事器软件/ 建设 /php 法度存在缝隙,被操纵。

  在会商这个题今朝,先申明文件及过程权限的几个概念:

  A. FTP用户对网站目次具有最大年夜点窜权限,那么网站的文件所有者必然属于 FTP,  这是无庸置疑的 , 不然若何点窜文件呢?

  B. php-fpm/apache/nginx 过程对网站文件起码需要有读取权限,例如,以下号令便可查看这两个过程所利用的账号:

  经由过程上图,我们可以发现,nginx 和 php-fpm 子过程账号是 nobody 。

  我们再查看网站文件目次的权限:

准确设置网站文件所有者 避免php网站被挂木马

  发现网站文件所有者是www 账号,那申明:

  ◆ nginx和 php 对网站只有读取权限,无写进权限

  ◆ 假定php 法度需要对网站某些文件有写进权限,需要手工将文件或目次权限点窜成 777

  ◆ 因为php-fpm 子过程是以 nobody 运行,那么 php-fpm 生成的新文件所有者也是 nobody, 这时候 ftp 用户将没法点窜这些文件,解铃还需系铃人,当 php 生成文件后,需要调用 chmod("/somedir/somefile", 0777) 将文件权限点窜成 777 ,以便 FTP 用户也能够点窜这个文件。

  ◆ 常常有开辟人员找我要求重设php 生成的文件的权限。

  ◆ 假定php-fpm/apache/nginx过程以网站文件所有者用户运行,那意味着 php-fpm/apache/nginx 过程对全部网站目次具有可写权限,恶梦也就由此开端。

  可是我们发现,有良多系统治理员为了省事,背反了Linux 最小化权限的原则,设置 php-fpm/apache/nginx 过程以网站文件所有者账号运行,当然如许可能会便利 php 开辟人员( php-fpm 过程对全部网站目次具有可写权限),可是如许一来, Linux 系统的文件系统权限原则将被打破,所有的安然办法将形同虚设。可以想象的是,万一 php 法度中有缝隙,报复打击者上传木马,便可以点窜网站的所有文件,网站首页被黑,也就不足为怪了。

  退一步,假定我们设置了较严格的权限,就算php 法度中存在缝隙,那么报复打击者也只能窜改权限为 777 的目次,其它的文件是没法被改写的,网站不就就得更安然了吗?

  核心总结:php-fpm/apache/nginx过程所利用的用户,不克不及是网站文件所有者。 凡是背反这个原则,则不合适最小权限原则。

  颠末我参阅网上关于nginx, php-fpm 建设的文章教程和市道上的一些册本,发现有良多人受这些文章的误导,直接让 php-fpm/apache/nginx过程以网站所有者账号运行,例如张宴的《实战 nginx 代替 apache 的高机能 Web 办事器》一书的 52 页中,存在以下设置:

  www

  www

  而在第50 页,设置网站文件所有者也为 www 用户:

  chown -R www:www /data0/htdocs/blog

  明显,此书的这部门内部,对初学者有误导,针对这个标题问题,我已向本书作者发邮件,希看其能在第二版中进行夸大年夜声明,以避免因为过度宽松的权限建设,造成一些安然隐患。

  官方供给的建设文件中,php-fpm 子过程利用 nobody 用户,这美满是合理的,不必点窜。

  那么nginx 的子过程用户,若何设置合理? 我的建议是也利用 nobody (对弊端日记写进等无影响),设置编制以下:

  nginx.conf文件第一行设置为 user nobody; , 再履行 nginx -s reload 便可。

  php-fpm子过程用户设置编制:

  编纂文件php-fpm.conf (一般位于 /usr/local/php/etc/php-fpm.conf, 视安装参数为准),找到 user 、 group 两个参数的定义,将其设置为nobody( 默许已经是 nobody) ,再重启 php-fpm 过程便可。

  网站可写目次的特别寄望

  这里的可写,是相对php-fpm 子过程而言。一个网站最等闲出安然标题问题标便是可写目次,假定可写目次权限能节制严格,安然系数也将大年夜大年夜进步。

  我们觉得,一个网站可写目次首要分为以下几种:

  1.  php 数据缓存目次,如 discuz 的 forumdata 目次,就存放了大年夜量数据缓存文件。此类目次一般会避免用户直接拜候,可是 discuz 在这个目次下又存放了良多 js, css 文件,我们其实不克不及简单地拒尽用户拜候这个目次。明显,这个目次下的所有文件,不克不及直接交给 php 解析,我们后面会给出解决方案。

  2.  附件上传目次。明显此类目次需要开启拜候,但不克不及交由php 引擎解析(即这个目次下的所有文件均视为通俗静态文件)。

  3.  静态文件生成目次,这类目次下的文件全数应视为静态文件。

  4.  日记目次, 一般城市拒尽用户直接拜候之。

  也就是说对网站开辟人员而言,需要对可写目次实现动静分手,不合机能的文件,应当辨别对待之,如许也就便利系统治理员,设置合理的nginx 法则,以进步安然性。

  简单地往掉落php 文件的履行权限,其实不克不及禁止 php-fpm 过程解析之。

  接下来,按照以上总结,系统治理员若何建设nginx 的目次法则,才更安然呢?

  1、数据缓存目次 /cache/

  这个目次的特点是需要777 权限,不必供给给用户拜候,那么可以按以下参考建设 nginx

  location ~ "^/cache" {

  return 403;

  }

  location ~ "\.php$" {

  fastcgi_pass 127.0.0.0:9000;

  ....................

  }

  这时候,任何用户将没法拜候/cache/ 目次内容,即便

  2、附件上传目次 attachments

  此目次的特点是需要开放拜候权限,但所有文件不克不及由php 引擎解析(包含后缀名改成 gif 的木马文件)

  location ~ "^/attachments" {

  }

  location ~ "\.php$" {

  fastcgi_pass 127.0.0.0:9000;

  ....................

  }

  寄望,上面对attachments 目次的 location 定义中是没有任何语句的。 nginx 对正则表达式的 location 匹配优先级最高,任何一个用正则表达式定义的 location, 只要匹配一次,将不会再匹配其它正则表达式定义的 location 。

  此刻,请在attachments 目次下成立一个 php 脚本文件,再经由过程浏览器拜候安,我们发现浏览器提示下载,这申明 nginx 把 attachments 目次下的文件当作静态文件措置,并没有交给 php fastcgi 措置。如许即便可写目次被植进木马,但因为其没法被履行,网站也就更安然了。

  明显,首要的php 建设文件,请勿放在此类目次下。

  3、静态文件生成目次 public

  这些目次一般都是php 生成的静态页的保留目次,明显与附件目次有近似的地方,按附件目次的权限设置便可。

  可以预感的是,假定我们设置了较严格的权限,即便网站php 法度存在缝隙,木马脚本也只能被写进到权限为 777 的目次中往,假定共同上述严格的目次权限节制,木马也没法被触发运行,全部系统的安然性明显会有较着的进步。

  可是网站可写目次的感化及权限,只有开辟人员最为清晰。这方面需要php 开辟人员和系统治理员积极沟通。我们利用的编制是:项目上线前,开辟人员按照以文档情势供给网站可写目次的感化及权限,由系统治理员针对不合目次进行权限设置。任何一方点窜了网站目次权限,但未表现到文档中,我们觉得是背反工作流程的。

------分隔线----------------------------

推荐内容