01.06 Linux useradd 命令介紹

Linux useradd 命令介紹

使用 useradd 命令來添加用戶(並且根據需要修改賬號)。-- Alan Formy-duval(作者)


任何計算機系統中,添加用戶都是最重要的事之一;本文著重介紹如何在 Linux 系統中添加用戶。

正式開始之前,我先提三個概念。首先,跟大多數操作系統一樣,Linux 用戶也需要一個賬號才能登錄。本文只介紹本地賬號,不涉及網絡賬號,如 LDAP。其次,每個賬號都有一個名字(username)和一個對應的數字(用戶 ID)。最後,每個用戶通常都在一個組內,每個組都有一個名字和一個組 ID。

你可能已經想到了,Linux 提供了添加用戶的命令行工具,就是 useradd 命令。有些版本也叫 adduser。為了方便使用,很多發行版上這個命令是一個指向 useradd 命令的符號鏈接。

<code>$ file `which adduser`
/usr/sbin/adduser: symbolic link to useradd/<code>

來看一下 useradd。

注意:本文描述的默認環境是 Red Hat Enterprise Linux 8.0。你可能會發現本文描述的這些文件和某些默認值與某些 Linux 發行版或其他 Unix 操作系統(FreeBSD 或 Solaris)偶爾會有差異。

默認處理

useradd 的基本用法相當簡單:提供一個用戶名就可以添加一個用戶。

<code>$ sudo useradd sonny/<code>

在本例中,useradd 命令創建了一個名為 sonny 的賬號。此命令同時創建了一個同名的組,sonny 被放進了這個組,這個組也是 sonny 賬號的主組。命令執行時,根據配置文件 /etc/default/useradd 和 /etc/login.defs 中的不同設置,也會有其他的參數,如語言和 shell。對於一個私人系統或微小的單服務商業環境,這些參數已經足夠了。

上面兩個文件控制 useradd 的處理,用戶的信息保存在 /etc 目錄下的一些其他文件中,關於這些信息的講解會貫穿全文。


Linux useradd 命令介紹


自定義處理

當管理員需要更好地控制賬號時,可以使用命令行來自定義,如指定一個用戶的 ID。

用戶和組 ID

默認情況下,useradd 試圖使用相同的用戶 ID(UID)和主組 ID(GID),但也不完全是。雖然 UID 與 GID 相同不是必須的,但如果相同,會更方便管理員管理。

下面的場景就是一個 GID 與 UID 不同的例子。現在我添加另一賬號,名為 Timmy。通過使用 getent 命令來比較 sonny 和 timmy 兩個賬號,顯示兩個用戶和對應的主組。

<code>$ getent passwd sonny timmy
sonny:x:1001:1002:Sonny:/home/sonny:/bin/bash
timmy:x:1002:1003::/home/timmy:/bin/bash

$ getent group sonny timmy
sonny:x:1002:
timmy:x:1003:/<code>

不幸的是,兩者的 UID 和 GID 都不相同。因為默認的處理是,創建用戶時,把下一個可用的 UID 賦給用戶,然後把同一個數字作為主組 ID 賦給它。然而,當要使用的組 ID 已經被使用時,就再把下一個可用的 GID 賦給它。為了弄清細節,我猜想 1001 這個 GID 已經被使用了,用一個命令確認了一下。

<code>$ getent group 1001
book:x:1001:alan/<code>

book 的 ID 是 1001,因此新創建的用戶的 GID 都有偏移量 1。這就是為什麼系統管理員在用戶創建過程中需要多設置一些值的一個實例。為了解決這個問題,我必須先確定下一個可用的 UID 和 GID 是否相同。確定下一個可用值時,可以使用 getent group 和 getent passwd 命令,通過 -u 參數傳遞要確認的值。

<code>$ sudo useradd -u 1004 bobby

$ getent passwd bobby; getent group bobby
bobby:x:1004:1004::/home/bobby:/bin/bash
bobby:x:1004:/<code>

另一個需要指定 ID 的場景是,通過 NFS 訪問遠程系統上的文件時。對於一個給定的用戶,當 NFS 所有客戶端和服務系統的 ID 都一樣時,管理員更容易控制。在我的文章 使用 autofs 掛載 NFS 中有詳細介紹。

更多自定義

