1. 程式人生 > >《Linux系統》之"皮毛系列"(五) 使用者和使用者組管理

《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命令下 顯示的第一個組:

[[email protected] scott]$ groups  #使用者hyxy有三個使用者組
group1 hyxy group2           #group1為有效組,也就是當前所在組

那麼如何切換到其他組呢?這個時候,我們需要使用newgrp命令。

[[email protected] scott]$ groups
group1 hyxy group2
[hyxy[email protected] scott]$ newgrp group2      #語法格式:newgrp  [使用者組名]
[[email protected] scott]$ groups
group2 hyxy group1                      #有效組變為group2
[[email protected] scott]$ touch a.txt 
[[email protected] 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

這個檔案的結構是:每一行代表一個賬號資訊;而每一行又由分號(:)分成七列,來表示一個賬戶的七個資訊。如下圖所示:

[[email protected] ~]$ 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列,來表示不同的密碼資訊。

[[email protected] 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--。結構如下:

[[email protected] ~]$ 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進行對應關係的。

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

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