11.30/11.31 php相关配置

本文详细介绍了PHP配置的关键步骤,包括如何定位配置文件、禁用危险函数、设置时区、错误处理及日志记录等。此外,还讲解了如何利用open_basedir来增强服务器安全性。

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文件,会看到属主属组是daemon

[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]# 

转载于:https://my.oschina.net/u/3707314/blog/1595071

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值