天天看點

學習linux—— 帳号的管理

(一)帳号管理的四個關鍵檔案

/etc/passwd         //使用者資訊存放點

/etc/shadow         //使用者資訊存放點,加密

/etc/group         //組資訊存放點

/etc/gshadow       //組資訊存放點,加密

1、 /etc/passwd檔案詳解

每一行代表一個使用者帳号。

每列用“:”号分隔,意思分别為:

使用者名:密碼:使用者ID:組ID:使用者備注資訊:使用者宿主目錄(home檔案)路徑:使用者指定的shell程式

密碼列:X,表示加密,密碼記錄在/etc/shadow中。

使用者ID:0号ID為系統管理ID,1~499為保留給系統的ID,500~65535為配置設定給使用者的ID.

例:

root:x:0:0:root:/root:/bin/bash             //使用者名為root,密碼加密,使用者ID群組ID均為0表示系統管理ID,備注為root,home目錄為 /root ,使用/bin/bash作為shell程式。

khp:x:500:500:khp:/home/khp:/bin/bash

2、 /etc/shadow 詳解

使用者名:加密密碼:上次密碼變更時間(從1970.1.1日算起天數):在多長時間内不能更改密碼(天數):多長時間後必須更改密碼(天數):密碼到期前多久發送改密碼的警告資訊:密碼到期後多久失效:帳号失效時間:保留

khp:$1$CUcFhZc0$mi2fq5I5FhFKbDWcwnABO/:14587:0:99999:7:::

使用者名:khp

密碼: $1$CUcFhZc0$mi2fq5I5FhFKbDWcwnABO/

上次更改密碼時的時間:從1970年1月1日算起後的14587天,即2009年。

在多長時間内不能更改密碼:0,即随時可以更改密碼

多長時間後必須更改密碼:999,即無限期,可以一直不更改

密碼到期前多久發送改密碼的警告資訊:7,即密碼到期的前7天發送警告資訊

密碼到期多久後失效:此處為空,即不設定。假如我設定的密碼是2009年12月31日失效,此處值設為2,則到2010年1月2日後密碼就失效。

帳号失效時間:此處為空,假如我設定為2010年1月30日帳号失效,不管你有沒有改密碼,到2010年1月30日這個帳号都失效。

保留:留作以後新增其他用途。

因/etc/shadow是隻讀檔案,編輯後儲存需要用  :wq!   儲存。

3、 /etc/group詳解

每一行代表一個組ID,每列的意思分别為:

使用者組名稱:組密碼:組ID:組使用者名(即組包含哪些使用者)

khp:x:500:

4、  /etc/gshadow  詳解

使用者組名稱:組密碼:使用者組管理者帳号:組使用者名(該組的所屬帳号,即包含哪些使用者)

組密碼:當為空或為“!"時,表示為法登入

組管理帳号:有多個管理帳号,用“,”分開。

組使用者名:可以有多個組使用者,用“,”分開。

例:bin:::root,bin,daemon  //組名為bin,密碼為空,使用者組管理者帳号為空,組使用者為root,bin,daemon

(二)初始化組和有效使用者組

初始化組:每個使用者建立立時就擁有了一個初始化組。/etc/passwd裡面的第四列的組名就是各使用者的初始化組。

例:khp:x:500:500:khp:/home/khp:/bin/bash   //khp使用者的初始化組即為khp

有效使用者組:一個使用者可以加入到多個組中。

在/etc/group中,找到想加入的組名,然後在最後一列添加使用者,即可把這一使用者加入這一組。

例:vi /etc/group  找到 pla:x:501:khp  即把khp使用者加入到了pla組中。

這樣khp就屬于了khp 和pla兩個組了。當khp建立一個新的檔案時,這個檔案屬于哪個組呢?應該屬于有效使用者組。

groups指令檢視有效使用者組,排在第一個的組,就是有效使用者組。

例:groups 

      khp   pla    //khp屬于有效使用者組

newgroup  組名    //更改有效使用者組

newgroup pla  就可以把有效使用者組名改為pla

(三) 新增與删除使用者

新增與删除使用者有兩種方法,一種為用指令,一種是手工修改方法

1、手工修改方法

新增用使用者:

(1)用vi 編輯器打開  /etc/passwd

