2021-05-12 14:32:11
Linux useradd命令新增新使用者圖文詳解
在Linux 系統中,可以使用 useradd 命令新建使用者,此命令的基本格式如下:
[root@localhost ~]#useradd [選項] 使用者名稱
該命令常用的選項及各自的含義,如表 1 所示。
表 1 useradd命令常用選項
選項 | 含義 |
---|---|
-u UID | 手工指定使用者的 UID,注意 UID 的範圍(不要小於 500)。 |
-d 主目錄 | 手工指定使用者的主目錄。主目錄必須寫絕對路徑,而且如果需要手工指定主目錄,則一定要注意許可權; |
-c 使用者說明 | 手工指定/etc/passwd檔案中各使用者資訊中第 5 個欄位的描述性內容,可隨意設定; |
-g 組名 | 手工指定使用者的初始組。一般以和使用者名稱相同的組作為使用者的初始組,在建立使用者時會預設建立初始組。一旦手動指定,則系統將不會在建立此預設的初始組目錄。 |
-G 組名 | 指定使用者的附加組。我們把使用者加入其他組,一般都使用附加組; |
-s shell | 手工指定使用者的登入 Shell,預設是 /bin/bash; |
-e 曰期 | 指定使用者的失效曰期,格式為 "YYYY-MM-DD"。也就是 /etc/shadow 檔案的第八個欄位; |
-o | 允許建立的使用者的 UID 相同。例如,執行 "useradd -u 0 -o usertest" 命令建立使用者 usertest,它的 UID 和 root 使用者的 UID 相同,都是 0; |
-m | 建立使用者時強制建立使用者的家目錄。在建立系統使用者時; |
-r | 建立系統使用者,也就是 UID 在 1~499 之間,供系統程式使用的使用者。由於系統使用者主要用於執行系統所需服務的許可權設定,因此系統使用者的建立預設不會建立主目錄。 |
其實,系統已經幫我們規定了非常多的預設值,在沒有特殊要求下,無需使用任何選項即可成功建立使用者。例如:
linuxidc@linuxidc:~/linuxidc.com$ sudo useradd linuxmi
linuxidc@linuxidc:~/linuxidc.com$ sudo useradd -m linuxidc.com
此行命令就表示建立 linuxmi 普通使用者。
不要小看這條簡單的命令,它會完成以下幾項操作:
1. 在 /etc/passwd 檔案中建立一行與 linuxmi 使用者相關的資料:
linuxidc@linuxidc:~/linuxidc.com$ grep "linuxmi" /etc/passwd
linuxmi:x:1001:1001::/home/linuxmi:/bin/sh
可以看到,使用者的 UID 是從 1001 開始計算的。同時預設指定了使用者的家目錄為 /home/linuxmi/,使用者的登入 Shell 為 /bin/sh。
2. 在 /etc/shadow 檔案中新增了一行與 linuxmi 使用者密碼相關的資料:
linuxidc@linuxidc:~/linuxidc.com$ sudo grep "linuxmi" /etc/shadow
linuxmi:!:18034:0:99999:7:::
當然,這個使用者還沒有設定密碼,所以密碼欄位是 "!!",代表這個使用者沒有合理密碼,不能正常登入。同時會按照預設值設定時間欄位,例如密碼有效期有 99999 天,距離密碼過期 7 天系統會提示使用者“密碼即將過期”等。
3. 在 /etc/group 檔案中建立一行與使用者名稱一模一樣的群組:
linuxidc@linuxidc:~/linuxidc.com$ grep "linuxmi" /etc/group
linuxmi:x:1001:
該群組會作為新建使用者的初始組。
4. 在 /etc/gshadow 檔案中新增一行與新增群組相關的密碼資訊:
linuxidc@linuxidc:~/linuxidc.com$ sudo grep "linuxmi" /etc/gshadow
linuxmi:!::
當然,我們沒有設定組密碼,所以這裡沒有密碼,也沒有組管理員。
5. 預設建立使用者的主目錄和郵箱:
drwxr-xr-x 2 linuxidc.com linuxidc.com 4096 5月 18 05:03 /home/linuxidc.com//
linuxidc@linuxidc:~/linuxidc.com$ ll /var/spod/mail/linuxidc.com
注意檔案的許可權,要讓 linuxidc.com 使用者擁有相應的許可權。
6. 將 /etc/skel 目錄中的組態檔複製到新使用者的主目錄中(至於為什麼,學完本節內容就會明白)。
可以看到,useradd 命令建立使用者的過程,其實就是修改了與使用者相關的幾個檔案或目錄,對這些檔案的詳細介紹見 https://www.linuxidc.com/Linux/2019-05/158718.htm 。
那useradd 命令的這些預設值儲存哪裡,能否手工修改呢?
答案是肯定的。useradd 命令在新增使用者時參考的預設值檔案主要有兩個,分別是 /etc/default/useradd 和 /etc/login.defs。
/etc/default/useradd 檔案
首先,使用 Vim 命令檢視 /etc/default/useradd 檔案中包含哪些內容:
linuxidc@linuxidc:~/linuxidc.com$ cat /etc/default/useradd
# Default values for useradd(8)
#
# The SHELL variable specifies the default login shell on your
# system.
# Similar to DHSELL in adduser. However, we use "sh" here because
# useradd is a low level utility and should be as general
# as possible
SHELL=/bin/sh
#
# The default group for users
# 100=users on Debian systems
# Same as USERS_GID in adduser
# This argument is used when the -n flag is specified.
# The default behavior (when -n and -g are not specified) is to create a
# primary user group with the same name as the user being added to the
# system.
# GROUP=100
#
# The default home directory. Same as DHOME for adduser
# HOME=/home
#
# The number of days after a password expires until the account
# is permanently disabled
# INACTIVE=-1
#
# The default expire date
# EXPIRE=
#
# The SKEL variable specifies the directory containing "skeletal" user
# files; in other words, files such as a sample .profile that will be
# copied to the new user's home directory when it is created.
# SKEL=/etc/skel
#
# Defines whether the mail spool should be created while
# creating the account
# CREATE_MAIL_SPOOL=yes
另外,也可以直接通過命令進行檢視:
linuxidc@linuxidc:~/linuxidc.com$ useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/sh
SKEL=/etc/skel
CREATE_MAIL_SPOOL=no
-D 選項指的就是檢視新建使用者的預設值。
表 2 對此檔案中的各項做了詳細的解釋。
表 2 /etc/default/useradd 檔案內容
引數 | 含義 |
---|---|
GR0UP=100 | 這個選項用於建立使用者的預設組,也就是說,在新增每個使用者時,使用者的初始組就是 GID 為 100 的這個使用者組。但 CentOS 並不是這樣的,而是在新增使用者時會自動建立和使用者名稱相同的組作為此使用者的初始組。也就是說這個選項並不會生效。 Linux 中預設使用者組有兩種機制:一種是私有使用者組機制,系統會建立一個和使用者名稱相同的使用者組作為使用者的初始組;另一種是公共使用者組機制,系統用 GID 是 100 的使用者組作為所有新建使用者的初始組。目前我們採用的是私有使用者組機制。 |
HOME=/home | 指的是使用者主目錄的預設位置,所有新建使用者的主目錄預設都在 /home/下,剛剛新建的 linuxidc.com 使用者的主目錄就為 /home/linuxidc.com/。 |
INACTIVE=-1 | 指的是密碼過期後的寬限天數,也就是 /etc/shadow 檔案的第七個欄位。這裡預設值是 -1,代表所有新建立的使用者密碼永遠不會失效。 |
EXPIRE= | 表示密碼失效時間,也就是 /etc/shadow 檔案的第八個欄位。預設值是空,代表所有新建使用者沒有失效時間,永久有效。 |
SHELL=/bin/bash | 表示所有新建立的使用者預設 Shell 都是 /bin/bash。 |
SKEL=/etc/skel | 在建立一個新使用者後,你會發現,該使用者主目錄並不是空目錄,而是有 .bash_profile、.bashrc 等檔案,這些檔案都是從 /etc/skel 目錄中自動複製過來的。因此,更改 /etc/skel 目錄下的內容就可以改變新建使用者預設主目錄中的組態檔資訊。 |
CREATE_MAIL_SPOOL=yes | 指的是在root下給新建使用者建立郵箱,預設是建立。也就是說,對於所有的新建使用者,系統都會新建一個郵箱,放在 /var/spool/mail/ 目錄下,和使用者名稱相同。 |
注意,此檔案中各選項值的修改方式有 2 種,一種是通過 Vim 文字編輯器手動修改,另一種就是使用文章開頭介紹的 useradd 命令,不過所用的命令格式發生了改變:
useradd -D [選項] 引數
用此命令修改 /etc/default/useradd 檔案,可使用的選項如表 3 所示。
useradd -D 命令可用選項
選項+引數 | 含義 |
---|---|
-b HOME | 設定所建立的主目錄所在的預設目錄,只需用目錄名替換 HOME 即可,例如 useradd -D -b /gargae。 |
-e EXPIRE | 設定密碼失效時間,EXPIRE 引數應使用 YYYY-MM-DD 格式,例如 useradd -D -e 2010-05-18。 |
-f INACTIVE | 設定密碼過期的寬限天數,例如 useradd -D -f 7。 |
-g GROUP | 設定新使用者所在的初始組,例如 useradd -D -g bear。 |
-s SHELL | 設定新使用者的預設 shell,SHELL 必須是完整路徑,例如 useradd -D -s /usr/bin/csh。 |
例如,要修改新使用者的預設 Shell 為 /bin/csh,可以使用如下方式:
root@linuxidc:/home/linuxidc/linuxidc.com# useradd -D -s /bin/csh
root@linuxidc:/home/linuxidc/linuxidc.com# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/csh
SKEL=/etc/skel
CREATE_MAIL_SPOOL=no
通過 /etc/default/useradd 檔案,大家僅能修改有關新使用者的部分預設??,有一些內容並沒有在這個檔案中,例如修改使用者預設的 UID、GID,以及對使用者密碼的預設設定,對這些預設值的修改就需要在 /etc/login.defs 檔案中進行。
有關 /etc/login.defs 檔案,可閱讀《Linux新建使用者組態檔 /etc/login.defs 詳解》一文,見 https://www.linuxidc.com/Linux/2019-05/158732.htm。
其實,useradd 命令建立使用者的過程是這樣的,系統首先讀取 /etc/login.defs 和 /etc/default/useradd,根據這兩個組態檔中定義的規則新增使用者,也就是向 /etc/passwd、/etc/group、/etc/shadow、/etc/gshadow 檔案中新增使用者資料,接著系統會自動在 /etc/default/useradd 檔案設定的目錄下建立使用者主目錄,最後複製 /etc/skel 目錄中的所有檔案到此主目錄中,由此,一個新的使用者就建立完成了。
當然,如果你能徹底掌握 useradd 命令建立使用者的整個過程,完全可以手動建立使用者。
相關文章