linux /etc/shadow--passwd/pam.d/system-auth文件詳解


 在linux操作系統中, /etc/passwd文件中的每個用戶都有一個對應的記錄行,記錄着這個用戶的一下基本屬性。該文件對所有用戶可讀。

  而/etc/shadow文件正如他的名字一樣,他是passwd文件的一個影子,/etc/shadow文件中的記錄行與/etc/passwd中的一一對應,它由pwconv命令根據/etc/passwd中的數據自動產生。但是/etc/shadow文件只有系統管理員才能夠進行修改和查看。

 /etc/passwd文件介紹
  首先,我們通過命令行cat /etc/passwd進行查看/etc/passwd文件內容:

root:x:0:0:root:/root:/bin/bash

avahi:x:111:117:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
lightdm:x:112:118:Light Display Manager:/var/lib/lightdm:/bin/false
colord:x:113:121:colord colour management daemon,,,:/var/lib/colord:/bin/false
hplip:x:114:7:HPLIP system user,,,:/var/run/hplip:/bin/false
pulse:x:115:122:PulseAudio daemon,,,:/var/run/pulse:/bin/false
yaofei:x:1000:1000:ubuntu14.04,,,:/home/yaofei:/bin/bash
sshd:x:116:65534::/var/run/sshd:/usr/sbin/nologin
mysql:x:117:125:MySQL Server,,,:/nonexistent:/bin/false

  從文件中我們可以看到,/etc/passwd中一行記錄對應着一個用戶,每行記錄又被冒號(:)分隔為7個字段,其格式和具體含義如下:
用戶名:口令:用戶標識號:組標識號:注釋性描述:主目錄:登錄Shell

用戶名(login_name):是代表用戶賬號的字符串。通常長度不超過8個字符,並且由大小寫字母和/或數字組成。登錄名中不能有冒號(:),因為冒號在這里是分隔符。為了兼容起見,登錄名中最好不要包含點字符(.),並且不使用連字符(-)和加號(+)打頭。
口令(passwd):一些系統中,存放着加密后的用戶口令字。雖然這個字段存放的只是用戶口令的加密串,不是明文,但是由於/etc/passwd文件對所有用戶都可讀,所以這仍是一個安全隱患。因此,現在許多Linux系統(如SVR4)都使用了shadow技術,把真正的加密后的用戶口令字存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一個特殊的字符,例如“x”或者“*”。
用戶標識號(UID):是一個整數,系統內部用它來標識用戶。一般情況下它與用戶名是一一對應的。如果幾個用戶名對應的用戶標識號是一樣的,系統內部將把它們視為同一個用戶,但是它們可以有不同的口令、不同的主目錄以及不同的登錄Shell等。取值范圍是0-65535。0是超級用戶root的標識號,1-99由系統保留,作為管理賬號,普通用戶的標識號從100開始。在Linux系統中,這個界限是500。
組標識號(GID):字段記錄的是用戶所屬的用戶組。它對應着/etc/group文件中的一條記錄。
注釋性描述(users):字段記錄着用戶的一些個人情況,例如用戶的真實姓名、電話、地址等,這個字段並沒有什么實際的用途。在不同的Linux系統中,這個字段的格式並沒有統一。在許多Linux系統中,這個字段存放的是一段任意的注釋性描述文字,用做finger命令的輸出。
主目錄(home_directory):也就是用戶的起始工作目錄,它是用戶在登錄到系統之后所處的目錄。在大多數系統中,各用戶的主目錄都被組織在同一個特定的目錄下,而用戶主目錄的名稱就是該用戶的登錄名。各用戶對自己的主目錄有讀、寫、執行(搜索)權限,其他用戶對此目錄的訪問權限則根據具體情況設置。
登錄Shell(Shell):用戶登錄后,要啟動一個進程,負責將用戶的操作傳給內核,這個進程是用戶登錄到系統后運行的命令解釋器或某個特定的程序,即Shell。Shell是用戶與Linux系統之間的接口。Linux的Shell有許多種,每種都有不同的特點。常用的有sh(BourneShell),csh(CShell),ksh(KornShell),tcsh(TENEX/TOPS-20typeCShell),bash(BourneAgainShell)等。系統管理員可以根據系統情況和用戶習慣為用戶指定某個Shell。如果不指定Shell,那么系統使用sh為默認的登錄Shell,即這個字段的值為/bin/sh。
 /etc/shadow文件介紹
  /etc/shadow文件格式與/etc/passwd文件格式類似,同樣由若干個字段組成,字段之間用“:”隔開。
  通過命令行輸入sudo cat /etc/shadow進行文件內容查看root:!:17043:0:99999:7:::

daemon:*:16652:0:99999:7:::
bin:*:16652:0:99999:7:::
hplip:*:16652:0:99999:7:::
pulse:*:16652:0:99999:7:::
yaofei:$1$5M0Rbozg$1fWsJaQB.TFAL24b96xi41:17043:0:99999:7:::

  文件中字段主要含義為:登錄名:加密口令:最后一次修改時間:最小時間間隔:最大時間間隔:警告時間:不活動時間:失效時間:標志

“登錄名”是與/etc/passwd文件中的登錄名相一致的用戶賬號
“口令”字段存放的是加密后的用戶口令字:

如果為空,則對應用戶沒有口令,登錄時不需要口令;
星號代表帳號被鎖定;
雙嘆號表示這個密碼已經過期了;
$6$開頭的,表明是用SHA-512加密;
$1$表明是用MD5加密;
$2$ 是用Blowfish加密;
$5$ 是用 SHA-256加密;
“最后一次修改時間”表示的是從某個時刻起,到用戶最后一次修改口令時的天數。時間起點對不同的系統可能不一樣。例如在SCOLinux中,這個時間起點是1970年1月1日。

