Linux下的權限體系

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

  1. 字母方式
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 增長可寫權限
  1. 數字方式

數字方式直接設置全部權限,相比字母方式,更加簡潔方便;使用三位數字的形式來表示權限,第一位指定屬主的權限,第二位指定組權限,第三位指定其餘用戶的權限,每位經過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)

要使用 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 組)

  • 給文件的 other 類別增長讀和寫的權限,這樣因爲 john 會被歸爲 other 類別,那麼

他也將擁有讀寫的權限

  • 將 john 加入到 admin 組,那麼 john 會被歸爲 group 類別,那麼他將擁有讀寫的權限

第一種作法的問題在於全部用戶都將對 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
  1. tag 能夠是下面形式的一種:
user|u      表示用戶的 ACL 條目
group|g     表示用戶組的 ACL 條目
other|o     表示其它的 ACL 條目,即沒有在 ACL 指定的用戶和組的 ACL 條目
mask|m      表示掩碼的 ACL 條目,在指定其它非用戶屬主的 ACL 權限時,這個掩碼條目必須被指定,不然命令會出錯
  1. name 能夠是用戶名或組名。不指定默認是給文件或目錄的屬主或用戶組指定 ACL 權限,固然 name 也能夠是用戶的 uid 或者組的 gid
  2. permission 是指該用戶或組所具備的權限,它是由 rwx 組成的一個字符串

命令實例

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 的權限

不難,很簡單。

歡迎關個人我的公衆號:左手代碼

相關文章
相關標籤/搜索