一些其他的指定用戶信息的參數也用得比較頻繁。這裡是一些你會經常用到的參數的概括例子。

註釋

註釋選項是通過 -c 參數指定的一個解釋文本字段,可以提供一段簡短的描述或其他信息。

<code>$ sudo useradd -c "Bailey is cool" bailey 

$ getent passwd bailey
bailey:x:1011:1011:Bailey is cool:/home/bailey:/bin/bash/<code>

一個用戶可以被指定一個主組和多個次組。-g 參數指定主組名稱或 GID。如果不指定,useradd 會以用戶名創建一個主組(前面演示過)。-G(大寫)參數用一個逗號分隔的組列表來指定此用戶所屬的組,這些組就是次組。

<code>$ sudo useradd -G tgroup,fgroup,libvirt milly
$ id milly
uid=1012(milly) gid=1012(milly) groups=1012(milly),981(libvirt),4000(fgroup),3000(tgroup)/<code>

家目錄

useradd 的默認處理是,在 /home 目錄下創建用戶的家目錄。然而,下面的參數可以改寫家目錄的基礎目錄。-b 設置另一個可以創建家目錄的基礎目錄。例如指定 /home2 而不是 /home。

<code>$ sudo useradd -b /home2 vicky
$ getent passwd vicky
vicky:x:1013:1013::/home2/vicky:/bin/bash/<code>

-d 參數可以指定一個與用戶名不同的家目錄。

<code>$ sudo useradd -d /home/ben jerry
$ getent passwd jerry
jerry:x:1014:1014::/home/ben:/bin/bash/<code>

目錄模板

指定 -k 參數會在創建新用戶時,複製 /etc/skel 目錄下的所有文件到用戶的家目錄中。這些文件通常是 shell 配置文件,當然也可以是系統管理員想在新建用戶時使用的任何文件。

Shell

-s 參數可以指定 shell。如果不指定,則使用默認的 shell。例如,下面的例子中 ,配置文件中定義的 shell 是 bash,但 wally 這個用戶指定的是 zsh。

<code>SHELL=/bin/bash

$ sudo useradd -s /usr/bin/zsh wally
$ getent passwd wally
wally:x:1004:1004::/home/wally:/usr/bin/zsh/<code>

安全

安全是用戶管理的重中之重,因此 useradd 命令也提供了很多關於安全的選項。可以使用 -e 參數,以 YYYY-MM-DD 的格式指定一個用戶的過期時間。

<code>$ sudo useradd -e 20191231 sammy
$ sudo getent shadow sammy
sammy:!!:18171:0:99999:7::20191231:/<code>

當密碼過期時,賬號也會自動失效。-f 參數指定密碼過期後經過幾天賬號失效。如果設為 0,則立即失效。

<code>$ sudo useradd -f 30 willy
$ sudo getent shadow willy
willy:!!:18171:0:99999:7:30::/<code>

實例

生產環境中,創建一個用戶賬號時會用到多個參數。例如,我要創建一個 Perry 賬號,可能會用下面的命令:

<code>$ sudo useradd -u 1020 -c "Perry Example" \\
-G tgroup -b /home2 \\

-s /usr/bin/zsh \\
-e 20201201 -f 5 perry/<code>

查看前面的內容來理解每個選項。用下面的命令確認結果:

<code>$ getent passwd perry; getent group perry; getent shadow perry; id perry
perry:x:1020:1020:Perry Example:/home2/perry:/usr/bin/zsh
perry:x:1020:
perry:!!:18171:0:99999:7:5:20201201:
uid=1020(perry) gid=1020(perry) groups=1020(perry),3000(tgroup)/<code>

一點小建議

useradd 命令是所有 Unix(不僅僅是 Linux)系統管理員都必知必會的命令。由於用戶創建不能出錯,需要第一次就正確,所以理解它的每一個選項很重要。這意味著你需要有一套深思熟慮的命名約定,包括為整個企業環境而不僅僅是一個單系統預留一個專用的 UID/GID 範圍,尤其是你為一個成長中的組織工作時。


via: https://opensource.com/article/19/10/linux-useradd-command

作者: Alan Formy-Duval 選題: lujun9972 譯者: lxbwolf 校對: wxy

本文由 LCTT 原創編譯, Linux中國 榮譽推出


分享到:


相關文章: