1. 程式人生 > >Linux使用者管理全攻略(二)

Linux使用者管理全攻略(二)

摘要:本文詳解使用者(User)和使用者組(Group)的配置檔案,本文是《Linux 使用者(User)和使用者組(Group)管理概述》文件的關健部份的細化;通過本文,您至少能明白/etc/passwd /etc/group ,以及什麼是UID和GID 等;其中對UID的重要性加以詳細的論述;最後,本文還以通過修改使用者及使用者組配置檔案的辦法來實現管理使用者和使用者組,進而說明在Linux系統中,系統檔案的重要性;


使用者(User)和使用者組(Group)的配置檔案,是系統管理員最應該瞭解和掌握的系統基礎檔案之一,從另一方面來說,瞭解這些檔案也是系統安全管理的重要組成部份;做為一個合格的系統管理員應該對使用者和使用者組配置檔案透徹瞭解才行;
一、使用者(User)相關;
談到使用者,就不得不談使用者管理,使用者配置檔案,以及使用者查詢和管理的控制工具;使用者管理主要通過修改使用者配置檔案完成;使用者管理控制工具最終目的也是為了修改使用者配置檔案。 什麼是使用者查詢和管理控制工具呢?使用者查詢和控制工具是查詢、新增、修改和刪除使用者等系統管理工具,比如查詢使用者的id和finger命令,新增使用者的useradd 或adduser 、userdel 使用者的刪除 、設定密碼的passwd命令、修改使用者usermod 等等;我們需要知道的是通過使用者查詢和控制工具所進行的動作的最終目的也是修改使用者配置檔案;所以我們進行使用者管理的時候,直接修改使用者配置檔案一樣可以達到使用者管理的目的; 通過上面的解說,我們能實實在在的感覺到使用者(User)配置檔案的重要性;其實使用者和使用者組在系統管理中是不可分割的,但為了說明問題,我們還是得把使用者(User)的配置檔案單列出來解說,其中包括/etc/passwd 和/etc/shadow 檔案;在這之中,你還能瞭解UID的重要性; 通過本標題,您可以瞭解或掌握的內容有:瞭解/etc/passwd和/etc/shadow;什麼UID ; 與使用者相關的系統配置檔案主要有/etc/passwd 和/etc/shadow,其中/etc/shadow是使用者資訊的加密檔案,比如使用者的密碼口令的加密儲存等;/etc/passwd 和/etc/shadow 檔案是互補的;我們可以通過對比兩個檔案來差看他們的區別; 1、關於/etc/passwd 和 UID;
/etc/passwd 是系統識別使用者的一個檔案,做個不恰當的比喻,/etc/passwd 是一個花名冊,系統所有的使用者都在這裡有登入記載;當我們以beinan 這個賬號登入時,系統首先會查閱 /etc/passwd 檔案,看是否有beinan 這個賬號,然後確定beinan的UID,通過UID 來確認使用者和身份,如果存在則讀取/etc/shadow 影子檔案中所對應的beinan的密碼;如果密碼核實無誤則登入系統,讀取使用者的配置檔案; 1)/etc/passwd 的內容理解:
在/etc/passwd 中,每一行都表示的是一個使用者的資訊;一行有7個段位;每個段位用:號分割,比如下面是我的系統中的/etc/passwd 的兩行;
beinan:x:500:500:beinan sun:/home/beinan:/bin/bash
linuxsir:x:505:502:linuxsir open,linuxsir office,13898667715:/home/linuxsir:/bin/bash
beinan:x:500:500:beinan sun:/home/beinan:/bin/bash
linuxsir:x:501:502::/home/linuxsir:/bin/bash 第一欄位:使用者名稱(也被稱為登入名);在上面的例子中,我們看到這兩個使用者的使用者名稱分別是 beinan 和linuxsir;
第二欄位:口令;在例子中我們看到的是一個x,其實密碼已被對映到/etc/shadow 檔案中;
第三欄位:UID ;請參看本文的UID的解說;
第四欄位:GID;請參看本文的GID的解說;
第五欄位:使用者名稱全稱,這是可選的,可以不設定,在beinan這個使用者中,使用者的全稱是beinan sun ;而linuxsir 這個使用者是沒有設定全稱;
第六欄位:使用者的家目錄所在位置;beinan 這個使用者是/home/beinan ,而linuxsir 這個使用者是/home/linuxsir ;
第七欄位:使用者所用SHELL 的型別,beinan和linuxsir 都用的是 bash ;所以設定為/bin/bash ;
2)關於UID 的理解:
UID 是使用者的ID 值,在系統中每個使用者的UID的值是唯一的,更確切的說每個使用者都要對應一個唯一的UID ,系統管理員應該確保這一規則。系統使用者的UID的值從0開始,是一個正整數,至於最大值可以在/etc/login.defs 可以查到,一般Linux發行版約定為60000; 在Linux 中,root的UID是0,擁有系統最高許可權; UID 在系統唯一特性,做為系統管理員應該確保這一標準,UID 的唯一性關係到系統的安全,應該值得我們關注!比如我在/etc/passwd 中把beinan的UID 改為0後,你設想會發生什麼呢?beinan這個使用者會被確認為root使用者。beinan這個帳號可以進行所有root的操作;
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等; 在Fedora 系統會把前499 個UID和GID 預留出來,我們新增新使用者時的UID 從500開始的,GID也是從500開始,至於其它系統,有的系統可能會把前999UID和GID預留出來;以各個系統中/etc/login.defs中的 UID_MIN 的最小值為準; Fedora 系統 login.defs的UID_MIN是500,而UID_MAX 值為60000,也就是說我們通過adduser預設新增的使用者的UID的值是500到60000之間;而Slackware 通過adduser不指定UID來新增使用者,預設UID 是從1000開始;
2、關於/etc/shadow ; 1)/etc/shadow 概說;
/etc/shadow檔案是/etc/passwd 的影子檔案,這個檔案並不由/etc/passwd 而產生的,這兩個檔案是應該是對應互補的;shadow內容包括使用者及被加密的密碼以及其它/etc/passwd 不能包括的資訊,比如使用者的有效期限等;這個檔案只有root許可權可以讀取和操作,許可權如下:
-r-------- 1 root root 1.5K 10月 16 09:49 /etc/shadow /etc/shadow 的許可權不能隨便改為其它使用者可讀,這樣做是危險的。如果您發現這個檔案的許可權變成了其它使用者組或使用者可讀了,要進行檢查,以防系統安全問題的發生; 如果我們以普通使用者檢視這個檔案時,應該什麼也檢視不到,提示是許可權不夠:
[
[email protected]
~]$ more /etc/shadow
/etc/shadow: 許可權不夠
2)/etc/shadow 的內容分析;
/etc/shadow 檔案的內容包括9個段位,每個段位之間用:號分割;我們以如下的例子說明;
beinan:$1$VE.Mq2Xf$2c9Qi7EQ9JP8GKF8gH7PB1:13072:0:99999:7:::
linuxsir:$1$IPDvUhXP$8R6J/VtPXvLyXxhLWPrnt/:13072:0:99999:7::13108: 第一欄位:使用者名稱(也被稱為登入名),在/etc/shadow中,使用者名稱和/etc/passwd 是相同的,這樣就把passwd 和shadow中用的使用者記錄聯絡在一起;這個欄位是非空的;
第二欄位:密碼(已被加密),如果是有些使用者在這段是x,表示這個使用者不能登入到系統;這個欄位是非空的;
第三欄位:上次修改口令的時間;這個時間是從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來檢視幫助,您會得到更為詳盡的資料; 我們再根據例項分析: beinan:$1$VE.Mq2Xf$2c9Qi7EQ9JP8GKF8gH7PB1:13072:0:99999:7:::
linuxsir:$1$IPDvUhXP$8R6J/VtPXvLyXxhLWPrnt/:13072:0:99999:7::13108: 第一欄位:使用者名稱(也被稱之為登入名),在例子中有峽谷兩條記錄,也表示有兩個使用者beinan和linuxsir
第二欄位:被加密的密碼,如果有的使用者在此欄位中是x,表示這個使用者不能登入系統,也可以看作是虛擬使用者,不過虛擬使用者和真實使用者都是相對的,系統管理員隨時可以對任何使用者操作;
第三欄位:表示上次更改口令的天數(距1970年01月01日),上面的例子能說明beinan和linuxsir這兩個使用者,是在同一天更改了使用者密碼,當然是通過passwd 命令來更改的,更改密碼的時間距1970年01月01日的天數為13072;
第四欄位:禁用兩次口令修改之間最小天數的功能,設定為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發展之用;