Linux 是被設(shè)計(jì)為多用戶的操作系統(tǒng)。在企業(yè)級(jí)系統(tǒng)中,會(huì)有多個(gè)用戶訪問同一個(gè)系統(tǒng)。但是,如果任何用戶都可以訪問和修改屬于其他用戶或系統(tǒng)所有的文件,這肯定會(huì)帶來安全風(fēng)險(xiǎn)。
這就是為什么 UNIX 和 Linux(Linux 是類 UNIX 的系統(tǒng))有內(nèi)置的安全措施,這確保了文件或目錄只能由所需的用戶訪問、修改或執(zhí)行。
在 Linux 中,哪個(gè)用戶能夠訪問哪個(gè)文件取決于兩個(gè)因素:
文件所有權(quán)
文件權(quán)限
理解文件所有權(quán)和權(quán)限對(duì)于 Linux 用戶來說至關(guān)重要。本文將介紹相關(guān)內(nèi)容。
Linux 中的文件所有權(quán)
注:本文所提到的文件,也包括目錄(Linux中,目錄也是屬于文件)。
Linux 中的每個(gè)文件和目錄都有三種所有者:
用戶
用戶是文件的所有者。你創(chuàng)建了一個(gè)文件,那么這個(gè)文件的所有者就是你。所有權(quán)也是可以被修改的(我們會(huì)在后面介紹到)。
組
每個(gè)用戶都是某個(gè)組的一部分。一個(gè)組由多個(gè)用戶組成,這是在多用戶環(huán)境中管理用戶的一種方法。
比如,你有開發(fā)組,質(zhì)保組,以及系統(tǒng)管理組都訪問統(tǒng)一系統(tǒng),那么你應(yīng)該為他們單獨(dú)創(chuàng)建組。這樣,你可以有效的管理文件和系統(tǒng)的安全性。這樣也會(huì)節(jié)省時(shí)間,因?yàn)槟銦o需手動(dòng)為每個(gè)用戶添加權(quán)限,而只需要將他們添加到相關(guān)組中,并更改組的權(quán)限即可。本文稍后會(huì)做詳細(xì)介紹。
即便你是這個(gè)系統(tǒng)中的唯一用戶,那么你仍然是眾多組中的一員。像 Ubuntu 這樣的發(fā)行版,也會(huì)為一個(gè)用戶創(chuàng)建相同名稱的組。
注:運(yùn)行 groups 命令可以查看你所屬的用戶組。
其他
“其他”可以被視為系統(tǒng)中所有用戶的超級(jí)組。基本上,任何能夠訪問該系統(tǒng)的人都屬于這個(gè)組。
總體而言,“用戶”是單個(gè)用戶,“組”是用戶的集合,“其他”是由系統(tǒng)中所有的用戶組成。
Linux 中的文件權(quán)限
Linux 中的每個(gè)文件和目錄對(duì)所有三種所有者都有以下三種權(quán)限:
文件權(quán)限
讀 - 可以查看或復(fù)制文件內(nèi)容;
寫 - 可以修改文件內(nèi)容;
執(zhí)行 - 可以運(yùn)行文件(如果其可執(zhí)行)。
目錄權(quán)限
讀 - 可以列出所有子文件,并可以從目錄中復(fù)制文件;
寫 - 可以在目錄中添加或刪除文件(也需要執(zhí)行權(quán)限);
執(zhí)行 - 可以進(jìn)入目錄。
Linux 中的文件權(quán)限和所有權(quán)
以上是關(guān)于文件權(quán)限和所有權(quán)的基本知識(shí),現(xiàn)在我們來通過實(shí)例介紹下。
在Linux中,你可以使用 stat 或者 ls 命令來查看文件的權(quán)限。如果你使用 ls 命令,那需要帶上 -l 選項(xiàng),你會(huì)看到如下輸出:
?
-rwxrw-r-- 1 gliu gliu 457 May 10 11:55 filename.txt
?
對(duì)于以上輸出的解釋如下:
文件類型:表示文件的類型,d 表示目錄,– 表示常規(guī)文件,l 表示符號(hào)鏈接;
權(quán)限:顯示文件的權(quán)限,我們?cè)诒疚暮竺嬖敿?xì)介紹;
硬鏈接數(shù):顯示文件是否有硬鏈接,默認(rèn)為1;
所有者:文件所屬用戶;
所屬組:有權(quán)訪問此文件的組,一次只能有一個(gè)組是文件的所有者;
文件大小:文件的大小(單位為b);
修改時(shí)間:文件的最后修改時(shí)間;
文件名稱:文件或者目錄的名稱。
上述是我們對(duì) ls -l 命令輸出的解釋,現(xiàn)在我們主要看下權(quán)限的部分。
在上面的命令中,你可以看到權(quán)限的顯示為9位字符,格式如下:
rwxrw-r--
其中的每個(gè)字母表示一個(gè)特定的權(quán)限:
r: 讀權(quán)限;
w: 寫權(quán)限;
x: 執(zhí)行權(quán)限;
-: 沒有權(quán)限。
權(quán)限始終按讀、寫和執(zhí)行的順序排列,即rwx。然后,按照用戶、組和其他的順序?yàn)樗腥N所有者設(shè)置這些權(quán)限。
結(jié)合上圖,我們可以了解到:
1)文件的所有者,具有對(duì)該文件的讀取、寫入和執(zhí)行的權(quán)限。但是這個(gè)文件的所有者是誰呢?在 ls -l 命令中有此信息的輸出(即用戶 gliu);
2)文件所屬組有對(duì)其讀寫權(quán)限,但是沒有執(zhí)行權(quán)限。那是哪一組呢?在 ls -l 命令中有此信息的輸出(即用戶組 gliu);
3)該文件僅對(duì)其他人(即有權(quán)訪問系統(tǒng)的所有人)具有讀取權(quán)限。你不需要知道它是哪個(gè),因?yàn)椤捌渌笔侵杆杏脩簟?/p>
再次看下 ls -l 命令的輸出結(jié)果,我們應(yīng)該能看出文件的權(quán)限以及所有者了:
?
-rwxrw-r-- 1 gliu gliu 457 May 10 11:55 filename.txt
?
文件 filename.txt 屬于用戶 gliu 所有,并且gliu對(duì)該文件具有讀寫和執(zhí)行的權(quán)限;用戶組 gliu 中所有的用戶對(duì)該文件都具有讀和寫的權(quán)限,然后其他用戶對(duì)該文件都是只讀的權(quán)限。
注意:root 用戶具有超級(jí)權(quán)限,通常它對(duì)所有文件都具有讀、寫和執(zhí)行權(quán)限,即使您在文件權(quán)限中沒有看到它。
單個(gè)用戶可以是多個(gè)組的成員,但只有主要的組是用戶創(chuàng)建文件的所屬組。用戶所在的主要組可以使用 id 命令找到,比如 id -gn . 如果要查詢自己的主要組,省略參數(shù)。
通過上文的描述我們知道了如何查看文件的權(quán)限,接下來我們看看如何更改文件的權(quán)限和所有權(quán)。
在 Linux 中更改文件權(quán)限
在 Linux 中,我們可以使用 chmod 命令來更改文件的權(quán)限。
注:權(quán)限在過去被稱為訪問模式(mode of access),因此 chmod 是更改訪問模式的簡(jiǎn)稱。
使用 chmod 命令有兩種方法:
絕對(duì)模式(Absolute mode)
符號(hào)模式(Symbolic mode)
在絕對(duì)模式下使用 chmod
在絕對(duì)模式下,權(quán)限以數(shù)字形式表示(精確地說是八進(jìn)制)。在這個(gè)系統(tǒng)中,每個(gè)文件權(quán)限都由一個(gè)數(shù)字表示。
r (read,讀) = 4
w (write,寫) = 2
x (execute,執(zhí)行) = 1
– (無權(quán)限) = 0
通過這些數(shù)值,可以將它們組合在一起,因此可以使用一個(gè)數(shù)字來表示整個(gè)權(quán)限集。
數(shù)值 ? |
權(quán)限 ? |
0 ? |
- ? |
1 ? |
--x ? |
2 |
-r- ? |
3(2 + 1) ? |
-wx ? |
4 ? |
r-- ? |
5(?4 + 1) ? |
r-x ? |
6(4 + 2) ? |
rw- ? |
7(4 +2 +?1) |
rwx ? |
上文中的文件 filename.txt,如果使用數(shù)字來表示權(quán)限的話,是什么呢?沒錯(cuò),應(yīng)該是 764。
通過以上描述我們知道了什么數(shù)字代表什么權(quán)限,那么現(xiàn)在我們來看一下如何更改文件權(quán)限。
如果你要更改文件 filename.txt 的權(quán)限,想讓每個(gè)人都可以讀寫,但是不能執(zhí)行,那么可以使用如下命令:
?
chmod 666 filename.txt
?
然后使用 ls -l 命令查看一下,就會(huì)發(fā)現(xiàn)文件的權(quán)限被更改了:
?
-rw-rw-rw- 1 gliu gliu 457 May 10 11:55 filename.txt
?
在符號(hào)模式下使用chmod
絕對(duì)模式的問題是,即使你只想更改一個(gè)所有者的權(quán)限,也需要提供三個(gè)所有者的數(shù)字。
所以,此時(shí)你可以使用 chmod 命令的符號(hào)模式。
在符號(hào)模式下,所有者用以下符號(hào)表示:
u = 用戶所有者(user owner)
g = 所屬組(group owner)
o = 其他(other)
a = 所有用戶 (user + group + other)
然后,符號(hào)模式使用數(shù)學(xué)運(yùn)算符來執(zhí)行權(quán)限更改:
+ 增加權(quán)限
– 移除權(quán)限
= 使用新的權(quán)限覆蓋現(xiàn)有權(quán)限
現(xiàn)在,我們來看看如何在符號(hào)模式下使用chmod命令。
在前面的例子中,如果要為所屬組(組所有者)添加執(zhí)行權(quán)限,可以這樣使用 chmod 命令:
?
chmod g+x filename.txt
?
現(xiàn)在再次使用 ls -l 命令查看文件,會(huì)看到已為所屬組添加了執(zhí)行權(quán)限:
?
-rw-rwxrw- 1 gliu gliu 457 May 10 11:55 filename.txt
?
另外,還可以將多個(gè)權(quán)限的更改合并到一個(gè)命令中。假如我們要為其他用戶刪除讀寫權(quán)限,添加執(zhí)行權(quán)限,同時(shí)還為所屬組用戶添加執(zhí)行權(quán)限,可以通過如下命令來完成:
?
chmod o-rw+x,u+x filename.txt
?
執(zhí)行后結(jié)果如下:
?
-rwxrwx--x 1 gliu gliu 457 May 10 11:55 filename.txt
?
如果要同時(shí)更改所有三種用戶的權(quán)限,可以按以下方式:
?
chmod a-x filename.txt
?
這樣會(huì)刪除所有用戶的執(zhí)行權(quán)限:
?
-rw-rw---- 1 gliu gliu 457 May 10 11:55 filename.txt
?
更改文件所有權(quán)
要更改文件的所有權(quán),可以使用 chown 命令。它表示 change owner。
可以按如下方式更改文件的所有者:
如果想要更改用戶和組,可以使用如下命令:
如果只想更改組,那么可以這樣執(zhí)行 chown 命令:
或者可以使用專門用戶更改文件和目錄所屬組的 chgrp 命令。這個(gè)命令很容易可以猜到表示 change group。
舉個(gè)例子,如果我們想要把文件 filename.txt的所有者和組都改為root,可以使用如下命令:
?
sudo chown root:root filename.txt
?
這樣就會(huì)將文件的用戶所有權(quán),和組所有權(quán),都改為root。
?
-rw-rw---- 1 root root 457 May 10 11:55 filename.txt
?
注意到上述命令中使用 sudo 了嗎?這是因?yàn)檫@個(gè)命令涉及到了root用戶,要處理root用戶,需要使用超級(jí)用戶權(quán)限。
注:同一個(gè)文件不能被兩個(gè)組所擁有。
文件權(quán)限有優(yōu)先權(quán)嗎?
設(shè)想一種情況,其中用戶所有者沒有任何權(quán)限,組具有讀取權(quán)限,而其他組具有讀取和寫入權(quán)限。
?
----r--rw- 1 gliu gliu 457 May 10 11:55 filename.txt
?
那么,如果用戶 gliu 想要使用 cat 或者 less 命令來讀取這個(gè)文件,會(huì)成功嗎?答案是不會(huì),因?yàn)樗鼪]有讀權(quán)限。
但是用戶 gliu 是組 gliu(這個(gè)是組名稱) 的一個(gè)成員,而該組具有讀取權(quán)限,這應(yīng)該表示組內(nèi)的每個(gè)人(包括用戶gliu)都應(yīng)該有讀的權(quán)限才對(duì)啊?答案是否定的。
在 Linux 中,優(yōu)先級(jí)是從用戶,到組,然后再到其他。系統(tǒng)會(huì)檢查是誰啟動(dòng)了進(jìn)程(在我們的例子中進(jìn)程是 cat 或者 less),如果啟動(dòng)進(jìn)程的用戶同時(shí)也是文件的所屬組用戶,那么就會(huì)設(shè)置用戶權(quán)限位。
如果啟動(dòng)進(jìn)程的不是文件所有者,那么系統(tǒng)就會(huì)檢查組,如果啟動(dòng)進(jìn)程的用戶恰好在文件所屬組中,那么將設(shè)置組權(quán)限位。
如果啟動(dòng)進(jìn)程的用戶不是文件所屬組中的用戶,那么就會(huì)設(shè)置其他權(quán)限位。
?
評(píng)論
查看更多