1. 程式人生 > >Linux 使用者管理工具介紹

Linux 使用者管理工具介紹

作者:北南南北
贊助:
來自:LinuxSir.Org
摘要: 本文主要介紹Linux系統的使用者和使用者組的查詢、新增、修改及刪除等管理工具;


目錄索引


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
正文
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Linux是一個多使用者的作業系統,她有完美的使用者管理工具,這些工具包括使用者的查詢、新增、修改,以及使用者之間相互切換的工具等;通過這些工具,我們能安全、輕鬆的完成使用者管理;

在這裡我們要引入使用者控制工具的概念,比如對使用者新增的useradd或adduser ,對使用者刪除的 userdel ,與修改使用者相關資訊的 usermod、chfn、chsh ,還有密碼設定工具passwd 等等;這些工具只所以被稱為使用者控制工具,理由是她們是控制和管理使用者的工具。


一、與使用者管理相關的配置檔案;


1、/etc/passwd 和/etc/groups

我們對使用者和使用者組進行新增、修改、刪除最終目的是修改系統使用者 /etc/passwd和其加密資訊檔案 /etc/shadows 以及使用者組的 /etc/groups和其加密資訊檔案/etc/gshadow,所以對使用者和使用者組的新增並不僅僅是隻能通過使用者新增、修改、刪除等使用者控制工具來完成,我們還能直接修改與使用者和使用者組相應的配置檔案來達到目的。在 《使用者(user)和使用者組(group)配置檔案詳解》一文中,我有談過通過修改使用者及使用者組配置檔案的辦法來新增、刪除、修改使用者,進而達到對系統使用者的管理;

參考文件:


2、超級許可權控制sudo 的配置檔案 /etc/sudoers ;


3、新增使用者規則檔案 /etc/login.defs 和 /etc/default/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目錄下,我們先舉個例子;

例項一:不加任何引數,直接新增使用者;

[[email protected] beinan]# useradd  beinanlinux
[[email protected] 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欄位,得出如下一行;

[[email protected] 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顯示目前預設的值;

[[email protected] 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 ,則應該用下面的命令;

[[email protected] beinan]# useradd -D -s /bin/tcsh  注:把新增使用者時的SHELL 改為tcsh ;

[[email protected] 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 預設的規則新增使用者;

[[email protected] ~]# useradd  longcpu

註解:如果useradd 後面直接使用者名稱,表示系統讀取 /etc/login.defs和/etc/default/adduser 配置檔案,根本這兩個配置檔案所定義的規則來新增使用者,比如使用者的家目錄哪裡,用什麼SHELL,UID和GID的分配... ... 檢視/etc/passwd的新增記錄,然後根據 /etc/login.defs和/etc/default/adduser 檢視新增使用者是否符合這兩個配置檔案所約定的規則;

例項五:練習引數的使用;

[[email protected] ~]# useradd -c ChinaCpu  longcpu  注:新增一個新使用者amdcpu ,使用引數-c;

[[email protected] ~]# 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 ;


[[email protected] ~]# 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 ;

[[email protected] ~]# useradd  -c ChinaCpu  -d /opt/longcpu   -G linuxsir,root,beinan -s /bin/tcsh  longcpu



注:
新增使用者longcpu ,真實名是ChinaCpu ,家目錄設定在 /opt/longcpu ,是linuxsir,root,beinan 使用者組成員, SHELL是tcsh ;

[[email protected] ~]# ls -ld /opt/longcpu/   注:是不是自動建立了longcpu的家目錄?
drwxr-xr-x  3 longcpu longcpu 4096 11月  4 22:30 /opt/longcpu/

[[email protected] ~]# more /etc/passwd |grep longcpu  注:檢視 /etc/passwd 中是否有longcpu使用者記錄;
longcpu:x:510:510:ChinaCpu:/opt/longcpu:/bin/tcsh

[[email protected] beinan]# finger longcpu  注:查詢longcpu使用者的資訊 ;
Login: longcpu                           Name: ChinaCpu
Directory: /opt/longcpu                  Shell: /bin/tcsh
Never logged in.
No mail.
No Plan.

[[email protected] 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日之前是有效的,一旦過了這個日期,便停止其登入;

[[email protected] ~]# useradd  -e 11/04/2005 cooler  注:新增使用者cooler,並設定其有效期為2005年11月04日;
[[email protected] ~]# 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檔案中了;


2、adduser 工具;

在Fedora 系統中,adduser和useradd 用法是一樣的,但在 Slackware 系統中 adduser 是通過人機互動的方法來新增使用者,其實和useradd 加各項引數來自定義新增使用者所達到的目的是一樣的,只不過在Slackware 中,useradd 是以人機互動的提問式的進行;這樣我們沒有必要知道那麼多的引數,一樣可以達到自定義新增使用者;

[[email protected] ~]# 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.  注:設定密碼成功


3、通過修改/etc/passwd 管理(新增、刪除、修改)使用者的方法;


4、新增使用者組命令groupadd ;

語法格式:


groupadd [-g gid [-o]] [-r] [-f] group

groupadd 可指定使用者組名稱來建立新的使用者組帳號,需要時可從系統中取得新使用者組值。groupadd有下列選項可用。

-g  後接GID值,除非使用-o引數不然該值必須是唯一,不可相同,數值不可為負,預設值以/etc/login.defs為準;

-r

此引數是用來建立系統帳號的GID會比定義在系統檔檔案上/etc/login.defs 的GID_MIN來的小。注意useradd此用法所建立的帳號不會建立使用者目錄,也不會紀錄在/etc/login.defs.的定義值。如果你想要有使用者目錄須額外指定-m引數來建立系統帳號,它會自動幫你選定一個小於的GID_MIN的值,不需要再加上-g引數。

-f  This is force flag.新增一個已經存在的使用者組帳號,系統會出現錯誤訊息然後結束groupadd。如果是這樣的情況,不會新增這個使用者組(如果是這個情況下,系統不會再新增一次) 也可同時加上-g選項,當你加上一個GID,此時GID就不用是唯一值,可不加-o引數,建好使用者組後會顯結果(adding a group as neither -g or -o options were specified)。

其實增加使用者組的,用起來還是簡單一點為好;比如下面的例子,新增GID為666的使用者組google;

[[email protected] ~]# groupadd -g 666 google


三、passwd 設定或修改使用者密碼;


1、passwd 簡單說明;

我們已經學會如何新增使用者了,所以我們還要學習設定或修改使用者的密碼;passwd命令的用法也很多,我們只選如下的幾個引數加以說明;想了解更多,請參考man passwd或passwd --help ;


passwd [OPTION...]

passwd 作為普通使用者和超級許可權使用者都可以執行,但作為普通使用者只能更改自己的使用者密碼,但前提是沒有被root使用者鎖定;如果root使用者執行passwd ,可以設定或修改任何使用者的密碼;

passwd 命令後面不接任何引數或使用者名稱,則表示修改當前使用者的密碼;請看下面的例子;

[[email protected] ~]# passwd   注:沒有加任何使用者,我是用root使用者來執行的passwd 表示修改root使用者的密碼;下面也有提示;
Changing password for user root.
New UNIX password:  注:請輸入新密碼;
Retype new UNIX password:  注:驗證新密碼;
passwd: all authentication tokens updated successfully.  注:修改root密碼成功;

如果是普通使用者執行passwd 只能修改自己的密碼;

如果新建使用者後,要為新使用者建立密碼,則用 passwd 使用者名稱 ,注意要以root使用者的許可權來建立;

[[email protected] ~]# passwd beinan  注:更改或建立beinan使用者的密碼;
Changing password for user beinan.
New UNIX password:  注:請輸入新密碼;
Retype new UNIX password:  注:再輸入一次;
passwd: all authentication tokens updated successfully.  注:成功;

普通使用者如果想更改自己的密碼,直接執行passwd即可;比如當前操作的使用者是beinan;

[[email protected] ~]$ passwd
Changing password for user beinan. 注:更改beinan使用者的密碼;
(current) UNIX password: 注:請輸入當前密碼;
New UNIX password: 注:請輸入新密碼;
Retype new UNIX password: 注:確認新密碼;
passwd: all authentication tokens updated successfully.  注:更改成功;


2、passwd 幾個比較重要的引數;

[[email protected] beinan]# passwd --help
Usage: passwd [OPTION...] <accountName>
  -k, --keep-tokens       keep non-expired authentication tokens
                          注:保留即將過期的使用者在期滿後能仍能使用;
  -d, --delete            delete the password for the named account (root only)
                          注:刪除使用者密碼,僅能以root許可權操作;
  -l, --lock              lock the named account (root only)
                          注:鎖住使用者無權更改其密碼,僅能通過root許可權操作;
  -u, --unlock            unlock the named account (root only)
                          注:解除鎖定;
  -f, --force             force operation
                          注:強制操作;僅root許可權才能操作;
  -x, --maximum=DAYS      maximum password lifetime (root only) 注:兩次密碼修正的最大天數,後面接數字;僅能root許可權操作;
  -n, --minimum=DAYS      minimum password lifetime (root only)  注:兩次密碼修改的最小天數,後面接數字,僅能root許可權操作;
  -w, --warning=DAYS      number of days warning users receives before  注:在距多少天提醒使用者修改密碼;僅能root許可權操作;
                          password expiration (root only)
  -i, --inactive=DAYS     number of days after password expiration when an  注:在密碼過期後多少天,使用者被禁掉,僅能以root操作;
                          account becomes disabled (root only)
  -S, --status            report password status on the named account (root   注:查詢使用者的密碼狀態,僅能root使用者操作;
                          only)
  --stdin                 read new tokens from stdin (root only) 

比如我們讓某個使用者不能修改密碼,可以用-l 引數來鎖定:

[[email protected] ~]# passwd -l beinan  注:鎖定使用者beinan不能更改密碼;
Locking password for user beinan.
passwd: Success           注:鎖定成功;
[[email protected] ~]# su beinan  注:通過su切換到beinan使用者;
[[email protected] ~]$ passwd  注:beinan來更改密碼;
Changing password for user beinan.
Changing password for beinan
(current) UNIX password: 注:輸入beinan的當前密碼;
passwd: Authentication token manipulation error  注:失敗,不能更改密碼;


再來一例:

[[email protected] ~]# passwd -d beinan  注:清除beinan使用者密碼;
Removing password for user beinan. 
passwd: Success                        注:清除成功;
[[email protected] ~]# passwd -S beinan  注:查詢beinan使用者密碼狀態;
Empty password.                     注:空密碼,也就是沒有密碼;

注意: 當我們清除一個使用者的密碼時,登入時就無需密碼;這一點要加以注意;


3、chage 修改使用者密碼有效期限的命令;

chage 用語法格式:

chage [-l] [-m 最小天數] [-M 最大天數] [-W 警告] [-I 失效日] [-E 過期日] [-d 最後日] 使用者

前面已經說的好多了,這個只是一筆帶過吧,知道有這個命令就行,自己實踐實踐再說,大體和psswd有些引數的用法差不多;


四、刪除使用者和使用者組的工具, userdel和 groupdel 介紹;


1、userdel 用法;

userdel 的語法格式:


userdel [-r] 名稱

userdel很簡單,只有一個引數可選 -r ;如果加引數-r ,表示在刪除使用者的同時,一併把使用者的家目錄及本地郵件儲存的目錄或檔案也一同刪除;比如我們現在有兩個使用者bnnb和lanhaitun,其家目錄都位於/home目錄中,現在我們來刪除這兩個使用者;

[[email protected] ~]# userdel bnnb  注:刪除使用者bnnb,但不刪除其家目錄及檔案;
[[email protected] ~]# ls -ld /home/bnnb  注:檢視其家目錄是否存在;
drwxr-xr-x  14 501 501 4096  8月 29 16:33 /home/bnnb    注:存在;

[[email protected] ~]# ls -ld /home/lanhaitun   注:檢視lanhaitun家目錄是否存在;
drwx------  4 lanhaitun lanhaitun 4096 11月  5 14:50 /home/lanhaitun   注:存在;

[[email protected] ~]# userdel -r  lanhaitun  注:刪除使用者lanhaitun,其家目錄及檔案一併刪除;

[[email protected] ~]# ls -ld /home/lanhaitun  注:檢視是否在刪除lanhaitun 使用者的同時,也一併把其家目錄和檔案一同刪除;
ls: /home/lanhaitun: 沒有那個檔案或目錄  注:已經刪除;

警告: 請不要輕易用-r引數;他會刪除使用者的同時刪除使用者所有的檔案和目錄,切記;如果使用者目錄下有重要的檔案,在刪除前請備份;

其實也有最簡單的辦法,但這種辦法有點不安全,也就是直接在/etc/passwd中刪除您想要刪除使用者的記錄;但最好不要這樣做,/etc/passwd 是極為重要的檔案,可能您一不小心會操作失誤;


2、groupdel的用法;

groupdel 是用來刪除使用者組的;

語法格式:groupdel 使用者組

比如:

[[email protected] ~]# groupdel lanhaitun


五、修改使用者的工具介紹;

我們前面已經多次說過使用者配置檔案的重要性了,其實我們無論怎麼改,都是改與使用者相關的配置檔案;如果我們與使用者相關的配置檔案的規則,可以直接修改配置檔案,在這裡就不再多說了,請參看相關文件吧,謝謝;


1、chfn 修改使用者資訊工具;

chfn 這個工具主要是用來改使用者的全名,辦公室地址,電話之類的;用法如下:

chfn   [ -f full-name ]  [ -o office ]  [ -p office-phone ]  [ -h home-phone ] [ -u ] [ -v ] [ username ]

最簡單的方法是

chfn 使用者名稱

[[email protected] ~]# chfn beinanlinux  注:更改使用者beinanlinux的資訊;
Changing finger information for beinanlinux.
Name []: BeiNan.Linux  注:使用者全名BeiNan.Linux ,隨便寫一個就行;
Office []: ChinaDL
Office Phone []: 66666666
Home Phone []: 99999999

Finger information changed.  注:更改完成;

我們怎麼能知道更改好了呢??可以通過finger 或直接檢視/etc/passwd檔案;

[[email protected] ~]# finger beinanlinux
Login: beinanlinux                      Name: BeiNan.Linux
Directory: /home/beinanlinux            Shell: /bin/bash
Office: ChinaDL                         Home Phone: 99999999
Last login Sat Nov  5 11:27 (CST) on tty2
No mail.
No Plan.

chfn 究竟改了/etc/passwd 檔案中beinanlinux使用者的哪部份呢??

[[email protected] ~]# more /etc/passwd |grep beinanlinux
beinanlinux:x:509:509:BeiNan.Linux,ChinaDL,66666666,99999999:/home/beinanlinux:/bin/bash

通過more /etc/passwd ,然後來抽取 beinanlinux記錄,看一下紅字標出的,就是我們通過chfn 修改過的地方,所以我們可以直接通過修改/etc/passwd檔案來達到目的;


2、chsh 改變使用者的SHELL型別;

[[email protected] ~]# chsh --help
Usage: chsh [ -s shell ] [ --list-shells ] [ --help ] [ --version ]   [ username ]

如果chsh 不加任何引數及使用者名稱的情況下,預設為更改當前操作使用者的SHELL型別;

舉例說明:

[[email protected] ~]# chsh --list-shells  注:列出當前系統中所有的SHELL;
/bin/sh
/bin/bash
/sbin/nologin     注:這個是不允許使用者登入系統所用,是極為有用的;您可以通過檢視/etc/passwd 中看哪些使用者是nologin;
/bin/ksh
/bin/tcsh
/bin/csh
/bin/zsh

[[email protected] ~]# finger beinanlinux |grep Shell  注:檢視使用者beinanlinux 所用的SHELL型別;
Directory: /home/beinanlinux            Shell: /bin/bash   注:beinanlinux用的是bash ;

[[email protected] ~]# chsh -s /bin/ksh beinanlinux  注:更改beinanlinux所用的shell 為ksh ;
Changing shell for beinanlinux.
Shell changed.               注:更改完成;
[[email protected] ~]# finger beinanlinux |grep Shell  注:再次查詢beinanlinux所用的SHELL;
Directory: /home/beinanlinux            Shell: /bin/ksh  注:看來已經改過來了;

chsh 還是有用的,特加是不允許使用者登入時,我們可以把使用者的SHELL改到 /sbin/nologin;系統中一些虛擬使用者大多是不能登入系統的,這對於系統安全來說是極為重要;通過下面的命令檢視一下系統中哪些使用者是沒有登入許可權的?

[[email protected] ~]# more /etc/passwd |grep nologin



3、usermod 使用者修改工具(極其強大)

usermod 不僅能改使用者的SHELL型別,所歸屬的使用者組,也能改使用者密碼的有效期,還能改登入名。usermod 如此看來就是能做到使用者帳號大轉移;比如我把使用者A改為新使用者B;

usermod  [-u uid [-o]] [-g group] [-G group,...]
                [-d 主目錄 [-m]] [-s shell] [-c 註釋] [-l 新名稱]
                [-f 失效日] [-e 過期日] [-p 密碼] [-L|-U] 使用者名稱
usermod 命令會參照你命令列上指定的部份修改系統帳號檔。下列為usermod可選用的引數。

-c comment
       更新使用者帳號password檔中的註解欄,一般是使用chfn(1)來修改。

-d home_dir
   更新使用者新的登入目錄。如果給定-m選項,使用者舊目錄會搬到新的目錄去,如舊目錄不存在則建個新的。

-e expire_date 加上使用者帳號停止日期。日期格式為MM/DD/YY.

-f inactive_days 帳號過期幾日後永久停權。當值為0時帳號則立刻被停權。而當值為-1時則關閉此功能。預設值為-1。

-g initial_group 更新使用者新的起始登入使用者組。使用者組名須已存在。使用者組ID必須參照既有的的使用者組。使用者組ID預設值為1。

-G group,[...] 定義使用者為一堆groups的成員。每個使用者組使用","區格開來,不可以夾雜空白字元。使用者組名同-g選項的限制。如果使用者現在的使用者組不再此列,則將使用者由該使用者組中移除。

-l login_name  變更使用者login時的名稱為login_name。其它不變。特別是,使用者目錄名應該也會跟著更動成新的登入名。

-s shell  指定新登入shell。如此欄留白,系統將選用系統預設shell。

-u uid使用者ID值。必須為唯一的ID值,除非用-o選項。數字不可為負值。預設為最小不得小於/etc/login.defs中定義的UID_MIN值。0到UID_MIN值之間是傳統上保留給系統帳號使用。使用者目錄樹下所有的檔案目錄其userID會自動改變。放在使用者目錄外的檔案則要自行手動更動。

警告:usermod不允許你改變正在線上的使用者帳號名稱。當usermod用來改變userID,必須確認這名user沒在電腦上執行任何程式。你需手動更改使用者的crontab檔。也需手動更改使用者的at工作檔。採用NISserver須在server上更動相關的NIS設定。

舉個簡單的例子,我們在前面說了關於useradd的工具,而usermod 工具和useradd的引數差不多;兩者不同之處在於useradd是新增,usermod 是修改;

[[email protected] ~]# usermod -d /opt/linuxfish -m   -l fishlinux -U linuxfish

注:把linuxfish 使用者名稱改為fishlinux ,並且把其家目錄轉移到 /opt/linuxfish ;

[[email protected] ~]# ls -la /opt/linuxfish/   注:檢視使用者fishlinux的家目錄下的檔案及屬主;
總用量 48
drwxr-xr-x   3 fishlinux linuxfish 4096 11月  5 16:46 .
drwxrwxrwx  29 root      root      4096 11月  5 16:48 ..
-rw-r--r--   1 fishlinux linuxfish   24 11月  5 16:46 .bash_logout
-rw-r--r--   1 fishlinux linuxfish  191 11月  5 16:46 .bash_profile
-rw-r--r--   1 fishlinux linuxfish  124 11月  5 16:46 .bashrc
-rw-r--r--   1 fishlinux linuxfish 5619 11月  5 16:46 .canna
-rw-r--r--   1 fishlinux linuxfish  438 11月  5 16:46 .emacs
-rw-r--r--   1 fishlinux linuxfish  120 11月  5 16:46 .gtkrc
drwxr-xr-x   3 fishlinux linuxfish 4096 11月  5 16:46 .kde
-rw-r--r--   1 fishlinux linuxfish    0 11月  5 16:46 mydoc.txt
-rw-r--r--   1 fishlinux linuxfish  658 11月  5 16:46 .zshrc

[[email protected] ~]# more  /etc/passwd |grep fishlinux  注:檢視有關fishlinux的記錄;
fishlinux:x:512:512::/opt/linuxfish:/bin/bash

通過上面的例子,我們發現檔案的使用者組還沒有變,如果您想改變為fishlinux使用者組,如果想用通過 usermod來修改,就要先新增fishlinux使用者組;然後用usermod -g 來修改 ,也可以用chown -R fishlinux:fishlinux /opt/finshlinux 來改;

警告: usermod 最好不要用它來改使用者的密碼,因為他在/etc/shadow中顯示的是明口令;修改使用者的口令最好用passwd ;

[[email protected] ~]# usermod -p 123456 fishlinux  注:修改fishlinux的口令是123456 ;
[[email protected] ~]# more /etc/shadow |grep fishlinux  注:查詢/etc/shadow檔案中fishlinux的口令;我們看到明顯是沒有加密;
fishlinux:123456:13092:0:99999:7:::


4、userinfo 圖形介面的修改工具;

userinfo 系統普通使用者都能呼叫,但都是修改當前操作使用者的;還是點滑鼠完成吧,多點幾下就OK了。

[[email protected] ~]# userinfo


六、後記;

本文件勉強有了個形,修正是肯定的了;在修正的同時,我會計劃與下一篇文件,可能會寫檔案與許可權方面的。但願我能堅持住;

生活總是枯燥的,但這並不會影響我寫文件的心情。每當寫完一個文件,雖然僅有幾個弟兄支援,但我還是很開心。我整天自以為是大俠了,大俠只是我的一個夢想吧。

誰讓我學的是文科呢?


七、關於本文;

本文寫起來比超級許可權控制那篇文件要容易點,畢竟只是使用者控制工具的介紹;從文字量來看好象很大,但文字量的大小並不能說明什麼問題,只有初學者能讀得懂才是好文件。

由於篇幅較長,我會慢慢修正,當然弟兄們的修正,我是極為歡迎的,謝謝;


八、致謝;


九、參考文件;

本文參考了相關命令的man 和help ,比如 useradd 和userinfo 的幫助文件是中文,我就照搬過來了,改一改翻譯錯誤的地方。向中譯本的作者致意 ;


十、相關文件;