一、文件權(quán)限及所屬
1、文件有三種類型的權(quán)限,為了方便期間,可以用數(shù)字來代替,這樣可以通過數(shù)字的加減,用一個數(shù)字就能標(biāo)識這個文件的權(quán)限了,例如7=4+2+1,表示讀寫執(zhí)行3個權(quán)限都有,6=4+2,表示有讀寫權(quán)限沒有執(zhí)行權(quán)限等等
2、聯(lián)想web應(yīng)用的rbac權(quán)限管理等,linux下同樣有用戶權(quán)限的管理,用戶有用戶名和用戶組,一般創(chuàng)建用戶時同時會創(chuàng)建同名的用戶所屬組。
先root賬號登錄隨便新建一個目錄和一個文件
#新建目錄 mkdir abc #新建文件 touch abc.txt #查看 ls -all
查看時會發(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)識符,去掉第一位,后面每三位分隔,以abc文件夾為例:d | rws | r-x | r-x
所以abc文件夾中表示owner擁有rwx(7),group擁有rx(5),other擁有rx(5)。
同樣上方文件中紅色的部分,依次為所有者的名稱和所屬組的名稱,也就是abc文件夾的所有者為root,所屬組為root。此時:
a、如果是root用戶來訪問這個abc文件夾,相當(dāng)與owner,擁有7的權(quán)限
b、如果一個新的用戶名test用戶組為root來訪問abc文件夾,則相當(dāng)于group,擁有5的權(quán)限
c、如果一個新的用戶名test用戶組為test的來訪問abc文件夾,則相當(dāng)與other,擁有5的權(quán)限
二、文件各權(quán)限的作用
本來還想邊測試邊說,但是太麻煩了,直接說結(jié)果吧。可以自己新建一個用戶,然后修改權(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)
順便說下目錄只影響下一級的,隔代不影響,好比一個目錄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管理員的方法),就不會再受abc的影響,只會受sub的影響。
一般我們目錄會給5(rx)的權(quán)限,也就是讀取和執(zhí)行權(quán)限,只有圖片上傳或緩存等目錄需要創(chuàng)建的才會給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)就可以。
一般我們文件會給4(r)權(quán)限,也就是讀取權(quán)限,只有日志、緩存等需要向文件中寫入內(nèi)容的才會給6(rx)權(quán)限
之所以上方?jīng)]有說755,777、644權(quán)限,而僅僅是是說單個的權(quán)限,是因?yàn)槟愕木W(wǎng)站目錄所屬的權(quán)限不能確保與執(zhí)行時所用的用戶什么關(guān)系,也就是說執(zhí)行時的用戶可能是owner、可能是group也可能是other
三、php執(zhí)行時的權(quán)限
我們自己在ssh連接linux操作時必須要有個用戶名才能登錄操作,同樣php要想處理php相關(guān)的文件,也是在某個用戶下操作的,而用戶是在哪里創(chuàng)建或定義的呢,一般會是在安裝php環(huán)境時創(chuàng)建的,例如apache,nginx等環(huán)境都會默認(rèn)創(chuàng)建用戶和用戶組,而php的讀取時就用此用戶來讀取,可以通過查看配置文件來確認(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為例會顯示:
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
第一行就是顯示的哪個用戶在執(zhí)行它,主要看非root下的。上方說明是www用戶在運(yùn)行apache進(jìn)程來處理php文件。
這里需要注意的是,如果有安裝php-pfm,則應(yīng)該還需要查看php-pfm執(zhí)行時的用戶名及用戶組。(沒有安裝,所以沒實(shí)踐過)