自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Linux文件系統(tǒng)的管理所有權(quán)和權(quán)限

運(yùn)維 系統(tǒng)運(yùn)維
本文介紹在Linux文件系統(tǒng)上管理所有權(quán)和權(quán)限。了解訪問模式,如 suid、sgid 和粘貼位,以及如何使用它們加強(qiáng)安全性。通過介紹文件所有權(quán)、權(quán)限和安全性,具體講解如何文件上設(shè)置正確的安全性。

概述

在本文中,了解通過文件、目錄權(quán)限和所有權(quán)的正確使用控制文件訪問。學(xué)習(xí):

●管理普通和特殊文件及目錄的訪問權(quán)限

●使用訪問模式,如 suid、sgid 和粘貼位(sticky bit),維護(hù)安全性

●變更文件創(chuàng)建屏蔽

●向組成員授予訪問權(quán)限

除非特別指出,本文中的例子使用 2.6.34 內(nèi)核的 Fedora 13。您在其他系統(tǒng)上得到的結(jié)果可能有所不同。

本文幫助您準(zhǔn)備 Linux Professional Institute's Junior Level Administration(LPIC-1)考試 101 中主題 104 下的目標(biāo) 104.4。該目標(biāo)的權(quán)值為 3。

我們?cè)谥暗奈恼?“Linux磁盤配額的設(shè)置與檢測(cè)” 中介紹了本文中的部分文件和組所有權(quán)概念。本文將會(huì)幫助您更透徹地理解這些概念。

先決條件

為了最有效地利用本系列中的文章,您應(yīng)該具有基本的 Linux 知識(shí),并需要準(zhǔn)備一個(gè) Linux 系統(tǒng),用于練習(xí)本文介紹的命令。有時(shí)候不同版本的程序輸出格式不同,因此您所得到的結(jié)果未必總是與這里所示的清單和圖相同。

用戶和組

現(xiàn)在,您了解了 Linux 是一個(gè)多用戶的系統(tǒng),每個(gè)用戶屬于一個(gè)主要 組,也可能是附加組。也可以作為一個(gè)用戶登錄,然后使用 su 或者 sudo -s 命令變?yōu)榱硪粋€(gè)用戶。Linux 的文件所有權(quán)和訪問授權(quán)是與用戶 id 和組密切相關(guān)的,所以我們要復(fù)習(xí)一下基本的用戶和組信息。

我是誰?

如果沒有切換到其他用戶,您的 id 就是登錄時(shí)的。如果切換到其他用戶,在本文的大多數(shù)例子中,您的提示中就會(huì)包括您的用戶 id。如果您的提示沒有包括用戶 id,可以使用 whoami 命令來檢查您當(dāng)前有效的 id。清單 1 顯示了一些例子,說明了提示字符串(來自 PS1 環(huán)境變量)與本文中的其他例子不同。在提示字符串中包含您的 id 是一個(gè)有用的功能。

清單 1. 決定有效的用戶 id

/home/ian$ whoami
tom
/home/ian$ exit
exit
$ whoami
ian

我在什么組中?

類似的,您可以使用 groups 命令找出您在什么組中。使用 id 命令,您可以找出用戶和組信息。添加一個(gè)用戶 id 參數(shù)到 groups 或者 id 來查看該用戶 id 的信息,而并非當(dāng)前用戶 id。查看 清單 2 中的示例。請(qǐng)注意,沒有用戶 id,id 命令也會(huì)顯示 SELinux 上下文和基本 id 信息。

清單 2. 決策組成員

[ian@echidna ~]$ id
uid=1000(ian) gid=1000(ian) groups=1000(ian),505(development),8093(editor)
context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[ian@echidna ~]$ id ian
uid=1000(ian) gid=1000(ian) groups=1000(ian),8093(editor),505(development)
[ian@echidna ~]$ groups
ian development editor
[ian@echidna ~]$ id tom
uid=1012(tom) gid=1012(tom) groups=1012(tom),505(development)
[ian@echidna ~]$ groups tom
tom : tom development
[ian@echidna ~]$ su tom
Password:
[tom@echidna ian]$ groups
tom development
[tom@echidna ian]$ groups ian
ian : ian editor development

#p#

