Linux關於文件和目錄的訪問權限

文件和目錄的訪問權限
文件和目錄的訪問權限對如下3類用戶進行了分別定義:
文件擁有者(u),
*
文件擁有者所在用戶組中的其它成員(g),和
所有其它用戶(o)。

每個文件均擁有下列三種權限:
*
read (r): 查看文件內容
*
write (w): 修改文件
*
execute (x): 如同命令一樣執行文件
每個目錄均擁有下列三種權限:
*
read (r): 列出目錄內容
*
write (w): 在目錄中增刪文件
*

execute (x): 訪問目錄中的文件

在此,對目錄的execute權限,不僅意味着允許查看目錄下文件的內容,還允許查看文件的其它信息如文件大小、修改時間。

ls可用來顯示目錄和文件的這些信息。參閱 ls(1)。使用ls的-l選項,就會按如下順序顯示下列信息:
*
文件類型(第1個字符)
o
-: 普通文件
o
d: 目錄
o
l: 符號鏈接
o
c: 字符型設備節點
o
b: 塊設備節點
o
p: 命名管道
o
s: 套接字
*

文件訪問權限(接下來的9個字符,每3個一組依次代表user、group和other)。
*

文件的硬鏈接數
*

文件擁有user的用戶名
*

文件所屬group的用戶組名
*

文件的字符數大小 (bytes)
*

文件的時間和日期 (mtime)
*

文件的名稱

在root賬號下可使用chown改變文件的擁有者。要改變文件的所屬組,可以文件擁有者或root的身份運行chgrp。要改變目錄的訪問權限,可以文件擁有者或root的身份運行chmod。

# chown newowner foo
# chgrp newgroup foo
# chmod [ugoa][+-=][rwx][,...] foo

細節請參見 chown(1)、 chgrp(1) 和 chmod(1)。

例如,可以root帳號下創建一個目錄樹,並使其擁有者爲foo,所屬組爲bar:

# cd /some/location/
# chown -R foo:bar .
# chmod -R ug+rwX,o=rX .

下面是3個更特殊的權限:

*

set user ID (s 或 S 代替 user's x),
*

set group ID (s 或 S 代替 group's x),
*

sticky bit (t 或 T 代替 other's x).

在此,如果隱藏在特殊權限後面的執行權限標位沒有設置,則ls -l的輸出中,這些標識位將使用大寫字母。

爲可執行文件設置set user ID位將允許用戶以該文件擁有者的ID來執行該文件(例如以root身份)。同樣,爲可執行文件設置set group ID將允許用戶以該文件所屬組的ID來執行該文件(例如以root身份)。因爲這些設置將引起安全風險,所以使用這些特性時要格外小心。

爲目錄設置set group ID,則該目錄會使用BSD-like文件創建方案,即目錄中所有新創建的文件均屬於該目錄所屬的group。

爲目錄設置sticky bit可防止非文件擁有者移動目錄中的文件。爲確保全局可寫目錄如/tmp或組可寫目錄中的文件內容不被修改,不僅要關閉文件的寫權限,還應設置目錄的sticky bit,否則,任何對該目錄有寫權限的用戶均可以將該文件移動到別處,然後在原地創建一個同名文件。

這兒有一些有關文件權限的有趣例子。

$ ls -l /etc/passwd /etc/shadow /dev/ppp /usr/sbin/pppd
crw-rw---- 1 root dip 108, 0 Jan 18 13:32 /dev/ppp
-rw-r--r-- 1 root root 1051 Jan 26 08:29 /etc/passwd
-rw-r----- 1 root shadow 746 Jan 26 08:29 /etc/shadow
-rwsr-xr-- 1 root dip 234504 Nov 24 03:58 /usr/sbin/pppd
$ ls -ld /tmp /var/tmp /usr/local /var/mail /usr/src
drwxrwxrwt 4 root root 4096 Feb 9 16:35 /tmp
drwxrwsr-x 10 root staff 4096 Jan 18 13:31 /usr/local
drwxrwsr-x 3 root src 4096 Jan 19 08:36 /usr/src
drwxrwsr-x 2 root mail 4096 Feb 2 22:19 /var/mail
drwxrwxrwt 3 root root 4096 Jan 25 02:48 /var/tmp

在 chmod(1) 命令裏,有一種替代的數字模式來描述文件權限。這種數字模式使用 3 到 4 個八進制數字(以8爲基)。 每個數字相應如下:

*

第一個可選數字: set user ID (=4)、 set group ID (=2) 和 sticky bit (=1)之和
*

第二個數字: user 的 read (=4)、write (=2) 和 execute (=1) 權限之和
*

第三個數字: 同上,用於 group
*

第四個數字: 同上,用於 other

這聽起來複雜,但實際上相當簡單。 從 ls -l 命令的輸出中,看第(2-10)列,把它們作爲二進制(以2爲基)文件權限(“-”表示“0”,“rwx” 表示“1”)的表示方式來讀,這種數字模式值將使你理解八進制(以8爲基)的文件權限表示。 [33] 例如,嘗試:

$ touch foo bar
$ chmod u=rw,go=r foo
$ chmod 644 bar
$ ls -l foo bar
-rw-r--r-- 1 penguin penguin 0 Nov 3 23:30 foo
-rw-r--r-- 1 penguin penguin 0 Nov 3 23:30 bar

默認的文件權限掩碼使用 shell 內建命令 umask 設置。 參見 builtins(7)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章