Linux系統不同文件之中,有不同的權限。這是為了文件存儲的時候的安全考慮,也是為了讓Linux各個模塊間更加順暢的訪問和調度。本文為大家帶來Linux系統文件權限和訪問模式介紹。
權限
所有者權限 u :文件所有者能夠進行的操作
組權限 g :文件所屬用戶組能夠進行的操作
外部權限 o :(其他權限):其他用戶可以進行的操作。
查看文件權限
使用 ls -l 命令可以查看與文件權限相關的信息:
$ls -l /home/amrood
-rwxr-xr-- 1 amrood users 1024 Nov 2 00:10 myfile
drwxr-xr--- 1 amrood users 1024 Nov 2 00:10 mydir
第一列就包含了文件或目錄的權限。
第一列的字符可以分為三組,每一組有三個,每個字符都代表不同的權限,分別為讀取(r)、寫入(w)和執行(x):
第一組字符(2-4)表示文件所有者的權限,-rwxr-xr-- 表示所有者擁有讀取(r)、寫入(w)和執行(x)的權限。
第二組字符(5-7)表示文件所屬用戶組的權限,-rwxr-xr-- 表示該組擁有讀取(r)和執行(x)的權限,但沒有寫入權限。
第三組字符(8-10)表示所有其他用戶的權限,rwxr-xr-- 表示其他用戶只能讀取(r)文件。
文件訪問模式
文件權限是Linux系統的第一道安全防線,基本的權限有讀取(r)、寫入(w)和執行(x):
讀取r:用戶能夠讀取文件信息,查看文件內容。
寫入w:用戶可以編輯文件,可以向文件寫入內容,也可以刪除文件內容。
執行x:用戶可以將文件作為程序來運行。
目錄訪問模式
目錄的訪問模式和文件類似,但是稍有不同:
讀取r:用戶可以查看目錄中的文件
寫入w:用戶可以在當前目錄中刪除文件或創建文件
執行x:執行權限賦予用戶遍歷目錄的權利,例如執行 cd 和 ls 命令。
改變權限
可以使用 chmod (change mode) 命令來改變文件或目錄的訪問權限,權限可以使用符號或數字來表示。
使用符號表示權限
對於初學者來說最簡單的就是使用符號來改變文件或目錄的權限,你可以增加(+)和刪除(-)權限,也可以指定特定權限。
符號 說明
+ 為文件或目錄增加權限
- 刪除文件或目錄的權限
= 設置指定的權限
下面的例子將會修改 testfile 文件的權限:
$ls -l testfile
-rwxrwxr-- 1 amrood users 1024 Nov 2 00:10 testfile
$chmod o+wx testfile
$ls -l testfile
-rwxrwxrwx 1 amrood users 1024 Nov 2 00:10 testfile
$chmod u-x testfile
$ls -l testfile
-rw-rwxrwx 1 amrood users 1024 Nov 2 00:10 testfile
$chmod g=rx testfile
$ls -l testfile
-rw-r-xrwx 1 amrood users 1024 Nov 2 00:10 testfile
也可以同時使用多個符號:
$chmod o+wx,u-x,g=rx testfile
$ls -l testfile
-rw-r-xrwx 1 amrood users 1024 Nov 2 00:10 testfile
使用數字表示權限
除了符號,也可以使用八進制數字來指定具體權限,如下表所示:
數字 說明 權限
0 沒有任何權限 ---
1 執行權限 --x
2 寫入權限 -w-
3 執行權限和寫入權限:1 (執行) + 2 (寫入) = 3 -wx
4 讀取權限 r--
5 讀取和執行權限:4 (讀取) + 1 (執行) = 5 r-x
6 讀取和寫入權限:4 (讀取) + 2 (寫入) = 6 rw-
7 所有權限: 4 (讀取) + 2 (寫入) + 1 (執行) = 7 rwx
下面的例子,首先使用 ls -1 命令查看 testfile 文件的權限,然後使用 chmod 命令更改權限:
$ls -l testfile
-rwxrwxr-- 1 amrood users 1024 Nov 2 00:10 testfile
$ chmod 755 testfile
$ls -l testfile
-rwxr-xr-x 1 amrood users 1024 Nov 2 00:10 testfile
$chmod 743 testfile
$ls -l testfile
-rwxr---wx 1 amrood users 1024 Nov 2 00:10 testfile
$chmod 043 testfile
$ls -l testfile
----r---wx 1 amrood users 1024 Nov 2 00:10 testfile
更改所有者和用戶組
在Linux中,每添加一個新用戶,就會為它分配一個用戶ID和群組ID,上面提到的文件權限也是基於用戶和群組來分配的。
有兩個命令可以改變文件的所有者或群組:
chown:chown 命令是“change owner”的縮寫,用來改變文件的所有者。
chgrp:chgrp 命令是“change group”的縮寫,用來改變文件所在的群組。
chown 命令用來更改文件所有者,其語法如下:
$ chown user filelist
user 可以是用戶名或用戶ID,例如
$ chown amrood testfile
$
將 testfile 文件的所有者改為 amrood。
注意:超級用戶 root 可以不受限制的更改文件的所有者和用戶組,但是普通用戶只能更改所有者是自己的文件或目錄。
chgrp 命令用來改變文件所屬群組,其語法為:
$ chgrp group filelist
group可以是群組名或群組ID,例如
$ chgrp special testfile
$
將文件 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’字母。如下所示:
$ ls -l /usr/bin/passwd
-r-sr-xr-x 1 root bin 19031 Feb 7 13:47 /usr/bin/passwd*
$
上面第一列第四個字符不是‘x’或‘-’,而是‘s’,說明 /usr/bin/passwd 文件設置了SUID位,這時普通用戶會以root用戶的權限來執行passwd程序。
注意:小寫字母‘s’說明文件所有者有執行權限(x),大寫字母‘S’說明程序所有者沒有執行權限(x)。
如果在表示群組權限的位置上出現SGID位,那麼也僅有三類用戶可以刪除該目錄下的文件:目錄所有者、文件所有者、超級用戶 root。
為一個目錄設置SUID和SGID位可以使用下面的命令:
$ chmod ug+s dirname
$ ls -l
drwsr-sr-x 2 root root 4096 Jun 19 06:45 dirname
$
以上就是Linux系統文件權限和訪問模式的解析了,只要充分了解了Linux系統文件權限才能了解Linux文件之間的訪問模式。