首頁 > 軟體

Linux UGO和ACL許可權管理

2020-06-16 17:44:44

自主存取控制(Discretionary Access Control, DAC)是指物件(比如程式、檔案、進程)的擁有者可以任意修改或者授予此物件相應的許可權。Linux的UGO(User, Group, Other)和ACL(Access Control List)許可權管理方式就是典型的自主存取控制。UGO將許可權資訊儲存在節點的許可權中,ACL將許可權位資訊儲存在節點的擴充套件屬性中。

1、Linux UGO許可權管理

1.1 普通許可權

當一個檔案建立後,它具有讀(r)、寫(w)、執行(x)三種操作方式。UGO許可權管理方式將存取檔案的操作者簡單分為三類:檔案屬主(u)、同組使用者(g)與其他組使用者(o)。

檔案的三種操作方式用三個二進位制位表示,第一位表示讀許可權,第二位表示寫許可權,第三位表示執行許可權。一個檔案的許可權屬性就是有三類使用者對該檔案的許可權使能的集合。當我們用ls檢視一個檔案的時候,會顯示如下結果

linuxidc@linuxidc:~$ ls -l test
-rw-rw-r-- 1 linuxidc xlzh 0  3月 15 15:12 test
linuxidc@linuxidc:~$

最前面的’-’,表示檔案為普通型別

第一組的‘rw-’,表示檔案屬主對檔案具有讀和寫許可權,但沒有執行許可權

第二組的’rw-’,表示同組其他使用者對檔案具有讀和寫許可權,但沒有執行許可權

第三組的’r--’,表示其他組使用者對檔案具有讀許可權,但沒有寫和執行許可權

上述每一組許可權用可以用二進位制表示,例如’rw-’,二進位制表示是110,十進位制數值是6,‘r--’,二進位制表示100, 十進位制數值是4;所以對每一組許可權都可以用十進位制來表示。當使用chmod修改檔案許可權的時候就可以使用十進位制代替‘rwx’,例如

linuxidc@linuxidc:~$ ls -l test
-rw-rw-r-- 1 linuxidc xlzh 0  3月 15 15:12 test
linuxidc@linuxidc:~$ chmod 766 test
linuxidc@linuxidc:~$ ls -l test
-rwxrw-rw- 1 linuxidc xlzh 0  3月 15 15:12 test
linuxidc@linuxidc:~$

當然也可以通過chmod u+x,o+w test實現與上述同樣的功能。具體使用哪種方式,單憑個人喜好。

在linux下一切皆檔案,目錄也不例外,但目錄的讀寫執行許可權與普通檔案的讀寫執行許可權含義有所不同,如下所示

許可權位 檔案 目錄
r 可以讀檔案 可以檢視目錄中內容
w 可以寫檔案 可以增刪目錄中內容
x 可以執行檔案 可以進入目錄

1.2 特殊許可權

1.1節描述了常用的許可權位,但還有幾個特殊的許可權位需要知道,分別是s(suid),s(sgid), t(Sticky Bit)。首先看一下linux下的/usr/passwd檔案和/tmp目錄

linuxidc@linuxidc:~$ ls -l /usr/bin/passwd 
-rwsr-xr-x 1 root root 42824  9月 13  2012 /usr/bin/passwd
linuxidc@linuxidc:~$ ls -ld /tmp
drwxrwxrwt 16 root root 12288  3月 15 15:31 /tmp
linuxidc@linuxidc:~$

可以看到/usr/bin/passwd的第一組許可權位和上一節有所不同,第三個標誌位變成了s。當屬主使用者對檔案設定了suid位後,其他使用者在執行該檔案的時候則具有等同於屬主的許可權。

還是以passwd命令為例,普通使用者可以用passwd修改自己的密碼,而使用者密碼的hash儲存在/etc/shadow檔案中,修改密碼必然要修改此檔案,我們看下此檔案

