11.30/11.31 php相关配置

PHP相关配置目录概要

  • 查看php配置文件位置
  • /usr/local/php/bin/php -i|grep -i "loaded configuration file"
  • date.timezone
  • disable_functions eval,assert,popen,passthru,escapeshellarg,escapeshellcmd,passthru,exec,system,chroot,scandir,chgrp,chown,escapeshellcmd,escapeshellarg,shell_exec,proc_get_status,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,leak,popepassthru,stream_socket_server,popen,proc_open,proc_close
  • error_log, log_errors, display_errors, error_reporting
  • open_basedir
  • php_admin_value open_basedir "/data/wwwroot/111.com:/tmp/"

PHP相关配置

  • 查看php配置文件的位置
    • 经过浏览器,访问phpinfo找到配置文件的路径
    • 也能够用/usr/local/php/bin/php -i |grep -i “loaded configuration file”找到他的路径;可是有些状况“php -i ”是不许的,由于Apache他是调用了php 的一模块,并且“php -i” 只是php 的一个程序,它和libphp5.so可能有关系也可能没有关系;
  • 案例:
    • 有时改了php.ini,改动了也重启了服务,结果配置仍是不生效;由于使用“php -i” 找到的配置文件和在web上的phpinfo找到的php.ini不是同一个,若是想要准确的找到php.ini配置文件,就在对应的站点目录下,建立一个phpinfo的php文件,在web上打开,在phpinfo上找到的,才是最准确的
[root@hf-01 111.com]# ls
11.png  123.php  admin  index.php  inedx.php  upload
[root@hf-01 111.com]# vi index.php
[root@hf-01 111.com]# cd /usr/local/src/php-5.6.30/
[root@hf-01 php-5.6.30]# cp php.ini-development /usr/local/php/etc/php.ini
[root@hf-01 php-5.6.30]# /usr/local/apache2.4/bin/apachectl graceful
[root@hf-01 php-5.6.30]# 

这时用浏览器访问看到配置文件的路径
  • 设置安全函数
    • disable_functions //安全函数
    • eval 以前提到的一句话木马涉及到的函数,若是把这个函数禁用,那么那个木马将不会生效
  • eval,assert,popen,passthru,escapeshellarg,escapeshellcmd,passthru,exec,system,chroot,scandir,chgrp,chown,escapeshellcmd,escapeshellarg,shell_exec,proc_get_status,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,leak,popepassthru,stream_socket_server,popen,proc_open,proc_close 以上是比较危险的函数

设置PHP文件

  1. 打开PHP文件,禁掉一些危险的函数,默认配置文件里面是空的(这里使用的是php5),
[root@hf-01 php-5.6.30]# vim /usr/local/php/etc/php.ini

搜索 /disable
在disable_functions =后禁掉一些危险的函数

disable_functions =eval,assert,popen,passthru,escapeshellarg,escapeshellcmd,passthru,exec,system,chroot,scandir,chgrp,chown,escapeshellcmd,escapeshellarg,shell_exec,proc_get_status,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,leak,popepassthru,stream_socket_server,popen,proc_open,proc_close,phpinfo

而后保存
  • 固然也能够把phpinfo 禁掉,不少企业在生产环境都会禁掉,由于phpinfo涉及到服务器不少php 的配置相关,若是一不当心上传到了线上,那么久很容易被黑客查到,进行对应的攻击 设置时区
  1. 从新加载配置文件
[root@hf-01 php-5.6.30]# /usr/local/apache2.4/bin/apachectl graceful
[root@hf-01 php-5.6.30]#
  1. 再去浏览器访问111.com/index.php,会显示phpinfo是被禁掉了

输入图片说明

  1. 打开php配置文件
  • 定义date.timezone时区,若是不定义,有时候会有一些告警信息
  • display_errors = On,(On显示,Off不显示),这个意思就会把错误的信息直接显示在浏览器上,这样就会把目录给暴露出来,因此这里更改为display_errors = Off
[root@hf-01 php-5.6.30]# vim /usr/local/php/etc/php.ini

搜索/timezone
在date.timezone定义时区
须要删除 ; 分号
date.timezone = Asia/shanghai

搜索/display
须要删除 ; 分号
将display_errors = On更改成display_errors = Off

而后保存退出
  1. 检查配置文件是否存在语法错误,并从新加载配置文件
[root@hf-01 php-5.6.30]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@hf-01 php-5.6.30]# /usr/local/apache2.4/bin/apachectl graceful
[root@hf-01 php-5.6.30]#
  1. 这时候再去用浏览器访问111.com/index.php,会看到的是白页,这就是由于display_errors=Off

输入图片说明

  1. 打开配置文件
  • 定义错误日志log_errors = On——>on表示打开
  • 定义错误日志文件路径error_log= /tmp/php_errors.log
  • error_reporting = E_ALL定义日志的级别,默认是ALL,表示把全部的errors都记录下来,这是最不严谨的
    • 在生产环境中,使用; E_ALL & ~E_NOTICE (Show all errors, except for notices)
搜索/log_errors,将错误日志文件打开
log_errors = On

