在這個章節中的練習,需要使用 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
來建立新的帳號,建立帳號同時也可以設定使用者的家目錄、群組或顯示名稱等資訊。
以下為建立帳號的流程:
確認要建立的帳號不存在
root# id user1
id: ‘user1’: no such user
建立使用者
root# useradd user1
確認要建立的帳號資訊
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
指令來處理這個事項。
以下示範較常用的幾個案例來說明:
列出帳號 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
設定 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
設定 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。
透過下列的操作,可以新增一個群組:
新增 grp1
。
root# groupadd grp1
查看 grp1
在 /etc/group
檔案的內容。
root# grep grp1 /etc/group
使用 第 1 與 2 步方式,新增 grp2
群組並檢查其內容。
groupdel
是用來刪除群組的工具,在刪除群組時指令會有下列幾個情境:
我們新增一個 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
群組,並且把 user1
與 user2
加進來,辨識結果後再把這些帳號移出 staff
,最後再把 staff
刪除,完成一個完整群組生命週期。
建立群組:
root# groupadd staff
加入 user1
與 user2
root# gpasswd -a user1 staff
root# gpasswd -a user2 staff
檢查帳號與群組關係
root# id user1
root# id user2
刪除群組成員:
root# gpasswd -d user1 staff
root# gpasswd -d user2 staff
移除 staff
root# groupdel staff