Linux 系統中文件的 ugo 權限是 Linux 進行權限管理的基本方式。本文將介紹 ugo 權限的基本概念。
說明:本文的演示環境為 ubuntu 16.04。
文件的所有者和組
Linux 文件的 ugo 權限把對文件的訪問者划分為三個類別:文件的所有者、組和其他人。所謂的 ugo 就是指 user(也稱為 owner)、group 和 other 三個單詞的首字母組合。
文件的所有者
文件的所有者一般是創建該文件的用戶,對該文件具有完全的權限。在一台允許多個用戶訪問的 Linux 主機上,可以通過文件的所有者來區分一個文件屬於某個用戶。當然,一個用戶也無權查看或更改其它用戶的文件。
文件所屬的組
假如有幾個用戶合作開發同一個項目,如果每個用戶只能查看和修改自己創建的文件就太不方便了,也就談不上什么合作了。所以需要一個機制允許一個用戶查看和修改其它用戶的文件,此時就用到組的概念的。我們可以創建一個組,然后把需要合作的用戶都添加都這個組中。在設置文件的訪問權限時,允許這個組中的用戶對該文件進行讀取和修改。
其他人
如果我想把一個文件共享給系統中的所有用戶該怎么辦?通過組的方式顯然是不合適的,因為需要把系統中的所有用戶都添加到一個組中。並且系統中添加了新用戶該怎么辦,每添加一個新用戶就把他添加到這個組中嗎?這個問題可以通過其他人的概念解決。在設置文件的訪問權限時,允許其他人戶對該文件進行讀取和修改。
文件屬性中的權限信息
使用 ll 命令可以查看文件的屬性信息:
- 第一組指明文件的類型和 ugo 權限信息。
- 第二組是對文件的引用計數。
- 第三組是文件的所有者。
- 第四組是文件所屬的組。
其它的信息我們暫時忽略。
文件類型
第一組的第一個字符描述文件的類型,常見的類型有如下幾種:
- d 表示目錄
- - 表示普通文件
- l 表示鏈接文件
- b 表示塊設備文件
- c 表示字符設備文件
- s 表示 socket 文件
文件的 ugo 權限信息
第一組信息一個 10 個字符,除去第一個表示文件類型的字符,其它 9 個字符表示文件的 ugo 權限信息:
這 9 個字符以三個為一組,都是 rwx 或 - 的組合。其中,r 代表可讀(read)、 w 代表可寫(write)、 x 代表可執行(execute)。 這三個權限的位置不會改變,如果沒有對應的權限,就會以 -(減號)代替。
以上圖所示,第一組為文件所有者的權限,第二組為文件所屬組的權限,第三組為其他人的權限。其表示的具體含義為:文件所有者具有對文件的讀寫權限,文件所屬組的用戶具有對文件讀寫的權限,而其他人只有讀取文件的權限。
下面讓我們來詳細的解釋一下讀寫執行的權限。
- r (read):可以讀取文件的實際內容,比如讀取文本文件內的文字等。
- w (write):可以編輯、增加、刪除文件的內容(但不含刪除該文件)。
- x (execute):該文件具有可以被系統執行的權限。
可以看出,對於文件來說,rwx 主要針對的是文件的內容。
對目錄而言,目錄中存儲的主要是目錄下文件名稱的列表,這與普通文件是有些不同的:
r (read contents in directory)
表示具有讀取目錄下文件名稱的權限,也就是說你可以通過 ls 命令把目錄下的文件列表查詢出來。
比如我們使用用戶 nick 創建一個目錄 testdir,並在該目錄下創建兩個文件,此時 testdir 的權限為:
其他人具有 r 權限,所以可以通過 ls 命令查看該目錄下的文件,這里我們通過 tester 用戶查看:
然后我們修改該目錄的權限:
現在其他人已經沒有這個目錄上的 r 權限了,再讓用戶 tester 執行 ls 命令試試:
現在其他人已經沒有權限查看目錄下的文件名了。
w (modify contents of directory)
具有 w 權限表明你可以在該目錄下執行如下的操作:
- 創建新的文件和目錄
- 刪除已經存在的文件與目錄(不論該文件的權限為何!)
- 重命名已存在的文件或目錄
- 移動該目錄內文件、目錄的位置。
x (access directory)
目錄雖然不能被執行,但是卻具有可以執行的權限。目錄的 x 權限表示用戶是否可以進入該目標並成為當前的工作目錄。注意,如果用戶對目錄沒有 x 權限,則無法查看該目錄下的文件的內容(注意與 r 權限的區別)。比如我們移除 testdir 目錄上的 x 權限:
此時雖然其他人具有讀 testfile1 文件的權限,但我們用 tester 用戶讀取其內容時:
提示沒有權限,原因就是我們移除了 testdir 目錄的 x 權限。所以,如果要允許目錄被其他人瀏覽時,至少要給予 r 和 x 的權限。
文件的所有者
第三組信息顯示文件的所有者,圖片中顯示的文件所有者為 nick。文件的所有者一般是創建該文件的用戶,對該文件具有完全的權限。
文件所屬的組
第四組信息顯示文件所屬的組。當我們通過 adduser 命令創建用戶時一般會創建一個同名的組,該用戶就屬於與他同名的組(比如筆者機器上的用戶 nick 就屬於 nick 組)。當我們創建文件和目錄時,其默認所屬的組就是所有者所在的組。
保存用戶和組的文件
用戶和組的信息分別記錄在 /etc/passwd、/etc/group 文件中。可以直接以讀取文本文件的方式查看其內容:
這兩個文件的內容是任何人都有權查看的,比如 /etc/passwd 文件的內容如下所示:
該圖只顯示了部分用戶的信息,其中的每一行代表一個用戶。/etc/group 文件的結構與 /etc/passwd 文件的結構類似。
基本操作
在新建文件時會根據創建者的身份和其它的一些設置為文件生成默認的權限。比如我們全面看到的文件 testfile:
接下來我們介紹如何通過下面的命令修改文件權限相關的信息:
- chown :改變文件所有者
- chgrp :改變文件所屬的組
- chmod :改變文件的權限
改變文件所有者
通過 chown 命令可以改變文件的所有者:
$ sudo chown tester testfile
改變文件所屬的組
通過 chgrp 命令可以改變文件所屬的組:
改變文件的權限
通過 chmod 命令可以改變文件的權限。對於文件的 rwx 權限,有兩種表示方法,數字表示法和字符表示法。
以數字表示權限的方式如下:
r: 4
w: 2
x: 1
如果是 rwx 權限就是 4 + 2 + 1 = 7 ,r-x 就是 4 + 1 = 5 ,--- 則為 0。所以 rw-rw-r-- 就可以用 664 來表示。如果我們想把文件的權限修改為 rwxrwxrwx,可以使用下面的命令:
$ chmod 777 testfile
以字符表示權限的方式如下:
用字符 u, g, o 分別代表文件所有者(user)、文件所屬的組(group)和其他人(other),這就是 ugo 權限叫法的由來。只不過還有一個 a 可以表示全部的身份(all)。具體更改權限的語法如下:
chmod [u g o a] [+ - =] [rwx] 文件/目錄
比如我們可以通過下面的命令把 testfile 的權限設回 rw-rw-r--:
$ chmod ug=rw,o=r testfile
如果想去掉組的 w 權限並給其他人添加 x 權限可以執行下面的命令:
$ chmod g-w,o+x testfile
我們還可通過 a 為全部身份設置權限,比如 rwx:
$ chmod a=rwx testfile
總結
ugo 權限是學習和使用 Linux 系統的基礎,本文只介紹了其中最基本的概念和操作,希望可以幫助大家了解 Linux 的權限及其簡單的操作。
參考:
鳥哥 Linux 的文件權限與目錄配置
linux文件權限【基本權限ugo】
chown man page
chgrp man page
chmod man page