1. 程式人生 > >理清使用者組概念及檔案許可權—搞懂網站許可權設定

理清使用者組概念及檔案許可權—搞懂網站許可權設定

關於使用者,使用者組,角色和許可權

使用者組:比如 現在有4組,把一些功能賦給組

  • 第1組 可以刪除

  • 第2組 可以檢視

  • 第3組 可以編輯

  • 第4組 可以新增

當某一角色  比如管理員 普通管理員就是2個角色  分別屬於不同的使用者組 那麼他實現的功能就不一樣了

從而實現控制

  • 一個使用者組可以有多種許可權 設定好知道 在把角色新增進去就可以了

  • 一個使用者的角色和許可權來自兩部分,一部分繼承於所有父使用者組的角色和許可權,另一部分來自特別為其分配的角色和許可權

管理員可以做任何事情, 不受任何約束

使用者的管理方法,在設計時採取“使用者——角色——許可”三級,這是WINDOWS作業系統的使用者管理方法。一個使用者可以有多個角色,一個角色也可以有多個許可。

  所以有資料庫設計時分別設計:

 

  使用者表:設UserID、使用者名稱、使用者資訊

  角色表:設RoleID、CategoryID、RoleName、Description

  使用者角色表:UserID、RoleID

  

  分類表:CategoryID、CategoryName、Description

  許可表:PermissionID、CategoryID、PermissionName、Description

  角色許可表:RoleID、PermissionID

  

設計好資料庫後,即可以從事設計使用者、角色、許可的類。類庫分資料層類,完成建立、查詢、刪除、更新等操作。業務層的類,需要實現與資料無關功能,建立如使用者擁有角色、許可的列表,驗證方式等。

在Linux裡面,任何一個檔案都具有『User, Group及Others』三種身份的個別許可權, 我們可以將上面的說明以底下的圖示來解釋:

0210filepermission_1.jpg

我們以王三毛為例,王三毛這個『檔案』的擁有者為王三毛,他屬於王大毛這個群組, 而張小豬相對於王三毛,則只是一個『其他人(others)』而已。

 

不過,這裡有個特殊的人物要來介紹的,那就是『萬能的天神』!這個天神具有無限的神力, 所以他可以到達任何他想要去的地方,呵呵!那個人在Linux系統中的身份代號是『 root 』啦!所以要小心喔!那個root可是『萬能的天神』喔!

 

linux中許可權(-rwxrwxrwx=777)

當你在linux下用命令ll 或者ls -la的時候會看到這些字眼,這些字眼表示為不同使用者組的許可權:

r:read就是讀許可權 --數字4表示

w:write就是寫許可權 --數字2表示

x:excute就是執行許可權 --數字1表示

 

讀、寫、執行三項許可權可以用數字表示,就是r=4,w=2,x=1。

這個我之前也有疑問,為什麼讀是4而寫2,執行是1,為什麼這樣安排?(不明白點選檢視)

數字設定許可權就是 -_ _ _ _ _ _ _ _ _-,分別為

0210filepermission_3.gif

所以,-rw-r--r--用數字表示成644,比如用FileZilla設定許可權,

Screen Shot 2018-03-20 at 17.56.05.png

以上的其他使用者,不包括root這個super user。

檔案各許可權的作用

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

shell命令檢視與修改檔案許可權

檢視檔案許可權命令簡單 ls -l  

修改檔案許可權命令  chmod -R   (許可權)(目錄) ——修改資料夾內所有的檔案和資料夾及子資料夾屬性為可寫可讀可執行

比如 chmod -R 744 zhoulujun/

php執行時的許可權

 

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

所以網站php檔案 要設定 754,html檔案,設定744即可。

事實上對於使用者程式來說,一個檔案能否讀/寫/執行,根本就不能提前判定。我們程式設計時唯一的辦法就是“試一試”——不做任何提前判斷,直接把操作執行出去,出錯了再說。

 

而此時如果判執行許可權,那就非常危險了:php直譯器嘗試執行,如果成功了,那麼執行此檔案的行為就必然會發生,不可避免。這就意味著php直譯器可以執行任何有執行權的檔案,哪怕不是php程式碼也沒關係。

 

這樣在系統被黑,存在未知檔案植入的情況下,我們就將失去php直譯器的最後一層保護,黑客可以通過php直譯器,任意執行任何語言編寫的一切惡意程式。其後果將是毀滅性的。

 

所以“呼叫php命令來執行指令碼時只需讀取許可權”,這個是當然的,也是必須的。

 

簡而言之:任何語言的直譯器,都只要求作業系統嘗試讀取程式碼檔案,得到程式碼文字。直譯器在得到程式碼文字之後,會自行負責後續的工作,無需作業系統染指。直譯器和程式碼的關係,猶如編輯器和文稿檔案的關係。直譯器絕對不會委託作業系統去執行任意檔案。

 

java也是這樣的。一切解釋型語言的直譯器都是這樣的,沒有任何例外——過去沒有,現在也沒有,將來更不可能有。

本文來源:理清使用者組概念及檔案許可權-搞懂網站許可權設定 - computer science - 周陸軍的個人網站