linuxidc@linuxidc:~$ ls -l /etc/shadow
-rw-r----- 1 root shadow 1647  2月 18 09:46 /etc/shadow
linuxidc@linuxidc:~$

發現只有root使用者可以修改此檔案,也就是說當普通使用者執行passwd命令的時候,其許可權變為root的許可權,故可以修改/etc/shadow檔案。

guid類似

SUID對目錄沒有影響,SGID對目錄有影響,對於設定了SGID的目錄,所有使用者在該目錄下新建的檔案屬主輸入該使用者,但GID是該目錄所屬的組,如下

linuxidc@linuxidc:~$ sudo mkdir -m 2777 test
linuxidc@linuxidc:~$ ls -ld test
drwxrwsrwx 2 root root 4096  3月 28 16:23 test
linuxidc@linuxidc:~$ cd test
linuxidc@linuxidc:~/test$ touch 1.txt
-rw-rw-r-- 1 linuxidc root 0  3月 28 16:23 1.txt

而對於t,又叫黏著位,僅對目錄生效。在具有t位的目錄下,如果使用者在該目錄下具有w及x許可權,則當使用者在該目錄下建立檔案或目錄時,只有檔案擁有者與root才有權力刪除。/tmp目錄則是最好的例子,每個應用都可以在tmp目錄下新建刪除自己的檔案,但卻不能刪除其應用建立的檔案。

那麼如何修改檔案的sst許可權呢?還是使用chmod命令,由第一節我們知道可以用十進位制數值設定UGO對檔案的存取許可權,同樣對於特殊許可權位,也可以使用。只需在原來的數值前面加上sst的十進位制數值。有時候我們還會看到大寫的SST,那是因為可執行位為0,所以顯示為大寫,例如

linuxidc@linuxidc:~$ ls -l test
-rw-rw-r-- 1 linuxidc xlzh 0  3月 15 15:52 test
/*為檔案增加sst,僅做演示,實際上t為對檔案不生效*/
linuxidc@linuxidc:
~$ chmod 7777 test
/*為檔案加上了suid, sgid, Sticky Bit位*/
linuxidc@linuxidc:
~$ ls -l test
-rwsrwsrwt 1 linuxidc xlzh 0  3月 15 15:52 test
/*去除檔案的可執行位*/
linuxidc@linuxidc:
~$ chmod 7666 test
/*顯示為大寫*/
linuxidc@linuxidc:
~$ ls -l test
-rwSrwSrwT 1 linuxidc xlzh 0  3月 15 15:52 test
linuxidc@linuxidc:
~$

1.3 掩碼

先做一個實驗,在linux下分別建立一個目錄和一個檔案,檢視其許可權位

linuxidc@linuxidc:~$ mkdir dir
linuxidc@linuxidc:
~$ touch test linuxidc@linuxidc:~$ ls -ld dir
drwxrwxr
-x 2 linuxidc xlzh 4096  3月 15 15:57 dir
linuxidc@linuxidc:
~$ ls -l test
-rw-rw-r-- 1 linuxidc xlzh 0  3月 15 15:57 test
linuxidc@linuxidc:
~$

可以看到,新建的目錄全顯示775,新建的檔案是664,為什麼新建的檔案和目錄許可權不是777呢?就是由於掩碼的存在,當使用者新建一個目錄的時候,是777與掩碼做與操作,當使用者新建一個檔案的時候,是666與掩碼做與操作。可以用umask命令檢視當前系統掩碼

linuxidc@linuxidc:~$ umask
0002
linuxidc@linuxidc:~$

新建目錄是777與007做掩碼,結果正是775,新建檔案是666與002做掩碼,結果正是664。

當然,還可以通過umask命令修改系統掩碼,新建檔案的許可權位也跟著改變。

更多詳情見請繼續閱讀下一頁的精彩內容http://www.linuxidc.com/Linux/2016-03/129563p2.htm


IT145.com E-mail:sddin#qq.com