(2)增加一行,複制一行目前使用者資訊,然後更改使用者名和使用者ID,以及組ID即可。

(3)打開/etc/shadow 用同樣的方法增加加一行,更改使用者名。也可以在設定完/etc/passwd之後直接用  pwconv指令轉換即可。

(4)打開  /etc/group 和 /etc/gshadow,增加一行。最好的方法就是複制上面的一行,然後更改第一列的使用者名和第三列的組ID.

     也可以在設定完/etc/group之後直接用 grpconv指令,生成相應使用者組在/etc/gshadow中的項目。

(5)設定新使用者的主目錄。用mkdir指令在/home目錄下建一個與使用者名相同的檔案夾

(6)用password 使用者名  指令指定新使用者的密碼

(7)複制基本初始化檔案到新使用者目錄下。初始化檔案一般都在/etc/skel下。

     例:cp  /etc/skel/.*   /home/khp   即把/etc/skel下的所有檔案複制到新使用者目錄/home/khp下面

(8)用chown指令和chgrp指令讓新使用者擁有通路建立主目錄的權限,指定所有權

注:/etc/skel檔案,即使用者的基本初始化檔案。如windows中的docements and setting 中的all users檔案夾一樣,建立一個使用者,會把/etc/skel中的一些公用方件複制到新使用者目錄中,可以把一個新使用者的公司政策放于此資料夾中,建立 使用者時,新使用者目錄中會自動包含這引起公共檔案。

删除新使用者:

打開/etc/passwd      /etc/shadow     /etc/group   /etc/gshadow    把相關的使用者群組資訊删除,然後把相應的使用者主目錄删除即可。

2、指令方法

(1)  新增使用者

   useradd [-u  UID] [-g init_group] [-G other_group]  [-c 說明内容] [-mM] [-d name] [-r] [-s shell]  username

-u:後面接UID,是一組數字。給這個帳号指定一個UID

-g:後面接初始使用者組    

-G:後面接支援的使用者組,即有效使用者組

-c:後面接說明内容。/etc/passwd的第五列。

-m:要建立使用者目錄

-M:不要建立使用者目錄

-r:建立一個系統帳号。

-s:指定一個shell。預設是/bin/bash

如果不跟參數直接用 useradd username指令:

預設會建一個與使用者名相同的初始使用者組。但如SUSE版本的就不會建立新使用者組,而以/etc/default/useradd内的GROUP設定值作為使用者的初始使用者組。

其他相關設定參照檔案/etc/default/useradd檔案

使用者UID/GID的設定,則是參照/etc/login.defs檔案。生成新使用者時的基本參數來自/etc/login.defs配置檔案中,包含了:密碼壽命,使用者ID,組ID。生成主目錄的設定等。可以通過其他配置檔案調整這一預設配置參數。

例:useradd khp 

     passwd khp  //新增使用者并設定密碼

(2) 删除使用者     userdel  username   即可删除使用者名

(3)修改使用者      usermod  username   可以修改使用者設定。 參數和 useradd中的差不多。

(4)檢視使用者參數   finger  username   可檢視使用者的參數。因為這個參數比較危險,一般不裝

(5) 檢視ID号       id     username    檢視ID号。

(6)groupadd  [-g gid][-r] groupname      //增加組名

-g :後面接某個特定的GID,用來直接給予某個GID

-r:建立系統使用者組。

(7)  groupdel  groupname                //删除組名

(8)  groupmod [-g gid][-n groupname]    //修改組參數

(9)  gpasswd  groupname                 //給組設密碼,還有以下功能:

        gpasswd [-ad] user  groupname    

-a:将某使用者加入到groupname使用者組中

-d:将某使用者從groupname使用者組中删除

gpasswd [-AMRr]  groupname  

-A: 設定組管理者帳号,該使用者管理該組

-M:将某些帳号加入這個使用者組中

-r:将groupname的密碼删除

-R:讓groupname的密碼欄失效,是以newgrp指令就不能用了。

gpasswd -A khp -M  khp,pla  elitekgroup   //把khp  pla兩個帳号加入elitekgroup組中,且讓khp使用者管理這個組。

(四)陰影密碼組

管理linux使用者與組的所有指令。主要有/etc/passwd與/etc/group相結合。使密碼更安全。

