天天看點

useradd 指令的常見用法

在Linux系統中 useradd 是個很基本的指令,但是使用起來卻很不直覺。以至于在 Ubuntu 中居然添加了一個 adduser 指令來簡化添加使用者的操作。本文主要描述筆者在學習使用 useradd 指令時的一些測試結果。

說明:本文中的所有試驗都是在 Ubuntu14.04 上完成。

功能

在Linux中 useradd 指令用來建立或更新使用者資訊。

useradd 指令屬于比較難用的指令 (low level utility for adding users),是以 Debian 系的發行版中建議管理者使用 adduser 指令。其實 adduser 指令隻是一個調用了 useradd 指令的腳本檔案。

本文将詳細分析群組和家目錄相關的選項。并且以執行個體的方式介紹常用的 useradd 指令寫法。

文法和基本選項

注意:本文并不是一個完整的文檔,是以僅列出部分常用的選項進行說明。

useradd [option] username

[option]:

-d< 登入目錄> 指定使用者登入時的目錄。

-g< 群組> 初始群組。

-G< 群組> 非初始群組。

-m 自動建立使用者的家目錄。

-M 不要建立使用者的家目錄。

-N 不要建立以使用者名稱為名的群組。

-s 指定使用者登入後所使用的shell。

細說使用者組

首先我們要搞清楚,什麼是初始群組?簡單來說在 /etc/passwd 檔案中,每行的第四個字段指定的就是使用者的初始群組。使用者登入後立即就擁有了初始群組中的權限。

下面我們通過不同的指令來檢視群組選項的用法:

沒有使用任何群組相關的參數,預設在建立使用者 tester1 的同時會建立一個同名的群組。使用者 tester1 的初始群組就是這個建立的群組。

這次我們使用了 -N 選項,即不要生成與使用者同名的群組。檢視下 /etc/passwd 檔案,發現 tester2 使用者的初始群組ID是100。這個100是哪來的?有ID為100的群組嗎?其實100作為 -N 的預設值是寫在配置檔案中的。不管有沒有ID為100的群組,都是這個值。當然我們也可以通過修改配置檔案來改變這個預設值!

sudo 是一個非常有權勢的群組,我決定把 tester3 加入到這個群組。好,現在去檢視一下 /etc/passwd 和 /etc/group 檔案,看看有沒有新的群組被建立? tester3 的初始群組又是誰?這次沒有建立與 tester3 同名的群組。使用者 tester3 的初始群組變成了 sudo。

和上一條指令相比我們隻是把小寫的g替換成了大寫的G。但結果可相差太多了,請您一定要好好的檢查 /etc/passwd 和 /etc/group 檔案。因為這次不僅建立了群組 tester4,它還是使用者 tester4 的初始群組。和tester1 的唯一不同是 tester4 被加入了 sudo 群組。

在實際的使用中,tester3 和 tester4 的場景都是比較常見的,需要根據實際情況進行區分。

細說家目錄

Useradd指令對使用者家目錄的處理讓人困惑,下面我們将通過實驗來了解家目錄相關的不同選項的使用方法:

讓我們重新看看建立使用者 tester1 這條指令。它不會為使用者 tester1 建立名為 tester1 的目錄作為家目錄,但是我們打開 /etc/passwd 檔案,發現 tester1 的記錄中居然包含了家目錄 /home/tester1。

tester1:x:1005:1005::/home/tester1:

這讓人不可思議,但這條指令确實是這麼實作的。

若要在建立使用者的同時建立使用者的家目錄,必須指定 -m 選項。

我們希望自己指定家目錄,此時不生成目錄 abc

此時生成目錄 abcd,并且目錄下預設存在檔案

常見用例

Case 1: 建立一個帶有家目錄并且可以登入 bash 的使用者

Case 2: 指定建立使用者家目錄的路徑

/home/xxx目錄會被建立。

Case 3: 建立一個沒有家目錄且不能登入的使用者

Case 4: 建立時把使用者加入不同的使用者組

注意過個組名使用逗号分隔,不能有空格。