Linux 的用戶和權限管理
在 Linux 中,用戶是可以訪問系統及其資源的個體。每個用戶都有一個唯一的用戶名和用戶 ID(UID
),用於標識他們在系統中的身份。組是一組共享相同權限以訪問文件和目錄的用戶集合。權限是確定誰可以訪問文件或目錄以及他們可以對其執行什麼操作的規則。
Linux 使用一種由三種類型的權限組成的權限系統:讀取、寫入和執行。這些權限可以針對三種類型的用戶進行設置:文件或目錄的所有者、擁有該文件或目錄的組的成員以及系統上的所有其他用戶。
瞭解 Linux 中用戶、組和權限的工作原理對於管理對系統資源的訪問並確保系統安全至關重要。
用戶
識別當前用戶
要在Linux中識別當前用戶,可以使用whoami
命令。該命令將在終端中顯示當前用戶的用戶名。
> whoami
tinymemo
此外,您還可以檢查$USER
環境變量的內容,它也會顯示當前用戶的用戶名。
> echo $USER
tinymemo
用戶ID
Linux中的每個用戶都有一個唯一的用戶ID(UID
),用於標識他們在系統中的身份。您可以使用id
命令來顯示當前用戶的UID
。
> 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
。
> id -u
1000
> echo $UID
1000
用戶的UID
在創建用戶時會自動生成。root用戶的UID
始終爲0。
Linux系統上的所有用戶都存儲在/etc/passwd
文件中。您可以使用cat
命令來顯示此文件的內容。
> 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
創建一個新用戶。如果不指定UID
,adduser
命令將自動生成一個UID
給新用戶。
> sudo adduser newusername
正在添加用戶 `newusername' ...
正在添加新組 `newusername' (1000) ...
正在添加新用戶 `newusername' (1000) 到組 `newusername' ...
正在創建主目錄 `/home/newusername' ...
正在從 `/etc/skel' 複製文件 ...
新密碼:
重新輸入新密碼:
passwd:密碼已成功更新
正在更改 newusername 的用戶信息
輸入新值,或按 ENTER 保留默認值
全名 []:
房間號碼 []:
工作電話 []:
家庭電話 []:
其他 []:
信息是否正確?[Y/n] y
運行adduser
命令後,您將被提示爲新用戶設置密碼。您還可以使用passwd
命令爲新用戶設置密碼。
> sudo passwd newuser
新密碼:
重新輸入新密碼:
passwd:密碼已成功更新
如果在運行passwd
命令時省略了用戶名,它將爲當前用戶設置密碼。
刪除用戶
要在Linux中刪除用戶,可以使用deluser
命令。該命令將從系統中刪除指定的用戶。
> sudo deluser newusername
正在刪除crontab ...
正在刪除用戶 `newuser' ...
完成。
用戶組
用戶組是共享對文件和目錄的訪問權限的用戶集合。每個組都有一個唯一的組ID(GID
),用於標識它在系統中的身份。您可以使用id
命令來顯示當前用戶的GID
。
> id
uid=1000(tinymemo) gid=1000(tinymemo) groups=1000(tinymemo),4(adm),27(sudo),44(video),50(staff)
如您所見,當前用戶的GID
是1000
。您還可以使用-g
選項僅顯示GID
,或者可以使用id -g
命令僅顯示GID
。
將用戶添加到組
一個用戶可以是多個組的成員。要將用戶添加到組中,可以使用usermod
命令。該命令將指定的用戶添加到指定的組中。
> sudo usermod -a -G groupname username
-a
選項告訴usermod
命令將用戶追加到組中,而不是替換用戶當前的組。-G
選項告訴usermod
命令將用戶添加到指定的組中。
從組中移除用戶
要從組中移除用戶,可以使用 gpasswd
命令。該命令將從指定的組中移除指定的用戶。
> sudo gpasswd -d 用戶名 組名
從組 tinkink 中移除用戶 newuser
檢查用戶所屬的組
要檢查用戶所屬的組,可以使用 groups
命令。該命令將顯示指定用戶所屬的組。
> groups newuser
newuser : newuser tinkink
創建和刪除組
要在 Linux 中創建新組,可以使用 addgroup
命令。該命令將使用指定的組名和 GID
創建新組。如果不指定 GID
,addgroup
命令將自動生成一個 GID
。
> sudo addgroup testgroup
sudo addgroup testgroup
正在添加組 `testgroup' (GID 1001) ...
完成。
要在 Linux 中刪除組,可以使用 delgroup
命令。該命令將從系統中刪除指定的組。
> sudo delgroup testgroup
正在移除組 `testgroup' ...
完成。
權限
在理解用戶和組的漫長旅程之後,我們終於可以談論權限了。權限是確定以下內容的規則:
- 誰可以訪問文件或目錄
- 以及他們可以對其進行什麼操作
這些權限可以針對三種類型的用戶(誰)進行設置:
- 文件或目錄的所有者
- 擁有文件或目錄的組的成員
- 系統上的所有其他用戶。
有三種類型的權限(可以做什麼):讀取
,寫入
和執行
。
因此,文件或目錄的權限可以針對三種類型的用戶(誰)和三種類型的權限(可以做什麼)進行設置。
檢查權限
要查看文件或目錄的權限,可以使用 ls -l
命令。該命令將顯示指定文件或目錄的權限。
> 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
命令的示例:
> 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
表示執行
。
權限的第二種語法是由三個數字組成的,每個數字代表系統上的所有者、組和其他所有用戶的權限。例如,第一個數字代表所有者的權限,第二個數字代表組的權限,第三個數字代表其他所有用戶的權限。
每個數字的範圍是從0
到7
。實際上,它是一個三位二進制數。第一位表示讀取
權限,第二位表示寫入
權限,第三位表示執行
權限。如果數字爲1
,表示權限已設置。如果數字爲0
,表示權限未設置。例如,7
在二進制中表示爲111
,表示所有三個權限都已設置。6
在二進制中表示爲110
,表示讀取
和寫入
權限已設置,但執行
權限未設置。
因此,如果我們想將文件的權限設置爲rw-r--r--
,我們可以計算每個數字的二進制數:
rw-
在二進制中表示爲110
,在十進制中表示爲6
。r--
在二進制中表示爲100
,在十進制中表示爲4
。r--
在二進制中表示爲100
,在十進制中表示爲4
。
我們可以使用以下命令:
> chmod 644 file.txt
更改所有權
要更改文件或目錄的所有權,可以使用 chown
命令。該命令將更改指定文件或目錄的所有權。以下是一些使用 chown
命令的示例:
> chown tinymemo:tinymemo file.txt
> chown tinymemo: file.txt
> chown :tinymemo file.txt
> chown tinymemo file.txt
所有權的第一種語法是 [用戶]:[組]
。您可以省略 [用戶]
或 [組]
,它將只更改您指定的部分。
您可以使用 -R
遞歸地更改目錄的所有權。
常見權限
以下是一些常見的權限:
644
用於文件,也是文件的默認權限755
用於目錄,也是目錄的默認權限600
或400
用於敏感文件,例如 SSH 私鑰777
用於臨時文件,例如緩存文件,或者在開發、調試或測試時使用,強烈不建議在生產環境中使用此權限
你可能注意到 644
和 755
之間的區別是文件或目錄的所有者是否具有 執行
權限。爲什麼目錄需要所有者的 執行
權限呢?這是因爲訪問目錄實際上是在 "執行" 目錄,這意味着你可以列出目錄中的文件和目錄。
最後的提示
以下是一些最後的提示:
首先,文件或目錄的權限也取決於其父目錄的權限。
例如,如果您沒有對目錄的執行
權限,即使您對文件和目錄的讀取
權限,也無法訪問該目錄中的文件和目錄。最常見的例子是home
目錄,即使您對home目錄中的文件和目錄的讀取
權限,也無法訪問其他用戶的home目錄。
因此,如果您想與其他用戶共享文件或目錄,最好將其放在所有用戶都具有執行
權限的目錄中(home目錄之外),否則可能會遇到一些權限問題。
其次,SELinux
也可能影響文件或目錄的權限。如果遇到某些權限問題,並且您絕對確定權限是正確的,可以嘗試禁用SELinux
以查看是否有效。
最後但同樣重要的是,在設置權限時應始終使用最小權限原則。例如,如果您想與其他用戶共享文件,應僅授予他們讀取
權限,而不是寫入
權限。如果您正在運行一個Web服務器,應僅授予Web服務器讀取
和執行
權限,而不是寫入
權限。
總結
在本文中,我們學習了用戶、組和權限。我們學習瞭如何創建用戶和組,如何將用戶添加到組中,如何更改文件或目錄的所有權,以及如何更改文件或目錄的權限。希望您喜歡,下次見!