useradd詳解

添加用戶工具有useradd和adduser ,這兩個工具所達到的目的都是一樣的,在Fedora 發行版中,useradd 和adduser 用法是一樣的;但在slackware發行版本中,adduser和useradd 還是有所不同,表現爲adduser 是以人機交互的提問的方式來添加用戶;
 
除了useradd和adduser工具以外,我們還能通過修改用戶配置文件/etc/passwd和/etc/groups的辦法來實現;
 
當然我們也不要忽略一些發行版獨有用戶管理工具,比如Fedora 中有 system-config-users 工具;這個工具比較簡單,點幾下鼠標就能完成;
 
1、useradd 工具
 
useradd 不加參數選項時,後面直接跟所添加的用戶名時,系統時讀取添加用戶配置文件/etc/login.defs和/etc/default/useradd文 件,然後讀取/etc/login.defs和/etc/default/useradd中所定義的規則添加用戶;並向/etc/passwd和 /etc/groups文件添加用戶和用戶組記錄;當然/etc/passwd和/etc/groups的加密資訊文件也同步生成記錄;同時發生的還有系 統會自動在/etc/add/default中所約定的目錄中建用戶的家目錄,並複製/etc/skel中的文件(包括隱藏文件)到新用戶的家目錄中;
 
useradd 的語法:
 
usage: useradd [-u uid [-o]] [-g group] [-G group,...]
[-d home] [-s shell] [-c comment] [-m [-k template]]
[-f inactive] [-e expire ] [-p passwd] name
useradd -D [-g group] [-b base] [-s shell]
[-f inactive] [-e expire ]
當我們執行useradd 用戶名 來添加用戶時,我們會發現一個比較有意思的現象,新添中的用戶的家目錄總是被自動添加到 /home目錄下,我們先舉個例子;
 
實例一:不加任何參數,直接添加用戶;
 
[root@localhost beinan]# useradd beinanlinux
[root@localhost beinan]# ls -ld /home/beinanlinux/
drwxr-xr-x 3 beinanlinux beinanlinux 4096 11月 2 15:20 /home/beinanlinux/
在這個例子中,我們添加了beinanlinux用戶,我們在查看/home/目錄時,會發現系統自建了一個beinanlinux的目錄;
 
我們再來查看 /etc/passwd 文件有關beinanlinux的記錄,也會有新發現;我們通過more 來讀取 /etc/passwd 文件,並且通過grep 來抽取 beinanlinux字段,得出如下一行;
 
[root@localhost beinan]# more /etc/passwd | grep beinanlinux
beinanlinux:x:509:509::/home/beinanlinux:/bin/bash
從得出的beinanlinux的記錄來看,以adduser 工具添加beinanlinux用戶時,設置用戶的UID和GID分別爲509 ,並且把beinanlinux的家目錄設置在 /home/beinanlinux ,所有的SHELL是 bash ; 我們再來看看 /etc/shadow、/etc/groups和/etc/gshadow 文件,是不是也有與beinanlinux有關的行;我們還要查看/etc/default/useradd 和/etc/login.defs文件的規則,看一下beinanlinux用戶的增加是不是和這兩個配置文件有關;我們還要查看 /home/beinanlinux目錄下的文件,是不是和/etc/skel目錄中的一樣;
 
由此我們引出我們下面所要談的內容:
 
useradd -D [-g group] [-b base] [-s shell] [-f inactive] [-e expire ]
 
1)/etc/default/useradd 配置文件的定義;
 
useradd -D [-g group] [-b base] [-s shell] [-f inactive] [-e expire ]
 
useradd 加-D參數後,就是用來改變配置文件 /etc/default/useradd的;
 
useradd -D [-g group] [-b base] [-s shell] [-f inactive] [-e expire ]
 
當-D選項出現時,useradd秀出現在的預設值,或是藉由命令列的方式更新預設值。可用選項爲∶
-b default_home 注:定義用戶所屬目錄的前一個目錄。用戶名稱會附加在default_home後面用來建立新用戶的目錄。當然使用-d後則此選項無效。
-e default_expire_date 注:用戶帳號停止日期。
-f default_inactive 注:帳號過期幾日後停權。
-g default_group 注:新帳號起始用戶組名或ID。用戶組名須爲現有存在的名稱。用戶組ID也須爲現有存在的用戶組。
-s default_shell 注:用戶登入後使用的shell名稱。往後新加入的帳號都將使用此shell.
如不指定任何參數,useradd顯示目前預設的值。
 