1、pwck       //檢查/etc/passwd帳号設定檔案内容的資訊

2、轉換使用者密碼

pwconv     //轉換現有/etc/passwd檔案中的所有使用者密碼到加密檔案/etc/shadow中。讓密碼變成“X”。即變成加密密碼。

pwunconv   //把/etc/shadow中的密碼重新寫回到/etc/passwd中,并且把/etc/shadow檔案删除。最好不要用這個指令。

3、 轉換組密碼

grpconv:轉換現有  /etc/group檔案相關資訊到 /etc/gshadow

grpunconv:把/etc/shadow中的資訊轉換到  /etc/group中,并删除  /etc/gshadow檔案,最好不要用。

(五)  切換使用者

1、su指令

su [-lcm] username

su:切換成其他使用者身份,但變量環境仍是現在使用者名的。如果後面不加使用者名,則是變換成root身份。

su-:變化成其他使用者身份,同時變換到要變換使用者名的環境變量。如果後面不加使用者名,就是變換成root身份。

su -l :與 su -用法一樣,變換使用者身份的同時,變換變量環境。

su -m :與 su 用法一樣,變換使用者身份,但不變換變量環境。

su  -c :即變換使用者身份後,在新使用者身份下執行一次指令。是以後面要接指令,一起使用。

例:  su     //會提示輸入root密碼,即變換成root身份,但不更改變量環境。

     su -   // 會提示輸入root密碼,輸入root密碼後變換成root身份,同時更改成root身份的變量環境。

     su - khp //會提示輸入密碼,輸入khp使用者的密碼後變換成khp的身份,同時更改成khp身份的變量環境。

     su - khp -c  ls   //變換到khp 使用者身份,并且更改到khp環境,然後執行ls指令,列出khp目錄下面的檔案。

2、sudo指令

執行su指令時需要知道變換使用者身份的密碼,輸入密碼正确才可以變換身份。這樣做會不安全。

sudo 在變換使用者身份時,隻輸入自已本身的密碼,而不是準備變換使用者身份的密碼。如:我在khp使用者下,準備變換到root使用者身份,則輸入khp自已的密碼即可,而不是輸入root的密碼。

但使用sudo指令是有條件的,并不是所有使用者都可以執行這個指令。使用者執行sudo指令時,會查找/etc/sudoer檔案,判斷該使用者是否有執行sudo指令的權限,有權限時輸入自已密碼就可以變換身份了。

root使用者執行sudo指令時不需要輸入密碼。預設隻有root使用者可以執行sudo指令。

此處的關鍵是/etc/sudoer檔案。用visudo 指令編這個檔案。

(1)/etc/sudoer檔案

/etc/sudoer檔案的授權:

使用者帳号 登入的主機 = (可變換的使用者或組)[NOPASSWD:]  可以執行的指令

例:khp  ALL=(ALL)  ALL   //即khp使用者可以變換成任何身份,可以執行任何令。 最好不要這樣設定,很不安全。

    khp  ALL= ALL   //如果忘了輸入變換的身份,則表示隻能變換成root身份。

    %khp  ALL = (ALL) NOPASSWD: ALL  //即khp使用者組的所有使用者在變換身份時都不需要輸入密碼,就加上NOPASSWD:參數。使用者組則在前面加%.

/etc/sudoer檔案的别名規則:

上例中全用ALL表示的有的登入主機,所有的可變換身份,所有的可執行指令,這樣很不安全,但如果給一批使用者授權相同的指令,且指令很多時,就會輸入很久。

可以先用别名定義好,然後在規則中套用别名即可以,就不用重複工作。

别名類型有:

Host_Alias:定義主機名稱

User_Alias:定義使用者别名

Runas_Alias:定義變換身份别名

Cmnd_Alias:定義指令别名

例:我想授權khp使用者可切換成root,pla身份,且可以執行指令  shutdown,rm,ls指令。

Runas_Alias ad = root,pla

Cmnd_Alias  down = /sbin/shutdown,/sbin/rm,/sbin/ls   //指令别名必須用絕對路徑。取消某個指令的執行時,在前面加!。

khp  ALL = (ad) down  //授權khp使用者可切換成root,pla身份,且可以執行指令  shutdown,rm,ls指令

sudo -l指令可以檢視使用者可以執行哪些sudo指令。