Linux學習之文件權限及訪問模式

為了更加安全的存儲文件,Linux為不同的文件賦予了不同的權限,每個文件都擁有下面三種權限:

  • 所有者權限:文件所有者能夠進行的操作
  • 組權限:文件所屬用戶組能夠進行的操作
  • 外部權限(其他權限):其他用戶可以進行的操作

查看文件權限

#[root@localhost test]# ls -l
total 4
-rwx-r--r--. 1 root root 0 Apr 8 09:34 test1.txt
-rw-r--r--. 1 root root 55 Apr 8 09:37 test.txt

第一列就包含了文件或目錄的權限。第一列的字符可以分為三組,每一組有三個,每個字符都代表不同的權限,分別為讀取(r)、寫入(w)和執行(x):
- 第一組字符(2-4)表示文件所有者的權限,-rwx-r--r-- 表示所有者擁有讀取(r)、寫入(w)和執行(x)的權限。
- 第二組字符(5-7)表示文件所屬用戶組的權限,-rwx-r--r-- 表示該組擁有讀取(r)和執行(x)的權限,但沒有寫入權限。
- 第三組字符(8-10)表示所有其他用戶的權限,-rwx-r--r-- 表示其他用戶只能讀取(r)文件。

文件目錄訪問模式

文件權限是Linux系統的第一道安全防線,基本的權限有讀取(r)、寫入(w)和執行(x):

  • 讀取:用戶能夠讀取文件信息,查看文件內容。
  • 寫入:用戶可以編輯文件,可以向文件寫入內容,也可以刪除文件內容。
  • 執行:用戶可以將文件作為程序來運行。

修改文件權限

修改文件訪問模式使用chmod(change mode)命令,權限可以使用符號或數字表示:

使用符號表示權限

對于初學者來說最簡單的就是使用符號來改變文件或目錄的權限,你可以增加(+)和刪除(-)權限,也可以指定特定權限。符號說明

符號 說明
+ 為文件或目錄增加權限
- 刪除文件或目錄的權限
= 設置指定的權限
修改所有者權限的權限

[root@localhost test]# chmod u-x test1.txt
[root@localhost test]# ls -l test1.txt
-rw-r--r--. 1 root root 0 Apr 8 09:34 test1.txt

修改組權限的權限

[root@localhost test]# chmod g+x test1.txt
[root@localhost test]#ls -l test1.txt
-rw-r-xr--. 1 root root 0 Apr 8 09:34 test1.txt

修改外部權限的權限

[root@localhost test]# chmod o+w test1.txt
[root@localhost test]# ls -l test1.txt
-rw-r-xrw-. 1 root root 0 Apr 8 09:34 test1.txt

使用數字表示權限

| 數字 | 說明 | 權限|
| ------ |:-----------:------:|
| 0 | 沒有任何權限|---|
| 1 | 執行權限 |--x|
| 2| 寫入權限|-w-|
| 3 | 執行權限和寫入權限|-wx|
| 4 | 讀取權限 |r--|
| 5| 讀取和執行權限|r-x|
| 6 | 讀取和寫入權限|rw-|
| 7 | 所有權限 |rwx|

修改test.txt權限

[root@localhost test]# chmod 755 test.txt
[root@localhost test]# ls -l test.txt
total 4
-rwxr-xr-x. 1 root root 55 Apr 8 09:37 test.txt

更改所有者和用戶組

在Linux中,每添加一個新用戶,就會為它分配一個用戶ID和群組ID,上面提到的文件權限也是基于用戶和群組來分配的。有兩個命令可以改變文件的所有者或群組:

  • chown:chown 命令是"change owner"的縮寫,用來改變文件的所有者。
  • chgrp:chgrp 命令是"change group"的縮寫,用來改變文件所在的群組。

chown 命令用來更改文件所有者,其語法如下:

$ chown user filelist
$ chown amrood testfile

user 可以是用戶名或用戶ID
注意:超級用戶 root 可以不受限制的更改文件的所有者和用戶組,但是普通用戶只能更改所有者是自己的文件或目錄。

chgrp 命令用來改變文件所屬群組,其語法為:

$ chgrp group filelist
$ chgrp special testfile

group可以是群組名或群組ID,將文件 testfile 的群組改為 special。

SUID和SGID位

在Linux中,一些程序需要特殊權限才能完成用戶指定的操作。例如,用戶的密碼保存在 /etc/shadow 文件中,出于安全考慮,一般用戶沒有讀取和寫入的權限。
但是當我們使用passwd 命令來更改密碼時,需要對 /etc/shadow 文件有寫入權限。這就意味著,passwd 程序必須要給我們一些特殊權限,才可以向 /etc/shadow 文件寫入內容。

Linux 通過給程序設置SUID(Set User ID)和SGID(Set Group ID)位來賦予普通用戶特殊權限。當我們運行一個帶有SUID位的程序時,就會繼承該程序所有者的權限;
如果程序不帶SUID位,則會根據程序使用者的權限來運行。SGID也是一樣。一般情況下程序會根據你的組權限來運行,但是給程序設置SGID后,就會根據程序所在組的組權限運行。如果程序設置了SUID位,就會在表示文件所有者可執行權限的位置上出現's'字母;同樣,如果設置了SGID,就會在表示文件群組可執行權限的位置上出現's'字母。如下所示:

[root@localhost home]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 Feb 22 2012 /usr/bin/passwd

上面第一列第四個字符不是'x'或'-',而是's',說明 /usr/bin/passwd 文件設置了SUID位,這時普通用戶會以root用戶的權限來執行passwd程序。
注意:小寫字母's'說明文件所有者有執行權限(x),大寫字母'S'說明程序所有者沒有執行權限(x)。如果在表示群組權限的位置上出現SGID位,那么也僅有三類用戶可以刪除該目錄下的文件:目錄所有者、文件所有者、超級用戶 root。
為一個目錄設置SUID和SGID位可以使用下面的命令:

chmod ug+s test
[root@localhost home]# ls -l
dr-Sr-Sr--. 2 devteam root 4096 Apr 8 17:13 test

好了,今天就先學到這吧,文中可能有誤,歡迎朋友們指出!最后一點筆者也不是很明白,歡迎簡友討論!文中內容參考自 學習網站,十分感謝!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容