介紹
Linux 根據 Unix 的文件所有權和權限概念定義,是一個多用戶操作系統,以在文件系統級別提供安全性。要可靠地管理雲服務器,您需要對所有權和權限的工作原理有相當的了解至關重要。處理文件所有權和權限有許多細節,但本教程將提供一個良好的入門介紹。
本教程將介紹如何查看和理解 Linux 的所有權和權限。如果您正在尋找一個關於如何修改權限的教程,您可以閱讀Linux 權限基礎知識和在 VPS 上使用 Umask 的方法。
先決條件
請確保您理解本系列先前教程中涵蓋的概念:
要跟隨這個教程,您需要訪問一個雲伺服器。您可以按照這個指南創建一個DigitalOcean的droplet。
關於使用者
如介紹中所述,Linux是一個多使用者系統。在理解所有權和權限之前,您應該先了解Linux使用者和群組的基本知識,因為它們是所有權和權限適用的實體。讓我們開始了解使用者是什麼。
在Linux中,有兩種類型的使用者:系統使用者和常規使用者。傳統上,系統使用者用於在系統上運行非交互式或後台進程,而常規使用者用於登錄並交互式運行進程。當您首次初始化並登錄到Linux系統時,您可能會注意到它開始時已經創建了許多系統使用者來運行作業系統依賴的服務。這是正常的。
您可以通過查看/etc/passwd
文件的內容來查看系統上的所有使用者。該文件中的每一行都包含有關單個使用者的信息,從其用戶名開始(冒號之前的名稱)。您可以使用cat
打印passwd
文件的內容:
Output…
sshd:x:109:65534::/run/sshd:/usr/sbin/nologin
landscape:x:110:115::/var/lib/landscape:/usr/sbin/nologin
pollinate:x:111:1::/var/cache/pollinate:/bin/false
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
lxd:x:998:100::/var/snap/lxd/common/lxd:/bin/false
vault:x:997:997::/home/vault:/bin/bash
stunnel4:x:112:119::/var/run/stunnel4:/usr/sbin/nologin
sammy:x:1001:1002::/home/sammy:/bin/sh
超级用户
除了两种用户类型之外,还有超级用户,或根用户,具有覆盖任何文件所有权和权限限制的能力。在实践中,这意味着超级用户有权访问服务器上的任何内容。此用户用于进行全系统更改。
还可以配置其他用户帐户以具有假定“超级用户权限”的能力。这通常被称为拥有sudo
,因为具有临时获得超级用户权限的权限的用户通过在管理级别命令之前使用sudo
来执行此操作。事实上,创建具有sudo
特权以执行系统管理任务的普通用户被认为是最佳实践。这样,您可以更保守地使用根用户帐户。
关于群组
群组是零个或多个用户的集合。用户属于默认群组,并且还可以是服务器上任何其他群组的成员。
您可以通过查看/etc/group
文件来查看系统上的所有群组及其成员,就像查看用户的/etc/passwd
文件一样。本文不涵盖群组管理。
現在你知道了使用者和群組是什麼,讓我們來談談檔案擁有者和權限吧!
查看擁有權和權限
在Linux中,每個檔案都有一個單一的使用者和一個單一的群組擁有,並且有它自己的訪問權限。讓我們來看看如何查看檔案的擁有權和權限。
查看檔案權限的最常見方法是使用帶有長列表選項-l
的ls
命令,例如:ls -l myfile
。如果你想查看當前目錄中所有檔案的權限,則運行不帶myfile
參數的命令,如下所示:
注意:如果你在一個空的家目錄中,而且你還沒有創建任何要查看的檔案,你可以通過運行以下命令來列出/etc
目錄的內容來跟隨進行:ls -l /etc
這是一個ls -l
輸出的示例截圖,其中標有每列輸出的標籤:
每個檔案列出其模式(包含權限)、擁有者、群組和名稱。為了幫助解釋所有那些字母和連字符代表什麼,讓我們將模式列分解為其組件。
理解模式
為了幫助解釋所有組合和字母的含義,以下是上述示例中第一個文件的模式元數據的分解:
文件類型
在Linux中,有兩種類型的文件:普通和特殊。文件類型由文件模式的第一個字符表示——在本指南中,這將被稱為“文件類型字段”。
通常文件的文件類型字段中有一個連字符(-
)。普通文件可以包含數據或其他任何東西。它們被稱為普通文件,以區分它們與特殊文件。
特殊文件的文件類型字段中有一個非連字符字符,例如字母,並且操作系統對其進行不同的處理。出現在文件類型字段中的字符指示了特定文件是何種特殊文件。例如,目錄,這是最常見的特殊文件之一,由出現在其文件類型字段中的d
字符識別(就像在上一個截圖中一樣)。還有幾種其他類型的特殊文件。
權限類別
從圖表中,您可以看到模式列顯示檔案類型,後面跟著三組權限,或者說三個類別:使用者(擁有者)、群組和其他。這些類別的順序在所有 Linux 系統上都是一致的。
這三個權限類別的運作方式如下:
- 使用者:檔案的擁有者屬於這個類別。
- 群組:檔案所屬群組的成員屬於這個類別。群組權限是在給定檔案上分配權限給多個使用者的有效方式。
- 其他:不屬於此檔案的使用者或群組類別的任何使用者都屬於這個類別。
閱讀符號權限
接下來需要注意的是那些由三個字符組成的集合。它們以符號形式表示每個類別對於給定檔案的權限。
在每個三元組中,讀取、寫入和執行權限的表示方式如下:
- 讀取:在第一個位置上用
r
表示 - 寫入:在第二個位置上用
w
表示 - 執行: 在第三個位置顯示為
x
。在某些特殊情況下,這裡可能會有不同的字符
A hyphen (-
) in the place of one of these characters indicates that the respective permission is not available for the respective class. For example, if the group (second) triad for a file is r--
, the file is “read-only” to the group that is associated with the file.
了解讀、寫、執行
既然您知道如何讀取文件的權限,您應該知道每個權限實際允許用戶做什麼。本教程將逐個介紹每個權限,但請記住,它們通常與其他權限結合使用,以便對文件和目錄進行有用的訪問。
以下是三種權限類型授予用戶的訪問的分解:
讀取
對於普通文件,讀取權限允許用戶查看文件的內容。
對於目錄,讀取權限允許用戶查看目錄中文件的名稱。
寫入
對於普通文件,寫入權限允許用戶修改和刪除文件。
對於目錄,寫入權限允許使用者刪除該目錄,修改其內容(在其中創建、刪除和重新命名文件),以及修改使用者具有寫入權限的文件的內容。
執行
對於普通文件,執行權限允許使用者執行(運行)一個文件 — 使用者必須同時具有讀取權限。在使用者運行它們之前,必須為可執行程序和shell腳本設置執行權限。
對於目錄,執行權限允許使用者訪問或進入(即cd
)並訪問目錄中文件的元數據(在ls -l
中列出的信息)。
模式(及權限)示例
現在已經知道如何讀取文件的模式,並理解每個權限的含義,您將看到一些常見模式的示例,並進行簡要解釋,以將概念融合在一起。
-rw-------
: 只有擁有者可以訪問的文件-rwxr-xr-x
: 在系統上每個使用者都可以執行的文件。一個“全域可執行”文件-rw-rw-rw-
: 在系統上每個使用者都可以修改的文件。一個“全域可寫”文件drwxr-xr-x
:系統上每個使用者都可以讀取和存取的目錄drwxrwx---
:由其擁有者和群組可修改(包括其內容)的目錄drwxr-x---
:由其群組可存取的目錄
檔案的擁有者通常享有最多的權限,相較於其他兩個類別。通常情況下,您會發現群組和其他類別僅擁有擁有者權限的子集(相等或更少)。這是有道理的,因為檔案應該只能由有特定原因需要它們的使用者存取。
還有一點要注意的是,儘管有許多權限組合是可能的,但在大多數情況下,只有某些組合是有意義的。例如,寫入或執行權限幾乎總是伴隨著讀取權限,因為很難修改,也無法執行,您無法讀取的內容。
結論
現在您應該對Linux中的所有權和權限如何工作有了良好的了解。要了解如何使用chown
、chgrp
和chmod
修改這些權限,請參考Linux 權限基礎知識以及在 VPS 上如何使用 Umask。
如果您想更深入了解Linux基础知识,請閱讀本系列的下一篇教程,《Linux I/O 重定向简介》。
Source:
https://www.digitalocean.com/community/tutorials/an-introduction-to-linux-permissions