《Linux系統》之"皮毛系列"(五) 用戶和用戶組管理

由於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

注意:當你切換有效組後,不影響用戶在別組已創建完的文件的使用權限。不過,在重啓後,用戶默認切換會初始用戶組工作。

三、用戶賬號的三個重要文件

當用戶輸入用戶名和密碼進行登錄時,系統是如何工作的呢?我帶你們來看看工作流程:

  1. 先查看/etc/passwd這個文件裏是否有你輸入的帳號?如果沒有,就提示結束流程提示相應錯誤。如果有,就將該帳號對應的 UID 與GID (在/etc/group 中) 讀取出來,同時讀取該帳號的主目錄與shell ;
  2. 然後再覈對密碼錶!Linux 會讀取/etc/shadow 裏面的該帳號與 UID,然後覈對密碼是否與裏面存儲的密碼相同?如果不同,同樣結束工作流程進行提示相應錯誤。
  3. 如果密碼也相同,則登錄成功。然後進入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進行對應關係的。

第四列:本組的附加用戶列表。本組作爲主組的用戶不會再列表中顯示。

----------------------------------------------------------------未完待續,敬請留言---------------------------------------------------------------------------------

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章