04. 在 Ubuntu Server 上管理使用者和權限:完整指南

管理使用者、群組和權限是 Ubuntu Server 管理員的基礎工作之一。無論你是設定多使用者環境還是保護伺服器,了解如何建立、修改和管理使用者帳戶、群組和權限都至關重要。本指南深入介紹了使用者和權限管理,並附有真實範例、命令輸出和最佳實務。


上一篇文章:

01. Ubuntu Server 簡介 – SysOSX: AI & Cloud

02. 如何架設你的第一台 Ubuntu Server:初學者指南 – SysOSX: AI & Cloud

03. 掌握 Ubuntu Server 的 Linux 命令列




簡介

Ubuntu Server 是一個功能強大的平台,可用於託管應用程式、管理服務和實現多使用者環境。透過掌握使用者和權限管理,你可以保護伺服器、有效控制存取並防止未經授權的操作。本指南將涵蓋從基本的使用者帳戶建立到進階權限設定的全部內容,並附有詳細範例。


建立和管理使用者帳戶

建立使用者

要在 Ubuntu Server 上建立使用者帳戶,請使用adduser命令。此命令是互動式的,會提示你提供有關使用者的其他資訊。

範例命令:

sudo adduser john

範例輸出:

Adding user `john' ...
Adding new group `john' (1001) ...
Adding new user `john' (1001) with group `john' ...
Creating home directory `/home/john' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for john
Enter the new value, or press ENTER for the default
        Full Name []: John Doe
        Room Number []: 101
        Work Phone []: 555-1234
        Home Phone []: 555-5678
        Other []:
Is the information correct? [Y/n] Y

這會建立一個名為john的使用者,其主目錄位於/home/john,並為其指派唯一的使用者 ID(UID)。


修改使用者

usermod命令可用於修改使用者帳戶。例如,你可以變更使用者的主目錄、shell 或群組成員身分。

變更主目錄:

sudo usermod -d /home/new_john john
sudo mv /home/john /home/new_john

鎖定或解鎖使用者帳戶:

  • 鎖定帳戶:sudo passwd -l john
  • 解鎖帳戶:sudo passwd -u john

範例輸出(鎖定帳戶):

passwd: password expiry information changed.


刪除使用者

要刪除使用者,請使用deluser命令。你還可以刪除其主目錄和關聯檔案。

範例命令:

sudo deluser --remove-home john

範例輸出:

Looking for files to backup/remove ...
Removing files ...
Removing user `john' ...
Warning: group `john' has no more members.
Done.


管理群組

群組是組織使用者和指派集體權限的一種方式。每個使用者可以屬於多個群組。

建立和管理群組

要建立新群組,請使用addgroup命令。

範例命令:

sudo addgroup developers

範例輸出:

Adding group `developers' (GID 1002) ...
Done.

要刪除群組:

sudo delgroup developers

將使用者新增至群組

要將使用者新增至群組,請使用usermod命令的-aG選項。

範例命令:

sudo usermod -aG developers john

驗證群組成員身分:

groups john

範例輸出:

john : john developers

這表明john屬於以下群組:john和developers.


了解檔案和目錄權限

Linux 檔案權限對於控制對檔案和目錄的存取至關重要。權限針對以下三個類別定義:擁有者, 群組和其他人.

權限類型

每個類別有三種權限類型:

  • 讀取 (r):允許檢視檔案內容或列出目錄內容。
  • 寫入 (w):允許修改檔案內容或在目錄中建立/刪除檔案。
  • 執行 (x):允許執行可執行檔案或存取目錄。

範例:

使用ls -l檢視檔案權限:

ls -l /home/john

範例輸出:

-rw-r--r-- 1 john john 4096 Mar 21 14:00 file.txt

  • rw-:擁有者(john)擁有讀取和寫入權限。
  • r--:群組(john)擁有唯讀權限。
  • r--:其他人擁有唯讀權限。

變更權限

使用chmod命令修改權限。

範例命令:

  • 授予擁有者執行權限: chmod u+x file.txt
  • 刪除其他人的寫入權限:chmod o-w file.txt

使用數值:

權限也可以使用數值來設定:

chmod 755 file.txt:擁有者擁有全部權限,群組和其他人擁有讀取/執行權限。


了解數字權限(755、777、744)

Linux 權限可以用數字表示,其中每個數字對應一個特定的權限等級:

數字權限的結構:

每個數字權限由三個數字組成:

  • 第一個數字:擁有者的權限。
  • 第二個數字:群組的權限。
  • 第三個數字:其他人的權限。

每個數字根據以下值計算:

  • 4:讀取(r)
  • 2:寫入(w)
  • 1:執行(x)

這些值的總和決定了每個類別的權限等級。

常見的數字權限:

  1. 777:所有人擁有全部權限(讀取、寫入、執行)。
    • 擁有者:rwx
    • 群組:rwx
    • 其他人:rwx
    • 使用情境:出於安全原因很少使用,但可以套用於暫存目錄,例如/tmp.
  2. 755:擁有者擁有全部權限,群組和其他人擁有讀取和執行權限。
    • 擁有者:rwx
    • 群組:r-x
    • 其他人:r-x
    • 使用情境:常用於可執行檔案或目錄。
  3. 744:擁有者擁有全部權限,群組和其他人唯讀。
    • 擁有者:rwx
    • 群組:r--
    • 其他人:r--
    • 使用情境:常用於私人檔案。

範例:

要將權限設定為755以用於指令碼:

chmod 755 script.sh

範例輸出:

-rwxr-xr-x 1 john john 4096 Mar 21 14:00 script.sh

擁有權管理

使用chown命令來變更擁有權。

範例命令:

sudo chown john:developers file.txt

這會將擁有者設定為john,並將群組設定為developers.

範例輸出:

-rw-r--r-- 1 john developers 4096 Mar 21 14:00 file.txt


使用 Sudo 提升權限

sudo命令允許使用者以提升的權限執行命令。要授予使用者sudo存取權限,請將其新增至sudo群組。

範例命令:

sudo usermod -aG sudo john

驗證 Sudo 存取權限:

sudo -l -U john

範例輸出:

User john may run the following commands on this host:
    (ALL : ALL) ALL

保護使用者帳戶的最佳實務

  • 強制執行嚴格的密碼政策:
    使用passwd設定密碼過期時間: sudo passwd -e john
  • 限制 Sudo 存取權限:
    僅向受信任的使用者授予sudo權限。
  • 停用 Root 登入:
    編輯 SSH 設定檔:
sudo nano /etc/ssh/sshd_config 

設定:

PermitRootLogin no
  • 使用 SSH 金鑰進行驗證:
    用 SSH 金鑰取代以密碼為基礎的登入。
  • 監控使用者活動:
    使用last或who追蹤登入活動:
last

輸出說明

uadmin   pts/1   192.168.255.48   Fri Mar 21 13:55   still logged in
uadmin   pts/0   192.168.255.48   Fri Mar 21 13:54   still logged in
uadmin   pts/1   192.168.255.48   Fri Mar 21 01:49 - 08:19  (06:29)
uadmin   pts/0   192.168.255.48   Fri Mar 21 00:53 - 08:19  (07:26)
reboot   system boot   6.8.0-1021-azure   Fri Mar 21 00:22   still running


逐行分析

使用者登入:uadmin pts/1 192.168.255.48 Fri Mar 21 13:55 still logged in

  • uadmin:登入使用者的使用者名稱。
  • pts/1:登入使用的虛擬終端工作階段。虛擬終端(pts)是虛擬終端機,通常在使用者透過 SSH 登入時建立。
  • 192.168.255.48:使用者連線所用的遠端電腦的 IP 位址。
  • Fri Mar 21 13:55:使用者登入的日期和時間。
  • still logged in:表示使用者目前已登入且處於活動狀態。
欄含義
使用者名稱使用者或事件的名稱(uadmin, reboot).
終端機虛擬終端工作階段(pts/X)或系統事件(system boot).
遠端主機/IP發起連線的遠端電腦的 IP 位址或主機名稱。
登入日期/時間登入或事件開始的日期和時間。
登出時間工作階段結束的日期和時間(如適用)。
持續時間工作階段持續的總時間(如適用)。
工作階段狀態工作階段的目前狀態(still logged in, still running).

用於深入了解的其他命令

  • 顯示目前已登入的使用者: who
  • 範例輸出:
uadmin pts/1 2023-03-21 13:55 (192.168.255.48) 
uadmin pts/0 2023-03-21 13:54 (192.168.255.48)
  • 檢查系統執行時間: uptime
  • 範例輸出:
14:15:32 up 13:53, 2 users, load average: 0.10, 0.12, 0.15

結論

管理使用者、群組和權限是 Ubuntu Server 管理員的一項基本技能。透過掌握這些工作,你可以保護伺服器、防止未經授權的存取並提高營運效率。


下一篇教學:Ubuntu Server 網路基礎知識

在下一篇教學中,我們將介紹 Ubuntu Server 的網路基礎知識,包括設定網路介面、設定靜態 IP、疑難排解網路連線問題,以及使用 Ubuntu 的netplan處理網路工作。敬請期待可行的見解,以最佳化伺服器的網路設定。