本篇介紹如在 Linux 中使用 useradd 指令新增使用者帳號。

在 Linux 系統之下若要新增使用者帳號,做基本的方式就是使用 useradd 指令來新增帳號,以下是這個指令個用法教學以及常用的範例。


有些 Linux 發行版(例如 Ubuntu)則還會有一個 adduser 指令,這個指令是一個 Perl 指令稿,將新增使用者帳號的動作包裝起來,可讓管理者更容易使用,但其實它內部一樣是呼叫 useradd 指令來新增使用者。

由於 adduser 指令並不是每一種 Linux 發行版都有,像 CentOS 中的 adduser 指令只是一個指向 useradd 指令的連結而已,所以這裡我們還是以 useradd 的用法與範例為主。

在 Linux 系統上新增使用者的時候,通常要處理三件事情:

  • 編輯 /etc/passwd/etc/shadow/etc/group/etc/gshadow,新增使用者帳號的資訊。
  • 建立新使用者的家目錄。
  • 設定家目錄的權限。

這些動作通常都會直接使用 useradd 指令來統一處理(當然若要手動處理亦可)。

新增使用者

若要在系統上新增一個使用者帳號,只要執行 useradd 並指定使用者帳號的名稱即可:

# 新增使用者
sudo useradd gtwang

帳號在新增之後,會處於停用的狀態,必須使用 passwd 設定密碼之後,才能開始使用這個帳號:

# 設定密碼
sudo passwd gtwang

指定家目錄

在預設的狀況下,useradd 在新增使用者帳號時,會依照帳號名稱在 /home 之下建立使用者的家目錄,例如 gtwang 的預設家目錄就是 /home/gtwang

若要改變預設的家目錄,可以加上 -d 參數並指定家目錄的路徑:

# 指定家目錄
sudo useradd -d /data/gtwang gtwang

若要讓 useradd 在新增使用者時不要自動建立家目錄(通常用於某些有安全性考量的系統特殊帳號),可以加上 -M 參數:

# 不建立家目錄
sudo useradd -M gtwang

指定使用者 ID

每一位 Linux 系統上的使用者都有一個專屬的使用者 ID(UID),在新增使用者時,useradd 預設會自動以遞增的方式指定一個尚未被使用的 ID 給新的使用者,如果我們想要自行指定使用者的 ID,可以使用 -u 參數:

# 指定使用者 ID
sudo useradd -u 1500 gtwang

這樣就可以將 gtwang 這個新使用者的 ID 設定為 1500

指定群組

每一位 Linux 使用者都會有一個主要的群組,預設的狀況下 useradd 會自動新增一個跟帳號相同名稱的群組,並設定為該帳號主要的群組。

如果要將新的使用者加入既有的群組中,可以加上 -g 參數,並指定群組的名稱或群組 ID:

# 指定主要群組
sudo useradd -g team gtwang

這樣就會將 gtwang 這個新使用者的主要群組設定為 teamteam 這個群組必須事先建立好)。

除了主要的群組之外,每一位使用者也可以同時隸屬於其他多個不同的群組,如果要在新增使用者時,一起加入其群組內,可以加上 -G 參數,並以逗號分隔的方式指定每一個要加入的群組:

# 加入其他群組
sudo useradd -g team -G admin,developer,leader gtwang

這樣新增的 gtwang 帳號的主要群組是 team,同時也是 admindeveloperleader 三個群組的成員。

帳號使用期限

Linux 的使用者帳號可以設定使用期限,讓帳號過期之後就無法使用,若要在建立帳號時就設定使用期限,可以加上 -e 參數並指定使用的期限:

# 設定帳號使用期限
sudo useradd -e 2019-03-17 gtwang

這樣新增的 gtwang 帳號就只能使用到 2019 年 3 月 17 日,過了這個日期就無法再使用了。

若要查詢帳號的使用期限,可以使用 chage 指令:

# 查詢帳號使用期限
sudo chage -l gtwang

另一個會產生帳號停用的狀況就是密碼過期,-f 參數可以指定在密碼過期多少天之後,才真正停用帳號:

# 設定帳號使用期限
sudo useradd -f 45 gtwang

這樣就是設定當 gtwang 的密碼過期 45 天之後,就停用該帳號。

使用者姓名

新增使用者的時候,可以用 -c 參數加上帳號的註解說明文字,通常管理者都會填入使用者的真實姓名:

# 設定使用者真實姓名
sudo useradd -c "G. T. Wang" gtwang

指定登入 Shell

正常的 Linux 使用者帳號不需要特別更改登入的 shell,不過對於某些特殊的系統帳號來說,因為安全性的因素,我們不希望它可以像正常帳號依樣登入使用,這時候就可以更改預設的登入 shell。

若要更改預設的登入 shell,可以加上 -s 參數並指定 shell 的路徑:

# 指定登入 Shell
sudo useradd -s /sbin/nologin gtwang

nologin 是一個特殊的 shell,可以讓該帳號登入後立即登出,無法做任何事,大部分不允許登入的系統帳號都會將登入 shell 設定為 nologin

骨架目錄

所謂的骨架目錄(skeleton directory)就是一個家目錄的預設範本,裡面包含各種預設的設定檔或目錄(例如 .bashrc 這類的設定檔),在新增使用者並建立家目錄時,就會把骨架目錄中的所有檔案複製過來。

系統上預設的骨架目錄是 /etc/skel,若要更改骨架目錄,則可使用 -k 參數:

# 更改骨架目錄
sudo useradd -k /etc/custom.skel gtwang

這樣在建立 gtwang 的家目錄時,就會將 /etc/custom.skel 目錄中所有的檔案複製過來。

參考資料:TecmintDigitalOcean