編者按: 本文圍繞Linux 系統(tǒng)密碼問(wèn)題,講解了其安全管理策略的實(shí)施,并以一些實(shí)例配置進(jìn)行說(shuō)明。
在早期Linux版本中,賬戶密碼信息是保存在“/etc/passwd”文件中的。為了更好的保護(hù)密碼的安全,在之后的版本中,將上述密碼文件的第二列密碼串保存在了“/etc/shadow”文件中,同時(shí)定義了和密碼有效性相關(guān)的策略。
在“/etc/shadow”中,每行賬戶信息包含8 列,前兩個(gè)為用戶名和密碼哈希串,之后的信息表示密碼的有效性信息,即密碼的時(shí)效設(shè)置。依次包括最后一次密碼修改時(shí)間(距離1970年1月1 號(hào)的天數(shù)),密碼每?jī)纱涡薷牡拈g隔時(shí)間(默認(rèn)為0,表示可以隨時(shí)修改密碼),用戶多長(zhǎng)時(shí)間可以不更改密碼,密碼過(guò)期前警告,距離密碼鎖定時(shí)間以及帳號(hào)有效期等。
使用Chage 命令可以調(diào)整密碼有效性參數(shù)。例如,執(zhí)行“chage-m3-M60-W7-I 10 user1”命令,針對(duì)User1 賬戶規(guī)定每隔60 天密碼必須修改一次,兩次密碼修改之間至少間隔3 天,密碼過(guò)期前7 天發(fā)出警告,之后經(jīng)過(guò)10 天賬戶被鎖定。執(zhí)行“chage-l user1”命令,可以查看User1 賬戶的密碼有效性信息。執(zhí)行“chage-d 0 user1”命令,表示當(dāng)User1 用戶登錄后,必須立即修改密碼。
在“/etc”目錄下存在名為“l(fā)ogin.defs”的文件,在其中存儲(chǔ)有默認(rèn)的密碼有效性策略。當(dāng)使用Useradd 等命令創(chuàng)建用戶帳號(hào)時(shí),會(huì)參考該文件,直接將密碼有效性信息寫(xiě)入到“/etc/shadow”文件中。
對(duì)于“l(fā)ogin.defs”文件進(jìn)行合適的修改,那么只要?jiǎng)?chuàng)建新的賬戶,其密碼策略就必須符合默認(rèn)條件。執(zhí)行“vim/etc/login.defs”命令,可以查看其默認(rèn)的策略值。例如,對(duì)于“PASS_MAX_DAYS”來(lái)說(shuō),可以將其設(shè)置為60,表示每隔60 天必須修改密碼。對(duì)于“PASS_MIN_DAYS”來(lái)說(shuō),可以將其值修改為3,表示每次密碼修改的間隔為3 天,對(duì)于“PASS_MIN_LEN”來(lái)說(shuō),可以將其值修改為7,表示密碼必須為7 位,對(duì)于“PASS_WARN_AGE”來(lái)說(shuō),將其值修改為7,可以提前7天提示用戶修改密碼。這樣,當(dāng)之后創(chuàng)建賬戶時(shí),必須使用上述策略。
為了進(jìn)一步提高密碼的安全性,可以使用PAM(Plugable Authentication Modules,可插入認(rèn)證模式)對(duì)用戶登錄進(jìn)行監(jiān)控。利用PAM 機(jī)制,可以將各種認(rèn)證手段轉(zhuǎn)變成可任意轉(zhuǎn)換的模塊,使您可以自由使用合適的認(rèn)證方法。
PAM 是為了實(shí)現(xiàn)第三方的認(rèn)證而開(kāi)發(fā)的一套認(rèn)證體系。PAM 可以實(shí)現(xiàn)動(dòng)態(tài)控制,只需安裝一個(gè)新的模塊,就可以增加新的認(rèn)證方法,對(duì)目標(biāo)程序的PAM 認(rèn)證參數(shù)進(jìn)行修改,就可以立即生效。PAM的認(rèn)證通過(guò)一系列的動(dòng)態(tài)庫(kù),這些動(dòng)態(tài)庫(kù)提供在用戶登錄時(shí)的一些會(huì)話函數(shù),提供密碼輸入界面,執(zhí)行具體的認(rèn)證操作,并通知用戶登錄成功與否。自從PAM 支持第三方認(rèn)證后,順便也將標(biāo)準(zhǔn)的Linux 認(rèn)證也嵌入了進(jìn)去。因此,PAM 已經(jīng)和系統(tǒng)實(shí)現(xiàn)了高度集成。
通過(guò)執(zhí)行“l(fā)s/lib64/security”命令,可以查看所有的PAM 動(dòng)態(tài)庫(kù)。執(zhí)行“l(fā)s/etc/pam.d”命令,可以查看與PAM 動(dòng)態(tài)相關(guān)的配置文件。在每個(gè)PAM 模塊的配置文件中均包含以下四個(gè)部分或者某幾個(gè)部分,其中的“auth”部分用來(lái)進(jìn)行賬戶認(rèn)證,即確認(rèn)用戶是否是其本身,應(yīng)用程序是依靠正確的賬戶名和密碼進(jìn)行判斷的?!癮ccount”部分用來(lái)判斷帳號(hào)的有效性,在有些情況下,即使輸入了正確的密碼也未必可以登錄系統(tǒng),因?yàn)閷?duì)應(yīng)的帳號(hào)可能已經(jīng)被管理員鎖定,或者已經(jīng)過(guò)期等。即帳號(hào)處于正常健康的狀態(tài),才可以通過(guò)該部分的認(rèn)證?!皃assword”部分轉(zhuǎn)用于修改密碼之用,其主要用途是如何讓用戶將密碼修改的符合管理員要求?!皊ession”部分用來(lái)管理會(huì)話控制,利用Session 控制,可以在用戶登錄系統(tǒng)的時(shí)刻,限制其可以使用的資源。例如,控制其CPU、內(nèi)存使用量及最大文件打開(kāi)數(shù)量等。
例如,在“/etc/pam.d”目錄下執(zhí)行“vim login”命令,可以查看和系統(tǒng)登錄相關(guān)的配置信息。在不同的檢查部分中對(duì)應(yīng)有不同的行為。比如“required”項(xiàng)表示對(duì)應(yīng)的檢查部分必須符合PAM的要求,如果檢測(cè)失敗,則整體處于失敗狀態(tài),但并不立即退出PAM 檢查,會(huì)依次往后檢測(cè)其他模塊。如果設(shè)置為“requisite”,表示若該項(xiàng)檢測(cè)失敗,則立即退出。如果設(shè)置為“sufficient”,則表示直到檢測(cè)到本環(huán)節(jié),之前的檢測(cè)部分全部通過(guò),如果滿足當(dāng)前的檢測(cè)項(xiàng)目,則立即成功完成整個(gè)PAM 檢測(cè)。如果本檢測(cè)項(xiàng)目不通過(guò),則對(duì)整個(gè)檢測(cè)沒(méi)有任何影響。如果設(shè)置為“optional”,則表示當(dāng)前的檢測(cè)對(duì)整體沒(méi)有任何影響,僅僅執(zhí)行本環(huán)節(jié)的檢測(cè)而已。如果要想實(shí)現(xiàn)不同PAM 模塊之間的嵌套,需要使用“Include”關(guān)鍵字。例如,“auth include system-auth”語(yǔ)句就調(diào)用了名為“system-auth”認(rèn)證檔案規(guī)范文件,并依次執(zhí)行該文件中包含的檢測(cè)項(xiàng)目。
其實(shí),在Linux中存在system-auth 和passwordauth 這兩個(gè)最常用的認(rèn)證檔案規(guī)范文件。前者主要用來(lái)執(zhí)行本地認(rèn)證,后者主要用來(lái)控制遠(yuǎn)程認(rèn)證。
例如,對(duì)于SSHD、Login和GDM 等登錄方式來(lái)說(shuō),都會(huì)使用到上述兩種認(rèn)證檔案規(guī)范文件。檢測(cè)賬戶密碼強(qiáng)壯性一般使用的是“pam_cracklib.so”的PAM 模 塊文件,用來(lái)提示用戶輸入密碼和檢測(cè)密碼是否符合要求等。比如“password requi site pam_cracklib.so try_first_pass retry=3 type=welcome”就是堪稱經(jīng)典常用的Linux 密碼強(qiáng)壯度檢測(cè)語(yǔ)句,其只允許嘗試3 次密碼,并顯示提示信息“welcome”。在“pam_cracklib.so”模 塊中有些選擇可以靈活設(shè)置,比如“minlen”項(xiàng)可以設(shè)置密碼最小長(zhǎng)度,注意其長(zhǎng)度值從0 算起。
“l(fā)credit” “ucredit”“dcredit” “ocredit”等 項(xiàng)分別表示小寫(xiě)、大寫(xiě)、數(shù)字和其他特殊字符等密碼組成格式?!癿inclass”項(xiàng)表示使用上述哪些類(lèi)別組成密碼。
例如,對(duì)于“password requisite pam_cracklib.so try_first_pass retry=3 type=ocredit=-1 dvredit=-2 minlen=10”語(yǔ)句來(lái)說(shuō),說(shuō)明密碼必須包含至少一個(gè)其他字符,至少包含兩個(gè)數(shù)字,總長(zhǎng)度為10 位?!皃assword requisite pam_cracklib.so try_first_pass retry=3 type=ocredit=2 dvredit=2 minlen=12”語(yǔ)句說(shuō)明只要屬于一個(gè)特殊字符,就當(dāng)作兩個(gè)字符處理,輸入一個(gè)數(shù)字字符,就當(dāng)作兩個(gè)字符處理,而且密碼長(zhǎng)度為12 位。也就是說(shuō),如果輸入的全是特殊字符和數(shù)字的話,僅僅需要輸入6 個(gè)字符就可以滿足要求。為了防止別人不斷地嘗試密碼來(lái)入侵系統(tǒng),就需要對(duì)登錄進(jìn)行監(jiān)控和審計(jì)。使 用“pam_tally2.so”的PAM 模塊,可以有效抗擊密碼的暴力破解,當(dāng)使用者連續(xù)輸錯(cuò)密碼后就將其鎖定一段時(shí)間。
使用VIM 命令,對(duì)“/etc/pam.d”目錄下的“systemauth”和“password-auth”文件進(jìn)行修改,在其中“auth required pam_env.so”語(yǔ)句后添加“auth required pam_tally2.so deny=3 unlock_time=120”語(yǔ)句,在“account required pam_unix.so”語(yǔ)句上面添加“account required pam_tally2.so”語(yǔ)句,那么如果使用者連續(xù)3 次輸錯(cuò)密碼,則將其鎖定120 s,即使之后輸入了正確密碼,或者進(jìn)行了賬戶轉(zhuǎn)換,可以對(duì)其進(jìn)行有效性檢測(cè)。在命令行中執(zhí)行“pam_tally2”命令,可以查看記錄的失敗登錄的日志信息。如果想解除某賬戶的鎖定狀態(tài),可以執(zhí)行“pam_tally2–reset–u user1”命令,將User1 賬戶解鎖,使其可以再次登錄系統(tǒng)。
對(duì)于Session 會(huì)話控制來(lái) 說(shuō),在“/etc/security”目錄中存放這與其相關(guān)的PAM 控制文件。打開(kāi)其中的“l(fā)imits.conf”文件,可以看到很多配置信息,用來(lái)限制用戶在登錄時(shí)可以使用的系統(tǒng)資源。例如,“fsize”項(xiàng)表示最大建立的文件尺寸,“nofile”項(xiàng)表示最多打開(kāi)的文件數(shù)量,“rss”項(xiàng)表示占用的物理內(nèi)存大小,“as”項(xiàng)表示虛擬內(nèi)存地址,“cpu”項(xiàng)表示用戶發(fā)起一個(gè)進(jìn)程允許使用CPU的最長(zhǎng)時(shí)間,“nproc”項(xiàng)表示最多啟用的進(jìn)程數(shù)量,“maxlogins”項(xiàng)表示在系統(tǒng)中允許登錄相同賬戶的數(shù)量等。當(dāng)然,用戶可以執(zhí)行“ulimit-a”命令,來(lái)查看自己的資源限制情況。