本篇介紹如在 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
這個新使用者的主要群組設定為 team
(team
這個群組必須事先建立好)。
除了主要的群組之外,每一位使用者也可以同時隸屬於其他多個不同的群組,如果要在新增使用者時,一起加入其群組內,可以加上 -G
參數,並以逗號分隔的方式指定每一個要加入的群組:
# 加入其他群組 sudo useradd -g team -G admin,developer,leader gtwang
這樣新增的 gtwang
帳號的主要群組是 team
,同時也是 admin
、developer
、leader
三個群組的成員。
帳號使用期限
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
目錄中所有的檔案複製過來。
參考資料:Tecmint、DigitalOcean
chilin
嗨, 今天在 ubuntu server 16.04 版中使用 useradd 指令新增使用者後並沒有新增一個同使用者名稱的預設家目錄, 想請問一下這是 ubuntu 下的特殊例子嗎?