文件的所有權(quán)和權(quán)限

如果每個(gè)用戶都有 id 并且是主要組的成員,那么 Linux 系統(tǒng)上的每個(gè)文件都有一個(gè)所有者和與其相關(guān)的組。

普通文件

使用 ls -l 命令顯示所有者和組。

清單 3. 決定文件所有權(quán)

[ian@echidna ~]$ ls -l /bin/bash .bashrc helloworld.C
-rw-r--r--. 1 ian ian 124 Mar 31 2010 .bashrc
-rwxr-xr-x. 1 root root 943360 May 21 2010 /bin/bash
-rw-rw-r--. 1 ian development 116 Nov 30 10:21 helloworld.C


在這個(gè)特殊的例子中,用戶 ian 的 .bashrc 文件由他自己所有,并且屬于 ian 的主要組。類似的,/bin/bash 由用戶 root 所有,并且位于組 root。但是,helloworld.C 由用戶 ian 所有,但是屬于組 development。用戶名和組名來自不同的名稱空間,所以給定的名稱可能同時(shí)是用戶名和組名。事實(shí)上,很多版本默認(rèn)為每個(gè)新用戶創(chuàng)建一個(gè)匹配的組。

Linux 權(quán)限模型每個(gè)文件系統(tǒng)對(duì)象有 3 種類型。這些權(quán)限就是讀(r),寫(w)和執(zhí)行(x)。寫權(quán)限包括修改和刪除對(duì)象的能力。此外,這些權(quán)限被分別指定給文件所有者、文件組成員和其他人。

回到清單 3 第一列,注意,它包括一個(gè) 11 個(gè)字符的字符串。這第 11 個(gè)字符是最近才添加的。我們稍后再討論。第一個(gè)字母描述了對(duì)象的類型(- 在這個(gè)例子中表示普通文件),剩下的 9 個(gè)字母每三個(gè)字母為一組。第一組表示文件所有者的讀、寫和執(zhí)行權(quán)限。- 表示相應(yīng)的權(quán)限沒有被授予。因此,用戶 ian 就可以讀和寫 .bashrc 文件,但是不能執(zhí)行它;而 root 可以讀、寫 和 執(zhí)行 /bin/bash 文件。第二組表示文件組的讀、寫和執(zhí)行權(quán)限。development 組的成員能夠讀或者寫 ian 的 helloworld.C 文件,而其他人只能讀。類似的,root 組中的成員和其他人能夠讀或者執(zhí)行 /bin/bash 文件。

目錄

目錄和常規(guī)文件一樣使用相同的權(quán)限標(biāo)識(shí),但是它們的翻譯不同。目錄的讀權(quán)限允許用戶使用該權(quán)限列出目錄內(nèi)容。寫權(quán)限意味著用戶使用該權(quán)限能夠在目錄中創(chuàng)建或者刪除文件。執(zhí)行權(quán)限允許用戶輸入目錄并訪問任意子目錄。沒有執(zhí)行權(quán)限,目錄下的文件系統(tǒng)對(duì)象就是不可訪問的。沒有讀權(quán)限,目錄下的文件系統(tǒng)對(duì)象在目錄清單下就是不可見的,但是如果知道磁盤上對(duì)象的完整路徑,這些對(duì)象仍是可訪問的。清單 4 是說明這些問題的非常人工的例子。

清單 4. 權(quán)限和目錄

[ian@echidna ~]$ ls -l /home
total 32
drwxr-x---. 38 editor editor 12288 Nov 30 10:49 editor
drwxr-x---. 4 greg development 4096 Nov 30 12:44 greg
drwx------. 21 gretchen gretchen 4096 Nov 30 11:26 gretchen
drwxr-xr-x. 41 ian ian 4096 Nov 30 10:51 ian
drwx------. 21 ianadmin ianadmin 4096 May 28 2010 ianadmin
d-wx--x--x. 21 tom tom 4096 Nov 30 11:30 tom
[ian@echidna ~]$ ls -a ~greg/.ba*
/home/greg/.bash_history /home/greg/.bash_profile
/home/greg/.bash_logout /home/greg/.bashrc
[ian@echidna ~]$ ls -a ~gretchen
ls: cannot open directory /home/gretchen: Permission denied
[ian@echidna ~]$ ls -a ~tom
ls: cannot open directory /home/tom: Permission denied
[ian@echidna ~]$ head -n 3 ~tom/.bashrc
# .bashrc
# Source global definitions

