Linux 文件權限:Windows 管理員的戰略指南

如果您已經管理了一段時間的 Windows,您可能有使用者帳戶管理、NTFS 檔案系統和設定權限的經驗。如果是這樣,請為使用 Linux 檔案權限預備自己吧!在 Linux 中,檔案系統是一個您必須學會的不同領域,以成為熟練的 Linux 管理員。

這是我們從 Windows 管理員角度學習 Linux 的四部分系列的第二部分!如果您還沒有閱讀,請務必閱讀 第一部分

與檔案系統一起工作

讓我們首先深入了解 Linux 如何透過檔案系統存儲和管理檔案。

注意:所有範例將使用 OpenSUSE Linux。

不再有驅動器字母

不像 Windows,可移動驅動器和其他設備在重新啟動時 不會 自動獲得驅動器字母並開啟。在 Windows 中,每個驅動器都會掛載為一個驅動器字母:C:\D:\,等等。在 Linux 中,驅動器字母是如何運作的呢?根本沒有!

在 Linux 中,有一個名為 root 的資料夾。此資料夾位於檔案系統的根目錄,簡單來說就是 /。第一個斜槓是系統中的其他所有檔案之前的第一個斜槓。這個斜槓有點像基本的 kind,但只有當其他驅動器字母 作為 C:\ 的子文件夾存在時才是如此。

根目錄是核心系統檔案所在的地方。其他所有東西,包括其他設備,都是這個中央文件夾的子文件夾。

Linux 模糊了目录与文件系统之间的界限。Linux 目录 /home 是所有用户“配置文件”根目录,类似于 Windows 中的 C:\Users 文件夹。在这种情况下,/home 是一个目录。但是,在 Linux 中,“目录”实际上不一定是目录,它们也可以是存储分区,甚至是完全不同的硬盘。这个概念类似于 Windows 挂载点

您可以在 这篇文章 中了解更多关于根目录的信息。

用户和主文件夹

如果您使用 OpenSUSE,您可能会在桌面上看到一个 Home 文件夹,如下所示。该文件夹是 Linux 版本的 C:\users\<username> 文件夹或“配置文件”。Linux 的“users”文件夹位于默认情况下安装磁盘的 /home 下。

在下面的示例中,用户被称为 homelab,其“配置文件”位于 /home/homelab。

Your own User (Home) Folder

在 Linux(和 Windows)中,主文件夹(或 Windows 中的用户配置文件)有一个用波浪线表示的缩写(~)。如果您看到类似于 "~/Documents/blah.txt,实际上是指您的 /home/<username>/Documents/blah.txt 文件。

在 Linux 中大小写是非常重要的。

Linux 中的所有內容都區分大小寫。這個概念與 Windows 完全相反,幾乎沒有什麼是區分大小寫的。

例如,如果你有一個名為 /home/homelab 的目錄,完全不同的目錄可以被命名為 /home/Homelab。這個概念也適用於命令。運行 cd /home/homelabCD /home/homelab 是不同的(後者應該失敗)。

作為一個 Windows 用戶,這個概念有一天會讓你犯錯。非常注意你的大小寫!你可以看到下面兩個獨立文件夾的例子。這兩者之間唯一的區別是大小寫:在 Windows 環境中,這是不可能的。

Being able to create two separate folders just by capitalization is not possible on Windows

使用者帳戶

像 Windows 一樣,Linux 也有使用者帳戶的概念,但它們的行為有些不同。首先,先將 Linux 使用者帳戶想成你熟悉的 Windows 使用者帳戶。

Windows 有一些內建的使用者帳戶,如 Administrator、隱藏的 SYSTEM 帳戶、Guest 等。Windows 還有各種內建的安全群組,如 AdministratorsGuests 等。

你可以通過運行 lusrmgr.msc MMC 擴展模組來查看所有 Windows 使用者和群組。

The Windows Local User Control Panel

Windows SID

為了唯一標識使用者和群組,Windows 使用 SID。在 Windows 中,你可以通過運行下面幾個 PowerShell 命令來找到每個使用者和群組的 SID。

Get-LocalUser | select name, sid
Get-LocalGroup | select name,sid
The list of users and groups on a Windows computer

每個Windows群組的SID在所有Windows電腦中都是相同的。Windows的內建使用者SID是唯一的。你在上面的截圖中看到的管理員SID應該在每台Windows電腦上都有所不同。未來在Windows中創建的任何使用者或群組都將是唯一的。注意下面的測試群組。如果你在自己的Windows電腦上創建一個測試群組,SID將會不同。

A new “test” group at the top has a unique SID

Linux使用者ID

在另一方面,Linux處理使用者和群組的方式與Windows相似,只是這次Linux不使用SID,而是使用使用者ID(UID)和群組ID(GID)。另外,與Windows不同的是,使用者和群組對於電腦來說是唯一的,但在所有電腦中並不唯一。這意味著你在電腦A上的UID可能與電腦B上的UID完全相同,即使它不是同一個使用者。

UID和GID都遵循一種簡單的數字慣例;每個UID和GUID都從0開始,並以1遞增,範圍從1-999用於內部系統帳戶,1000+用於自定義使用者帳戶。

內建的root使用者永遠都有0的UID和0的GID。同樣,像Windows隱藏的SYSTEM帳戶一樣,這個root帳戶通常(根據Linux發行版)被阻止登入。

內建的root使用者類似於Windows的SYSTEM和Administrator內建帳戶,兩者的功能都集合在一起。即使你正在作為Windows的管理員工作,仍然有一些內建的保護措施防止你完全破壞Windows。

根用戶,另一方面,是絕對權威。如果你故意切換到根用戶(你可以在命令行使用命令sudo su來做到這一點),並試圖刪除整個操作系統,根會高興地這樣做直到系統崩潰。

假設你創建了一個名為homelab的用戶。然後可以通過1000或homelab來引用homelab的UID。用戶將自動成為內部組users的成員,您可以使用組ID 100來引用該組。您可以通過運行getent passwd命令來查找這些映射的列表,如下所示:

running getent passwd inside the terminal

您還可以使用getent group命令查找組的相同信息。

running getent group inside the terminal

Linux文件權限

在Windows世界中,文件系統權限並不好玩。在NTFS中設置和管理權限有時可能會變成一個噩夢,涉及ACE、ACL、繼承、傳播等。幸運的是,在Linux文件系統中,權限要簡單得多。

在Linux中,您可以為文件分配三種類型的權利:讀取、寫入和執行,並分為三種訪問類別:所有者、組、其他人。

  • 所有者是擁有文件/文件夾的用戶。每個文件或文件夾都有一個指定的所有者。
  • 組是擁有文件/文件夾的組。這不一定是擁有者所屬的組。每個文件或文件夾只能屬於一個組。
  • 其他人是……嗯……其他人。這些人不是擁有組的一部分,也不是指定的所有者。

您可以允許或拒絕每個類別的每個選項。例如:您可以為擁有者提供讀取、寫入、執行的選項,並為群組和其他人提供讀取/執行的選項。您可以在下面的屏幕截圖中看到這一點。這意味著除了擁有文件夾的用戶之外,任何人都無法修改它。

就像在Windows資源管理器中一樣,在Ubuntu中,您可以通過以下步驟查看這些信息:

  1. 在您的桌面上打開“個人資料夾”。
  2. 導航到您要查看的文件/文件夾。
  3. 右鍵點擊文件/文件夾,然後點擊“屬性”。
  4. 點擊“權限”選項卡。
  5. 點擊“高級權限”。

進入“高級權限”對話框後,您可以以圖形方式查看分配給該文件或文件夾的所有權限。

Demonstration of the advanced permissions menu in OpenSUSE

下面是“高級權限”表的表示形式。

How the file permissions look visually

文件所有權

與Windows一樣,每個文件和文件夾都有一個所有者。在Windows中,您可以在GUI或通過”takeown”命令中取得文件的所有權。在Linux中,您可以通過在命令行上運行”chown : “來取得所有權。

與Windows類似,您通常需要管理權限才能使用sudo更改文件的所有權。sudo是Linux版本的Windows用戶帳戶控制(UAC)。您可以在命令前加上sudo,以使其作為管理員運行,而不是打開管理員命令行窗口。

讓我們創建一個僅由root擁有的文件夾來演示這些概念。

  1. 打開你的家目錄並導航到Documents
  2. 通過右鍵點擊 -> 操作 -> 在此處打開終端,然後運行以下命令:
sudo mkdir owned-by-root
sudo chmod 700 owned-by-root
Creating a root only folder

這個文件夾只對擁有者具有讀取/寫入/執行權限。因為你使用管理員權限創建了這個文件夾,所以目前的擁有者是root。

你還改變了權限,以確保僅有擁有者可以訪問。所屬組和其他用戶無法訪問這個文件夾。實際上,你會注意到這個文件夾上有一個大鎖,表示你無法訪問。

下面你可以看到如何接管這個文件夾。

  1. 在同一個文件夾中打開另一個終端(或使用已經打開的終端)
  2. 運行sudo chown homelab:users ./owned-by-root
Demonstration of the change ownership command in OpenSUSE

現在你擁有了這個文件夾的所有權,你還可以使用屬性窗口在資源管理器中更改文件權限。

File permissions inside the explorer GUI

你(通常)只需要更改所有權,而不是文件權限。Linux 在默認情況下對於文件權限是很了解的。如果在不了解影響的情況下進行’chmod’操作,你可能會把事情搞砸。

文件權限的數字表示法

如果你進行過任何 Linux 故障排除,你可能會看到網上有人使用數字方案解釋文件權限,你可以在下面的截圖中看到這一點:

The permissions menu, as viewed remotely from a Windows machine using WinSCP

Linux 使用數字的簡寫符號來表示訪問系統,例如 0600。第一個數字用於添加一些特殊屬性,但人們通常會忽略。實際上,大多數人只使用三位數的表示法,並忽略前面的第四位。

有關文件權限數字表示法的更多信息,請查看這篇文章

總結

這就是我們的《A Windows Guy in a Linux World》博客系列第二部分的內容!記得關注第三部分

Source:
https://adamtheautomator.com/linux-file-permissions/