引言:與密碼密切相關的兩個文件
/etc/passwd:
第一字段:用戶名
第二字段:口令
第三字段:UID
第四字段:GID
第五字段:用戶名全稱
第六字段:用戶的家目錄所在位置
第七字段:用戶所用SHELL的類型
/etc/shadow:
第一字段:用戶名
第二字段:被加密的密碼
第三字段:表示上次更改口令的天數(距1970年01月01日)
第四字段:禁用兩次口令修改之間最小天數
第五字段:兩次修改口令間隔最多的天數
第六字段:提前多少天警告用戶口令將過期
第七字段:在口令過期之后多少天禁用此用戶
第八字段:用戶過期日期
第九字段:保留字段
一:關於/etc/passwd:
關於/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;
關於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開始;
二:關於/etc/shadow
/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 的權限不能隨便改為其它用戶可讀,這樣做是危險的。如果您發現這個文件的權限變成了其它用戶組或用戶可讀了,要進行檢查,以防系統安全問題的發生;
如果我們以普通用戶查看這個文件時,應該什么也查看不到,提示是權限不夠:
[beinan@localhost ~]$ more /etc/shadow
/etc/shadow: 權限不夠
/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日開始的天數),如果這個字段的值為空,帳號永久可用; www.hackdig.com
第九字段:保留字段,目前為空,以備將來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發展之用
————————————————
版權聲明:本文為CSDN博主「weixin_39710249」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_39710249/article/details/111553927