Linux 下的權限是一個很經常使用也頗有用的東西, 細分開來是分爲文件權限和訪問控制。文件權限就是表示文件所屬用戶、用戶所在組、其它用戶的讀寫和執行權限;訪問控制列表又稱爲 ACL,主要目的是提供傳統的文件權限以外的具體權限設置,能夠針對單一用戶或組來設置特定的權限。docker
文件屬性字段總共有 10 個字母組成,第一個字母表示文件類型,若是這個字母是一個減號,則說明該文件是一個普通文件。字母 d 表示該文件是一個目錄。後面的 9 個字母爲該文件的權限標識,3 個爲一組,分別表示文件所屬用戶、用戶所在組、其它用戶的讀寫和執行權限;例如:ui
vagrant@homestead:~/code$ ll -a drwxrw-r-- 1 vagrant vagrant 4096 Dec 8 09:09 blog/
表示這是一個文件夾,該文件夾對擁有者 vagrant 這個用戶可讀寫可執行;對 vagrant 所在的組 vagrant 可讀可寫;對其它用戶只可讀;能夠經過這張圖加深理解:spa
更改權限的方法是使用 chmod 命令,更改讀寫權限有兩種方法,一種是字母方式,一種是數字方式。vagrant
chmod userMark (+|-) PermissionsMark
其中 userMark 表示是給文件全部者、全部者組仍是其餘添加權限,取值以下:code
u: 用戶(user) g: 組(group) o: 其它用戶(other) a: 全部用戶(all)
其中 permissionMark 表示是添加什麼權限,取值以下:blog
r: 讀 w: 寫 x: 執行
例如:繼承
chmod a+x main 對全部用戶給文件 main 增長可執行權限 chmod g+w blogs 對組用戶給文件 blogs 增長可寫權限
數字方式直接設置全部權限,相比字母方式,更加簡潔方便;使用三位數字的形式來表示權限,第一位指定屬主的權限,第二位指定組權限,第三位指定其餘用戶的權限,每位經過4(讀)、2(寫)、1(執行)三種數值的和來肯定權限。如 6(4+2) 表明有讀寫權,7(4+2+1) 有讀、寫和執行的權限。其實就是二進制轉換爲十進制的表示,好比咱們要把一個文件權限改成 rwx rw- r--
的話,那麼其對位過來的二進制就是 111 110 100
,每三位一組轉換成十進制就是 764
:遞歸
rwx rw- r-- 111 110 100 7 6 4
那麼操做命令就是:rem
chmod 764 main 將 main 的權限設置爲 rwx rw- r--
附上一些經常使用的用戶與組的操做:字符串
groups 查看當前用戶組 usermod -G sunny docker 將用戶sunny加入docker組 usermod -g sunny docker 將用戶sunny加入到docker組,並從原有的組中除去 more /etc/group 查看全部的用戶組及權限 more /etc/passwd 查看全部用戶及權限
要使用 ACL 必需要有文件系統支持才行,目前絕大多數的文件系統都會支持,EXT3 文件系統默認啓動 ACL 的,ACL 就是能夠設置特定用戶或者用戶組對於一個文件/文件夾的操做權限。
假設咱們當前有這樣的一個文件:
[sunny@localhost ~]$ ls -l -rw-rw---- 1 sunny admin 0 Jul 5 08:45 test.txt
test.txt
這個文件的全部者(user)是 sunny 擁有讀和寫的
權限。 他所屬組 admin 組的用戶(group)擁有讀和寫權限。其餘任何用戶(other)
對於文件沒有任何的權限。
若是咱們如今但願 john 這個用戶也能夠對 test.txt
文件進行讀寫操做。那麼大概會想到
如下幾種辦法 (假設 john 不屬於 admin 組)
他也將擁有讀寫的權限
第一種作法的問題在於全部用戶都將對 test.txt
擁有讀寫操做,顯然這種作法不可取。第二種作法的問題在於john被賦予了過多的權限,全部屬於 admin 組的文件,john 均可以擁有其等同的權限了。
看來好像都沒有一個很好的解決方案,其實問題就出在 Linux 文件權限裏面,對於 other 的定義過於普遍,以致於很難把權限限定於一個用戶身上,那麼 ACL 就是用來幫助咱們解決這個問題的。
ACL 的操做總共有這幾個命令:getfacl
setfacl
,先來看看命令語法:
setfacl [-bkRd] [-m|-x acl參數] 目標文件名
命令的參數含義:
-b 代表有兩個 ACL 須要修改,前一個 ACL 是文件的 ACL,後一個是目錄的默認 ACL -d 設定目錄的默認 ACL,這個選項是比較有用,若是指定了目錄的默認 ACL,在這個目錄下新建的文件或目錄都會繼承目錄的 ACL -R 刪除文件的acl -D 刪除目錄的默認 ACL,是 `-d` 的反向操做 -B 刪除文件和目錄默認的 ACL,是 `-b` 的反向操做 -r 遞歸地修改文件和目錄的 ACL 權限 -l 列出文件和目錄的 ACL 權限 -m 設置目標文件的 ACL 參數,不可與 `-x` 一塊兒使用 -x 刪除目標文件的 ACL 參數,不可與 `-m` 一塊兒使用
其中 acl參數 格式是這樣的:
tag:name:permission
user|u 表示用戶的 ACL 條目 group|g 表示用戶組的 ACL 條目 other|o 表示其它的 ACL 條目,即沒有在 ACL 指定的用戶和組的 ACL 條目 mask|m 表示掩碼的 ACL 條目,在指定其它非用戶屬主的 ACL 權限時,這個掩碼條目必須被指定,不然命令會出錯
setfacl -m u:sunny:rwx ./wwwdir
給用戶 sunny 添加一個當前下 wwwdir 這個文件夾 rwx 的權限
setfacl -m g:sunny:rwx ./wwwdir
給 sunny 組添加一個當前下 wwwdir 這個文件夾 rwx 的權限
setfacl -x g:sunny:rwx ./wwwdir
刪除 sunny 組下 wwwdir 這個文件夾 rwx 的權限
不難,很簡單。
歡迎關個人我的公衆號:左手代碼