掌握Linux權限:深入研究Chmod和Chown

你是否曾经陷入了复杂的Linux权限世界中?如果你仍然想知道谁能读取、写入或执行什么,那么你来对地方了。解密Linux权限的复杂艺术,重点关注强大的二人组:chmodchown

在本教程中,你将掌握自信地控制文件和目录访问权限的技巧。

现在卷起袖子,像冠军一样征服Linux权限!

先决条件

在深入了解Linux权限之前,请确保你拥有一台Linux机器以掌握chmodchown命令。本教程使用Ubuntu 22.04 LTS(Jammy Jellyfish)。

掌握chmodchown命令

在Linux权限的领域中,chmodchown命令拥有重要的作用。了解如何有效使用这些命令对于任何Linux用户来说都至关重要,无论是初学者还是经验丰富的管理员。

这两个命令都提供了许多控制Linux系统的方法,但以下是它们各自的基本功能:

  • chmod – 这个命令是在Linux中管理文件和目录权限的关键,它允许你指定谁可以读取、写入和执行一个文件。通过使用符号和数字代码的组合,你可以授予或限制用户、组和其他人的访问权限。
  • chown – 使用此命令,您可以更改文件和目录的所有權。當您需要轉移管理控制權或更改文件與用戶/組之間的關聯時,此命令非常寶貴。

無論是保護敏感數據還是為團隊提供更簡化的訪問,這些命令都是您在 Linux 文件操作領域中可靠的伴侶。

繼續閱讀,深入了解這些命令的細微差別。

列出文件和查看權限

在使用 chmodchown 命令更改權限和所有權之前,首先要做的是列出文件並查看它們的權限。

就像在圖書館中查找書籍一樣,在 Linux 中,您經常需要查看文件列表以及它們的相關權限。這些知識對於有效的文件管理至關重要。

要查看文件或目錄的權限:

打開終端並執行以下 ls 命令,以長格式 (-l) 列出當前工作目錄中的所有文件和目錄

ls -l

長格式提供了有關每個文件或目錄的詳細信息,如下所示。

這些信息包括權限、鏈接數、所有者、組、大小和修改時間。但您現在的重點是文件權限。

Viewing a list of files and directories

三個關鍵權限管理每個檔案和目錄:讀取(r)、寫入(w)和執行(x)。每個權限都決定了使用者如何與每個檔案和目錄的內容進行交互。

此外,這些權限中的每一個都應用於三個不同的擁有者類別:擁有者、群組和其他人(既不是擁有者也不是群組成員的使用者)。

以下說明了檔案權限的每個部分:

  • 第一個字符表示一個檔案()或一個目錄(d)。
  • 第一部分(rw-) – 提供擁有者讀取和寫入權限,但不包括執行權限。
  • 第二部分(rw-) – 授予群組讀取和寫入權限,但不包括執行權限。
  • 最後一部分(r–) – 允許其他人讀取,但不允許寫入或執行。
Illustrating file permissions

通過chmod命令修改權限:符號模式

擴展對檔案權限的理解,深入研究修改權限的強大工具。想像著以精確的方式調整誰可以訪問、修改或執行一個檔案或目錄。chmod命令(更改模式)賦予您掌控Linux系統的權力。

當您需要以靈活而富有表達力的方式精確控制對檔案和目錄的訪問權限時,符號模式將派上用場。

要使用chmod命令通過符號模式修改權限,請按照以下步驟進行:

1. 執行以下who命令來創建一個新文件(>),名為user.txt,作為非特權用戶,其中包含您的Linux機器上當前已登錄的用戶列表。

此命令不會在終端上提供輸出,但您將在接下來的步驟中驗證文件的權限。

who > user.txt

2. 接下來,運行以下命令來查看user.txt文件的權限。

ls -l user.txt

下面,您可以看到文件的默認權限,所有者,創建的日期和月份,以及文件名。

請注意當前文件權限,因為您稍後將進行比較。現在您的焦點是用戶權限(rw-)。

Viewing the file’s default permissions

3. 現在,運行以下命令來刪除(-)所有者(u)的寫入(w)權限,保留其他類別的每個權限不變。

下表解釋了每個符號代表的含義:

User Symbol Details Operation Symbol Details Permission Symbol Details
u Owner + Add permissions r Read
g Group Remove permissions w Write
o Others = Set permissions explicitly x Execute

成功後,chmod命令在終端上不會輸出,這適用於本教程中的所有步驟。

chmod u-w user.txt

4. 更改權限後,運行以下命令來查看user.txt文件的權限。

ls -l user.txt

將步驟二中您記錄的文件權限(rw-)與下面的權限進行比較。請注意,所有者(u)現在僅具有讀取權限(r–)。

Viewing modified owner permission

5. 現在,執行以下每個命令以執行以下操作:

  • 對相同的user.txt文件給予擁有者(u)添加(+)、寫入(w)和執行(x)權限。
  • 查看user.txt文件的信息,以驗證修改的權限。