實例二:
useradd -D 如不指定任何參數,useradd顯示目前預設的值;
 
[root@localhost beinan]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=no
我們看一下/etc/default/useradd 文件就明白了,應該和上面的輸出是一樣的;所以如果我們想改變useradd配置文件/etc/default/adduser 的內容,也可以用編輯器直接操作,如果你會用vi編輯器或者其它編輯器的話,這個應該不成問題吧;
 
實例三:
 
我想把添加用戶時的默認SHELL /bin/bash 改爲 /bin/tcsh ,則應該用下面的命令;
 
[root@localhost beinan]# useradd -D -s /bin/tcsh 注:把添加用戶時的SHELL 改爲tcsh ;
[root@localhost beinan]# more /etc/default/useradd 注:查看是否成功;
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/tcsh 注:成功;
SKEL=/etc/skel
CREATE_MAIL_SPOOL=no
這個-D參數的解說就這樣了,也是比較簡單,如果不會用命令,直接改參數配置文件總會吧;Linux解決問題是極爲靈活的,就看我們怎麼解決了,對不對?
 
2)useradd 添加用戶;
 
useradd [-u uid [-o]] [-g group] [-G group,...]
[-d home] [-s shell] [-c comment] [-m [-k template]]
[-f inactive] [-e expire ] [-p passwd] name
新帳號建立,當不加-D參數,useradd指令使用命令列來指定新帳號的設定值 and使用系統上的預設值.新用戶帳號將產生一些系統檔案,用戶目錄建立,拷備起始檔案等,這些均可以利用命令列選項指定。此版本爲RedHat Linux提供,可幫每個新加入的用戶建立個別的group,毋須添加-n選項。
 
useradd 可使用的選項爲
-c comment 注:新帳號 password 檔的說明欄 。
-d home_dir 注:新帳號每次登入時所使用的home_dir。預設值爲default_home內login名稱,並當成登入時目錄名稱。
-e expire_date 注:帳號終止日期。日期的指定格式爲MM/DD/YY。
-f inactive_days 注:帳號過期幾日後永久停權。當值爲0時帳號則立刻被停權。而當值爲-1時則關閉此功能,預設值爲-1
-g initial_group 注:group名稱或以數字來做爲用戶登入起始用戶組(group)。用戶組名須爲現有存在的名稱。用戶組數字也須爲現有存在的用戶組。預設的用戶組數字爲1。
-G group,[...]
注:定義此用戶爲此一堆groups的成員。每個用戶組使用","區格開來,不可以夾雜空白字元。用戶組名同-g選項的限制。定義值爲用戶的起始用戶組。。
-m 注:用戶目錄如不存在則自動建立。如使用-k選項skeleton_dir內的檔案將複製至用戶目錄下。然而在/etc/skel目錄下的檔案也會複製過 去取代。任何在skeleton_dir or /etc/skel的目錄也相同會在用戶目錄下一一建立。The-k同-m不建立目錄以及不復制任何檔案爲預設值。
-M 不建立用戶目錄,即使/etc/login.defs系統檔設定要建立用戶目錄。
-n 預設值用戶用戶組與用戶名稱會相同。此選項將取消此預設值。
-r 此參數是用來建立系統帳號。系統帳號的UID會比定義在系統檔上/etc/login.defs.的UID_MIN來的小。注意useradd此用法所建 立的帳號不會建立用戶目錄,也不會在乎紀錄在/etc/login.defs.的定義值。如果你想要有用戶目錄須額外指定-m參數來建立系統帳號。
-s shell 注:用戶登入後使用的shell名稱。預設爲不填寫,這樣系統會幫你指定預設的登入shell。
-u uid uid用戶的ID值。必須爲唯一的ID值,除非用-o選項。數字不可爲負值。預設爲以/etc/login.defs中的UID_MIN的值爲準,0到UID_MIN的值之間,爲系統保留的UID ;
useradd 這麼多的參數看上去頭有點暈,我們如何用呢??其實很簡單;一個參數一個參數的試一試不就明白了??這是最好的學習方法。實踐是檢驗真理的唯一標準;
 
如果useradd 後面直接跟用戶名,不加任何參數,表示添加用戶時按事先/etc/default/adduser 和/etc/login.defs 添加新用戶的配置文件的規則來添加用戶;其實我們爲了方便,也可以把這兩個文件修改以適合我們添加用戶需要;
useradd 爲什麼還需要那麼多的參數呢?
 
原因很簡單,主要是爲了管理員方便管理用戶。useradd 是靈活的,可以跳過/dev/default/adduser 和/etc/login.defs 兩個配置文件中的規則來自定義添加用戶;比如在用戶的家目錄,在/etc/default/adduser 中可能定義在/home目錄下建立,如果我們的機器/home獨立佔一個分區,並且有點緊張,但我們又不想改變/etc/default/adduser 關於家目錄的定義,這裏我們就可以通過 adduser -d 參數把新增用戶家目錄定義到空間比較空閉的分區;
 
通過下面的幾個例子,可能有助於我們理解useradd ,其實很簡單~,學習也是這樣,先從簡單的入手,一步一步的走過來,沒有什麼難的~~
實例四:以/etc/logins.defs和/etc/default/adduser 默認的規則添加用戶;
 
[root@localhost ~]# useradd longcpu
註解:如果useradd 後面直接用戶名,表示系統讀取 /etc/login.defs和/etc/default/adduser 配置文件,根本這兩個配置文件所定義的規則來添加用戶,比如用戶的家目錄哪裏,用什麼SHELL,UID和GID的分配... ... 查看/etc/passwd的新增記錄,然後根據 /etc/login.defs和/etc/default/adduser 查看新增用戶是否符合這兩個配置文件所約定的規則;
 
實例五:練習參數的使用;
 
[root@localhost ~]# useradd -c ChinaCpu longcpu 注:添加一個新用戶amdcpu ,使用參數-c;
[root@localhost ~]# more /etc/passwd |grep longcpu 注:查看/etc/passwd 文件,並抽取longcpu的記錄;
longcpu:x:510:510:ChinaCpu:/home/longcpu:/bin/bash
注:看上去是已經有amdcpu用戶了;x是密碼段;UID和GID 都是510,ChinaCpu表示是什麼意思? 家目錄位於/home/amdcpu,SHELL是bash ;
 
[root@localhost ~]# finger longcpu 注:我們查詢一下amdcpu 用戶的信息;
Login: longcpu Name: ChinaCpu 注:-c ChinaCpu 表示用戶真實的名字或全名;
Directory: /home/longcpu Shell: /bin/bash
Never logged in.
No mail.
No Plan.
 
註解:這個例子,我們做了添加用戶、查看/etc/passwd 的變化; 並且通過finger 來查詢longcpu用戶的信息,目的是理解參數-c的用處;
 
參數-c 後面的就是就是UID:GID後面說明文字,這段文字中包括用戶真實姓名,辦公地址,辦公電話等,可以通過chfn 來更改,我們可以通過chfn 來修改用戶信息,然後查看 /etc/passwd 的變化,再來用finger 來查詢用戶信息。幾個工具組合練習一下,也容易忘記;
 
實例六:自定義用戶的家目錄、SHELL類型、所歸屬的用戶組等;
 
添加用戶longcpu,並設置其用戶真實名字爲ChinaCpu,其家目錄在/opt/longcpu,讓其歸屬爲用戶組 linuxsir、root、beinan成員,其SHELL類型爲tcsh ;
 
[root@localhost ~]# useradd -c ChinaCpu -d /opt/longcpu -G linuxsir,root,beinan -s /bin/tcsh longcpu
 
注:添加用戶longcpu ,真實名是ChinaCpu ,家目錄設置在 /opt/longcpu ,是linuxsir,root,beinan 用戶組成員, SHELL是tcsh ;
 
[root@localhost ~]# ls -ld /opt/longcpu/ 注:是不是自動創建了longcpu的家目錄?
drwxr-xr-x 3 longcpu longcpu 4096 11月 4 22:30 /opt/longcpu/
[root@localhost ~]# more /etc/passwd |grep longcpu 注:查看 /etc/passwd 中是否有longcpu用戶記錄;
longcpu:x:510:510:ChinaCpu:/opt/longcpu:/bin/tcsh
[root@localhost beinan]# finger longcpu 注:查詢longcpu用戶的信息 ;
Login: longcpu Name: ChinaCpu
Directory: /opt/longcpu Shell: /bin/tcsh
Never logged in.
No mail.
No Plan.
[root@localhost beinan]# id longcpu 注:查詢UID和GID 以及所歸屬的用戶組;
uid=510(longcpu) gid=510(longcpu) groups=510(longcpu),0(root),500(beinan),502(linuxsir)
關於在添加新用戶時用戶組,添加用戶時,如果不使用-n 參數,系統會自動建一個與用戶名同名的用戶組;
 
實例七:練習用戶有效期限;
 
在本例中,我們主要來看看-e參數,這個參數還是比較重要的,是設定用戶的帳號什麼時候過期;
 
在本例中,我們添加了一個帳號,並且設置其帳號在 2005年11月04日之前是有效的,一旦過了這個日期,便停止其登錄;
 
[root@localhost ~]# useradd -e 11/04/2005 cooler 注:添加用戶cooler,並設置其有效期爲2005年11月04日;
[root@localhost ~]# passwd cooler 注:設置用戶cooler密碼;
Changing password for user cooler.
New UNIX password: 注:設定cooler的密碼;
Retype new UNIX password: 注:覈實設定密碼;
passwd: all authentication tokens updated successfully. 注:設置成功;
如何驗證-e 是不是真的有效?我寫這篇文檔的時間是 2005年11月05號,所以添加這個cooler用戶肯定是過期的,就是他有密碼也不能登錄;
 
有的弟兄會問,他把有效期的記錄放在哪裏了呢?其實我們在以前的文檔中已經說過了,是寫在/etc/shadow文件中了;
 
請參考: 《用戶(user)和用戶組(group)配置文件詳解》
 
2、adduser 工具;
 
在Fedora 系統中,adduser和useradd 用法是一樣的,但在 Slackware 系統中 adduser 是通過人機交互的方法來添加用戶,其實和useradd 加各項參數來自定義添加用戶所達到的目的是一樣的,只不過在Slackware 中,useradd 是以人機交互的提問式的進行;這樣我們沒有必要知道那麼多的參數,一樣可以達到自定義添加用戶;
 
[root@localhost ~]# adduser 注:運行adduser命令;
Login name for new user []: bluemoon 注:添加新用戶 bluemoon
User ID ('UID') [ defaults to next available ]: 1200 注:用戶的UID ,UID 是唯一的;如果有提示說被佔用,就選比較大的UID ,比如1300
Initial group [ users ]: users 注:初始化用戶組(或主用戶組)爲users,這個用戶組也是可以自己定義的,但用戶組必須存在,如果不存在,您可以用groupadd來添加
Additional groups (comma separated) []: root,beinan 注:附加用戶組,這個也是自己定義的,多個用戶組之間用,號分割;
Home directory [ /home/bluemoon ] 注:定義用戶的家目錄位置,也是可以自己定義的,比如/opt/bluemoon ;
Shell [ /bin/bash ] 注:所用SHELL ,此處用的是bash ;
Expiry date (YYYY-MM-DD) []: 注:用戶的有效日期,如果不設置就直接回車,表示從不過期;如果設置就以2005-11-05這樣的格式來輸入;
New account will be created as follows: 注:創建的用戶情況如下;
---------------------------------------
Login name.......: bluemoon
UID..............: 1200
Initial group....: users
Additional groups: root
Home directory...: /home/bluemoon
Shell............: /bin/bash
Expiry date......: [ Never ]
This is it... if you want to bail out, hit Control-C. Otherwise, press
ENTER to go ahead and make the account.
注:在這裏按回車就開始創建,如果認爲這樣不合理,就按CTRL+C 來中斷;
Creating new account... 這樣就創建好了;系統會自動提示我們修改用戶的信息,比如用戶的全名、房間號、電話等...... 以及用戶的密碼;
Changing the user information for bluemoon
Enter the new value, or press ENTER for the default
Full Name []: bluemoon Linux
Room Number []: 503
Work Phone []: 0411-8888888
Home Phone []: 0411-9999999
Other []:
Changing password for bluemoon
Enter the new password (minimum of 5, maximum of 127 characters)
Please use a combination of upper and lower case letters and numbers.
New password: 注:設置用戶bluemoon的密碼;
Re-enter new password: 注:驗證一次;
Password changed. 注:設置密碼成功
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章