UNIX 文件權(quán)限

2018-08-12 22:11 更新

文件權(quán)限

文件所有權(quán)是 UNIX 的一個(gè)重要的組成部分,提供了一種安全的方法來存儲文件。在 UNIX 中每個(gè)文件有以下屬性:

  • 所有者權(quán)限:所有者的權(quán)限決定文件的所有者可以對文件執(zhí)行的操作。
  • 組權(quán)限:組權(quán)限決定了屬于該組的成員對他所擁有的文件能夠執(zhí)行的操作。
  • 其他人權(quán)限:其他人權(quán)限表示其他所有人對于該文件能夠進(jìn)行的操作。

權(quán)限表示符

當(dāng)使用 ls -l 命令的時(shí)候,會將與文件相關(guān)的各種權(quán)限展示出來,如下:

$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

輸出的第一列表示的是與文件或者目錄相關(guān)的訪問模式或者權(quán)限。

權(quán)限被分為三組,組中的每個(gè)位置代表一個(gè)特定的權(quán)限,這個(gè)順序是:讀(r)、寫(w)和執(zhí)行(x):

  • 前三個(gè)字符 (2-4) 表示文件的所有者的權(quán)限。例如 -rwxr-xr-- 代表,文件的所有者擁有讀 (r)、寫 (w) 和執(zhí)行 (x) 的權(quán)限。
  • 第二組的三個(gè)字符 (5-7) 包含了該文件所屬組的權(quán)限。例如 -rwxr-xr-- 表示了所屬組擁有讀 (r) 和執(zhí)行 (x) 的權(quán)限,但沒有寫權(quán)限。
  • 最后一組三個(gè)字符 (8-10) 代表其他人的權(quán)限。例如 -rwxr-xr-- 代表其他人只有讀 (r) 的權(quán)限。

文件訪問模式

文件的權(quán)限是 UNIX 系統(tǒng)安全性的第一道防線。UNIX 權(quán)限的基本組成部分是讀,寫,執(zhí)行權(quán)限,如下所述:

  1. 讀:分配對文件的內(nèi)容進(jìn)行讀取和查看文件的權(quán)限。
  2. 寫:分配對文件的內(nèi)容進(jìn)行修改或者刪除的權(quán)限。
  3. 執(zhí)行:允許用戶將該文件作為一個(gè)程序進(jìn)行執(zhí)行的權(quán)限。

目錄訪問模式

目錄訪問模式采用和其他文件用相同的方式組織。但是有一些差異,還是需要提到:

  1. 讀:訪問目錄意味著用戶可以讀取目錄下的內(nèi)容。用戶可以查看目錄內(nèi)的文件名。
  2. 寫:這個(gè)權(quán)限意味著用戶可以在目錄下面刪除或者新建文件。
  3. 執(zhí)行:執(zhí)行一個(gè)目錄并沒有真正的意義,因此將它當(dāng)作可以遍歷目錄的權(quán)限。

用戶為了執(zhí)行 ls 或者 cd 命令就必須先訪問了 bin 目錄。

改變權(quán)限

改變文件或目錄的權(quán)限,您可以使用 chmod(change mode)命令。有兩種方法可以使用 chmod:符號模式和絕對模式。

符號模式中使用 chmod

對于初學(xué)者來說使用符號模式是最簡單的來修改文件或目錄的權(quán)限方法??梢杂孟卤碇械姆杹硖砑?、刪除或指定你想要設(shè)置的權(quán)限。

Chmod 操作符 描述
+ 給文件或者目錄添加指定的權(quán)限。
- 刪除文件或者目錄的權(quán)限。
= 設(shè)置指定的權(quán)限。

如下是以 testfile 文件為示例。對 testfile 文件運(yùn)行 ls -l 就會像下面一樣顯示文件的權(quán)限:

$ls -l testfile
-rwxrwxr--  1 amrood   users 1024  Nov 2 00:10  testfile

接下來將前面表格中的 chmod 命令都對 testfile 運(yùn)行一下,下面的是在 ls -l 運(yùn)行之后,你可以看到文件權(quán)限的改變:

$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

chmod 命令中使用絕對權(quán)限

用chmod命令修改權(quán)限的第二種方法,是使用一個(gè)數(shù)字來指定文件的一些列權(quán)限。

每個(gè)權(quán)限被分配了一個(gè)數(shù)值,如下表所示, 并且給每個(gè)權(quán)限集的總和提供了一個(gè)數(shù)值。

數(shù)值 權(quán)限八進(jìn)制表示 參照
0 沒有權(quán)限 ---
1 可執(zhí)行的權(quán)限 --x
2 寫權(quán)限 -w-
3 執(zhí)行和寫權(quán)限: 1 (執(zhí)行) + 2 (寫) = 3 -wx
4 讀取權(quán)限 r--
5 讀取和執(zhí)行權(quán)限: 4 (讀取) + 1 (執(zhí)行) = 5 r-x
6 讀取和寫權(quán)限: 4 (讀) + 2 (寫) = 6 rw-
7 所有權(quán)限: 4 (讀) + 2 (寫) + 1 (執(zhí)行) = 7 rwx

如下是針對 testfile 文件的示例。運(yùn)行 ls -l 命令會顯示與該文件相關(guān)的權(quán)限如下:

$ls -l testfile
-rwxrwxr--  1 amrood   users 1024  Nov 2 00:10  testfile

對 testfile 運(yùn)行上面表格中每個(gè) chmod 示例命令,如下是在 ls -l 之后的,你可以從下面命令中看出權(quán)限的改變情況:

$ 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

改變所有者和所屬組

在 UNIX 上創(chuàng)建一個(gè)帳戶時(shí),系統(tǒng)會給每個(gè)用戶分配一個(gè)所有者 ID 和組 ID。所有上面提到的權(quán)限也會基于所有者和組進(jìn)行分配。

如下的兩個(gè)命令可以改變一個(gè)文件的所有者和組:

  1. chown:chown 表示的是 “change owner”,并且它是被用來改變一個(gè)文件的所有者。
  2. chgrp:chgrp 表示的是 “change group”,并且它是被用來一個(gè)文件所屬的組。

改變所有者關(guān)系

chown 命令用來改變一個(gè)文件的所有者,它的基本語法如下:

$ chown user filelist

上面命令中的 user 既可以是系統(tǒng)中的用戶名,也可以是系統(tǒng)中用戶的 id(uid)。 示例:

$ chown amrood testfile
$

改變 testfile 文件的所有者為 amrood 用戶。

注意:超級用戶,root 用戶,擁有不受限制的權(quán)限,能夠更改所有文件的所有者,但是普通用戶只能修改他們所擁有的文件的所有者。

改變組關(guān)系

chgrp 命令被用來修改文件所屬的組。基本語法如下:

$ chgrp group filelist

上面命令中的 group 既可以是系統(tǒng)中存在的組的名稱,也可以是系統(tǒng)中存在的組的 ID(GID)。

示例:

$ chgrp special testfile
$

改變給定的文件的組為 special 組。

SUID 和 SGID 文件權(quán)限

通常執(zhí)行一個(gè)命令時(shí),為了完成該任務(wù)它必須擁有某些特殊的權(quán)限。

舉一個(gè)例子,當(dāng)你使用 passwd 命令改變了你的密碼后,您的新密碼存儲在文件 /etc/shadow 中。

作為一個(gè)普通用戶,出于安全原因你沒有讀或?qū)懺L問這個(gè)文件的權(quán)限,但是當(dāng)你改變你的密碼時(shí),你需要擁有對這個(gè)文件寫權(quán)限。這意味著 passwd 程序必須給你額外的權(quán)限,以便您可以編寫文件 /etc/shadow,也就是需要額外的權(quán)限。

通過設(shè)置用戶 ID(SUID)和組 ID(SGID) 位可以給程序額外的權(quán)限。

當(dāng)您執(zhí)行一個(gè)啟用了 SUID 的程序,你繼承了程序所有者的權(quán)限。啟動改程序的用戶就可以不用設(shè)置 SUID 直接運(yùn)行該程序。

這對于 SGID 同樣是適用的。通常程序是按組的權(quán)限進(jìn)行執(zhí)行,除非你的組改變了該程序所屬組的擁有者。

如果 SUID 和 SGID 權(quán)限是可用的,它們將會以小寫的 “s” 出現(xiàn)。SUID 的 “s” 位通常位于權(quán)限中所有者執(zhí)行權(quán)限的旁邊。如下:

$ ls -l /usr/bin/passwd
-r-sr-xr-x  1   root   bin  19031 Feb 7 13:47  /usr/bin/passwd*
$

上面的顯示了 SUID 被設(shè)置了并且該命令被 root 用戶所擁有。在使用大寫字母 S 而不是小寫字母表示執(zhí)行位沒有設(shè)置。

如果對一個(gè)目錄設(shè)置了防刪除位(sticky bit),那么只有你是如下任意一種用戶時(shí)你才可以刪除該文件:

  • 該目錄的擁有者
  • 被刪除文件的擁有者
  • 超級用戶,root 用戶

你可以使用如下的方式設(shè)置任何目錄的 SUID 和 SGID 位。

$ chmod ug+s dirname
$ ls -l
drwsr-sr-x 2 root root  4096 Jun 19 06:45 dirname
$
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號