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]#
相關文章
相關標籤/搜索