長(zhǎng)清單的第一個(gè)字母表示對(duì)象的類型(d 表示目錄)。用戶 greg 的主目錄有 development 組成員的讀和寫權(quán)限,因此用戶 tom 和 ian 能夠列出目錄。用戶 gretchen 的主目錄沒有 gretchen 組或者其他用戶的讀和執(zhí)行權(quán)限,所以用戶 ian 不能訪問它。用戶 tom 的主目錄有執(zhí)行權(quán)限,但是沒有讀權(quán)限,所以用戶 ian 不能列出內(nèi)容,但是如果知道對(duì)象存在,就可以訪問目錄下的對(duì)象。

其他文件系統(tǒng)對(duì)象

ls -l 的輸出可能包含文件系統(tǒng)對(duì)象,而不是文件和目錄,如清單中第一個(gè)字母所示。在后面的文章中我們還會(huì)見到更多,但是現(xiàn)在,只是說明可能的對(duì)象類型。

表 1. 文件系統(tǒng)對(duì)象類型

代碼 對(duì)象類型
- 常規(guī)文件
d 目錄
l 符號(hào)鏈接
c 字符特殊設(shè)備
b 模塊特殊設(shè)備
p FIFO
s 套接字

第 11 個(gè)字符

來自 ls 命令中長(zhǎng)清單的第 11 個(gè)字符是最近才出現(xiàn)的,所以部分版本仍只顯示頭 10 個(gè)字符。在其他情況下,第 11 個(gè)字符是一個(gè)空格,所以您可能沒有注意到。這個(gè)字符表示是否有替換的訪問方法應(yīng)用到文件。當(dāng)跟隨文件模式位的字符是空格時(shí),就表示沒有替換訪問方法。當(dāng)是一個(gè)可打印字符時(shí),就有替換方法。這個(gè)方法可能是例子的訪問控制清單。GNU ls 使用一個(gè) ‘.’(點(diǎn))來表示文件只有一個(gè) SELinux 安全上下文。有其他替換訪問方法的文件用 ‘+’(加號(hào))表示。

#p#

變更權(quán)限

添加權(quán)限

假設(shè)您創(chuàng)建一個(gè) “Hello world” 的 shell 腳本。當(dāng)您第一次創(chuàng)建腳本時(shí),它通常是不可執(zhí)行的。使用 chmod 命令和 +x 選項(xiàng)添加執(zhí)行權(quán)限,如清單 5 所示。

清單 5. 創(chuàng)建可執(zhí)行的 shell 腳本

[ian@echidna ~]$ echo 'echo "Hello world!"'>hello.sh
[ian@echidna ~]$ ls -l hello.sh
-rw-rw-r--. 1 ian ian 20 Nov 30 13:05 hello.sh
[ian@echidna ~]$ ./hello.sh
bash: ./hello.sh: Permission denied
[ian@echidna ~]$ chmod +x hello.sh
[ian@echidna ~]$ ./hello.sh
Hello world!
[ian@echidna ~]$ ls -l hello.sh
-rwxrwxr-x. 1 ian ian 20 Nov 30 13:05 hello.sh

您可以按類似的方法使用 +r 來設(shè)置讀權(quán)限,使用 +w 設(shè)置寫權(quán)限。事實(shí)上,您可以聯(lián)合使用 r、w 和 x。例如,使用 chmod +rwx 將會(huì)設(shè)置文件的所有讀、寫和執(zhí)行權(quán)限。chmod 會(huì)添加尚未設(shè)置的權(quán)限。

可選性

您在上面的例子中可能已經(jīng)注意到,執(zhí)行權(quán)限被設(shè)置給所有者、組 和 其他。為了更具可選性,您可以給模式描述加前綴 u 來設(shè)置用戶權(quán)限,g 來設(shè)置組權(quán)限,還有 o 為其他人設(shè)置。需要指出的是 a 設(shè)置所有用戶的權(quán)限,這就相當(dāng)于忽略它。清單 6 顯示了如何添加用戶和組寫和執(zhí)行權(quán)限到 shell 腳本的其他副本。

清單 6. 有選擇性地添加權(quán)限

[ian@echidna ~]$ echo 'echo "Hello world!"'>hello2.sh
[ian@echidna ~]$ chmod ug+xw hello2.sh
[ian@echidna ~]$ ls -l hello2.sh
-rwxrwxr--. 1 ian ian 20 Nov 30 13:08 hello2.sh

刪除權(quán)限

有時(shí)您需要?jiǎng)h除權(quán)限,而不單單是添加。簡(jiǎn)單地將 + 改變?yōu)?-,就能刪除任何已設(shè)置的指定權(quán)限。清單 7 顯示了如何刪除兩個(gè) shell 腳本上的其他用戶的所有權(quán)限。

清單 7. 刪除權(quán)限

[ian@echidna ~]$ ls -l hello*.sh
-rwxrwxr--. 1 ian ian 20 Nov 30 13:08 hello2.sh
-rwxrwxr-x. 1 ian ian 20 Nov 30 13:05 hello.sh
[ian@echidna ~]$ chmod o-xrw hello*.sh
[ian@echidna ~]$ ls -l hello*.sh
-rwxrwx---. 1 ian ian 20 Nov 30 13:08 hello2.sh
-rwxrwx---. 1 ian ian 20 Nov 30 13:05 hello.sh

請(qǐng)注意,您可以一次改變一個(gè)或者多個(gè)文件的權(quán)限。正如在 topic 103 的文章中看到其他命令一樣,您甚至可以使用 -R(或者 --recursive)選項(xiàng)在目錄和文件上進(jìn)行遞歸操作。

設(shè)置權(quán)限

現(xiàn)在已經(jīng)可以添加或者刪除權(quán)限了,您可能會(huì)想,怎樣才能只設(shè)置一些特殊權(quán)限。使用 = 替換 + 或者 - 來完成這個(gè)動(dòng)作。要在上述腳本中設(shè)置權(quán)限,這樣其他用戶就沒有訪問權(quán)利,您可以使用 chmod o= hello* 替換我們用于刪除權(quán)限的命令。

如果您想對(duì)用戶、組合或其他設(shè)置不同的權(quán)限,您可以通過逗號(hào)分隔不同的表達(dá);例如,ug=rwx,o=rx,或者您可以使用稍后提到的數(shù)字權(quán)限。

八進(jìn)制權(quán)限

目前為止,您都是使用符號(hào)(ugoa 和 rxw)來指定權(quán)限。每組中有三個(gè)可能的權(quán)限。您還可以使用八進(jìn)制取代符號(hào)設(shè)置權(quán)限。按這種方法設(shè)置的權(quán)限使用高達(dá) 4 位八進(jìn)制數(shù)字。討論屬性時(shí),我們會(huì)查看第 1 個(gè)數(shù)字。第 2 個(gè)數(shù)字定義了用戶權(quán)限,第 3 個(gè)是組權(quán)限,第 4 個(gè)是其他權(quán)限。這三個(gè)數(shù)字中的每一個(gè)都通過添加所需的權(quán)限設(shè)置來構(gòu)建:讀(4),寫(2)和執(zhí)行(1)。在 清單 5 中的 hello.sh 例子中,創(chuàng)建的腳本有權(quán)限 -rw-r--r--,相當(dāng)于八進(jìn)制 644。設(shè)置每個(gè)人的執(zhí)行權(quán)限將模式改為 755。

當(dāng)您想要一次設(shè)置所有權(quán)限,而不給予每個(gè)組相同權(quán)限時(shí),設(shè)置使用數(shù)字權(quán)限非常方便。使用 表 2 作為一個(gè)方便的八進(jìn)制權(quán)限參考。

表 2. 數(shù)字權(quán)限

符號(hào) 八進(jìn)制
rwx 7
rw- 6
r-x 5
r-- 4
-wx 3
-w- 2
--x 1
--- 0

suid 和 sgid

Linux 權(quán)限模型有兩個(gè)特殊的訪問模式,名為 suid(設(shè)置用戶 id)和 sgid(設(shè)置組 id)。當(dāng)可執(zhí)行的程序設(shè)置為 suid 訪問模式,它就會(huì)開始運(yùn)行,好像是由文件所有者啟動(dòng)而不是由真正啟動(dòng)它的用戶啟動(dòng)。類似的,設(shè)置為 sgid 訪問模式,程序就會(huì)運(yùn)行,好像啟動(dòng)用戶屬于文件組,而不屬于他所有的組??梢詥为?dú)或者同時(shí)設(shè)置兩個(gè)訪問模式。

清單 8 顯示了可執(zhí)行的 passwd 由 root 所有:

清單 8. /usr/bin/passwd 上的 suid 訪問模式

[ian@echidna ~]$ ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 34368 Apr 6 2010 /usr/bin/passwd

請(qǐng)注意,在用戶的權(quán)限三件套中 x 的位置上有一個(gè) s。這就表示,對(duì)這個(gè)特定的程序來說,suid 和可執(zhí)行位已經(jīng)被設(shè)置。所以,當(dāng) passwd 運(yùn)行時(shí),它就會(huì)像 root 用戶使用完全的 superuser 訪問一樣加載它運(yùn)行,而不是作為想運(yùn)行該程序的用戶。因?yàn)?passwd 和 root 訪問一起運(yùn)行,所以它可以修改 /etc/passwd。

suid 和 sgid 位與長(zhǎng)目錄清單中用戶和組的 x 占據(jù)相同的空間。如果文件是可執(zhí)行的,suid 或 sgid 位如果已設(shè)置,將會(huì)顯示為小寫的 s,否則就顯示為大寫的 S。

雖然 suid 和 sgid 很便利,甚至在很多環(huán)境下是必需的,但是這些訪問模式不適當(dāng)?shù)氖褂脮?huì)造成系統(tǒng)安全上的漏洞。您要盡量少地使用 suid 程序。passwd 命令是少數(shù) 必須 為 suid 的命令之一。#p#

設(shè)置 suid 和 sgid

suid 和 sgid 位使用字母 s 在符號(hào)上進(jìn)行設(shè)置和重設(shè);例如,u+s 設(shè)置 suid 訪問模式,g-s 刪除 sgid 模式。在八進(jìn)制格式中,suid 在第一位(高階)為值 4,而 sgid 是值 2。

目錄和 sgid

當(dāng)一個(gè)目錄使用 sgid 模式時(shí),在這個(gè)目錄中創(chuàng)建的任何文件和目錄將會(huì)繼承目錄的組 id。這個(gè)對(duì)那些被從事同一項(xiàng)目的一組人使用的目錄樹極為有用。 清單 9 顯示了用戶 greg 任何設(shè)置一個(gè) development 組所有用戶都能使用的目錄,以及一個(gè)示例,用戶 gretchen 如何在目錄上創(chuàng)建一個(gè)文件。正如所創(chuàng)建的,文件 gretchen.txt 允許組成員編輯文件,因此 gretchen 使用 chmod g-w 來取消組的寫功能。

清單 9. sgid 訪問模式和目錄

[greg@echidna ~]$ mkdir lpi101
[greg@echidna ~]$ chmod g+ws lpi101
[greg@echidna ~]$ ls -ld lpi101
drwxrwsr-x. 2 greg development 4096 Nov 30 13:30 lpi101/
[greg@echidna ~]$ su - gretchen
Password:
[gretchen@echidna ~]$ touch ~greg/lpi101/gretchen.txt
[gretchen@echidna ~]$ ls -l ~greg/lpi101/gretchen.txt
-rw-rw-r--. 1 gretchen development 0 Nov 30 14:12 home/greg/lpi101/gretchen.txt
[gretchen@echidna ~]$ chmod g-w ~greg/lpi101/gretchen.txt
[gretchen@echidna ~]$ ls -l ~greg/lpi101/gretchen.txt
-rw-r--r--. 1 gretchen development 0 Nov 30 14:12 /home/greg/lpi101/gretchen.txt

development 組的任何成員現(xiàn)在都能夠在用戶 greg 的 lpi101 目錄上創(chuàng)建文件了。正如 清單 10 所示,組的其他用戶不能升級(jí)文件 gretchen.txt。但是,他們有對(duì)目錄的寫權(quán)限,因此可以刪除文件。

清單 10. sgid 訪問模式和文件所有權(quán)

[gretchen@echidna ~]$ su - tom
Password:
[tom@echidna ~]$ echo "something" >> ~greg/lpi101/gretchen.txt
-bash: /home/greg/lpi101/gretchen.txt: Permission denied
[tom@echidna ~]$ rm ~greg/lpi101/gretchen.txt
rm: remove write-protected regular empty file `/home/greg/lpi101/gretchen.txt'? y
[tom@echidna ~]$ ls -l ~greg/lpi101/
total 0

粘貼位

您剛看到了任何有目錄寫權(quán)限的人如何刪除目錄中的文件。這對(duì)一個(gè)工作組項(xiàng)目是可接受的,但是對(duì)全球共享的文件空間,例如 /tmp 目錄,是不希望的。幸運(yùn)的是,有解決方案。

剩下的訪問模式為就稱為粘貼 位。用符號(hào)表示就是 t,用數(shù)字表示就是八進(jìn)制位的高階為 1。它顯示在其他用戶的可執(zhí)行標(biāo)識(shí)中(最后的字符)的長(zhǎng)目錄清單,而且 suid 和 sgid 的大小寫意義相同。如果設(shè)置一個(gè)目錄,它只允許有所有權(quán)的用戶或者 superuser(root)刪除或者解除文件鏈接。清單 11 顯示了用戶 greg 如何在他的 lpi101 目錄上設(shè)置粘貼位,還顯示了這個(gè)位設(shè)置用于 /tmp。

清單 11. 粘貼目錄

[greg@echidna ~]$ chmod +t lpi101
[greg@echidna ~]$ ls -ld lpi101 /tmp
drwxrwsr-t. 2 greg development 4096 Nov 30 14:16 lpi101
drwxrwxrwt. 24 root root 12288 Nov 30 14:22 /tmp

在以前,UNIX® 系統(tǒng)曾在文件上使用粘貼位在交換空間囤積可執(zhí)行文件,避免重新加載。現(xiàn)代 Linux 內(nèi)核忽略了粘貼位,如果它是設(shè)置給文件的。

訪問模式的總結(jié)

表 3 總結(jié)了這里討論的 3 種訪問模式的符號(hào)和八進(jìn)制表示。

表 3. 訪問模式

訪問模式 符號(hào) 八進(jìn)制
suids with  u  4000
sgids with  g 2000
sticky t 1000

將這些和早先的權(quán)限信息結(jié)合在一起,您可以看到對(duì)應(yīng) greg 的 lpi101 權(quán)限和 drwxrwsr-t 訪問模式的完整的八進(jìn)制表示是 3775。雖然 ls 命令不顯示八進(jìn)制權(quán)限,您可以使用 find 命令進(jìn)行顯示,如清單 12清單 12 所示。

清單 12. 可打印的符號(hào)和八進(jìn)制權(quán)限

[greg@echidna ~]$ find . -name lpi101 -printf "%M %m %f\n"
drwxrwsr-t 3775 lpi101

#p#

不可變文件

訪問模式和權(quán)限提供了廣泛的控制,限制了誰可以在文件和目錄上做什么。但是,它們對(duì)有些事情也不能避免,如 root 用戶對(duì)文件的無心刪除。雖然這不在 LPI Topic 104.5 的范圍內(nèi),但是在提供額外功能的文件系統(tǒng)上還是有些可用的附加屬性。其中之一就是不可變 屬性。設(shè)置完成后,即使是 root 用戶也不能刪除文件,直到屬性解除。

使用 lsattr 命令查看文件或者目錄是否設(shè)置了不可變標(biāo)識(shí)(或者任何其他屬性)。要將一個(gè)文件設(shè)置為不可變,使用 chattr 命令和 -i 標(biāo)識(shí)。

清單 13清單 13 顯示了用戶 root 可以創(chuàng)建一個(gè)不可變文件,但是不能刪除它,直到不可變標(biāo)識(shí)被刪除。

清單 13. 不可變文件

[root@echidna ~]# touch keep.me
[root@echidna ~]# chattr +i keep.me
[root@echidna ~]# lsattr keep.me
----i--------e- keep.me
[root@echidna ~]# rm -f keep.me
rm: cannot remove `keep.me': Operation not permitted
[root@echidna ~]# chattr -i keep.me
[root@echidna ~]# rm -f keep.me

變更不可變標(biāo)識(shí)需要 root 授權(quán),或者最少 CAP_LINUX_IMMUTABLE 功能。使文件不可變通常是安全或者入侵檢測(cè)工作的一部分。見功能使用頁(yè)面(man capabilities)了解更多信息。

文件創(chuàng)建屏蔽

創(chuàng)建一個(gè)新文件時(shí),創(chuàng)建進(jìn)程就會(huì)指明新文件的權(quán)限。通常,所需的模式是 0666,它使文件可由任何人讀和寫。目錄默認(rèn)為 0777。但是,這個(gè)寬松的創(chuàng)建會(huì)受到 umask 值的影響,這個(gè)值指明了用戶不想自動(dòng)授予新創(chuàng)建的文件或者目錄什么權(quán)限。系統(tǒng)使用 umask 值來減少原始請(qǐng)求的權(quán)限。您可以使用 umask 查看 umask 設(shè)置,如清單 14清單 14 所示。

清單 14. 顯示八進(jìn)制 umask

[ian@echidna ~]$ umask
0002

請(qǐng)記得,umask 指定了那個(gè)權(quán)限不被授予。在 Linux 系統(tǒng)上,用戶沒有專用組的的情況下,umask 通常默認(rèn)為 0022,它可以從新文件中刪除組和其他寫權(quán)限。用戶有專用組的情況下(例如這些例子中使用的在 Fedora 系統(tǒng)上),umask 通常默認(rèn)為 0002,它刪除了其他用戶的寫權(quán)限。使用 -S 選項(xiàng)來從符號(hào)上顯示 umask,以顯示哪個(gè)權(quán)限被允許的形式。

使用 umask 命令設(shè)置一個(gè) unmask 并顯示。所以,如果您想要保持文件更專有,并且不允許所有組或者其他人訪問新創(chuàng)建的文件,就是可以使用 umask 值 0077?;蛘邚姆?hào)上,使用 umask u=rwx,g=,o= 進(jìn)行設(shè)置,如清單 15清單 14 所示。

清單 15. 設(shè)置 umask

[ian@echidna ~]$ umask -S
u=rwx,g=rwx,o=rx
[ian@echidna ~]$ umask u=rwx,g=,o=
[ian@echidna ~]$ umask
0077
[ian@echidna ~]$ touch newfile
[ian@echidna ~]$ ls -l newfile
-rw-------. 1 ian ian 0 Nov 30 15:40 newfile

 

設(shè)置文件所有者和組

文件組

要變更文件的組,使用 chgrp 命令和組名,以及一個(gè)或者多個(gè)文件名。如果您喜歡,還可以使用組編號(hào)。普通用戶必須擁有文件,同時(shí)是文件要變更到的組的組員。root 用戶可以將文件變更到任意組。清單 16清單 16 顯示了一個(gè)例子。

清單 16. 變更組的所有權(quán)

[ian@echidna ~]$ touch file{1,2}
[ian@echidna ~]$ ls -l file*
-rw-rw-r--. 1 ian ian 0 Nov 30 15:54 file1
-rw-rw-r--. 1 ian ian 0 Nov 30 15:54 file2
[ian@echidna ~]$ chgrp development file1
[ian@echidna ~]$ chgrp 505 file2
[ian@echidna ~]$ ls -l file*
-rw-rw-r--. 1 ian development 0 Nov 30 15:54 file1
-rw-rw-r--. 1 ian development 0 Nov 30 15:54 file2

正如該教程中的許多其他命令,chgrp 有一個(gè) -R 選項(xiàng),允許將變更遞歸應(yīng)用到所有所選的的文件和子目錄中。

默認(rèn)組

當(dāng)您學(xué)習(xí)之前的 訪問模式 時(shí),您就了解了在目錄上設(shè)置 sgid 模式如何導(dǎo)致創(chuàng)建在該目錄下的新文件屬于目錄的組,而不是屬于創(chuàng)建該文件的用戶所在的組。

您還可以使用 newgrp 命令來暫時(shí)地將您的初級(jí)組變更到您所在的其他組。創(chuàng)建一個(gè)新的 shell,當(dāng)您退出 shell 時(shí),之前的組就能恢復(fù),如清單 17清單 17 所示。

清單 17. 使用 newgrp 來暫時(shí)改變默認(rèn)組

[ian@echidna ~]$ groups
ian development editor
[ian@echidna ~]$ newgrp development
[ian@echidna ~]$ groups
development ian editor
[ian@echidna ~]$ touch file3
[ian@echidna ~]$ ls -l file3
-rw-r--r--. 1 ian development 0 Nov 30 16:00 file3
[ian@echidna ~]$ exit
[ian@echidna ~]$ groups
ian development editor

文件所有者

root 用戶可以使用 chown 命令變更文件的所有權(quán)。在它最簡(jiǎn)單的形式中,語法和 chgrp 命令類似,除了使用用戶名或者數(shù)字 id,而不是組名或者 id。文件的組也可能通過在用戶名或者 id 之后添加一個(gè)冒號(hào)和組名或者 id 來同時(shí)變更。如果只有給出冒號(hào),那么就使用用戶的默認(rèn)組。一般來說,-R 選項(xiàng)會(huì)遞歸地應(yīng)用變更。清單 18清單 18 給出了一個(gè)例子。

清單 18. 使用 chown 變更文件所有權(quán)

[ian@echidna ~]$ touch file4
[ian@echidna ~]$ su -
Password:
[root@echidna ~]# ls -l ~ian/file4
-rw-rw-r--. 1 ian ian 0 Nov 30 16:04 /home/ian/file4
[root@echidna ~]# chown greg ~ian/file4
[root@echidna ~]# ls -l ~ian/file4
-rw-rw-r--. 1 greg ian 0 Nov 30 16:04 /home/ian/file4
[root@echidna ~]# chown tom:gretchen ~ian/file4
[root@echidna ~]# ls -l ~ian/file4
-rw-rw-r--. 1 tom gretchen 0 Nov 30 16:04 /home/ian/file4
[root@echidna ~]# chown :tom ~ian/file4
[root@echidna ~]# ls -l ~ian/file4
-rw-rw-r--. 1 tom tom 0 Nov 30 16:04 /home/ian/file4

指定用戶和組的較早版本使用點(diǎn),而不是冒號(hào)。因?yàn)楫?dāng)名稱中包含點(diǎn)時(shí),這個(gè)可能會(huì)造成誤解,所以已經(jīng)不再推薦。

Linux 上的文件和目錄權(quán)限介紹就到此為止。

【編輯推薦】

  1. Linux磁盤配額的設(shè)置與檢測(cè)
  2. 探析網(wǎng)絡(luò)文件系統(tǒng)的演化與發(fā)展
  3. Linux文件系統(tǒng)的安裝和卸載
責(zé)任編輯:黃丹 來源: IBMDW
相關(guān)推薦

2011-01-07 09:19:35

Linux文件權(quán)限

2022-11-03 15:14:43

Linux文件權(quán)限

2009-11-28 20:21:14

2024-03-19 14:43:55

Rust編譯所有權(quán)

2021-07-30 05:12:54

智能指針C++編程語言

2024-09-02 10:40:18

2017-07-27 13:34:52

Rust所有權(quán)數(shù)據(jù)

2020-09-09 09:19:00

SpringSecurity權(quán)限

2022-03-18 08:00:00

區(qū)塊鏈代幣以太坊

2024-01-10 09:26:52

Rust所有權(quán)編程

2009-09-11 08:41:59

Linux文件系統(tǒng)ACLs權(quán)限控制

2013-08-16 10:46:20

2022-05-30 00:19:13

元宇宙NFTWeb3

2010-08-19 09:24:41

iPhone

2022-08-11 10:42:58

Rust

2014-02-12 10:58:05

Linux文件夾文件權(quán)限

2010-12-20 10:42:59

Linux文件系統(tǒng)

2021-04-19 12:00:15

Linux命令chmod

2018-01-23 11:15:28

云計(jì)算數(shù)據(jù)平臺(tái)云平臺(tái)

2018-12-14 10:08:23

物聯(lián)網(wǎng)訂閱IOT
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)