首頁 > 軟體

Linux檔案許可權和存取模式

2020-06-16 17:53:24

為了更加安全的儲存檔案,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
$

本文永久更新連結地址http://www.linuxidc.com/Linux/2015-09/122934.htm


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