Linux useradd 命令介紹
使用 useradd 命令來新增使用者(並且根據需要修改賬號)。
任何計算機系統中,新增使用者都是最重要的事之一;本文著重介紹如何在 Linux 系統中新增使用者。
正式開始之前,我先提三個概念。首先,跟大多數作業系統一樣,Linux 使用者也需要一個賬號才能登入。本文只介紹本地賬號,不涉及網路賬號,如 LDAP。其次,每個賬號都有一個名字(username)和一個對應的數字(使用者 ID)。最後,每個使用者通常都在一個組內,每個組都有一個名字和一個組 ID。
你可能已經想到了,Linux 提供了新增使用者的命令列工具,就是 useradd
命令。有些版本也叫 adduser
。為了方便使用,很多發行版上這個命令是一個指向 useradd
命令的符號連結。
$ file `which adduser`
/usr/sbin/adduser: symbolic link to useradd
來看一下 useradd
。
注意:本文描述的預設環境是 Red Hat Enterprise Linux 8.0。你可能會發現本文描述的這些檔案和某些預設值與某些 Linux 發行版或其他 Unix 作業系統(FreeBSD 或 Solaris)偶爾會有差異。
預設處理
useradd
的基本用法相當簡單:提供一個使用者名稱就可以新增一個使用者。
$ sudo useradd sonny
在本例中,useradd
命令建立了一個名為 sonny
的賬號。此命令同時建立了一個同名的組,sonny
被放進了這個組,這個組也是 sonny
賬號的主組。命令執行時,根據配置檔案 /etc/default/useradd
和 /etc/login.defs
中的不同設定,也會有其他的引數,如語言和 shell。對於一個私人系統或微小的單服務商業環境,這些引數已經足夠了。
上面兩個檔案控制 useradd
的處理,使用者的資訊儲存在 /etc
目錄下的一些其他檔案中,關於這些資訊的講解會貫穿全文。
檔案 | 描述 | 域 (加粗的表示由 useradd 命令設定) |
---|---|---|
passwd |
儲存使用者賬號資訊 | 使用者名稱:未使用:UID:GID:備註:家目錄:shell |
shadow |
儲存使用者賬號的安全資訊 | 使用者名稱:加密密碼:上次修改時間:最短使用天數:最長使用天數間:修改前警示天數:過期後寬限時間:未使用 |
group |
儲存組資訊 | 組名:未使用:GID:成員列表 |
自定義處理
當管理員需要更好地控制賬號時,可以使用命令列來自定義,如指定一個使用者的 ID。
使用者和組 ID
預設情況下,useradd
試圖使用相同的使用者 ID(UID)和主組 ID(GID),但也不完全是。雖然 UID 與 GID 相同不是必須的,但如果相同,會更方便管理員管理。
下面的場景就是一個 GID 與 UID 不同的例子。現在我新增另一賬號,名為 Timmy。通過使用 getent
命令來比較 sonny
和 timmy
兩個賬號,顯示兩個使用者和對應的主組。
$ 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:
不幸的是,兩者的 UID 和 GID 都不相同。因為預設的處理是,建立使用者時,把下一個可用的 UID 賦給使用者,然後把同一個數字作為主組 ID 賦給它。然而,當要使用的組 ID 已經被使用時,就再把下一個可用的 GID 賦給它。為了弄清細節,我猜想 1001 這個 GID 已經被使用了,用一個命令確認了一下。
$ getent group 1001
book:x:1001:alan
book
的 ID 是 1001
,因此新建立的使用者的 GID 都有偏移量 1。這就是為什麼系統管理員在使用者建立過程中需要多設定一些值的一個例項。為了解決這個問題,我必須先確定下一個可用的 UID 和 GID 是否相同。確定下一個可用值時,可以使用 getent group
和 getent passwd
命令,通過 -u
引數傳遞要確認的值。
$ sudo useradd -u 1004 bobby
$ getent passwd bobby; getent group bobby
bobby:x:1004:1004::/home/bobby:/bin/bash
bobby:x:1004:
另一個需要指定 ID 的場景是,通過 NFS 訪問遠端系統上的檔案時。對於一個給定的使用者,當 NFS 所有客戶端和服務系統的 ID 都一樣時,管理員更容易控制。在我的文章 使用 autofs 掛載 NFS 中有詳細介紹。
更多自定義
一些其他的指定使用者資訊的引數也用得比較頻繁。這裡是一些你會經常用到的引數的概括例子。
註釋
註釋選項是通過 -c
引數指定的一個解釋文字欄位,可以提供一段簡短的描述或其他資訊。
$ sudo useradd -c "Bailey is cool" bailey
$ getent passwd bailey
bailey:x:1011:1011:Bailey is cool:/home/bailey:/bin/bash
組
一個使用者可以被指定一個主組和多個次組。-g
引數指定主組名稱或 GID。如果不指定,useradd
會以使用者名稱建立一個主組(前面演示過)。-G
(大寫)引數用一個逗號分隔的組列表來指定此使用者所屬的組,這些組就是次組。
$ sudo useradd -G tgroup,fgroup,libvirt milly
$ id milly
uid=1012(milly) gid=1012(milly) groups=1012(milly),981(libvirt),4000(fgroup),3000(tgroup)
家目錄
useradd
的預設處理是,在 /home
目錄下建立使用者的家目錄。然而,下面的引數可以改寫家目錄的基礎目錄。-b
設定另一個可以建立家目錄的基礎目錄。例如指定 /home2
而不是 /home
。
$ sudo useradd -b /home2 vicky
$ getent passwd vicky
vicky:x:1013:1013::/home2/vicky:/bin/bash
-d
引數可以指定一個與使用者名稱不同的家目錄。
$ sudo useradd -d /home/ben jerry
$ getent passwd jerry
jerry:x:1014:1014::/home/ben:/bin/bash
目錄模板
指定 -k
引數會在建立新使用者時,複製 /etc/skel
目錄下的所有檔案到使用者的家目錄中。這些檔案通常是 shell 配置檔案,當然也可以是系統管理員想在新建使用者時使用的任何檔案。
Shell
-s
引數可以指定 shell。如果不指定,則使用預設的 shell。例如,下面的例子中 ,配置檔案中定義的 shell 是 bash
,但 wally
這個使用者指定的是 zsh
。
SHELL=/bin/bash
$ sudo useradd -s /usr/bin/zsh wally
$ getent passwd wally
wally:x:1004:1004::/home/wally:/usr/bin/zsh
安全
安全是使用者管理的重中之重,因此 useradd
命令也提供了很多關於安全的選項。可以使用 -e
引數,以 YYYY-MM-DD 的格式指定一個使用者的過期時間。
$ sudo useradd -e 20191231 sammy
$ sudo getent shadow sammy
sammy:!!:18171:0:99999:7::20191231:
當密碼過期時,賬號也會自動失效。-f
引數指定密碼過期後經過幾天賬號失效。如果設為 0,則立即失效。
$ sudo useradd -f 30 willy
$ sudo getent shadow willy
willy:!!:18171:0:99999:7:30::
例項
生產環境中,建立一個使用者賬號時會用到多個引數。例如,我要建立一個 Perry 賬號,可能會用下面的命令:
$ sudo useradd -u 1020 -c "Perry Example" \
-G tgroup -b /home2 \
-s /usr/bin/zsh \
-e 20201201 -f 5 perry
檢視前面的內容來理解每個選項。用下面的命令確認結果:
$ 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)
一點小建議
useradd
命令是所有 Unix(不僅僅是 Linux)系統管理員都必知必會的命令。由於使用者建立不能出錯,需要第一次就正確,所以理解它的每一個選項很重要。這意味著你需要有一套深思熟慮的命名約定,包括為整個企業環境而不僅僅是一個單系統預留一個專用的 UID/GID 範圍,尤其是你為一個成長中的組織工作時。
via: https://opensource.com/article/19/10/linux-useradd-command
作者:Alan Formy-Duval 選題:lujun9972 譯者:lxbwolf 校對:wxy
訂閱“Linux 中國”官方小程式來檢視
相關文章
- linux useradd命令的基本用法Linux
- Linux xargs命令介紹Linux
- Linux重啟命令介紹Linux
- Linux基礎命令---新增使用者useraddLinux
- Linux基礎命令—新增使用者useraddLinux
- Linux常用命令介紹Linux
- Linux 關機命令介紹shutdownLinux
- 【Linux】jq 命令介紹和使用Linux
- linux基本命令介紹(二)Linux
- linux基本命令介紹(一)Linux
- Linux使用者管理之useradd、passwd命令講解Linux
- Linux中useradd命令如何使用?常用引數是什麼?Linux
- useradd 命令的常見用法
- 進行Linux效能監控的命令介紹Linux
- Linux中一些 Sed命令技巧介紹Linux
- 虛擬機器之linux介紹和命令虛擬機Linux
- Linux效能分析和最佳化命令介紹Linux
- 【Linux】Linux命令快速學習神器tldr、cheat介紹和使用Linux
- installer 命令介紹
- linux Shell 命令列-01-intro 入門介紹Linux命令列
- Linux防火牆介紹和iptables常用命令Linux防火牆
- Linux入門教程之sed 命令常用操作介紹Linux
- 在 Linux 中不使用 useradd 命令如何建立使用者賬號Linux
- 【SRE工程師】Linux常用硬碟管理相關命令介紹!工程師Linux硬碟
- Shell echo命令介紹
- Linux Bash Shell 指令碼入門(3)——Linux常用命令介紹Linux指令碼
- Kali Linux介紹Linux
- linux20個常用命令詳解和用法 linux常用命令大全介紹Linux
- 為初學者介紹的 Linux tee 命令(6 個例子)Linux
- Linux命令- echo、grep 、重定向、1>&2、2>&1的介紹Linux
- Linux常見的開發命令有哪些?分類介紹!Linux
- SVN命令列使用介紹命令列
- 簡單介紹 ldd 命令
- linux介紹(入門)Linux
- linux常用指令介紹Linux
- Linux cgroups 命令簡介Linux
- linux刪除資料夾命令是什麼 linux刪除檔案和目錄命令大全介紹Linux
- sftp常用命令介紹FTP