溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

PHP在Linxu下執(zhí)行時(shí)的文件權(quán)限方法

發(fā)布時(shí)間:2021-06-29 10:33:00 來源:億速云 閱讀:168 作者:chen 欄目:開發(fā)技術(shù)

本篇內(nèi)容介紹了“PHP在Linxu下執(zhí)行時(shí)的文件權(quán)限方法”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

一、文件權(quán)限及所屬

1、文件有三種類型的權(quán)限,為了方便期間,可以用數(shù)字來代替,這樣可以通過數(shù)字的加減,用一個(gè)數(shù)字就能標(biāo)識(shí)這個(gè)文件的權(quán)限了,例如7=4+2+1,表示讀寫執(zhí)行3個(gè)權(quán)限都有,6=4+2,表示有讀寫權(quán)限沒有執(zhí)行權(quán)限等等

PHP在Linxu下執(zhí)行時(shí)的文件權(quán)限方法

2、聯(lián)想web應(yīng)用的rbac權(quán)限管理等,linux下同樣有用戶權(quán)限的管理,用戶有用戶名和用戶組,一般創(chuàng)建用戶時(shí)同時(shí)會(huì)創(chuàng)建同名的用戶所屬組。

先root賬號登錄隨便新建一個(gè)目錄和一個(gè)文件

#新建目錄
mkdir abc
#新建文件
touch abc.txt
#查看
ls -all

查看時(shí)會(huì)發(fā)現(xiàn):

#d開頭的為目錄,-開頭為文件,還有l(wèi)開頭的為連接等
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

先看上方藍(lán)色的部分,第一位為標(biāo)識(shí)符,去掉第一位,后面每三位分隔,以abc文件夾為例:d | rws | r-x | r-x

PHP在Linxu下執(zhí)行時(shí)的文件權(quán)限方法

所以abc文件夾中表示owner擁有rwx(7),group擁有rx(5),other擁有rx(5)。

同樣上方文件中紅色的部分,依次為所有者的名稱和所屬組的名稱,也就是abc文件夾的所有者為root,所屬組為root。此時(shí):

a、如果是root用戶來訪問這個(gè)abc文件夾,相當(dāng)與owner,擁有7的權(quán)限

b、如果一個(gè)新的用戶名test用戶組為root來訪問abc文件夾,則相當(dāng)于group,擁有5的權(quán)限

c、如果一個(gè)新的用戶名test用戶組為test的來訪問abc文件夾,則相當(dāng)與other,擁有5的權(quán)限

二、文件各權(quán)限的作用

本來還想邊測試邊說,但是太麻煩了,直接說結(jié)果吧??梢宰约盒陆ㄒ粋€(gè)用戶,然后修改權(quán)限來自己測試下。

1、目錄

  a、進(jìn)入目錄,即cd命令,所需要的權(quán)限為執(zhí)行權(quán)限(x)

  b、查看目錄內(nèi)的文件,即ls命令,需要的權(quán)限為讀取權(quán)限(r)

  c、創(chuàng)建刪除目錄內(nèi)的文件夾/文件,即mkdir/touch命名,需要的權(quán)限為寫如權(quán)限(w)

順便說下目錄只影響下一級的,隔代不影響,好比一個(gè)目錄abc/sub/,如果abc沒有w權(quán)限,但sub有w權(quán)限,則可以在sub中創(chuàng)建文件,當(dāng)然abc也需要有x權(quán)限,否則都進(jìn)不去更不用說創(chuàng)建了,但只要能進(jìn)去(可以通過切換root管理員的方法),就不會(huì)再受abc的影響,只會(huì)受sub的影響。

一般我們目錄會(huì)給5(rx)的權(quán)限,也就是讀取和執(zhí)行權(quán)限,只有圖片上傳或緩存等目錄需要?jiǎng)?chuàng)建的才會(huì)給7(rwx)的權(quán)限

2、文件

  a、文件打開,可以用cat/vim命令打開,所需權(quán)限為讀取權(quán)限(r)

  b、文件修改,可以用cat/vim命令打開并保存,所需權(quán)限為寫入權(quán)限(w)

  c、文件執(zhí)行,可以直接./abc.out等執(zhí)行,所需要權(quán)限為執(zhí)行權(quán)限(x)

這里需要說明的的是php(或者shell等)無論是命令行執(zhí)行還是web端執(zhí)行,名為執(zhí)行,實(shí)際上是讀取文件到php內(nèi)核中取解析,所以只要有讀取權(quán)限(r)就可以。

一般我們文件會(huì)給4(r)權(quán)限,也就是讀取權(quán)限,只有日志、緩存等需要向文件中寫入內(nèi)容的才會(huì)給6(rx)權(quán)限

之所以上方?jīng)]有說755,777、644權(quán)限,而僅僅是是說單個(gè)的權(quán)限,是因?yàn)槟愕木W(wǎng)站目錄所屬的權(quán)限不能確保與執(zhí)行時(shí)所用的用戶什么關(guān)系,也就是說執(zhí)行時(shí)的用戶可能是owner、可能是group也可能是other

三、php執(zhí)行時(shí)的權(quán)限

我們自己在ssh連接linux操作時(shí)必須要有個(gè)用戶名才能登錄操作,同樣php要想處理php相關(guān)的文件,也是在某個(gè)用戶下操作的,而用戶是在哪里創(chuàng)建或定義的呢,一般會(huì)是在安裝php環(huán)境時(shí)創(chuàng)建的,例如apache,nginx等環(huán)境都會(huì)默認(rèn)創(chuàng)建用戶和用戶組,而php的讀取時(shí)就用此用戶來讀取,可以通過查看配置文件來確認(rèn):

#apache在配置文件httpd.conf
User www
Group www
#nginx在配置文件nginx.conf
user www www;

或者是通過命名查看進(jìn)程:

#查看apache進(jìn)程
ps -ef|grep httpd
#查看nginx進(jìn)程
ps -ef|grep nginx
#查看php-pfm進(jìn)行
ps -ef|grep php-pfm

以apache為例會(huì)顯示:

root   1663   1 0 09:14 ?    00:00:00 /www/wdlinux/apache/bin/httpd//主進(jìn)程
www    1697 1663 0 09:14 ?    00:00:05 /www/wdlinux/apache/bin/httpd//子進(jìn)程
www    1698 1663 0 09:14 ?    00:00:05 /www/wdlinux/apache/bin/httpd

第一行就是顯示的哪個(gè)用戶在執(zhí)行它,主要看非root下的。上方說明是www用戶在運(yùn)行apache進(jìn)程來處理php文件。

這里需要注意的是,如果有安裝php-pfm,則應(yīng)該還需要查看php-pfm執(zhí)行時(shí)的用戶名及用戶組。(沒有安裝,所以沒實(shí)踐過)

默認(rèn)的可能是nobody或者apache等其它的用戶及用戶組,上方是已修改過的。此時(shí)應(yīng)該在網(wǎng)站目錄中用ls-all來確認(rèn)下網(wǎng)站文件是屬于哪個(gè)用戶,分幾種情況說明下吧:

a、例如網(wǎng)站所有者是這樣:

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
...

網(wǎng)站所有者為www,而php執(zhí)行者也為www,那說明是具有owner權(quán)限,上方system文件夾中755中的55根本不起作用,只要是7xx就會(huì)以7(rwx)的權(quán)限來執(zhí)行。

b、如果網(wǎng)站所有者是這樣:

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
...

網(wǎng)站所有者為test,所屬組為www,而php執(zhí)行者為www,執(zhí)行組為www,那說明是說在同一組中,具有g(shù)roup權(quán)限,上方system文件夾中755中的7和5不起作用,只要是x5x就會(huì)以5(rx)的權(quán)限來執(zhí)行。

c、如果網(wǎng)站所有者是這樣:

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
...

網(wǎng)站所有者為test,所屬組為test,而php執(zhí)行者為www,執(zhí)行組為www,那說明是說根本沒什么關(guān)系,具有other權(quán)限,上方system文件夾中755中的75不起作用,只要是xx5就會(huì)以5(rx)的權(quán)限來執(zhí)行。

所以不能簡單的說修改權(quán)限為755,644什么的,還需要確認(rèn)程序的執(zhí)行者和網(wǎng)站的所有者才能確定權(quán)限。

目前好多集成環(huán)境為了省事(嗯,lanmpv3等),將php的執(zhí)行權(quán)限和網(wǎng)站所在目錄都設(shè)置為www,此時(shí)一般創(chuàng)建完目錄后為755,創(chuàng)建文件后為644,當(dāng)php執(zhí)行時(shí),起作用的目錄權(quán)限為7(所有目錄擁有創(chuàng)建刪除權(quán)限)和文件權(quán)限6(所有文件具有寫權(quán)限),這種是不是挺不安全的?正常應(yīng)該是目錄為5,文件為4,當(dāng)有特殊需求時(shí)才將權(quán)限設(shè)為7。如果出現(xiàn)上方說的這種情況,修改的方法一是修改apache/nginx的用戶和用戶組,二是修改網(wǎng)站文件的所有者和所有組這兩個(gè)方向來修改,以確保網(wǎng)站的安全。

“PHP在Linxu下執(zhí)行時(shí)的文件權(quán)限方法”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI