UNIX 檔案許可權/存取模式


檔案所有權是UNIX的一個重要組成部分,提供了一個安全的方法,用於儲存檔案。 UNIX中的每個檔案具有以下屬性:

  • 所有者許可權: 所有者的許可權,確定所採取的操作檔案的擁有者可以執行檔案。

  • 組許可權: 該組的許可權確定哪些操作使用者,誰是一個檔案所屬的組的成員,可以執行該檔案。

  • 其它許可權: 別人的許可權表明什麼樣的操作,所有其他使用者可以執行該檔案。

許可權指示:

當用ls-l命令顯示各種資訊相關的檔案許可權如下:

$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

這裡第一列代表不同的存取模式,即關聯的許可權的檔案或目錄。

許可權被分成三組,每個組中的位置表示一個特定的許可權,這個順序:讀(r),寫(w),執行(x):

  • 前三個字元(2-4)表示檔案所有者的許可權。例如 -rwxr-xr--  代表讀(r),寫(w)和執行(x)許可。

  • 第二組的三個字元(5-7)由檔案所屬組的許可權。例如-rwxr-xr--代表該組讀(r)和執行(x)許可權,但沒有寫許可權。 

  • 最後一組的三個字元(8-10)表示其他的許可權。例如rwxr-XR - 代表其他只允許讀(r)

檔案存取模式:

一個檔案的許可權是一個Unix系統安全防禦的第一線。 Unix許可權的基本構建塊的讀,寫和執行許可權,??說明如下:

1. Read:

即閱讀,檢視該檔案的內容。

2. Write:

修改或刪除的檔案的內容。

3. Execute:

作為一個程式執行許可權的使用者可以執行一個檔案。

目錄存取方式:

目錄存取方式列出,像其他檔案中相同的方式組織。有一些差異,需要提及:

1. Read:

到一個目錄中的存取意味著使用者可以讀取內容。使用者可以看看目錄裡面的檔案名。

2. Write:

存取裝置,使用者可以新增或刪除的檔案的目錄的內容。

3. Execute:

執行目錄並沒有真正有很大的意義,認為這是一個遍歷許可權。

使用者必須擁有的bin目錄的執行許可權,以執行ls或cd命令。

更改許可權:

要改變檔案或目錄的許可權,使用chmod(其他模式)命令。有兩種方法使用chmod:符號模式和絕對模式。

使用chmod符號模式:

對於一個初學者,修改檔案或目錄的許可權最簡單的方法是使用符號模式。具有象徵性的許可權,可以新增,刪除,或使用下表中的操作符,想要指定的許可權集。

Chmod 操作符 描述
+ Adds the designated permission(s) to a file or directory.
- Removes the designated permission(s) from a file or directory.
= Sets the designated permission(s).

下面是一個例子,使用testfile的。執行ls -1 在 testfile將顯示檔案的許可權如下:

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

然後每個例子chmod命令從前面的表上執行,其次testfile將ls-l,可以看到許可權更改:

$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=r-x testfile
$ls -l testfile
-rw-r-xrwx  1 amrood   users 1024  Nov 2 00:10  testfile

這裡是如何將這些命令放在一行:

$chmod o+wx,u-x,g=r-x testfile
$ls -l testfile
-rw-r-xrwx  1 amrood   users 1024  Nov 2 00:10  testfile

使用chmod絕對許可權:

使用chmod命令修改許可權的第二種方法是使用一些指定每個組的檔案的許可權。

每個許可權分配一個值,按照下表中所示,每一組的總的許可權提供了許多用於該集合。

Number 八進位制許可權表示 Ref
0 No permission ---
1 Execute permission --x
2 Write permission -w-
3 Execute and write permission: 1 (execute) + 2 (write) = 3 -wx
4 Read permission r--
5 Read and execute permission: 4 (read) + 1 (execute) = 5 r-x
6 Read and write permission: 4 (read) + 2 (write) = 6 rw-
7 All permissions: 4 (read) + 2 (write) + 1 (execute) = 7 rwx

下面是一個例子,使用testfile。執行ls -1 在 testfile 將顯示檔案的許可權如下:

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

然後每個例子chmod命令從前面的表上執行,其次testfile將ls-l ,所以 可以看到許可權更改:

$ 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上建立一個帳戶,一個所有者分配給每個使用者的ID和組ID。上面提到的所有的許可權也被分配基礎上的所有者和組。

兩個命令都可以改變檔案的所有者和組:

  1. chown: chown命令代表“更改所有者”,是用來改變檔案所有者。

  2. chgrp: chgrp命令代表“更改組”,是用來改變檔案的組。

所有權變更:

chown命令更改檔案的所有權。基本語法如下:

$ chown user filelist

使用者的值可以是一個使用者在系統上的一個使用者在系統上的使用者ID(UID)的名稱。

下面的例子:

$ chown amrood testfile
$

更改給定的檔案的所有者使用者amrood。

注意:超級使用者root擁有不受限制的能力改變任何檔案的所有權,但普通使用者只能改變他們所擁有的檔案的所有者。

更改組所有權:

chrgp命令組檔案的所有權更改。基本語法如下:

$ chgrp group filelist

組的值可以是系統或組ID(GID)系統上的一組一組的名稱。

下面的例子:

$ chgrp special testfile
$

組給定的檔案更改特殊組。

SUID和SGID檔案許可權:

通常,當執行一個命令,它會以完成其任務,必須具有特殊許可權的執行。

作為一個例子,當用passwd命令更改您的密碼,新密碼儲存在檔案 /etc/shadow檔案。

作為一個普通使用者,沒有讀或寫存取此檔案出於安全原因,但是當改變你的密碼,需要寫這個檔案的??許可權。這意味著passwd程式給額外的許可權,這樣就可以寫入檔案/ etc / shadow中。

其他許可權的程式通過設定使用者ID(SUID)和設定組ID(SGID)位被稱為一種機制。

當執行一個程式,啟用了SUID位,繼承該程式的所有者的許可權。啟動程式的使用者的許可權執行程式沒有設定SUID位。

這才是真正為SGID。通常情況下,節目組許可權執行,而是您的組將被改變只是對這一計劃的程式的組所有者。

如果許可權SUID和SGID位會出現字母“s”。位於所有者的許可權位執行許可權通常會位於SUID位將被“S”。例如,命令

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

這表明了SUID位設定該命令是由root。大寫字母S在執行位置,而不是一個小寫字母s表示,沒有設定執行位。

如果黏位上啟用的目錄,檔案只能被刪除,如果是以下使用者:

  • 所有者黏性目錄

  • 所有者被刪除的檔案

  • 超級使用者root

要設定SUID和SGID位上的任何目錄嘗試以下操作:

$ chmod ug+s dirname
$ ls -l
drwsr-sr-x 2 root root  4096 Jun 19 06:45 dirname
$