http://fedora.linuxsir.org/main/?q=node/98
位址:http://blog.csdn.net/tianlesoftware/article/details/9858235
原文檔寫的很詳細,一是為了友善閱讀,二是為了加強了解,還是邊看邊自己動手練習了一下。重新整理後的内容如下。感謝原作者的辛苦勞動。
我的測試環境:redhat 6.3
使用者(User)和使用者組(Group)的配置檔案,是系統管理者最應該了解和掌握的系統基礎檔案之一,從另一方面來說,了解這些檔案也是系統安全管理的重要組成部份。做為一個合格的系統管理者應該對使用者和使用者組配置檔案透徹了解才行。
一.使用者(User)相關
談到使用者,就不得不談使用者管理,使用者配置檔案,以及使用者查詢和管理的控制工具。使用者管理主要通過修改使用者配置檔案完成;使用者管理控制工具最終目的也是為了修改使用者配置檔案。
什麼是使用者查詢和管理控制工具呢?
使用者查詢和控制工具是查詢、添加、修改和删除使用者等系統管理工具。比如查詢使用者的id和finger指令,添加使用者的useradd 或adduser
、userdel 使用者的删除、設定密碼的passwd指令 、修改使用者usermod 等等。
我們需要知道的是通過使用者查詢和控制工具所進行的動作的最終目的也是修改使用者配置檔案。是以我們進行使用者管理的時候,直接修改使用者配置檔案一樣可以達到使用者管理的目的。通過上面的解說,我們能實實在在的感覺到使用者(User)配置檔案的重要性。
1.1 關于/etc/passwd和 UID
/etc/passwd 是系統識别使用者的一個檔案,做個不恰當的比喻,/etc/passwd 是一個花名冊,系統所有的使用者都在這裡有登入記載。
[root@dave ~]# useradd dave
[root@dave ~]# passwd dave
Changing password for user dave.
New password:
BAD PASSWORD: it is too short
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated successfully.
[root@dave ~]#
當我們以dave 這個賬号登入時,系統首先會查閱 /etc/passwd 檔案,看是否有dave 這個賬号,然後确定dave的UID,通過UID
來确認使用者和身份,如果存在則讀取/etc/shadow 影子檔案中所對應的dave的密碼;如果密碼核實無誤則登入系統,讀取使用者的配置檔案。
[root@dave ~]# cat/etc/passwd|grep dave
dave:x:54322:54323::/home/dave:/bin/bash
[root@dave ~]# cat/etc/shadow|grep dave
dave:$6$vOI742LC$Rb4oNevqA1c5gXB0isGqvSK3l9Q/QcJ.Dc40xJ01gMad2qonM/dwXzkrRSIZV7gF.FHNlu/nBPkMybnnoV9DV/:15800:0:99999:7:::
1.1.1 /etc/passwd 的内容了解
在/etc/passwd 中,每一行都表示的是一個使用者的資訊;一行有7個段位;每個段位用:号分割。 如下:
[root@dave ~]# tail -5/etc/passwd
oprofile:x:16:16:Specialuser account to be used by
OProfile:/home/oprofile:/sbin/nologin
vboxadd:x:496:1::/var/run/vboxadd:/bin/false
oracle:x:54321:54321::/home/oracle:/bin/bash
nx:x:495:490::/usr/NX/home/nx:/usr/NX/bin/nxserver
第一字段:使用者名(也被稱為登入名);
第二字段:密碼;在例子中我們看到的是一個x,其實密碼已被映射到/etc/shadow 檔案中;
第三字段:UID ;請參看本文的UID的解說;
第四字段:GID;請參看本文的GID的解說;
第五字段:使用者名全稱,這是可選的,可以不設定,在oprofile這個使用者中,使用者的全稱是Special user account to be used
by OProfile;而其他使用者沒有設定全稱;
第六字段:使用者的家目錄所在位置;oracle 這個使用者是/home/oracle
第七字段:使用者所用SHELL 的類型,oracle使用者用的是 bash ;是以設定為/bin/bash ;
1.1.2 關于UID 的了解
UID 是使用者的ID
值,在系統中每個使用者的UID的值是唯一的。更确切的說每個使用者都要對應一個唯一的UID
,系統管理者應該確定這一規則。系統使用者的UID的值從0開始,是一個正整數,至于最大值可以在/etc/login.defs 可以查到,一般Linux發行版約定為60000。
[root@dave~]# cat /etc/login.defs |grep -v
^#
MAIL_DIR /var/spool/mail
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
UID_MIN 500
UID_MAX 60000
GID_MIN 500
GID_MAX 60000
CREATE_HOME yes
UMASK 077
USERGROUPS_ENAB yes
ENCRYPT_METHOD SHA512
在Linux 中,root的UID是0,擁有系統最高權限。 UID 在系統中具有唯一特性,做為系統管理者應該確定這一标準,UID
的唯一性關系到系統的安全,應該值得我們關注!
比如我在/etc/passwd 中把dave的UID 改為0後,你設想會發生什麼呢?dave這個使用者會被确認為root使用者。dave這個帳号可以進行所有root的操作。
[root@dave ~]# cat/etc/passwd|egrep 'root|dave'
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
UID 是确認使用者權限的辨別,使用者登入系統所處的角色是通過UID 來實作的,而非使用者名,切記;把幾個使用者共用一個UID
是危險的,比如我們上面所談到的,把普通使用者的UID 改為0,和root共用一個UID
,這事實上就造成了系統管理權限的混亂。如果我們想用root權限,可以通過su或sudo來實作;切不可随意讓一個使用者和root分享同一個UID 。
UID是唯一性,隻是要求管理者所做的,其實我們修改/etc/passwd 檔案,可以修改任何使用者的UID的值為0,一般情況下,每個Linux的發行版都會預留一定的UID和GID給系統虛拟使用者占用,虛拟使用者一般是系統安裝時就有的,是為了完成系統任務所必須的使用者,但虛拟使用者是不能登入系統的,比如ftp、nobody、adm、rpm、bin、shutdown等;
linux系統會把前499 個UID和GID 預留出來,我們添加新使用者時的UID 從500開始的,GID也是從500開始。
有的系統可能會有出入,具體預留多少,可以檢視/etc/login.defs檔案中的 UID_MIN 的最小值;
我們這裡UID_MIN是500,而UID_MAX 值為60000,也就是說我們通過adduser預設添加的使用者的UID的值是500到60000之間;
通過adduser不指定UID來添加使用者,每次添加都會從使用者手工添加使用者的UID和GID的最大值往上增加1。
[root@dave home]# useradddave
[root@dave home]# cat/etc/passwd|grep dave
dave:x:501:502::/home/dave:/bin/bash
[root@dave home]# cat/etc/group|grep dave
dave:x:502:
1.2 關于/etc/shadow
1.2.1 /etc/shadow 概說
/etc/shadow檔案是/etc/passwd 的影子檔案,這個檔案并不由/etc/passwd
而産生的,這兩個檔案是應該是對應互補的;shadow内容包括使用者及被加密的密碼以及其它/etc/passwd
不能包括的資訊,比如使用者的有效期限等;這個檔案隻有root權限可以讀取和操作,權限如下:
[root@dave home]# ll/etc/shadow
----------.1 root root1137 Apr 6 06:40
/etc/shadow
/etc/shadow
的權限不能随便改為其它使用者可讀,這樣做是危險的。如果您發現這個檔案的權限變成了其它使用者組或使用者可讀了,要進行檢查,以防系統安全問題的發生;
如果我們以普通使用者檢視這個檔案時,應該什麼也檢視不到,提示是權限不夠:
[root@dave home]# su - dave
[dave@dave ~]$ cat/etc/shadow
cat: /etc/shadow: Permissiondenied
[dave@dave ~]$
1.2.2 /etc/shadow 的内容分析
/etc/shadow 檔案的内容包括9個段位,每個段位之間用:号分割;如下:
從/etc/shadow檔案中取了如下内容:
sync:*:15064:0:99999:7:::
shutdown:*:15064:0:99999:7:::
oprofile:!!:15566::::::
vboxadd:!!:15566::::::
oracle:$6$M1THq……ONvuu5RCfuLb9c63u0:15566:0:99999:7:::
dave:$6$ASwiI……dNSPfmWfNiij9/7Hbw.86.:15800:0:99999:7:::
第一字段:使用者名(也被稱為登入名),在/etc/shadow中,使用者名和/etc/passwd
是相同的,這樣就把passwd 和shadow中用的使用者記錄聯系在一起;這個字段是非空的;
第二字段:密碼(已被加密),這裡有4種值,*,! 和!!,還有就是加密後的密碼。這個字段是非空的;
"NP" or "!" or null - No password, the accounthas no password.
"LK" or "*"
- the account is Locked, user will be unable tolog-in
"!!" - the password has
expired
第三字段:上次修改密碼的時間;這個時間是從1970年01月01日算起到最近一次修改密碼的時間間隔(天數),可以通過passwd
來修改使用者的密碼,然後檢視/etc/shadow中此字段的變化;
第四字段:兩次修改密碼間隔最少的天數;如果設定為0,則禁用此功能;也就是說使用者必須經過多少天才能修改其密碼;此項功能用處不是太大;預設值是通過/etc/login.defs檔案定義中擷取,PASS_MIN_DAYS
中有定義;
第五字段:兩次修改密碼間隔最多的天數;這個能增強管理者管理使用者密碼的時效性,應該說在增強了系統的安全性;如果是系統預設值,是在添加使用者時由/etc/login.defs檔案定義中擷取,在PASS_MAX_DAYS
中定義;
第六字段:提前多少天警告使用者密碼将過期;當使用者登入系統後,系統登入程式提醒使用者密碼将要廢棄;如果是系統預設值,是在添加使用者時由/etc/login.defs檔案定義中擷取,在PASS_WARN_AGE
第七字段:在密碼過期之後多少天禁用此使用者;此字段表示使用者密碼廢棄多少天後,系統會禁用此使用者,也就是說系統會不能再讓此使用者登入,也不會提示使用者過期,是完全禁用;
第八字段:使用者過期日期;此字段指定了使用者廢棄的天數(從1970年的1月1日開始的天數),如果這個字段的值為空,帳号永久可用;
第九字段:保留字段,目前為空,以備将來Linux發展之用;如果更為詳細的,請用 man
shadow來檢視幫助,您會得到更為詳盡的資料;
看具體的分析:
[root@dave home]# cat/etc/shadow|grep root
root:$6$rhOLRand$64hQaBfM12GZeliBxpuVCJ5OCKealgHXUruEVnR2KUTOhKoBGa6D/NoEi30D1dWxgUXEWEGNKAOs0mIbil5OG/:15566:0:99999:7:::
第一字段:使用者名,root
第二字段:被加密的密碼
第三字段:表示上次更改密碼的天數(距1970年01月01日),在例子中root使用者更改密碼的時間距1970年01月01日的天數為15566;
我們估算一下今天到1970年1月1号的時間差:
[root@dave home]#time1=$(($(date +%s -d '2013-04-09') - $(date +%s -d
'1970-01-01 00:00:00')));
[root@dave home]# echo$time1
1365465600
[root@dave home]# expr1365465600 / 3600 / 24
15804
[root@dave home]#
相差15804天。基本和我們裡面的值差不多。
我們用passwd指令重置一下root使用者的密碼:
root:$6$C40per4D$4Nc/UXf3tj9/gJ1hZUz.z/bIKM04qOtOs/15HhCfHJdqGk1fh.mNFGMaYfSGRAGNRGT09TmgM3kRvPipTx/Wl.:15801:0:99999:7:::
這裡顯示的15801天,和我們上面估算的就很接近了。
第四字段:禁用兩次密碼修改之間最小天數的功能,設定為0
第五字段:兩次修改密碼間隔最多的天數,在例子中都是99999天;這個值如果在添加使用者時沒有指定的話,是通過/etc/login.defs來擷取預設值,PASS_MAX_DAYS
99999;可以檢視/etc/login.defs來檢視具體的值;
第六字段:提前多少天警告使用者密碼将過期;當使用者登入系統後,系統登入程式提醒使用者密碼将要廢棄;如果是系統預設值,是在添加使用者時由/etc
/login.defs檔案定義中擷取,在PASS_WARN_AGE 中定義;在例子中的值是7 ,表示在使用者密碼将過期的前7天警告使用者更改期密碼;
第七字段:在密碼過期之後多少天禁用此使用者;此字段表示使用者密碼廢棄多少天後,系統會禁用此使用者,也就是說系統會不能再讓此使用者登入,也不會提示使用者過期,是完全禁用;在例子中,此字段兩個使用者的都是空的,表示禁用這個功能;
第八字段:使用者過期日期;此字段指定了使用者廢棄的天數(從1970年的1月1日開始的天數),如果這個字段的值為空,帳号永久可用;在例子中,我們看到
beinan這個使用者在此字段是空的,表示此使用者永久可用;而linuxsir這個使用者表示在距1970年01月01日後13108天後過期,算起來也就是2005年11月21号過期;哈哈,如果有興趣的的弟兄,自己來算算,大體還是差不多的;);
第九字段:保留字段,目前為空,以備将來Linux發展之用;
二. 關于使用者組
具有某種共同特征的使用者集合起來就是使用者組(Group)。使用者組(Group)配置檔案主要有
/etc/group和/etc/gshadow,其中/etc/gshadow是/etc/group的加密資訊檔案。
2.1 /etc/group 解說
/etc/group
檔案是使用者組的配置檔案,内容包括使用者和使用者組,并且能顯示出使用者是歸屬哪個使用者組或哪幾個使用者組,因為一個使用者可以歸屬一個或多個不同的使用者組;同一使用者組的使用者之間具有相似的特征。
比如我們把某一使用者加入到root使用者組,那麼這個使用者就可以浏覽root使用者家目錄的檔案,如果root使用者把某個檔案的讀寫執行權限開放,root使用者組的所有使用者都可以修改此檔案,如果是可執行的檔案(比如腳本),root使用者組的使用者也是可以執行的。
使用者組的特性在系統管理中為系統管理者提供了極大的友善,但安全性也是值得關注的,如某個使用者下有對系統管理有最重要的内容,最好讓使用者擁有獨立的使用者組,或者是把使用者下的檔案的權限設定為完全私有;另外root使用者組一般不要輕易把普通使用者加入進去。
2.2 /etc/group 内容具體分析
/etc/group 的内容包括使用者組(Group)、使用者組密碼、GID及該使用者組所包含的使用者(User),每個使用者組一條記錄;格式如下:
group_name:passwd:GID:user_list
[root@dave home]# cat/etc/group |grep root
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin,adm
adm:x:4:root,adm,daemon
disk:x:6:root
wheel:x:10:root
在/etc/group 中的每條記錄分四個字段:
第一字段:使用者組名稱;
第二字段:使用者組密碼;
第三字段:GID
第四字段:使用者清單,每個使用者之間用,号分割;本字段可以為空;如果字段為空表示使用者組為GID的使用者名;
示例說明:
(1)root:x:0:root,linuxsir
注:使用者組root,x是密碼段,表示沒有設定密碼,GID是0,root使用者組下包括root、linuxsir以及GID為0的其它使用者(可以通過/etc/passwd檢視)
(2)beinan:x:500:linuxsir
注:使用者組beinan,x是密碼段,表示沒有設定密碼,GID是500,beinan使用者組下包括linuxsir使用者及GID為500的使用者(可以通過/etc/passwd檢視)
(3)linuxsir:x:502:linuxsir
注:使用者組linuxsir,x是密碼段,表示沒有設定密碼,GID是502,linuxsir使用者組下包使用者linuxsir及GID為502的使用者(可以通過/etc/passwd檢視)
(4)helloer:x:503:
注:使用者組helloer,x是密碼段,表示沒有設定密碼,GID是503,helloer使用者組下包括GID為503的使用者,可以通過/etc/passwd檢視;
而/etc/passwd對應的相關的記錄為:
beinan:x:500:500:beinansun:/home/beinan:/bin/bash
linuxsir:x:505:502:linuxsir
open,linuxsiroffice,13898667715:/home/linuxsir:/bin/bash
helloer:x:502:503::/home/helloer:/bin/bash
由此可以看出helloer使用者組包括
helloer使用者;是以我們檢視一個使用者組所擁有的使用者,可以通過對比/etc/passwd和/etc/group來得到;
2.3 關于GID
GID和UID類似,是一個正整數或0,GID從0開始,GID為0的組讓系統付予給root使用者組;系統會預留一些較靠前的GID給系統虛拟使用者(也被稱為僞裝使用者)之用;
每個系統預留的GID都有所不同, Linux預留了500個,我們添加新使用者組時,使用者組是從500開始的;
檢視系統添加使用者組預設的GID範圍應該檢視 /etc/login.defs 中的 GID_MIN 和GID_MAX
值;我們可以對照/etc/passwd和/etc/group 兩個檔案;我們會發現有預設使用者組之說;我們在 /etc/passwd
中的每條使用者記錄會發現使用者預設的GID ;
在/etc/group中,我們也會發現每個使用者組下有多少個使用者;在建立目錄和檔案時,會使用預設的使用者組;
示例:我們将dave使用者添加到root使用者組:
[root@dave home]# usermod -a-G root dave
/etc/passwd檔案中的記錄:
dave使用者的預設GID 為502.
[root@dave home]# cat /etc/group|grepdave
root:x:0:root,dave
而502的GID 在/etc/group中查到是dave使用者組;
是以我們看到dave使用者組的GID 為502,而dave 使用者歸屬為root、dave使用者組;
我們用dave來建立一個目錄,以觀察dave使用者建立目錄的權限歸屬;
[dave@dave ~]$ mkdir test
[dave@dave ~]$ ll
total 4
drwxrwxr-x. 2 dave dave 4096Apr 6 12:18 test
通過我們用dave來建立目錄時發現,test的權限歸屬仍然是dave使用者和dave使用者組的;而沒有歸屬root使用者組;但值得注意的是,判斷使用者的通路權限時,預設的GID
并不是最重要的,隻要一個目錄讓同組使用者可以通路的權限,那麼同組使用者就可以擁有該目錄的通路權,在這時使用者的預設GID 并不是最重要的。
2.4 /etc/gshadow 解說
/etc/gshadow是/etc/group的加密資訊檔案,比如使用者組(Group)管理密碼就是存放在這個檔案。/etc/gshadow和
/etc/group是互補的兩個檔案;對于大型伺服器,針對很多使用者群組,定制一些關系結構比較複雜的權限模型,設定使用者組密碼是極有必要的。
比如我們不想讓一些非使用者組成員永久擁有使用者組的權限和特性,這時我們可以通過密碼驗證的方式來讓某些使用者臨時擁有一些使用者組特性,這時就要用到使用者組密碼。
/etc/gshadow格式如下,每個使用者組獨占一行:
groupname:password:admin,admin,...:member,member,...
第一字段:使用者組
第二字段:使用者組密碼,這個段可以是空的或!,如果是空的或有!,表示沒有密碼;
第三字段:使用者組管理者,這個字段也可為空,如果有多個使用者組管理者,用,号分割;
第四字段:組成員,如果有多個成員,用,号分割;
舉例:
beinan:!::linuxsir
linuxsir:oUS/q7NH75RhQ::linuxsir
第一字段:這個例子中,有兩個使用者組beinan用linuxsir
第二字段:使用者組的密碼,beinan使用者組無密碼;linuxsir使用者組有已經,已經加密;
第三字段:使用者組管理者,兩者都為空;
第四字段:beinan使用者組所擁有的成員是linuxsir ,然後還要對照一下/etc/group和/etc/passwd
檢視是否還有其它使用者,一般預設添加的使用者,有時同時也會建立使用者組和使用者名同名稱; linuxsir 使用者組有成員linuxisir ;
如何設定使用者組的密碼? 我們可以通過 gpasswd
來實作;不過一般的情況下,沒有必要設定使用者組的密碼;不過自己實踐一下也有必要;下面是一個為linuxsir使用者組設定密碼的例子: 注:gpasswd 的用法:
gpasswd 使用者組
[root@localhost ~]# gpasswdlinuxsir
正在修改 linuxsir 組的密碼
新密碼:
請重新輸入新密碼:
使用者組之間的切換,應該用 newgrp ,這個有點象使用者之間切換的su ;示例:
[beinan@localhost ~]$ newgrplinuxsir
密碼:
[beinan@localhost ~]$ mkdirlingroup
[beinan@localhost ~]$ ls -ldlingroup/
drwxr-xr-x 2 beinan linuxsir 4096 10月 18 15:56 lingroup/
三. 通過使用者和使用者組配置檔案來查詢或管理使用者
3.1 使用者和使用者組查詢的方法
3.1.1
通過檢視使用者(User)和使用者組的配置檔案的辦法來檢視使用者資訊
我們對使用者(User)和使用者組(Group)的配置檔案已經有個基本的了解,通過檢視使用者(User)和使用者組的配置檔案,我們就能做到對系統使用者的了解,當然您也可以通過id
或finger 等工具來進行使用者的查詢等任務。
對于檔案的檢視,我們可以通過 more 或cat 來檢視,比如 more /etc/passwd 或cat /etc/passwd
;其它工具也一樣,能對文本檢視就行,比如less 也好比如我們可以通過more 、cat 、less指令對/etc/passwd
的檢視,雖然指令不同,但達到的目的是一樣的, 都是得到/etc/passwd的内容:
[root@localhost ~]# more/etc/passwd
[root@localhost ~]# cat /etc/passwd
[root@localhost ~]# less/etc/passwd
3.1.2 通過id和finger 工具來擷取使用者資訊
除了直接檢視使用者(User)和使用者組(Group)配置檔案的辦法除外,我們還有
id和finger工具可用,我們一樣通過指令行的操作,來完成對使用者的查詢;
id和finger,是兩個各有測重的工具:
(1)id工具更測重使用者、使用者所歸屬的使用者組、UID 和GID 的檢視;
(2)finger測重使用者資訊的查詢,比如使用者名(登入名)、電話、家目錄、登入SHELL類型、真實姓名、空閑時間等等。
id 指令用法:id 選項 使用者名
比如:我想查詢beinan和linuxsir 使用者的UID、GID 以及歸屬使用者組的情況:
[root@localhost ~]# idbeinan
uid=500(beinan)gid=500(beinan) groups=500(beinan)
注:beinan的UID 是 500,預設使用者組是beinan,預設使用者組的GID 是500,歸屬于beinan使用者組;
[root@localhost ~]# idlinuxsir
uid=505(linuxsir)gid=502(linuxsir)
groups=502(linuxsir),0(root),500(beinan)
注:linuxsir的UID 是505,預設使用者組是linuxsir,預設使用者組的GID
是502,歸屬于linuxsir(GID為502)、root(GID為0),beinan(GID為500);
finger的用法:finger 選項 使用者名1 使用者名2 ...
在Linux 6.3 版本裡需要單獨的安裝這個工具包。
[root@dave home]# yuminstall finger.x86_64
如果finger 不加任何參數和使用者,會顯示出目前線上使用者,和w指令類似;對比一下;不過各有測重。
[root@dave home]# finger
Login Name Tty Idle Login Time Office Office Phone
root root tty1 18:01 Apr 518:35 (:0)
root root pts/0 8:58 Apr 603:35 (192.168.1.1)
root root pts/1 Apr 6 03:36 (192.168.1.1)
[root@dave home]# w
12:35:50 up 18:02, 3 users, load average: 0.39, 0.20, 0.07
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 :0 Fri18 18:01m 10.12s 10.12s /usr/bin/Xorg
:0 -nr-verbose -auth /var/r
root pts/0 192.168.1.1 03:35 8:59m 0.06s 0.06s -bash
root pts/1 192.168.1.1 03:36 0.00s 0.38s 0.09s w
如果我們在finger
後面加上使用者名,就可以看到使用者更為詳細的資訊,可以一次檢視多個使用者,用空格分開,比如下面的例子中,我們一次查詢兩個使用者beinan和linuxsir的資訊:
[root@localhost~]# finger beinan linuxsir
Login: beinan 注:使用者名(也是登入名) Name: beinan sun (使用者名全稱)
Directory: /home/beinan 注:家目錄 Shell: /bin/bash 注:所用SHELL類型
On since Tue Oct 18 13:53(CST) on tty2 10 minutes 55 seconds idle 注:空閑時間;
On since Tue Oct 18 13:57(CST) on pts/0 from :0.0
No mail.
No Plan.
Login: linuxsir Name:linuxsir open
Directory: /home/linuxsirShell: /bin/bash
Office: linuxsir office,+1-389-866-7715
On since Tue Oct 18 13:39(CST) on tty1 24 minutes 58 seconds idle
3.1.3 使用者組查詢的辦法
我們可以通過使用者來查詢所歸屬的組,用groups 來查詢;比如我查詢beinan和linuxsir 所歸屬的組,我們可以用groups 來查詢;
[root@localhost ~]# groupsbeinan linuxsir
beinan : beinan
linuxsir : linuxsir rootbeinan
注:這是通過groups 同時檢視了使用者beinan和linuxsir所歸屬的組;
3.2
通過修改使用者(User)和使用者組(Group)配置檔案的辦法來添加
在前面說過,可以通過修改配置檔案的辦法來管理使用者,是以此主題應該包括此内容;當然通過使用者及使用者組管理工具(比如
adduser、userdel、usermod、userinfo、groupadd 、groupdel 、groupmod等)也是可以的。
通過修改使用者(User)和使用者組(Group)配置檔案的方法管理使用者之使用者的添加流程:
我們先以添加使用者為例,對使用者的删除和修改都比較簡單。
3.2.1 修改 /etc/passwd ,添加使用者記錄
我們按/etc/passwd的格式的約定來添加新的使用者記錄;當然您要讓一個使用者失效,可以删除您想要删除的使用者記錄;值得注意的是,不能讓UID
重複。
比如我想添加anqing 這個使用者,發現UID 508沒有使用者用,并且我想把其使用者組也設定為anqing ,使用者組的GID 也設定為508,如果GID
沒有占用的話;我們要打開 /etc/passwd ,在最下面加一行:
anqing:x:508:508::/home/anqing:/bin/bash
然後執行pwconv ,讓/etc/passwd 和/etc/shadow同步,您可以檢視 /etc/shadow的内容是否同步;
[root@dave home]# pwconv
[root@dave home]# cat/etc/shadow|grep anqing
anqing:x:15801:0:99999:7:::
3.2.2 修改/etc/group
首先,我們得檢視是否有anqing使用者組,以及GID 508 是否被其它使用者組占用;
[root@dave home]# cat/etc/group|grep anqing
[root@dave home]# cat/etc/group|grep 508
通過檢視,我們發現沒有被占用;是以我們要添加anqing的記錄到 /etc/group中:
anqing:x:508:
其次,是運作 grpconv 來同步/etc/group
和/etc/gshadow内容,然後通過檢視/etc/gshadow的内容變化确認是不是添加組成功了。
[root@dave home]# grpconv
[root@dave home]# cat/etc/gshadow |grep anqing
anqing:x::
3.2.3 建立使用者的家目錄,并把使用者啟動檔案也複制過去
建立使用者的家目錄,我們要以/etc/passwd 中添加的新使用者的記錄為準,我們在/etc/passwd 中添加新使用者anqing
,她的家目錄是處于/home/anqing ;另外我們還需要把/etc/skel 目錄下的.*隐藏檔案複制過去:
[root@dave home]# cd/etc/skel/
[root@dave skel]# ls -la
total 40
drwxr-xr-x. 4 root root 4096 Aug 15 2012 .
drwxr-xr-x. 115 root root12288 Apr 6 12:42 ..
-rw-r--r--. 1 root root 18 Mar 29 2011 .bash_logout
-rw-r--r--. 1 root root 176 Mar 29 2011 .bash_profile
-rw-r--r--. 1 root root 124 Mar 29 2011 .bashrc
drwxr-xr-x. 2 root root 4096 Nov 20 2010 .gnome2
-rw-r--r--. 1 root root 121 May 2 2012 .kshrc
drwxr-xr-x. 4 root root 4096 Aug 15 2012 .mozilla
[root@dave home]# cp -R/etc/skel/ /home/anqing
[root@dave skel]# cd/home/anqing
[root@dave anqing]# ls -la
total 32
drwxr-xr-x. 4 root root 4096Apr 6 12:43 .
drwxr-xr-x. 5 root root 4096Apr 6 12:43 ..
-rw-r--r--. 1 root root 18 Apr 6 12:43 .bash_logout
-rw-r--r--. 1 root root 176 Apr 6 12:43 .bash_profile
-rw-r--r--. 1 root root 124 Apr 6 12:43 .bashrc
drwxr-xr-x. 2 root root 4096Apr 6 12:43 .gnome2
-rw-r--r--. 1 root root 121 Apr 6 12:43 .kshrc
drwxr-xr-x. 4 root root 4096Apr 6 12:43 .mozilla
3.2.4 改變新增使用者家目錄的屬主和權限
我們發現新增使用者的家目錄的屬主目前是root ,并且家目錄下的隐藏檔案也是root權限:
[root@dave anqing]# ls -ld/home/anqing/
drwxr-xr-x. 4 root root 4096Apr 6 12:43 /home/anqing/
是以我們要通過chown 指令來改變/home/anqing目錄歸屬為anqing使用者;
[root@dave anqing]# chown -Ranqing:anqing /home/anqing
檢視是否已經更換了屬主為lanhaitun使用者所有:
[root@dave anqing]# ls -ld/home/anqing
drwxr-xr-x. 4 anqing anqing4096 Apr 6 12:43 /home/anqing
[root@dave anqing]# ls -la/home/anqing
drwxr-xr-x. 4 anqing anqing4096 Apr 6 12:43 .
drwxr-xr-x. 5 root root 4096 Apr 6 12:43 ..
-rw-r--r--. 1 anqinganqing 18 Apr 6 12:43 .bash_logout
-rw-r--r--. 1 anqinganqing 176 Apr 6 12:43 .bash_profile
-rw-r--r--. 1 anqinganqing 124 Apr 6 12:43 .bashrc
drwxr-xr-x. 2 anqing anqing4096 Apr 6 12:43 .gnome2
-rw-r--r--. 1 anqinganqing 121 Apr 6 12:43 .kshrc
drwxr-xr-x. 4 anqing anqing4096 Apr 6 12:43 .mozilla
[root@dave anqing]#
看來已經實作了;但這樣還是不夠的,因為/home/anqing/的目錄權限可能會過于公開:
我們看到 /home/anqing目錄的權限為 drwxr-xr-x
,也就是同組使用者和其它使用者組所能檢視,為了保密,我們有理由把新增使用者家目錄的權限設定為隻有其自己可讀可寫可執行;于是... ...
[root@dave anqing]# chmod700 /home/anqing/
drwx------. 4 anqing anqing4096 Apr 6 12:43 /home/anqing
我們用其它使用者,當然得把具有超級權限的root使用者除外;比如我以dave使用者來檢視anqing的家目錄會得到如下資訊;
[root@dave anqing]# su -dave
[dave@dave ~]$ ls -la/home/anqing
ls: cannot open directory /home/anqing:Permission denied
3.2.5 設定新增使用者的密碼
以上各步驟都就序了,我們得為新增使用者設定密碼了;要通過passwd指令來生成;這個沒有辦法通過修改檔案解決;
passwd 的用法:passwd 使用者名
[root@dave anqing]# passwdanqing
Changing password for useranqing.
BAD PASSWORD: it is based ona dictionary word
passwd: all authenticationtokens updated successfully.
3.2.6 測試添增使用者是否成功
您可以用新增使用者登入測試,也可以通過su 來切換使用者測試:
[dave@dave ~]$ su - anqing
Password:
[anqing@dave ~]$ cd ~
[anqing@dave ~]$ pwd
/home/anqing
[anqing@dave ~]$ ls -la
drwx------. 4 anqing anqing4096 Apr 6 12:43 .
[anqing@dave ~]$ mkdirtestdir
[anqing@dave ~]$ ls -lh
total 4.0K
drwxrwxr-x. 2 anqing anqing4.0K Apr 6 12:49 testdir
[anqing@dave ~]$
通過上面一系列動作,驗證anqing使用者已經成功。
3.3
通過修改使用者(User)和使用者組(Group)配置檔案的辦法來修改使用者或使用者組
我們可以修改/etc/passwd 和/etc/group
來達到修改使用者和使用者所歸屬的組,這個過程和添加新使用者時差不多;比如我想修改anqing的使用者名全稱、公司以及電話等資訊;我們可以修改/etc/passwd
實作。
3.3.1 修改使用者資訊
--原始記錄:
[root@dave anqing]# cat/etc/passwd|grep anqing
我們可以修改為
anqing:x:508:508:david
dai,Officeanqing,13800000000:/home/anqing:/bin/bash
當然我們還可以修改使用者的bash
類型,家目錄等,當然如果修改家目錄,還得進行建家目錄、屬主和權限的操作,這和前面添加使用者的辦法在程式上有些是相同的;修改完成後,我們要進行pwconv
同步,通過finger 來檢視使用者的資訊等。
[root@dave anqing]# pwconv
[root@dave anqing]# fingeranqing
Login: anqing Name: david dai
Directory: /home/anqing Shell: /bin/bash
Office: Office anqing,+1-380-000-0000
Never logged in.
3.3.2 修改使用者所歸屬的組,可以通過/etc/group
修改實作
當然修改使用者和使用者組,不僅能通過修改配置檔案來實作,還能過過 usermod
及chfn來實作;這裡我們先講一講如何通過修改配置檔案來達到目的;如果我們想把anqing 這個使用者歸屬到root使用者組,是以我們還能修改/etc/group
的辦法來達到目的;找到/etc/group 中的root開頭的一行,按其規劃加入anqing;
root:x:0:root,anqing
然後執行 grpconv 指令來同步/etc/group 和/etc/gshadow兩個檔案的内容。
[root@dave anqing]# grpconv
[root@dave anqing]# idanqing
uid=508(anqing)gid=508(anqing) groups=508(anqing),0(root)
3.3.3 删除使用者及使用者組的辦法
這個比較簡單,我們可以通過删除/etc/passwd 和/etc/group 相應的使用者和使用者組記錄就能達到目的,也能過過userdel
和groupdel
來實作對使用者及使用者組的删除;如果是通過修改使用者和使用者組配置檔案的辦法來删除使用者,就是删除相應的記錄就行了,如果不想保留其家目錄,删除就是了。
隻删除anqing使用者,其家目錄和mail等仍會儲存:
[root@localhost ~]# userdel anqing
加上-r 參數,是删除家目錄及mail等:
[root@localhost ~]# userdel -r anqing
用userdel 删除使用者的同時,也會把其使用者組删除;我們可以通過/etc/passwd 和/etc/group 的内容變化來檢視。
[root@dave anqing]# cat/etc/passwd |grep anqing
[root@dave anqing]# cat/etc/group|grep anqing
[root@dave anqing]# cat/etc/group|grep root