文件、目錄權限和所有者
簡介:用戶對一個文件或目錄具有訪問權限,這些訪問權限決定了誰能訪問,以及如何范圍這些文件和目錄。通過設置權限可以限制或允許以下三種用戶訪問:
- 文件的用戶所有者(屬主)
- 文件的組群所有者(用戶所在組的同組用戶)
- 系統中的其他用戶
在linux系統中,每一位用戶都有對文件或目錄的的讀取、寫入和執行權限。
- 第一套權限控制訪問自己的文件權限,即所有者權限
- 第二套權限控制用戶組訪問其中一個用戶的文件的權限。
- 第三套權限控制其他所有用戶訪問一個用戶的文件的權限。
這三套權限賦予用戶不同類型(即用戶所有者、組群所有者和其他用戶)的讀取、寫入及執行權限,這就構成了一個有9種類型的權限組。
設置文件和目錄基本權限
基本權限簡介
使用ls -l命令可以顯示文件和目錄的詳細信息,其中包括文件和目錄的權限。如下:
[root@localhost ~]# ls -l /root total 156 -rw-r--r--. 1 root root 0 Jun 22 23:40 123.png} -rw-r--r--. 1 root root 8 Jun 28 22:00 aa -rw-r--r--. 1 root root 282 Jul 23 18:47 abc -rw-r--r--. 1 root root 10240 Jul 23 18:47 abc.tar -rw-r--r--. 1 root root 0 Jul 23 18:59 abc.tar.bz2 -rw-r--r--. 1 root root 243 Jul 23 18:54 abc.tar.gz -rw-r--r--. 1 root root 300 Jul 23 19:07 abc.tar.xz -rw-------. 1 root root 1260 Jun 9 14:21 anaconda-ks.cfg -rw-r--r--. 1 root root 12 Jul 17 18:27 ao -rw-r--r--. 1 root root 82 Jul 17 18:47 b -rw-r--r--. 1 root root 12 Jul 17 18:40 bc -rw-r--r--. 1 root root 41 Jul 17 18:46 bf dr-xr-xr-x. 5 root root 4096 Jun 22 23:21 boot -rw-r--r--. 1 root root 128 Jul 19 19:06 continue -rw-r--r--. 1 root root 47 Jun 23 07:11 cs1.log -rw-r--r--. 1 root root 19 Jun 23 07:10 cs.log -rw-r--r--. 1 root root 0 Jul 23 18:47 d -rw-r--r--. 1 root root 8 Jun 28 21:49 d1 -rw-r--r--. 1 root root 8 Jun 28 21:49 d2 -rw-r--r--. 1 root root 95 Jul 18 18:25 date -rw-r--r--. 1 root root 0 Jul 19 18:48 empty -rw-r--r--. 1 root root 5 Jun 28 20:49 file1 -rw-r--r--. 1 root root 6 Jun 28 20:50 file2 -rw-r--r--. 1 root root 63 Jul 19 20:41 for -rw-r--r--. 1 root root 4287 Jun 22 23:15 grub -rw-r--r--. 1 root root 4287 Jun 22 23:18 grub2.cfg -rw-r--r--. 1 root root 0 Jun 23 03:52 hello.doc -rw-r--r--. 1 root root 209 Jul 19 21:34 hk -rw-r--r--. 1 root root 15 Jun 29 03:11 httpd.conf -rw-r--r--. 1 root root 282 Jul 17 18:50 kk -rw-r--r--. 1 root root 29 Jun 28 22:02 kkk drwxr-xr-x. 2 root root 6 Jun 29 03:13 mlocate -rw-r--r--. 1 root root 6 Jul 17 18:33 mm -rw-r--r--. 1 root root 28 Jun 23 07:14 mm.txt drwxr-xr-x. 2 root root 39 Jun 22 23:43 mypic drwxr-xr-x. 2 root root 43 Jul 19 09:57 myshell drwxr-xr-x. 2 root root 6 Jun 22 22:27 newdir1 -rw-r--r--. 1 root root 12 Jun 29 21:38 notes -rw-r--r--. 1 root root 227 Jul 19 21:13 number -rw-r--r--. 1 root root 49 Jul 17 18:51 oo drwxr-xr-x. 2 root root 6 Jul 23 08:00 packages drwxr-xr-x. 2 root root 17 Jul 23 19:10 root -rwxr--r--. 1 root root 279 Jul 19 19:33 score -rw-r--r--. 1 root root 318 Jul 19 19:58 selection -rw-r--r--. 1 root root 88 Jul 19 20:52 sum -rw-r--r--. 1 root root 0 Jun 23 07:06 textfile2 drwxr-xr-x. 2 root root 23 Jul 23 10:37 yum.repos.d -rw-r--r--. 1 root root 135 Jul 19 21:03 zx
上圖第2~10個字符當中的每3個為一組,左邊3個字符表示用戶所有者權限,中間3個字符表示組群所有者的權限,右邊3個字符是其他用戶的權限。
- r(讀取):對文件而言,該用戶具有讀取文件內容的權限;對目錄來說,該用戶具有瀏覽目錄的權限。
- w(寫入):對文件而言,該用戶具有新增、修改文件內容的權限;對目錄來說,該用戶具有刪除、移動目錄內文件的權限
- x(執行):對文件而言,該用戶具有執行文件的權限;對目錄來說,該用戶具有進入目錄的權限。
- -:表示該用戶不具有該項權限
舉例 | 描述 |
---|---|
-rwx------ | 用戶所有者對文件具有讀取、寫入和執行權限 |
-rwxr--r-- | 用戶所有者具有讀取、寫入和執行權限,其他用戶則具有讀取權限 |
-rw-rw-r-x | 用戶所有者和組群所有者對文件具有讀取、寫入權限,而其他用戶只具有讀取和執行權限 |
drwx--x--x | 目錄的用戶所有者具有讀寫和進入目錄權限,其他用戶能進入目錄,卻無法讀取任何數據 |
drwx----- | 除了目錄的用戶所有者具有所有的權限之外,其他用戶對該目錄沒有任何權限 |
每個用戶都擁有自己的主目錄,通常集中放置在/home目錄下,這些主目錄的默認權限為rwx------。使用一下命令查看主命令權限
[root@localhost ~]# ls -l /home total 0 drwx------. 2 it it 83 Jul 22 19:14 it drwx------. 2 linux li 83 Jun 11 09:42 li drwx------. 2 1002 1002 62 Jul 20 05:06 lisi drwx------. 2 wangwu wangwu 62 Jul 20 05:06 opop drwx------. 2 pp root 62 Jul 20 05:25 pp drwx------. 2 newuser newuser 62 Jul 20 05:19 www drwx------. 2 zhangsan zhangsan 62 Jul 20 05:01 zhangsan
基本權限的設置方法
只有系統管理員和文件/目錄的所有者才可以更改文件和目錄的權限,有以下兩種方法
文字設定法設置權限
命令語法:chmod [操作對象] [操作符號] [權限] [文件|目錄]
部分 | 選項 | 含義 |
---|---|---|
操作對象 | u | 表示用戶所有者,即文件或目錄的所有者 |
g | 表示組群的所有者,即與文件的用戶所有者有相同組群GID的所有用戶 | |
o | 表示其他用戶 | |
a | 表示所有用戶,它是系統默認值 | |
操作符號 | + | 添加某個權限 |
- | 取消某個權限 | |
= | 賦予給定權限並取消原先權限(如果有的話) | |
權限 | r | 讀取權限 |
w | 寫入權限 | |
x | 可執行權限 |
例子:取消/root/abc的寫入權限
[root@localhost ~]# ls -l abc -rw-r--r--. 1 root root 282 Jul 23 18:47 abc [root@localhost ~]# chmod u-w abc [root@localhost ~]# ls -l abc -r--r--r--. 1 root root 282 Jul 23 18:47 abc
數字設定法設置權限
- 0表示沒有權限=---
- 1表示可執行權限=--x
- 2表示寫入權限=-w-
- 4表示讀取權限=r--
- 將以上對應權限的數字相加就是某個文件或目錄的權限,例如某個文件用戶所有者有讀取、寫入和可執行權限,數字就是700;某個文件組群所有者擁有讀取權限,數字就是040;其他用戶擁有讀取和寫入權限,數字就是006.
使用命令chmod 006 [文件或命令]=chmod 6 [文件或目錄]
所有數字屬性的格式應該是三個0~7的數,其順序是u、g、o
- r:對應數值4
- w:對應數值2
- x:對應數值1
- -:對應數值0
例如,如果向讓某個文件的所有者有“讀/寫”兩種權限,需要用數字6來表示,即4(可讀)+2(可寫)=6(讀/寫) 下面幾個例子說明權限字符字母轉換為數字
- -rwx------:用數字表示為700
- -rwxr--r--:用數字表示為744
- -rw-rw-r-x:用數字表示為665
- drwx--x--x:用數字表示為711
- drwx------:用數字表示為700
使用chmod更改權限 命令語法:chmod [n1n2n3] [文件|目錄]
選項 | 含義 |
---|---|
n1 | 用戶所有者的權限,n1代表數字 |
n2 | 組群所有者的權限,n2代表數字 |
n3 | 其他用戶的權限,n3代表數字 |
例如:設置abc文件權限,用戶所有者擁有讀取、寫入和執行的權限
[root@localhost ~]# ls -l abc -r--r--r--. 1 root root 282 Jul 23 18:47 abc [root@localhost ~]# chmod 700 abc [root@localhost ~]# ls -l abc -rwx------. 1 root root 282 Jul 23 18:47 abc
設置文件和目錄特殊權限
用戶如果沒有特殊要求,一般是不需要啟用特殊權限的,以避免出現安全方面的隱患
- SUID:對一個可執行文件,不是以發起者身份來獲取資源的,而是以可執行文件的用戶所有者身份來執行。
- SGID:對一個可執行文件,不是以發起者身份來獲取資源的,而是以可執行文件的組群所有者身份來執行的。
- Sticky:對文件或目錄設置Sticky之后,盡管其他用戶有寫權限,也必須由文件所有者執行刪除和移動等操作。
因為SUID、SGID、Sticky占用x(執行權限)的位置來表示,所以在表示上會有大小寫之分。加入同時開啟執行權限和SUID、SGID、Sticky,則權限表示字符是小寫的,如下
[root@localhost ~]# ls -l abc -rwsr-sr-t. 1 root root 282 Jul 23 18:47 abc
如果關閉權限,則表示字符會變成大寫,如下
[root@localhost ~]# ls -l abc -rwSr-Sr-t. 1 root root 282 Jul 23 18:47 abc
特定權限的設置方法
- 文字設置法設置特殊權限
- 數字設定法設置特殊權限
如果設置特殊權限,必須使用四位數字才能表示,對應數值如下
- SUID:對應數值是4
- SGID:對應數值是2
- Sticky:對應數值是1
例如:設置文件ah具有SUID權限
[root@localhost ~]# ls -l ah -rw-r--r--. 1 root root 0 Jul 26 08:27 ah [root@localhost ~]# chmod 4000 ah [root@localhost ~]# ls -l ah ---S------. 1 root root 0 Jul 26 08:27 ah
例子:設置文件ah具有Sticky權限
[root@localhost ~]# chmod 1000 ah [root@localhost ~]# ls -l ah ---------T. 1 root root 0 Jul 26 08:27 ah
例子:設置文件ah具有SUID、SGID和Sticky權限。
[root@localhost ~]# chmod 7000 ah [root@localhost ~]# ls -l ah ---S--S--T. 1 root root 0 Jul 26 08:27 ah
更改文件和目錄所有者
使用chown命令可以更改文件和目錄的用戶所有者和組群的所有者
命令語法:chown [選項] [用戶.組群] [文件|目錄] chown [選項] [用戶.組群] [文件|目錄]
選項 | 含義 |
---|---|
-R | 將下級子目錄下的所有文件和目錄的所有權一起更改 |
-h | 會影響符號鏈接本身,而非符號鏈接所指示的目的地 |
-v | 為處理的所有文件顯示診斷信息 |
-p | 不遍歷任何符號鏈接(默認) |
-L | 遍歷每一個遇到的通到目錄的符號鏈接 |
-H | 如何命令行參數是一個通到目錄的符號鏈接,則遍歷符號鏈接 |
[root@localhost ~]# ls -l ah ---S--S--T. 1 root root 0 Jul 26 08:27 ah [root@localhost ~]# chown newuser ah [root@localhost ~]# ls -l ah ------S--T. 1 newuser root 0 Jul 26 08:27 ah
例子:將文件ah的組群所有者更改成newuser
[root@localhost ~]# chown :newuser ah [root@localhost ~]# ls -l ah ------S--T. 1 newuser newuser 0 Jul 26 08:27 ah
例子:將文件ah的組群所有者更改成newuser
[root@localhost ~]# chown .newuser ah [root@localhost ~]# ls -l ah ------S--T. 1 newuser newuser 0 Jul 26 08:27 ah
例子:將目錄/root/b連同它的下級文件/root/b/c的用戶所有者和組群所有者一起更改為newuser
[root@localhost ~]# ls -l /root/b total 0 -rw-r--r--. 1 root root 0 Jul 26 08:59 c [root@localhost ~]# ls -l /root/b/c -rw-r--r--. 1 root root 0 Jul 26 08:59 /root/b/c [root@localhost ~]# chown -R newuser.newuser /root/b [root@localhost ~]# ls -ld /root/b drwxr-xr-x. 2 newuser newuser 15 Jul 26 08:59 /root/b [root@localhost ~]# ls -l /root/b/c -rw-r--r--. 1 newuser newuser 0 Jul 26 08:59 /root/b/c
摘自:《Linux實用教程》人民郵電出版社出版發行 於岳編著