搜索/error_log,将错误日志文件定义到tmp目录下
须要删除 ; 分号
error_log = /tmp/php_errors.log

而后保存退出
  1. 检查配置文件是否存在语法错误,并从新加载配置文件
  2. 这时再去访问一遍,会看到tmp目录下生成了php_errors.log
[root@hf-01 php-5.6.30]# curl -A "a" -x127.0.0.1:80 http://111.com/index.php
[root@hf-01 php-5.6.30]# ls /tmp/
mysql.sock  php_errors.log

10 查看php_errors.log文件,会看到属主属组是daemonphp

[root@hf-01 php-5.6.30]# ls -l /tmp/php_errors.log 
-rw-r--r-- 1 daemon daemon 135 12月 27 07:30 /tmp/php_errors.log
[root@hf-01 php-5.6.30]#
  1. daemon其实是httpd的属主,php_errors.log日志文件是以httpd这个进程的身份去生成的
[root@hf-01 php-5.6.30]# ps aux |grep httpd
root      2539  0.0  1.2 258304 12708 ?        Ss   04:26   0:01 /usr/local/apache2.4/bin/httpd -k graceful
daemon    3685  0.0  0.9 545132  9580 ?        Sl   07:30   0:00 /usr/local/apache2.4/bin/httpd -k graceful
daemon    3686  0.0  0.9 545132  9580 ?        Sl   07:30   0:00 /usr/local/apache2.4/bin/httpd -k graceful
daemon    3687  0.0  1.2 610668 12388 ?        Sl   07:30   0:00 /usr/local/apache2.4/bin/httpd -k graceful
root      3776  0.0  0.0 112676   984 pts/0    R+   07:33   0:00 grep --color=auto httpd
[root@hf-01 php-5.6.30]#
  • 有时候,定义了一个错误日志,可是这个错误日志始终没有生成,那么就须要检查一下定义错误日志所在的目录,到底httpd有没有写权限
  • 最保险的办法,就是在所在目录建立一个错误日志的文件,而后赋予它777的权限,这样就不须要担忧这个文件httpd是否有写权限了
[root@hf-01 php-5.6.30]# grep error_log /usr/local/php/etc/php.ini 
; server-specific log, STDERR, or a location specified by the error_log
; Set maximum length of log_errors. In error_log information about the source is
error_log = /tmp/php_errors.log
;error_log = syslog
; OPcache error_log file name. Empty string assumes "stderr".
;opcache.error_log=
[root@hf-01 php-5.6.30]#
- 能够先建立好/tmp/php_errors.log文件,而后赋予chmod 777权限
  1. 查看文件日志
[root@hf-01 php-5.6.30]# cat /tmp/php_errors.log      //会告诉你由于安全的缘由,这个函数已经被禁掉了
[26-Dec-2017 23:30:19 UTC] PHP Warning:  phpinfo() has been disabled for security reasons in /data/wwwroot/111.com/index.php on line 2
[root@hf-01 php-5.6.30]#

安全相关的参数

  • 一台服务器上,运行了多个站点,有一台服务器假如代码有问题,结果这个站点被黑客攻击了,被黑客拿到了权限,黑客拿了权限确定会继续往里渗透,继续往里渗透,就会有可能渗透到其余的站点,同时致使其余的站点被黑
  • open_basedir,它是一个安全选项,限制不能串岗
  • php.ini文件中的内容是针对全部虚拟主机进行的配置!!!
  1. 打开php配置文件
[root@hf-01 php-5.6.30]# vim /usr/local/php/etc/php.ini

搜索/open_basedir,并上删除 ; 号
open_basedir = /data/wwwroot/111.com:/tmp
而后保存退出
  1. 检查配置文件是否存在语法错误,并从新加载配置文件
  2. 再来访问,会显示正常
[root@hf-01 php-5.6.30]# curl -A "a" -x127.0.0.1:80 http://111.com/index.php -I
HTTP/1.1 200 OK
Date: Wed, 27 Dec 2017 00:04:36 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
X-Powered-By: PHP/5.6.30
Content-Type: text/html; charset=UTF-8

[root@hf-01 php-5.6.30]#
  1. 如果服务器上跑了N多个站点,那应该怎么去作限制呢?
  2. 应该针对站点,这些网站去作open_basedir ,但php.ini是作不到的,由于php.ini是针对全部站点的
  3. 但咱们能够在虚拟主机配置文件中设置,在apache虚拟主机配置文件中去设置/usr/local/apache2.4/conf/extra/httpd-vhosts.conf
  • 在这里能够针对不一样虚拟主机限制不一样的open_basedir
[root@hf-01 php-7.1.6]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

php_admin_value open_basedir "/data/wwwroot/111.com:/tmp/"
而后保存退出
  1. 检查配置文件语法错误,并从新加载配置文件
[root@hf-01 php-7.1.6]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@hf-01 php-7.1.6]# /usr/local/apache2.4/bin/apachectl graceful
[root@hf-01 php-7.1.6]#
  1. curl测试
[root@hf-01 php-7.1.6]# curl -A "a" -x127.0.0.1:80 http://111.com/index.php
111.com[root@hf-01 php-7.1.6]#
相关文章
相关标签/搜索