理清PHP在Linxu下執行時的檔案許可權

2021-09-08 14:02:10 字數 3988 閱讀 6382

一、檔案許可權及所屬

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 | rwx | 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無論是命令列執行(類似執行 php abc.php)還是web端執行,名為執行,實際上是讀取檔案到php核心中取解析,所以只要有讀取許可權(r)就可以,同樣例如abc.sh,如果直接執行./abc.sh需要的是執行許可權(x),但是執行 sh abc.sh 命令需要的是讀取許可權(r)。

一般我們檔案會給4(r)許可權,也就是讀取許可權,只有日誌、快取等需要向檔案中寫入內容的才會給6(rx)許可權

之所以上方沒有說755,777、644許可權,而僅僅是是說單個的許可權,是因為你的**目錄所屬的許可權不能確保與執行時所用的使用者什麼關係,也就是說執行時的使用者可能是owner、可能是group也可能是other

三、php執行時的許可權

我們自己在ssh連線linux操作時必須要有個使用者名稱才能登入操作,同樣php要想處理php相關的檔案,也是在某個使用者下操作的,而使用者是在**建立或定義的呢,一般會是在安裝php環境時建立的,例如apache,nginx等環境都會預設建立使用者和使用者組,而php的讀取時就用此使用者來讀取,可以通過檢視配置檔案來確認:

#apache在配置檔案httpd.conf

user www

group www

#nginx在配置檔案nginx.conf

user www www;

或者是通過命令檢視程序:

#檢視apache程序

#檢視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//子程序

這裡需要注意的是,如果有安裝php-pfm,則應該還需要檢視php-pfm執行時的使用者名稱及使用者組。(沒有安裝,所以沒實踐過)

drwxr-xr-x   2 www www 4096 jun  6 10:23 system

drwxr-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)的許可權來執行。

drwxr-xr-x   2 test www 4096 jun  6 10:23 system

drwxr-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)的許可權來執行。

drwxr-xr-x   2 test test 4096 jun  6 10:23 system

drwxr-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什麼的,還需要確認程式的執行者和**的所有者才能確定許可權。

目前好多整合環境為了省事(嗯,lanmpv3等),將php的執行許可權和**所在目錄都設定為www,此時一般建立完目錄後為755,建立檔案後為644,當php執行時,起作用的目錄許可權為7(所有目錄擁有建立刪除許可權)和檔案許可權6(所有檔案具有寫許可權),這種是不是挺不安全的?正常應該是目錄為5,檔案為4,當有特殊需求時才將許可權設為7。如果出現上方說的這種情況,修改的方法一是修改apache/nginx的使用者和使用者組,二是修改**檔案的所有者和所有組這兩個方向來修改,以確保**的安全。

以上,只是基礎的許可權說明。

PHP執行時配置

在php啟動時會讀取php的配置檔案php.ini,對於伺服器模組版本的php僅在web伺服器啟動時讀取一次,而cgi和cli版本的php每次呼叫都會讀取。在php.ini檔案中可以使用環境變數,php5.1以後還可以在ini檔案中引用ini中已存在的變數。讀取php.ini檔案時,按如下順序查詢p...

php程式執行時間 php計算程式的執行時間

首先我們分析一下原理,要想得到程式執行時間,那麼可以在程式最開始執行的時候定義乙個變數記下當前時間,然後等我們程式執行完之後再記錄一下當前的時間,兩者相差就是該程式執行花費的時間了。這裡介紹一下 microtime 這個函式,microtime 用的不多,但是不能不知道這個函式,它是返回當前 uni...

PHP指令碼執行時間

php設定指令碼最大執行時間的三種方法 php.ini 中預設的最長執行時間是 30 秒,這是由 php.ini 中的 max execution time 變數指定,如果指令碼需要跑很長時間,例如要大量傳送電子郵件,或者分析統計大量資料,伺服器會在 30 秒後強行中止正在執行的程式,這種情況就要更...