Skip to content
On this page

Linux 的用戶和權限管理

🎫 教程内容于 2023-08-02 在以下平台驗證通過
✅ Ubuntu 22.04

在 Linux 中,用戶是可以訪問系統及其資源的個體。每個用戶都有一個唯一的用戶名和用戶 ID(UID),用於標識他們在系統中的身份。組是一組共享相同權限以訪問文件和目錄的用戶集合。權限是確定誰可以訪問文件或目錄以及他們可以對其執行什麼操作的規則。

Linux 使用一種由三種類型的權限組成的權限系統:讀取、寫入和執行。這些權限可以針對三種類型的用戶進行設置:文件或目錄的所有者、擁有該文件或目錄的組的成員以及系統上的所有其他用戶。

瞭解 Linux 中用戶、組和權限的工作原理對於管理對系統資源的訪問並確保系統安全至關重要。

用戶

識別當前用戶

要在Linux中識別當前用戶,可以使用whoami命令。該命令將在終端中顯示當前用戶的用戶名。

sh
> whoami
tinymemo

此外,您還可以檢查$USER環境變量的內容,它也會顯示當前用戶的用戶名。

sh
> echo $USER
tinymemo

用戶ID

Linux中的每個用戶都有一個唯一的用戶ID(UID),用於標識他們在系統中的身份。您可以使用id命令來顯示當前用戶的UID

sh
> id
uid=1000(tinymemo) gid=1000(tinymemo) groups=1000(tinymemo),4(adm),27(sudo),44(video),50(staff)

如您所見,當前用戶的UID是1000。您還可以使用-u選項僅顯示UID,或者使用id -u命令僅顯示UID

sh
> id -u
1000

> echo $UID
1000

用戶的UID在創建用戶時會自動生成。root用戶的UID始終爲0。

Linux系統上的所有用戶都存儲在/etc/passwd文件中。您可以使用cat命令來顯示此文件的內容。

sh
> cat /etc/passwd

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
...
tinymemo:x:1000:1000::/home/tinymemo:/bin/bash

/etc/passwd文件中每行的第二個和第三個字段分別是用戶的UID和GID。需要注意的是,用戶的UID與用戶的GID不同。用戶的GID是用戶所屬組的ID。我們將在下一節討論組。

創建新用戶

要在Linux中創建新用戶,可以使用adduser命令。該命令將使用指定的用戶名和UID創建一個新用戶。如果不指定UIDadduser命令將自動生成一個UID給新用戶。

sh
> sudo adduser newusername

正在添加用戶 `newusername' ...
正在添加新組 `newusername' (1000) ...
正在添加新用戶 `newusername' (1000) 到組 `newusername' ...
正在創建主目錄 `/home/newusername' ...
正在從 `/etc/skel' 複製文件 ...
新密碼:
重新輸入新密碼:
passwd:密碼已成功更新
正在更改 newusername 的用戶信息
輸入新值,或按 ENTER 保留默認值
	全名 []:
	房間號碼 []:
	工作電話 []:
	家庭電話 []:
	其他 []:
信息是否正確?[Y/n] y

運行adduser命令後,您將被提示爲新用戶設置密碼。您還可以使用passwd命令爲新用戶設置密碼。

sh
> sudo passwd newuser
新密碼:
重新輸入新密碼:
passwd:密碼已成功更新

如果在運行passwd命令時省略了用戶名,它將爲當前用戶設置密碼。

刪除用戶

要在Linux中刪除用戶,可以使用deluser命令。該命令將從系統中刪除指定的用戶。

sh
> sudo deluser newusername

正在刪除crontab ...
正在刪除用戶 `newuser' ...
完成。

用戶組

用戶組是共享對文件和目錄的訪問權限的用戶集合。每個組都有一個唯一的組ID(GID),用於標識它在系統中的身份。您可以使用id命令來顯示當前用戶的GID

sh
> id
uid=1000(tinymemo) gid=1000(tinymemo) groups=1000(tinymemo),4(adm),27(sudo),44(video),50(staff)

如您所見,當前用戶的GID1000。您還可以使用-g選項僅顯示GID,或者可以使用id -g命令僅顯示GID

將用戶添加到組

一個用戶可以是多個組的成員。要將用戶添加到組中,可以使用usermod命令。該命令將指定的用戶添加到指定的組中。

sh
> sudo usermod -a -G groupname username

-a選項告訴usermod命令將用戶追加到組中,而不是替換用戶當前的組。-G選項告訴usermod命令將用戶添加到指定的組中。

從組中移除用戶

要從組中移除用戶,可以使用 gpasswd 命令。該命令將從指定的組中移除指定的用戶。

sh
> sudo gpasswd -d 用戶名 組名

從組 tinkink 中移除用戶 newuser

檢查用戶所屬的組

要檢查用戶所屬的組,可以使用 groups 命令。該命令將顯示指定用戶所屬的組。

sh
> groups newuser

newuser : newuser tinkink

創建和刪除組

要在 Linux 中創建新組,可以使用 addgroup 命令。該命令將使用指定的組名和 GID 創建新組。如果不指定 GIDaddgroup 命令將自動生成一個 GID

sh
> sudo addgroup testgroup

sudo addgroup testgroup
正在添加組 `testgroup' (GID 1001) ...
完成。

要在 Linux 中刪除組,可以使用 delgroup 命令。該命令將從系統中刪除指定的組。

sh
> sudo delgroup testgroup

