iT邦幫忙

2023 iThome 鐵人賽

DAY 8
0

帳號管理

在這個章節中的練習,需要使用 root 身份做設定,使用下列方式將身份轉為 root

student$ sudo su -

取得帳號資訊

新增帳號之前,我們可以先檢查目標帳號是不是已經存在,使用 id 指令就可以把該帳號的基本資訊列出來。

這些資訊包含了:

  • 帳號名稱
  • 主要群組 (每個帳號只能對應一個主要群組內)
  • 次要群組 (每個帳號可以對應多個次要群組)

以下為 id 指令的示範輸出:

root# id root
uid=0(root) gid=0(root) groups=0(root)

以上輸出代表者,root 帳號的 UID 為 0,主要群組為同名的 root,沒有次要群組。

我們可以從 id 輸出的資訊中瞭解,一個帳號只能有一個主要群組,但可以有多個次要群組。這也很符合我們企業中的組成,一個員工編列於在某個部門下成員,但因為業務關係可能同時也是其它部門的合作者。所以瞭解一個帳號所在的群組也能夠反推出該使用者的權限有哪些。

建立帳號

當我們知道如何取得帳號資訊後,可以開始在系統中建立新的帳號。在大多數的 Linux 發行版上可以使用 useradd 來建立新的帳號,建立帳號同時也可以設定使用者的家目錄、群組或顯示名稱等資訊。

以下為建立帳號的流程:

  1. 確認要建立的帳號不存在

    root# id user1
    id: ‘user1’: no such user
    
  2. 建立使用者

    root# useradd user1
    
  3. 確認要建立的帳號資訊

    root# id user1
    uid=1000(user1) gid=1000(user1) groups=1000(user1)
    

現在,我們已經在系統上建立一個 user1 帳號了,在不設定其它的參數的情況下,系統會自動產生一個同名的群組(user1),並把該帳號加入到群組中。

當然也會自動產生使用者家目錄,位於 /home/user1,查看結果如下所示:

root# ls -l /home
total 0
drwx------. 2 user1 user1 62 Feb 12 08:21 user1

修改帳號資訊

很多時候我們必需為使用者帳號進行必要的調整,大部份原因不外乎人員變動等因素。使用 usermod 指令可以修改已存在帳號的資訊。

以下列舉可能發生的應用:

  • 使用者留職停薪

    這種情況會發生 2 個事件,第 1 為帳號鎖定使其無法使用,第 2 為該使用者回到工作崗位後把帳號啟用,其做法如下:

    停用帳號:

    root# usermod -L user1
    

    啟用帳號:

    root# usermod -U user1
    
  • 使用者調職其它部門

    若有一個員工原本在行政部份,調職到人力資源部(hr),其做法如下:

    root# usermod -g hr user1
    

    檢查 user1 帳號資訊:

    root# id user1
    uid=1000(user1) gid=1002(hr) groups=1002(hr)
    

    這個案例要先建立 hr 群組,可以參考 群組管理 一節。

設定密碼

一個新的帳號建立後,是無法登入使用的,必須為它設定密碼才能夠經由登入方式進入系統。在 Linux 中設定密碼的方式是使用 passwd 指令。

passwd 指令在執行密碼修改時,有幾項要注意的地方:

  • 一般使用者只能修改自己的密碼
  • root 帳號可以修改自己和其它帳號的密碼
  • 一般使用者修改密碼時如果不符密碼原則,則會修改失敗
  • root 帳號修改密碼時如果不符密碼原則,仍會修改成功

以下示範使用 root 修改自己與其它帳號密碼:

  • 修改 root 自己的密碼

    root# passwd root
    Changing password for user root.
    New password: 
    Retype new password: 
    passwd: all authentication tokens updated successfully.
    
  • 修改 user1 自己的密碼

    root# passwd user1
    Changing password for user user1.
    New password: <-這裡的輸入不會有任何字元顯示
    BAD PASSWORD: The password is shorter than 8 characters
    Retype new password: <-這裡的輸入不會有任何字元顯示
    passwd: all authentication tokens updated successfully.
    

    以上的流程我們可以發現,使用 root 帳號設定密碼,就算不符密碼原則,仍然可以強制設定。

密碼有效期限

設定密碼的有效期限,能夠減低系統帳號被攻破的風險,在 Linux 中可以使用 chage 指令來處理這個事項。

以下示範較常用的幾個案例來說明:

  1. 列出帳號 user1 的密碼政策

    root# chage -l user1
    Last password change					: Sep 12, 2023
    Password expires					: never
    Password inactive					: never
    Account expires						: never
    Minimum number of days between password change		: 0
    Maximum number of days between password change		: 99999
    Number of days of warning before password expires	: 7
    
  2. 設定 user1 有效期限為 90 日

    root# chage -M 90 user1
    

    設定完成後,檢查結果如下:

    root# chage -l user1
    Last password change                              : Sep 12, 2023
    Password expires                                  : Dec 11, 2023
    Password inactive                                 : never
    Account expires                                   : never
    Minimum number of days between password change    : 0
    Maximum number of days between password change    : 90
    Number of days of warning before password expires : 7
    
  3. 設定 user1 的密碼設定後,至少要在 2 日後才能再次更改

    root# chage -m 2 user1
    

    設定完成後,檢查結果如下:

    root# chage -l user1
    Last password change                              : Sep 12, 2023
    Password expires                                  : Dec 11, 2023
    Password inactive                                 : never
    Account expires                                   : never
    Minimum number of days between password change    : 2
    Maximum number of days between password change    : 90
    Number of days of warning before password expires : 7
    

移除帳號

隨著系統使用者的變動,有了新增帳號就會有移除帳號的需求,這是帳號生命週期的循環作業。

我們使用了 useradd 新增帳號後,可以使用 userdel 來刪除系統使用者。定期清除不需要的系統帳戶也能夠增進系統安全性,以避免被有心人事利用。

由於使用 userdel 刪除帳號時,系統不會刪掉該用戶的個人資料 (如家目錄),因此在完全清除的需求下,我們需加入 -r 參數讓該帳號刪除。

root# userdel -r user1

群組管理

:::info
在這個章節中的練習,需要使用 root 身份做設定,使用下列方式將身份轉為 root

student$ sudo su -

:::

在 Linux 系統中,/etc/group 用來記載系統的群組資訊,/etc/group 檔案是一個文字檔案,內容和 /etc/passwd 一樣使用冒號作為分隔符號,每一個欄位的用意如下:

第 1 欄 第 2 欄 第 3 欄 第 4 欄
群組名稱 群組密碼,現已不用 群組號(GID) 群組成員

在先前的章節中可以知道,每一個帳號都必須存在於一個主要群組主。在這個章節可以瞭解到同一個帳號也可以同時存在於多個群組中。

同一帳號只能在一個主要群組,但可在多個次要群組

就如同在企業裡的跨部門協作一樣,每個人都在自己的主要部門中,因此專案的需求需要跨部門合作,所以會產生一個專案群組,將相關的人加在一起,如此被加入的帳號就會有一個主要群組和多個次要群組的組合。

新增群組

使用 groupadd 可以新增新的群組,已經存在的群組系統會發出警告並忽略,若不存在則會建立。

groupadd 會在 /etc/group 檔案中新增一筆群組名稱,並且配置一個群組 ID。

透過下列的操作,可以新增一個群組:

  1. 新增 grp1

    root# groupadd grp1
    
  2. 查看 grp1/etc/group 檔案的內容。

    root# grep grp1 /etc/group
    
  3. 使用 第 1 與 2 步方式,新增 grp2 群組並檢查其內容。

刪除群組

groupdel 是用來刪除群組的工具,在刪除群組時指令會有下列幾個情境:

  1. 指定的群組不可以是某個帳號的主要群組,否則不可以刪除。
  2. 若該群組名是一個或多個帳號的次要群組,則這些帳號會自動從群組中去除。
  3. 若目錄或檔案有指定該群組權限,則這些物件的群組名稱會不見,改顯示為 Group ID。

我們新增一個 user2 的帳號,將它的主要群組設定為 grp2

root# useradd -g grp2 user2

接著,試著刪除 grp2 群組,結果會失敗:

root# groupdel grp2
FAIL!

若要刪除 grp2,那麼就不能有帳號的主要群組設定為 grp2,因此現在把 user2 刪除,就可以刪掉 grp2 了。

root# userdel -r user2
root# groupdel grp2

因為 grp1 沒有任何帳號設定為主要群組,所以可以順利刪除。

root# groupdel grp1

異動群組成員

gpasswd 是一個用於管理 Linux 系統群組的命令行工具。它允許系統管理員對群組成員進行修改和管理。下面是一些 gpasswd 的主要用途和用法:

用法與案例

在這個例子中,我們將建立 staff 群組,並且把 user1user2 加進來,辨識結果後再把這些帳號移出 staff,最後再把 staff 刪除,完成一個完整群組生命週期。

  1. 建立群組:

    root# groupadd staff
    
  2. 加入 user1user2

    root# gpasswd -a user1 staff
    root# gpasswd -a user2 staff
    
  3. 檢查帳號與群組關係

    root# id user1
    root# id user2
    
  4. 刪除群組成員:

    root# gpasswd -d user1 staff
    root# gpasswd -d user2 staff
    
  5. 移除 staff

    root# groupdel staff
    

上一篇
Day 7: 群組與帳號相關檔案
下一篇
Day 9: 切換特權帳號
系列文
Linux 升華:初學者的探索到專家的洞察30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言