Linux是一個多用戶的操作系統,她有完美的用戶管理工具,這些工具包括用戶的查詢、添加、修改,以及用戶之間相互切換的工具等;通過這些工具,我們能安全、輕松的完成用戶管理;
在這裡我們要引入用戶控制工具的概念,比如對用戶添加的useradd或adduser ,對用戶刪除的 userdel ,與修改用戶相關信息的 usermod、chfn、chsh ,還有密碼設置工具passwd 等等;這些工具只所以被稱為用戶控制工具,理由是她們是控制和管理用戶的工具。
一、與用戶管理相關的配置文件;
1、/etc/passwd 和/etc/groups
我們對用戶和用戶組進行添加、修改、刪除最終目的是修改系統用戶 /etc/passwd和其加密資訊文件 /etc/shadows 以及用戶組的 /etc/groups和其加密資訊文件/etc/gshadow,所以對用戶和用戶組的添加並不僅僅是只能通過用戶添加、修改、刪除等用戶控制工具來完成,我們還能直接修改與用戶和用戶組相應的配置文件來達到目的。在 《用戶(user)和用戶組(group)配置文件詳解》一文中,我有談過通過修改用戶及用戶組配置文件的辦法來添加、刪除、修改用戶,進而達到對系統用戶的管理;
參考文檔:
《Linux 用戶(user)和用戶組(group)管理概述》
《用戶(user)和用戶組(group)配置文件詳解》
2、超級權限控制sudo 的配置文件 /etc/sudoers ;
參考文檔: 《Linux 系統中的超級權限的控制》
3、添加用戶規則文件 /etc/login.defs 和 /etc/default/useradd
參考文檔:《Linux 用戶(user)和用戶組(group)管理概述》
二、添加用戶工具和方法;
添加用戶工具有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此用法所建立的帳號不會建