正在移除組 `testgroup' ...
完成。

權限

在理解用戶和組的漫長旅程之後,我們終於可以談論權限了。權限是確定以下內容的規則:

  • 誰可以訪問文件或目錄
  • 以及他們可以對其進行什麼操作

這些權限可以針對三種類型的用戶(誰)進行設置:

  • 文件或目錄的所有者
  • 擁有文件或目錄的組的成員
  • 系統上的所有其他用戶。

有三種類型的權限(可以做什麼):讀取寫入執行

因此,文件或目錄的權限可以針對三種類型的用戶(誰)和三種類型的權限(可以做什麼)進行設置。

檢查權限

要查看文件或目錄的權限,可以使用 ls -l 命令。該命令將顯示指定文件或目錄的權限。

sh
> ls -l

-rw-r--r-- 1 tinymemo tinymemo  0 Aug  1 16:00 file.txt
drwxr-xr-x 2 tinymemo tinymemo 40 Aug  1 16:00 directory
-rwxr-xr-x 1 tinymemo tinymemo  0 Aug  1 16:00 script.sh

ls -l 命令輸出的每行的第一個字符是文件類型。最常見的類型有:

  • - 表示普通文件
  • d 表示目錄

接下來的九個字符是文件或目錄的權限。前三個字符是文件或目錄的所有者的權限。接下來的三個字符是擁有文件或目錄的組的權限。最後三個字符是系統上所有其他用戶的權限。

每組三個字符的第一個字符是 讀取 權限。每組三個字符的第二個字符是 寫入 權限。每組三個字符的第三個字符是 執行 權限。

file.txt 爲例:

  • 前三個字符是 rw-,表示文件的所有者具有 讀取寫入 權限,但沒有 執行 權限。

  • 下面三個字符是 r--,表示文件的所有者所在的組(tinymemo 組)具有 讀取 權限,但沒有 寫入執行 權限。

  • 最後三個字符是 r--,表示系統上的所有其他用戶具有 讀取 權限,但沒有 寫入執行 權限。

更改權限

要更改文件或目錄的權限,可以使用 chmod 命令。該命令將更改指定文件或目錄的權限。以下是一些使用 chmod 命令的示例:

sh
> chmod +x file.txt
> chmod -x file.txt
> chmod u+x file.txt
> chmod g+x file.txt
> chmod o+x file.txt
> chmod 755 file.txt
> chmod 644 file.txt
> chmod 777 file.txt
> chmod 400 file.txt

權限的第一個語法是 [角色][操作符][權限]

  • 角色 可以是文件或目錄的所有者的 u,文件或目錄所屬組的 g,或系統上的所有其他用戶的 o(除了所有者和文件或目錄所屬組的用戶)。如果省略 角色,則適用於所有三個角色。
  • 操作符 可以是 + 添加權限,- 移除權限,或 = 設置權限。
  • 權限 可以是 r 表示 讀取w 表示 寫入,或 x 表示 執行

權限的第二種語法是由三個數字組成的,每個數字代表系統上的所有者、組和其他所有用戶的權限。例如,第一個數字代表所有者的權限,第二個數字代表組的權限,第三個數字代表其他所有用戶的權限。

每個數字的範圍是從07。實際上,它是一個三位二進制數。第一位表示讀取權限,第二位表示寫入權限,第三位表示執行權限。如果數字爲1,表示權限已設置。如果數字爲0,表示權限未設置。例如,7在二進制中表示爲111,表示所有三個權限都已設置。6在二進制中表示爲110,表示讀取寫入權限已設置,但執行權限未設置。

因此,如果我們想將文件的權限設置爲rw-r--r--,我們可以計算每個數字的二進制數:

  • rw-在二進制中表示爲110,在十進制中表示爲6
  • r--在二進制中表示爲100,在十進制中表示爲4
  • r--在二進制中表示爲100,在十進制中表示爲4

我們可以使用以下命令:

sh
> chmod 644 file.txt

更改所有權

要更改文件或目錄的所有權,可以使用 chown 命令。該命令將更改指定文件或目錄的所有權。以下是一些使用 chown 命令的示例:

sh
> chown tinymemo:tinymemo file.txt
> chown tinymemo: file.txt
> chown :tinymemo file.txt
> chown tinymemo file.txt

所有權的第一種語法是 [用戶]:[組]。您可以省略 [用戶][組],它將只更改您指定的部分。

您可以使用 -R 遞歸地更改目錄的所有權。

常見權限

以下是一些常見的權限:

  • 644 用於文件,也是文件的默認權限
  • 755 用於目錄,也是目錄的默認權限
  • 600400 用於敏感文件,例如 SSH 私鑰
  • 777 用於臨時文件,例如緩存文件,或者在開發、調試或測試時使用,強烈不建議在生產環境中使用此權限

你可能注意到 644755 之間的區別是文件或目錄的所有者是否具有 執行 權限。爲什麼目錄需要所有者的 執行 權限呢?這是因爲訪問目錄實際上是在 "執行" 目錄,這意味着你可以列出目錄中的文件和目錄。

最後的提示

以下是一些最後的提示:

首先,文件或目錄的權限也取決於其父目錄的權限。

例如,如果您沒有對目錄的執行權限,即使您對文件和目錄的讀取權限,也無法訪問該目錄中的文件和目錄。最常見的例子是home目錄,即使您對home目錄中的文件和目錄的讀取權限,也無法訪問其他用戶的home目錄。

因此,如果您想與其他用戶共享文件或目錄,最好將其放在所有用戶都具有執行權限的目錄中(home目錄之外),否則可能會遇到一些權限問題。

其次,SELinux也可能影響文件或目錄的權限。如果遇到某些權限問題,並且您絕對確定權限是正確的,可以嘗試禁用SELinux以查看是否有效。

最後但同樣重要的是,在設置權限時應始終使用最小權限原則。例如,如果您想與其他用戶共享文件,應僅授予他們讀取權限,而不是寫入權限。如果您正在運行一個Web服務器,應僅授予Web服務器讀取執行權限,而不是寫入權限。

總結

在本文中,我們學習了用戶、組和權限。我們學習瞭如何創建用戶和組,如何將用戶添加到組中,如何更改文件或目錄的所有權,以及如何更改文件或目錄的權限。希望您喜歡,下次見!