chmod u+wx user.txt
ls -l user.txt

如下所示,現在用戶對user.txt文件擁有讀取、寫入和執行權限(rwx)。

Viewing modified owner permissions

6. 與其添加,這次運行以下chmod命令來刪除(-)以下權限:

  • 擁有者(u)的執行(x)權限。
  • 群組(g)的寫入(w)權限。
  • 其他人(o)的所有權限(rwx)。

這個命令允許你以單個命令同時從不同類別中刪除權限。

這次,-v選項告訴chmod顯示有關操作所做更改的消息。

chmod -v u-x,g+w,o-rwx user.txt
Viewing modified permissions for owner, group, and others

7. 接下來,運行以下命令執行以下操作:

  • 對所有類別添加(+)讀取(r)權限。
  • 刪除所有(a)類別的寫入和執行(wx)權限。
chmod a+r,a-wx user.txt

8. 現在,執行以下命令查看user.txt文件的更新權限。

ls -l user.txt
Viewing updated permissions for all categories

? 或者,你可以使用以下命令修改所有三個類別(用戶、群組和其他人)的相同權限:

chmod ugo-r – 刪除 (-) 所有三個類別 (ugo) 的讀取權限 (r)。

chmod ugo+r – 添加 (+) 所有三個類別 (ugo) 的讀取權限 (r)。

9. 最後,執行以下命令執行以下操作:

  • chmod – 設置 (=) 所有者和組的讀寫權限 (rw),並刪除其他人的權限 (o=)。
    這個 = 符號讓您可以明確設置權限並覆蓋任何現有的權限。 如果在 = 符號之後沒有指定權限,則刪除該類別的所有權限。
  • ls – 查看您對 user.txt 文件權限所做的更改。
chmod ug=rw,o= user.txt
ls -l user.txt
Viewing the modified permissions set

使用 chmod 命令調整訪問權限:八進制模式

想像一下能夠迅速而準確地設置文件權限,而不需要符號表示法的複雜性。 八進制模式 (八進制表示法) 將成為您管理權限的新方法。

在八進制模式 (八進制表示法) 中,權限使用四位或三位數字表示,從 0 到 7。 每個數字對應於所有者、組和其他人的特定權限集,如下所示:

  • 讀取 (r) = 4
  • 寫入 (w) = 2
  • 執行 (x) = 1
  • 沒有權限 (-) = 0

為了了解八進制模式如何管理文件權限,請執行以下步驟:

1. 執行以下chmod命令,將以下權限(664)添加到user.txt文件:

  • 擁有者 – 讀取(4)+ 寫入(2)+ 執行(0)= 6
  • 組 – 讀取(4)+ 寫入(2)+ 執行(0)= 6
  • 其他人 – 讀取(4)+ 寫入(0)+ 執行(0)= 4

在Linux中使用chmod命令設置文件權限時,四位數字中的前一位數(最左邊)表示特殊權限,如setuid、setgid和黏著位。接下來的三個數字分別代表擁有者、組和其他人的標準權限。

但是,當使用三位數字時,第一位表示文件的擁有者(u)的權限,第二位表示文件的組(g)的權限,最後一位表示其他人(o)的權限。

在許多情況下,特別是當不涉及特殊權限時,您可能只會看到三位數字的表示法。前導零表示八進制表示法,可以被暗示並因此被省略。就像下面的例子中,您可以使用664而不是0664

chmod 664 user.txt

2. 接下來,運行以下命令查看user.txt文件的權限。

ls -l user.txt

在下面的輸出中,您可以看到為user.txt文件設置的權限以符號模式顯示,這相當於八進制模式中的664。

Viewing permissions modified via octal mode

3. 現在,運行下面的stat命令,查看有關user.txt文件的全面統計信息,包括符號和八進制模式中的權限。

stat user.txt

訪問屬性上,如下所示,您將看到與user.txt文件的文件權限相關的八進制和符號模式。

有了這些信息,您可以增強您對使用八進制模式調整權限的理解。

Viewing the octal and symbolic representations of permissions

使用chown命令更改文件所有權

儘管權限決定了對文件或目錄可以執行哪些操作,但您可以指定誰有權利設置或修改這些權限,方法是更改所有權。

chown命令(更改所有者)是管理文件和目錄所有權的主要命令。與chmod命令一樣,chown命令是一個僅限根用戶的命令 — 僅根用戶可以更改文件或目錄的所有權。

要使用chown命令管理所有權,請按照以下步驟進行:

1.運行以下命令創建一個名為bill的用戶(useradd),並提供一個強密碼。

您需要在本地機器上除了默認用戶(您)之外,還有多個用戶,以查看如何更改所有權的工作原理。

sudo useradd bill
sudo passwd bill
Adding a user and updating user password

2. 接下來,執行以下每個命令,將當前登錄的用戶列表(who)寫入一個名為new.txt的文件中,作為非特權用戶,並查看(ls)其所有者和權限。

who > new.txt
ls -l  new.txt

以下是輸出,顯示文件所有者是mercy

Viewing the owner of the new.txt file

3. 確認所有者後,運行以下chown命令來將new.txt文件的所有者更改為bill

chmod命令類似,chown命令不提供輸出,但您將在下一步驟中驗證所有者更改。

sudo chown bill new.txt

4. 現在,運行以下命令來查看(ls)new.txt文件的新所有者。

ls -l  new.txt

以下輸出確認您已成功將new.txt文件的所有者更改為bill,現在他對該文件具有控制和權限。

Viewing the new owner of the new.txt file

執行chown命令以修改組所有權

在Linux文件系統中,每個文件和目錄不僅與個別所有者相關,還與一個組相關聯。就像一個音不準的樂器可能會破壞整個合奏一樣,不正確的所有權可能會導致潛在問題。

您應該擔心嗎?實際上不用。組關聯允許以分層方式設置文件權限。該方法使多個用戶可以根據組成員資格進行協作並共享訪問權限。

修改組擁有權,請完成以下步驟:

1. 執行以下命令以查看與new.txt文件關聯的組。

ls -l  new.txt
Viewing the group associated with the new.txt file

2. 接下來,運行以下命令,它們不提供輸出,但執行以下操作:

  • 創建一個組(groupadd)名為developers
  • 更改new.txt文件的組(chown)擁有權為developers
sudo groupadd developers
sudo chown :developers new.txt

? 或者,可以使用以下命令之一,以遞歸方式更改文件或整個目錄的所有者和組擁有權。

sudo chown -R john:finance-group user.txt

sudo chown -R john:finance-group ~/Desktop

3. 現在,重新運行以下命令以查看(lsnew.txt文件的新組擁有權。

ls -l  new.txt

下面,輸出確認您已成功將new.txt文件的組擁有權更改為developers

Viewing the new group ownership of the new.txt file

通過數字 UID 和 GID 更改文件擁有權

儘管用戶名和組名提供了一種人類可讀的方式來識別文件所有者,但每個用戶和組也與唯一的數字標識符相關聯。

這些唯一的數字標識符是用戶 ID(UID)和組 ID(GID)。它們提供了一種明確的方式來在具有重疊或相似用戶和組名的環境中設置文件擁有權。

要使用數字 UID 和 GID 更改擁有權,請執行以下步驟:

1. 執行以下命令以列出有關new.txt文件的信息(ls)。

-n 選項告訴ls命令顯示數字型UID和GID,而不是解析為相應的用戶和組名。

ls -n new.txt

請注意與new.txt文件關聯的UID和GID,因為您將需要它們來在後續步驟中進行比較。

Viewing the UID and GID associated with the new.txt file

2. 接下來,運行以下getent命令以獲取您希望設置為文件所有權的用戶和組的UID和GID。

確保用您偏好的用戶名和組名替換<username><groupname>占位符。

getent passwd <username>
getent group <groupname>

注意以下輸出中的UID(即,1002)和GID(即,1005),因為您將需要它們來在下一步中更改所有權。

默認情況下,當在Linux中創建用戶時,將同名的組也創建為用戶。 這個組作為用戶的主要組,並自動添加到這個主要組中。

因此,用戶john的GID與finance組的GID不同。 除非明確將用戶添加到組中,否則它們的相應GID保持不同。

Viewing UID and GID for user john and group finance

3. 接下來,運行以下命令來更改new.txt文件的所有權和組所有權。 請確保用步驟二中注意到的UID(1002)和GID(1005)替換它們。

? 請注意,使用數字 UID 和 GID 可能比使用使用者名稱和群組名稱不夠可讀。因此,請確保您正在使用正確的數字,以避免意外變更。

sudo chown 1002:1005 new.txt

4. 最後,重新運行下面的命令以列出有關 new.txt 檔案的資訊(ls),並驗證檔案所有權的變更。

ls -n new.txt

將您在第一步中注意到的 UID 和 GID 與下面的數字進行比較。請注意,新檔案所有權已從 1001:1003 更改為 1002:1005

Verifying the new UID and GID for the new.txt file

結論

您剛剛開始全面探索 Linux 權限,掌握了關鍵命令,如 chmodchown。在本教程中,您已經熟練地使用符號模式和八進制模式修改了權限。

您還獲得了管理檔案所有權和群組分配的技能,無論是通過名稱還是通過數字 UID 和 GID。憑藉對 chmodchown 的新發現,您現在擁有強大的工具來管理 Linux 系統中的訪問和所有權。

但是,為什麼不進一步增強您的 Linux 熟練度呢?也許考慮深入研究高級訪問控制方法,包括 存取控制清單(ACL)?以實現對檔案和目錄權限的更精確控制!

Source:
https://adamtheautomator.com/chmod-and-chown/