PHP的檔案許可權有哪些類型?PHP下Linux下執行檔案時的檔案許可權有哪些方法?下面這篇文章我將給大家分享一下關於PHP在Linxu下執行時的檔案許可權方法。
一、檔案許可權及所屬
1、檔案有三種類型的許可權,為了方便期間,可以用數字來代替,這樣可以通過數位加減,用一個數字就能標識這個檔案的許可權了,例如7=4+2+1,表示讀寫執行3個許可權都有,6=4+2,表示有讀寫權限沒有執行許可權等等
2、聯想web應用的rbac許可權管理等,linux下同樣有使用者權限的管理,使用者有使用者名稱和使用者組,一般建立使用者時同時會建立同名的使用者所屬組。
先root帳號登入隨便建立一個目錄和一個檔案
#建立目錄mkdir abc#建立檔案touch abc.txt#查看ls -all
查看時會發現:
#d開頭的為目錄,-開頭為檔案,還有l開頭的為串連等drwxr-xr-x 2 root root 4096 Jun 6 10:23 abc-rw-r--r-- 1 root root 0 Jun 6 10:23 abc.txt
先看上方藍色的部分,第一位為標識符,去掉第一位,後面每三位分隔,以abc檔案夾為例:d | rws | r-x | r-x
所以abc檔案夾中表示owner擁有rwx(7),group擁有rx(5),other擁有rx(5)。
同樣上方檔案中紅色的部分,依次為所有者的名稱和所屬組的名稱,也就是abc檔案夾的所有者為root,所屬組為root。此時:
a、如果是root使用者來訪問這個abc檔案夾,相當與owner,擁有7的許可權
b、如果一個新的使用者名稱test使用者組為root來訪問abc檔案夾,則相當於group,擁有5的許可權
c、如果一個新的使用者名稱test使用者組為test的來訪問abc檔案夾,則相當與other,擁有5的許可權
二、檔案各許可權的作用
本來還想邊測試邊說,但是太麻煩了,直接說結果吧。可以自己建立一個使用者,然後修改許可權來自己測試下。
1、目錄
a、進入目錄,即cd命令,所需要的許可權為執行許可權(x)
b、查看目錄內的檔案,即ls命令,需要的許可權為讀取許可權(r)
c、建立刪除目錄內的檔案夾/檔案,即mkdir/touch命名,需要的許可權為寫如許可權(w)
順便說下目錄隻影響下一級的,隔代不影響,好比一個目錄abc/sub/,如果abc沒有w許可權,但sub有w許可權,則可以在sub中建立檔案,當然abc也需要有x許可權,否則都進不去更不用說建立了,但只要能進去(可以通過切換root管理員的方法),就不會再受abc的影響,只會受sub的影響。
一般我們目錄會給5(rx)的許可權,也就是讀取和執行許可權,只有圖片上傳或緩衝等目錄需要建立的才會給7(rwx)的許可權
2、檔案
a、檔案開啟,可以用cat/vim命令開啟,要求的權限為讀取許可權(r)
b、檔案修改,可以用cat/vim命令開啟並儲存,要求的權限為寫入許可權(w)
c、檔案執行,可以直接./abc.out等執行,所需要許可權為執行許可權(x)
這裡需要說明的的是php(或者shell等)無論是命令列執行還是web端執行,名為執行,實際上是讀取檔案到php核心中取解析,所以只要有讀取許可權(r)就可以。
一般我們檔案會給4(r)許可權,也就是讀取許可權,只有日誌、緩衝等需要向檔案中寫入內容的才會給6(rx)許可權
之所以上方沒有說755,777、644許可權,而僅僅是是說單個的許可權,是因為你的網站目錄所屬的許可權不能確保與執行時所用的使用者什麼關係,也就是說執行時的使用者可能是owner、可能是group也可能是other
三、php執行時的許可權
我們自己在ssh串連linux操作時必須要有個使用者名稱才能登入操作,同樣php要想處理php相關的檔案,也是在某個使用者下操作的,而使用者是在哪裡建立或定義的呢,一般會是在安裝php環境時建立的,例如apache,nginx等環境都會預設建立使用者和使用者組,而php的讀取時就用此使用者來讀取,可以通過查看設定檔來確認:
#apache在設定檔httpd.confUser wwwGroup www#nginx在設定檔nginx.confuser www www;
或者是通過命名查看進程:
#查看apache進程ps -ef|grep httpd#查看nginx進程ps -ef|grep nginx#查看php-pfm進行ps -ef|grep php-pfm
以apache為例會顯示:
root 1663 1 0 09:14 ? 00:00:00 /www/wdlinux/apache/bin/httpd//主進程www 1697 1663 0 09:14 ? 00:00:05 /www/wdlinux/apache/bin/httpd//子進程www 1698 1663 0 09:14 ? 00:00:05 /www/wdlinux/apache/bin/httpd
第一行就是顯示的哪個使用者在執行它,主要看非root下的。上方說明是www使用者在運行apache進程來處理php檔案。
這裡需要注意的是,如果有安裝php-pfm,則應該還需要查看php-pfm執行時的使用者名稱及使用者組。(沒有安裝,所以沒實踐過)
預設的可能是nobody或者apache等其它的使用者及使用者組,上方是已修改過的。此時應該在網站目錄中用ls-all來確認下網站檔案是屬於哪個使用者,分幾種情況說明下吧:
a、例如網站所有者是這樣:
drwxr-xr-x 2 www www 4096 Jun 6 10:23 systemdrwxr-xr-x 2 www www 4096 Jun 6 10:23 tmp-rw-r--r-- 1 www www 0 Jun 6 10:23 index.php...
網站所有者為www,而php執行者也為www,那說明是具有owner許可權,上方system檔案夾中755中的55根本不起作用,只要是7xx就會以7(rwx)的許可權來執行。
b、如果網站所有者是這樣:
drwxr-xr-x 2 test www 4096 Jun 6 10:23 systemdrwxr-xr-x 2 test www 4096 Jun 6 10:23 tmp-rw-r--r-- 1 test www 0 Jun 6 10:23 index.php...
網站所有者為test,所屬組為www,而php執行者為www,執行組為www,那說明是說在同一組中,具有group許可權,上方system檔案夾中755中的7和5不起作用,只要是x5x就會以5(rx)的許可權來執行。
c、如果網站所有者是這樣:
drwxr-xr-x 2 test test 4096 Jun 6 10:23 systemdrwxr-xr-x 2 test test 4096 Jun 6 10:23 tmp-rw-r--r-- 1 test test 0 Jun 6 10:23 index.php...
網站所有者為test,所屬組為test,而php執行者為www,執行組為www,那說明是說根本沒什麼關係,具有other許可權,上方system檔案夾中755中的75不起作用,只要是xx5就會以5(rx)的許可權來執行。
所以不能簡單的說修改許可權為755,644什麼的,還需要確認程式的執行者和網站的所有者才能確定許可權。
目前好多Integration Environment為了省事(嗯,lanmpv3等),將php的執行許可權和網站所在目錄都設定為www,此時一般建立完目錄後為755,建立檔案後為644,當php執行時,起作用的目錄許可權為7(所有目錄擁有建立刪除許可權)和檔案許可權6(所有檔案具有寫入權限),這種是不是挺不安全的?正常應該是目錄為5,檔案為4,當有特殊需求時才將許可權設為7。如果出現上方說的這種情況,修改的方法一是修改apache/nginx的使用者和使用者組,二是修改網站檔案的所有者和所有組這兩個方向來修改,以確保網站的安全。
以上,只是基礎的許可權說明。