“最小時間間隔”指的是兩次修改口令之間所需的最小天數。
“最大時間間隔”指的是口令保持有效的最大天數。
“警告時間”字段表示的是從系統開始警告用戶到用戶密碼正式失效之間的天數。
“不活動時間”表示的是用戶沒有登錄活動但賬號仍能保持有效的最大天數。
“失效時間”字段給出的是一個絕對的天數,如果使用了這個字段,那么就給出相應賬號的生存期。期滿后,該賬號就不再是一個合法的賬號,也就不能再用來登錄了。
---------------------

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 的權限不能隨便改為其它用戶可讀,這樣做是危險的。如果您發現這個文件的權限變成了其它用戶組或用戶可讀了,要進行檢查,以防系統安全問題的發生;
如果我們以普通用戶查看這個文件時,應該什么也查看不到,提示是權限不夠:
[beinan@localhost ~]$ 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發展之用;
 

LINUX設置密碼復雜度的文件/etc/pam.d/system-auth

一、准備工作:

安裝 PAM 的 cracklib 模塊,cracklib 能提供額外的密碼檢查能力。

二、具體操作:

Debian、Ubuntu 或 Linux Mint 系統上:

代碼如下:

$ sudo apt-get install libpam-cracklib

CentOS、Fedora、RHEL 系統已經默認安裝了 cracklib PAM 模塊,所以在這些系統上無需執行上面的操作。

為了強制實施密碼策略,需要修改 /etc/pam.d 目錄下的 PAM 配置文件。一旦修改,策略會馬上生效。

注意:此教程中的密碼策略只對非 root 用戶有效,對 root 用戶無效。

策略設置:

1、禁止使用舊密碼

找到同時有 “password” 和 “pam_unix.so” 字段並且附加有 “remember=5” 的那行,它表示禁止使用最近用過的5個密碼(己使用過的密碼會被保存在 /etc/security/opasswd 下面)。

Debian、Ubuntu 或 Linux Mint 系統上:

代碼如下:

$ sudo vi /etc/pam.d/common-passwordpassword [success=1 default=ignore] pam_unix.so obscure sha512 remember=5

CentOS、Fedora、RHEL 系統上:

代碼如下:

$ sudo vi /etc/pam.d/system-authpassword sufficient pamunix.so sha512 shadow nullok tryfirstpass useauthtok remember=5

二、設置最短密碼長度

找到同時有 “password” 和 “pam_cracklib.so” 字段並且附加有 “minlen=10” 的那行,它表示最小密碼長度為(10 - 類型數量)。這里的 “類型數量” 表示不同的字符類型數量。PAM 提供4種類型符號作為密碼(大寫字母、小寫字母、數字和標點符號)。如果密碼同時用上了這4種類型的符號,並且 minlen 設為10,那么最短的密碼長度允許是6個字符。

Debian、Ubuntu 或 Linux Mint 系統上:

代碼如下:

$ sudo vi /etc/pam.d/common-passwordpassword requisite pam_cracklib.so retry=3 minlen=10 difok=3

CentOS、Fedora、RHEL 系統上:

代碼如下:

$ sudo vi /etc/pam.d/system-authpassword requisite pam_cracklib.so retry=3 difok=3 minlen=10

三、設置密碼復雜度

找到同時有 “password” 和 “pam_cracklib.so” 字段並且附加有 “ucredit=-1 lcredit=-2 dcredit=-1 ocredit=-1” 的那行,表示密碼必須至少包含一個大寫字母(ucredit),兩個小寫字母(lcredit),一個數字(dcredit)和一個標點符號(ocredit)。

Debian、Ubuntu 或 Linux Mint 系統上:

代碼如下:

$ sudo vi /etc/pam.d/common-passwordpassword requisite pam_cracklib.so retry=3 minlen=10 difok=3 ucredit=-1 lcredit=-2 dcredit=-1 ocredit=-1

CentOS、Fedora、RHEL 系統上:

代碼如下:

$ sudo vi /etc/pam.d/system-authpassword requisite pam_cracklib.so retry=3 difok=3 minlen=10 ucredit=-1 lcredit=-2 dcredit=-1 ocredit=-1

四、設置密碼過期期限

編輯 /etc/login.defs 文件,可以設置當前密碼的有效期限,具體變量如下所示:

代碼如下:

$ sudo vi /etc/login.defsPASSMAXDAYS 150 PASSMINDAYS 0 PASSWARNAGE 7

這些設置要求用戶每6個月改變密碼,並且會提前7天提醒用戶密碼快到期了。

如果想為每個用戶設置不同的密碼期限,使用 chage 命令。下面的命令可以查看某個用戶的密碼限期:

代碼如下:

$ sudo chage -l xmoduloLast password change : Dec 30, 2013 Password expires : never Password inactive : never Account expires : never Minimum number of days between password change : 0 Maximum number of days between password change : 99999 Number of days of warning before password expires : 7

默認情況下,用戶的密碼永不過期。

五、下面的命令用於修改 xmodulo 用戶的密碼期限:

代碼如下:

$ sudo chage -E 6/30/2014 -m 5 -M 90 -I 30 -W 14 xmodulo

上面的命令將密碼期限設為2014年6月3日。另外,修改密碼的最短周期為5天,最長周期為90天。密碼過期前14天會發送消息提醒用戶,過期后帳號會被鎖住30天。

設置完后,驗證效果如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM