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