C語言中文網 目錄

Linux useradd命令詳解:添加新的系統用戶

< 上一頁Linux /etc/login.defs Linux passwd下一頁 >

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 之間,供系統程序使用的用戶。由于系統用戶主要用于運行系統所需服務的權限配置,因此系統用戶的創建默認不會創建主目錄。

其實,系統已經幫我們規定了非常多的默認值,在沒有特殊要求下,無需使用任何選項即可成功創建用戶。例如:

[root@localhost ~]# useradd lamp

此行命令就表示創建 lamp 普通用戶。

不要小看這條簡單的命令,它會完成以下幾項操作:
  1. 在 /etc/passwd 文件中創建一行與 lamp 用戶相關的數據:

    [root@localhost ~]# grep "lamp" /etc/passwd
    lamp:x:500:500::/home/lamp:/bin/bash

    可以看到,用戶的 UID 是從 500 開始計算的。同時默認指定了用戶的家目錄為 /home/lamp/,用戶的登錄 Shell 為 /bin/bash。
  2. 在 /etc/shadow 文件中新增了一行與 lamp 用戶密碼相關的數據:

    [root@localhost ~]# grep "lamp" /etc/shadow
    lamp:!!:15710:0:99999:7:::

    當然,這個用戶還沒有設置密碼,所以密碼字段是 "!!",代表這個用戶沒有合理密碼,不能正常登錄。同時會按照默認值設定時間字段,例如密碼有效期有 99999 天,距離密碼過期 7 天系統會提示用戶“密碼即將過期”等。
  3. 在 /etc/group 文件中創建一行與用戶名一模一樣的群組:

    [root@localhost ~]# grep "lamp" /etc/group
    lamp:x:500:

    該群組會作為新建用戶的初始組。
  4. 在 /etc/gshadow 文件中新增一行與新增群組相關的密碼信息:

    [root@localhost ~]# grep "lamp" /etc/gshadow
    lamp:!::

    當然,我們沒有設定組密碼,所以這里沒有密碼,也沒有組管理員。
  5. 默認創建用戶的主目錄和郵箱:

    [root@localhost ~]#ll -d /home/lamp/
    drwx------ 3 lamp lamp 4096 1月6 00:19 /home/lamp/
    [root@localhost ~]#ll /var/spod/mail/lamp
    -rw-rw---- 1 lamp mail 0 1月6 00:19 /var/spool/mail/lamp

    注意這兩個文件的權限,都要讓 lamp 用戶擁有相應的權限。
  6. 將 /etc/skel 目錄中的配置文件復制到新用戶的主目錄中(至于為什么,學完本節內容就會明白)。

可以看到,useradd 命令創建用戶的過程,其實就是修改了與用戶相關的幾個文件或目錄,前面章節已經對這些文件做了詳細介紹。

除了默認創建用戶,我們還可以利用 useradd 命令的各種選項親自定制要創建的用戶,例如:

[root@localhost ~]# groupadd lamp1
#先手工添加lamp1用戶組,因為我一會兒要把lamp1用戶的初始迎指定過來,如果不事先建立,則會報告用戶組不存在
[root@localhost ~]# useradd -u 550 -g lamp1 -G root -d /home/lamp1 -c "test user" -s /bin/bash lamp1
#在建立用戶lamp1的同時,指定了UID(550)、初始組(lamp1)、附加組(root)、家目錄(/home/lamp1/)、用戶說明(test user)和用戶登錄Shell(/bin/bash)
[root@localhost ~]# grep "lamp1" /etc/passwd /etc/shadow /etc/group
#同時查看三個文件
/etc/passwd:lamp1:x:550:502:test user:/home/lamp1:/bin/bash
#用戶的UID、初始組、用戶說明、家目錄和登錄Shell都和命令手工指定的一致
/etc/shadow:lamp1:!!:15710:0:99999:7:::
#lamp1用戶還沒有設定密碼
/etc/group:root:x:0:lamp1
#lamp1用戶加入了root組,root組是lamp1用戶的附加組
/etc/group:lampl:x:502:
#GID為502的組是lamp1組
[root@localhost ~]#ll -d /home/lamp1/
drwx------ 3 lamp1 lamp1 4096 1月6 01:13 /home/lamp1/
#家目錄也建立了,不需要手工建立

通過以上 2 種方式,都可以成功創建用戶。通常情況下,根本不需要手工指定任何內容,因為使用默認值就可以滿足我們的要求。那你有沒有想過,useradd 命令的這些默認值保存哪里,能否手工修改呢?

答案是肯定的。useradd 命令在添加用戶時參考的默認值文件主要有兩個,分別是 /etc/default/useradd 和 /etc/login.defs。前面我們已經詳細介紹了 /etc/login.defs,這里不再過多贅述,本節帶大家詳細了解 /etc/default/useradd 文件。

/etc/default/useradd 文件

首先,使用 Vim 命令查看 /etc/default/useradd 文件中包含哪些內容:

[root@localhost ~]#vim /etc/default/useradd
# useradd defaults file
GR0UP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

另外,也可以直接通過命令進行查看,結果是一樣的:

[root@localhost ~]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

-D 選項指的就是查看新建用戶的默認值。

表 2 對此文件中的各項做了詳細的解釋。

表 2 /etc/default/useradd 文件內容
參數 含義
GR0UP=100 這個選項用于建立用戶的默認組,也就是說,在添加每個用戶時,用戶的初始組就是 GID 為 100 的這個用戶組。但 CentOS 并不是這樣的,而是在添加用戶時會自動建立和用戶名相同的組作為此用戶的初始組。也就是說這個選項并不會生效。

Linux 中默認用戶組有兩種機制:一種是私有用戶組機制,系統會創建一個和用戶名相同的用戶組作為用戶的初始組;另一種是公共用戶組機制,系統用 GID 是 100 的用戶組作為所有新建用戶的初始組。目前我們采用的是私有用戶組機制。
HOME=/home 指的是用戶主目錄的默認位置,所有新建用戶的主目錄默認都在 /home/下,剛剛新建的 lamp1 用戶的主目錄就為 /home/lamp1/。
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 指的是給新建用戶建立郵箱,默認是創建。也就是說,對于所有的新建用戶,系統都會新建一個郵箱,放在 /var/spool/mail/ 目錄下,和用戶名相同。例如,lamp1 的郵箱位于 /var/spool/mail/lamp1。

注意,此文件中各選項值的修改方式有 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 2019-10-17。
-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@localhost ~]# useradd -D -s /bin/csh
[root@localhost ~]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/csh
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

通過 /etc/default/useradd 文件,大家僅能修改有關新用戶的部分默認值,有一些內容并沒有在這個文件中,例如修改用戶默認的 UID、GID,以及對用戶密碼的默認設置,對這些默認值的修改就需要在 /etc/login.defs 文件中進行。

有關 /etc/login.defs 文件,可閱讀《Linux /etc/login.defs》一節。

其實,useradd 命令創建用戶的過程是這樣的,系統首先讀取 /etc/login.defs 和 /etc/default/useradd,根據這兩個配置文件中定義的規則添加用戶,也就是向 /etc/passwd、/etc/group、/etc/shadow、/etc/gshadow 文件中添加用戶數據,接著系統會自動在 /etc/default/useradd 文件設定的目錄下建立用戶主目錄,最后復制 /etc/skel 目錄中的所有文件到此主目錄中,由此,一個新的用戶就創建完成了。

當然,如果你能徹底掌握 useradd 命令創建用戶的整個過程,完全可以手動創建用戶。
< 上一頁Linux /etc/login.defs Linux passwd下一頁 >

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo