由於Linux系統是一個多用戶多任務的分時操作系統,因此,我們可以在同一臺主機上,創建多個用戶賬號和密碼進行登錄。當然,用戶賬號不是用戶說創建就創建的,需要系統管理員的身份來幫助創建。
系統管理員通過用戶賬號,一方面可以跟蹤用戶和控制他們對系統資源的訪問;另一方面也可以幫助用戶組織文件,提供安全性保護(即方便權限管理 點擊進入上一章)。
在管理用戶賬戶上,Linux也引用了用戶組的概念,即對系統上的多用戶進行分組管理。
一、Linux系統的用戶賬號管理
用戶賬號的管理,大致分成三個部分,分別是用戶賬號的添加、修改和刪除。
1、用戶賬號的添加
首先,我們必須獲取系統管理員身份,才能添加賬戶。添加用戶賬號其實就是在Linux系統中創建一個新賬號,爲新賬號分配用戶名、用戶組、主目錄和登錄Shell等資源。(新增的用戶賬戶處於被鎖定狀態,無法使用)
我們可以使用useradd命令來添加賬戶:
語法格式:useradd [選項] [用戶名]
常用選項:
-c comment 指定一段註釋性描述。
-d 目錄 指定用戶主目錄,如果此目錄不存在,則同時使用-m選項,可以創建主目錄。
-g 用戶組 指定用戶所屬的用戶組。
-G 用戶組,指定用戶所屬的附加組。
-s Shell文件 指定用戶的登錄Shell。
-u 用戶ID號 指定用戶的UID
案例1:useradd michael :
這種沒有任何選項的創建用戶,則會默認創建一個新的用戶組,與用戶名同名。同時會將用戶的主目錄指定在/home下,即/home/michael.也會默認分配一個shell。默認配置設置參考:/etc/default/useradd文件
案例2:useradd -c "from china" -d /home/zhangsan zhangsan
創建zhangsan這個用戶,同時備註一些描述信息,和指定了用戶的主目錄。
案例3:useradd -g root -G adm,sys lisi
創建用戶lisi,指定用戶組爲root,同時指定附加組委adm和sys. 小貼士:指定的用戶組必須存在,否則創建失敗
PS:當我們新增賬號時,Linux系統會同時維護/etc/passwd,/etc/shadow,/etc/group等等文件的數據
2、賬號口令的管理
用戶賬號剛創建時沒有口令,賬號被系統鎖定,無法使用。只有我們爲賬戶指定口令後,此賬戶纔可以使用。設定口令的命令爲passwd,超級用戶可以爲自己和普通用戶設定口令,普通用戶只能修改自己的口令。
語法格式:passwd [選項] [用戶名]
常用選項:
-l 鎖定口令,即禁用賬號。
-u 口令解鎖。
-d 使賬號無口令。
-f 強迫用戶下次登錄時修改口令。
案例1:獲取root身份後,創建用戶wangwu,並設置口令
案例2:修改當前用戶的口令。當前用戶爲root。(慎重!慎重!慎重!)
案例3:普通用戶修改自己的口令。(三次輸入)
案例4:root賬戶修改普通賬戶的密碼
從上面的案例我們可以看到,超級用戶爲用戶指定口令時,不需要校驗原密碼,而普通用戶修改自己的口令時,會校驗自己的原密碼。
小貼士:爲了系統安全起見,用戶應該選擇比較複雜的口令,例如最好使用8位長的口令,口令中包含有大寫、小寫字母和數字,並且應該與姓名、生日等不相同。
再看下面案例:
# passwd -d lisi //爲用戶lisi指定空口令,下次登錄就不需要口令了
# passwd -l lisi //鎖定用戶lisi,使其不能登錄
3、賬號信息的修改
我們可以使用usermod命令,來修改用戶賬號的相關屬性,如用戶號、主目錄、用戶組、登錄Shell等。
語法格式:usermod [選項] [用戶名]
常用的選項與useradd
命令中的選項一樣,有-c, -d, -m, -g, -G, -s, -u等,用這些參數爲用戶指定新值。
另外,可以使用 -l 選項 來修改用戶名(建議:如果修改用戶名,最好也一起把主目錄也一起修改了)。格式如下:
usermod -l newName -d /home/newName oldName
案例1:# usermod -s /bin/ksh -d /home/ls –g adm lisi
此命令將用戶lisi的登錄Shell修改爲ksh,主目錄改爲/home/ls,用戶組改爲adm
4、用戶賬戶的刪除
系統管理員可以將用戶賬戶從系統中刪除。在做刪除操作時,/etc/passwd,/etc/shadow,/etc/group等相關係統文件中的該用戶記錄會同時刪除。有的時候,可能還需要刪除該用戶相關的主目錄。
刪除命令:userdel
語法格式:userdel [選項] [用戶名]
常用的選項是 -r,它的作用是把用戶的主目錄一起刪除。
例如:
# userdel -r lisi
此命令刪除用戶lisi在系統文件中(主要是/etc/passwd, /etc/shadow, /etc/group等)的記錄,同時刪除用戶的主目錄。
二、Linux系統的用戶組管理
Linux將系統內的多個用戶規劃到不同的用戶組中,這樣系統就可以通過管理用戶組來統一管理多個用戶了。默認情況下,系統在創建用戶時,會同時創建一個與它同名的用戶組,然後將此用戶劃分到這個用戶組中。
用戶組的單獨管理,其實就是對/etc/group系統文件的管理,涉及到的操作有:添加,刪除和修改。
1、groupadd命令
用於向系統中添加新的用戶組
語法格式如下:groupadd [選項] [用戶組]
常用選項有:
-g 指定新用戶組的組標識號(gid)。
-o 一般與-g選項同時使用,表示新用戶組的gid可以與系統已有用戶組的gid相同。
實例1:# groupadd grp1
//在系統中添加一個新組grp1,新組的gid是在當前已有的最大組標識號的基礎上自動+1。
實例2:# groupadd -g 600 grp2
//在系統中添加了一個新組grp2,同時指定新組的組標識號是600。
2、groupdel命令
用於從系統中刪除一個用戶組
語法格式:groupdel [用戶組]
案例1:# groupdel grp1
//從系統中刪除用戶組grp1。
3、groupmod命令。
用於修改用戶組的屬性
語法格式:groupmod [選項] [用戶組]
常用的選項有:
-g 爲用戶組指定新的組標識號。
-o 與-g選項同時使用,用戶組的新gid可以與系統已有用戶組的gid相同。
-n 將用戶組的名字改爲新名字
實例1: # groupmod -g 601 grp1
// 將用戶組grp1的組標識號修改爲601。
實例2: # groupmod –g 10000 -n grp2 grp1
// 將用戶組grp1的標識號改爲10000,同時將組名修改爲grp2。
4、newgrp
有些人可能沒明白爲什麼一個用戶可以有多個組?
我舉個例子吧,某開發公司的兩個技術團隊正在做兩個不同的項目,突然有一天,由於客戶的需求,項目組A需要趕時間完成自己的項目,就從項目組B中借了一個牛逼工程師小明。因此,小明就屬於兩個組的成員了,上午在項目組B完成自己的任務,下午就切換到項目組A,幫忙趕時間完成任務。這回是否恍然大悟爲什麼一個用戶可以有多個組!!!!
關於一個用戶有多個組時,會涉及到兩個概念:初始用戶組和有效用戶組。初始用戶組就是此用戶賬戶被創建時指定的用戶組。有效組就是當前所在組,創建文件時,文件所顯示的用戶組名。同時就是groups命令下 顯示的第一個組:
[hyxy@master scott]$ groups #用戶hyxy有三個用戶組
group1 hyxy group2 #group1爲有效組,也就是當前所在組
那麼如何切換到其他組呢?這個時候,我們需要使用newgrp命令。
[hyxy@master scott]$ groups
group1 hyxy group2
[hyxy@master scott]$ newgrp group2 #語法格式:newgrp [用戶組名]
[hyxy@master scott]$ groups
group2 hyxy group1 #有效組變爲group2
[hyxy@master scott]$ touch a.txt
[hyxy@master scott]$ ll
總用量 0
-rw-r--r--. 1 hyxy group2 0 12月 19 00:06 a.txt #文件的用戶組名爲有效組group2
注意:當你切換有效組後,不影響用戶在別組已創建完的文件的使用權限。不過,在重啓後,用戶默認切換會初始用戶組工作。
三、用戶賬號的三個重要文件
當用戶輸入用戶名和密碼進行登錄時,系統是如何工作的呢?我帶你們來看看工作流程:
- 先查看/etc/passwd這個文件裏是否有你輸入的帳號?如果沒有,就提示結束流程提示相應錯誤。如果有,就將該帳號對應的 UID 與GID (在/etc/group 中) 讀取出來,同時讀取該帳號的主目錄與shell ;
- 然後再覈對密碼錶!Linux 會讀取/etc/shadow 裏面的該帳號與 UID,然後覈對密碼是否與裏面存儲的密碼相同?如果不同,同樣結束工作流程進行提示相應錯誤。
- 如果密碼也相同,則登錄成功。然後進入Shell 控制的階段!
通過上面的流程,我們發現有三個至關重要的文件,分別是/etc/passwd,/etc/shadow,/etc/group。下面我一一介紹一下吧。
1、/etc/passwd
文件的權限如下:root有讀寫權限,其他用戶只有讀權限。
-rw-r--r--. 1 root root 1656 12月 18 20:01 /etc/passwd
這個文件的結構是:每一行代表一個賬號信息;而每一行又由分號(:)分成七列,來表示一個賬戶的七個信息。如下圖所示:
[hyxy@master ~]$ cat /etc/passwd #使用普通用戶讀取該文件
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
.............
我們以第一行爲例來進行解讀》
第一列:賬戶名稱。就是用來登錄的用戶名,它與第三列UID有一對一映射關係。比如root賬戶的uid是0.
第二列:密碼。早期unix系統的用戶密碼就是放在這一列中的,但是由於該文件任何用戶都有讀取權限,因此,後來將密碼移至另一個文件/etc/shadow裏,而這一列則使用x來佔位了。
第三列:UID(用戶標識符)。0表示擁有最高權限的系統管理員的UID。而1-499則是預留給系統使用的uid。500以後,則是給普通用戶分配的。(如果你想要某一用戶擁有系統管理員的權限,其實可以直接將這一用戶的uid修改爲0,但是要慎重哦)
第四列:GID(有效用戶組標識符)。用來維護與文件/etc/group中的某一組信息的映射關係。
第五列:註釋說明。通常這一列用來解釋這個賬戶的意義所在,不是非常重要的信息。
第六列:用戶主目錄。用戶的主目錄信息。因此,命令窗口登錄後,都會直接進入該用戶的主目錄下。
第七列:Shell的bash位置。當用戶登錄後,就會取得該用戶的shell腳本與內核進行通信了。而shell腳本引用的是哪個bash,就是由這一列來指定的。
2、/etc/shadow
因爲程序的運行涉及到文件的權限,而權限與UID和GID息息相關。程序需要了解各個賬戶的權限,就需要讀取/etc/passwd文件,所以該文件的權限爲-rw-r--r--。那麼各個賬戶的密碼就暴漏了(雖然有加密,但是依然可以暴力破解),所以將密碼移至/etc/shadow文件內。/etc/shadow文件內加入了很多密碼限制參數,同時該文件的權限爲:-rw-------。只有root可以讀寫。
該文件的結構也是這樣:每一行對應一個賬號的密碼信息,同樣使用分號(:)劃成9列,來表示不同的密碼信息。
[root@master hyxy]# cat /etc/shadow #切換成root用戶查看
root:$6$6ZTYO9G2$sByYoGe7UYoWmcf9.4fL4bZxd4JP/E02xp96tclC1mV93E72FJIKXz5FonHULiShPv7v8rjVCeIu.WyLrC0nd0:17883:0:99999:7:::
bin:*:15980:0:99999:7:::
daemon:*:15980:0:99999:7:::
adm:*:15980:0:99999:7:::
第一列:賬戶名稱。因爲密碼也要與賬號名稱一一對應,因此該賬戶要與/etc/passwd裏的名稱一致。
第二列:密碼。這一列纔是賬號的密碼,經過加密算法產生的一組特殊符號。查看加密算法可以使用以下命令:
- # authconfig --test | grep hashing
第三列:最後一次更改密碼的日期。單位是天,以距離1970年1月1日0時0分0秒這個紀元時間點的天數表示。
第四列:密碼不可被更改的天數。0表示可以隨時更改,如果是其他正整數n,則表示n天內不可再次修改。
第五列:密碼過期的天數。表示下次修改密碼最好是在過期前主動修改。99999(273年)則表示沒有強制你修改密碼的意思。
第六列:密碼過期前的警告天數。7表示失效期的前七天就開始次次發送警告信息。
第七列:密碼過期後的寬限天數。即在這個天數內,你依舊可以使用密碼進行登錄,但是登錄後就強制你修改密碼了。如果這個期限內你沒有登錄,那麼你的密碼就失效了,無法使用此密碼登陸。(注意過期和失效不是一個意思)
第八列:賬戶失效日期。意義與第七列一樣,表示方式則是與第三列一樣,使用距離紀元時間點的天數來計數。通常用於"收費服務"中
第九列:保留字段。
3、/etc/group
這個文件就是記錄着組名與GID的一對一映射關係,以及用戶組內的成員列表。權限爲:-rw-r--r--。結構如下:
[hyxy@master ~]$ cat /etc/group #普通用戶就可以查看
root:x:0:
bin:x:1:bin,daemon
daemon:x:2:bin,daemon
sys:x:3:bin,adm
adm:x:4:adm,daemon
第一列:用戶組名。方便於人類使用的名稱。與第三列的GID一一對應。
第二列:組密碼。通常不需要設定,這個設定通常是給『羣組管理員』使用的。同樣的,密碼也已移動到/etc/gshadow中,因此這一列只會存在一個x而已。
第三列:GID(用戶組標識符)。文件/etc/passwd裏的第四列就是與此GID進行對應關係的。
第四列:本組的附加用戶列表。本組作爲主組的用戶不會再列表中顯示。
----------------------------------------------------------------未完待續,敬請留言---------------------------------------------------------------------------------