centos删除文件夹_等保测评主机安全之centos密码长度
密碼長度,作為等級保護主機測評項里中密碼復雜度要求之一,是必須要查的。
在《等級測評師初級教程》里,對于密碼長度的設置指向了/etc/login.defs里的PASS_MIN_LEN字段。
# PASS_MIN_LEN Minimum acceptable password length.PASS_MIN_LEN 5簡單明了,對新密碼的長度最小值做出了限制。
不過,實際上這個參數是無效的,至少在centos6以及以上版本里,這個參數對新密碼長度沒有一點點的制約。
比如大家可以試一試,給PASS_MIN_LEN設一個值,再用非root賬戶去改改密碼,看看對新密碼長度有沒有影響。甚至,還可以直接刪除login.defs文件,試一試。
反正,我的測試結果是:這個參數沒有起到作用。
結果是出來了,至于原因,我沒找到,網上也沒有相關的資料?;蛟S該參數在centos以前的某個老版本里是有作用的,但隨著版本更新,特別估計是開始使用PAM認證機制后,該參數就無效化了,僅僅作為一個迷惑人的參數放置在login.defs文件里。
實際上真正起作用的,是一個pam模塊,具體點,也就是pam_cracklib.so模塊。
PAM認證機制個人感覺就是一個模塊化、組件化的機制,一些人把一些認證、驗證以及其他功能實現好了,然后上層的應用去調用配置文件(接口),而配置文件呢再調用底層的實現,大概就是下圖這個樣子:
所謂的應用程序,就包括在linux里使用的命令,好,回到密碼長度這個話題。
修改密碼時對于密碼的一系列驗證由pam_cracklib.so模塊實現,那么誰去調用?那當然就是passwd了(修改密碼的命令)。
passwd怎么調用的?是通過配置文件(接口)做到的。
在centos6以及以上版本中,這個配置文件就是/etc/pam.d中與passwd同名的文件,也就是/etc/pam.d/passwd。
順便一提,/etc/pam.d中基本都是這類同名文件:
[root@centos01 ~]# ls /etc/pam.datd fingerprint-auth-ac password-auth smtp system-config-authenticationauthconfig gdm password-auth-ac smtp.postfix system-config-dateauthconfig-gtk gdm-autologin polkit-1 smtp.sendmail system-config-kdumpauthconfig-tui gdm-fingerprint poweroff sshd system-config-keyboardchfn gdm-password ppp sshd~ system-config-networkchsh gnome-screensaver reboot ssh-keycat system-config-network-cmdconfig-util halt remote su system-config-userscrond ksu run_init sudo vmtoolsdcups login runuser sudo-i xservercvs login~ runuser-l su-ldovecot newrole setup system-autheject other smartcard-auth system-auth~fingerprint-auth passwd smartcard-auth-ac system-auth-ac/etc/pam.d/passwd的內容如下:
[root@centos01 ~]# cat /etc/pam.d/passwd#%PAM-1.0auth include system-authaccount include system-authpassword substack system-auth-password optional pam_gnome_keyring.so對于配置文件,具有一定的規范,第一列代表模塊類型,類型分為4種:
auth: 用來對用戶的身份進行識別.如:提示用戶輸入密碼,或判斷用戶是否為root
account:對帳號的各項屬性進行檢查.如:是否允許登錄,是否達到最大用戶數,或是root用戶是否允許在這個終端登錄等
session:這個模塊用來定義用戶登錄前的,及用戶退出后所要進行的操作.如:登錄連接信息,用戶數據的打開與關閉,掛載文件系統等.
passwd:使用用戶信息來更新.如:修改用戶密碼.
這里,由于是修改密碼,所以會使用passwd類型的模塊。
配置文件是可以互相調用的,passwd文件里的第三行
password substack system-auth就調用了system-auth配置文件。
這里的substack和include都是引用的意思,只是稍微有點區別(具體百度就知道了)。
然后這個system-auth文件也在/etc/pam.d的文件夾中,內容為
[root@centos01 ~]# cat /etc/pam.d/system-auth#%PAM-1.0# This file is auto-generated.# User changes will be destroyed the next time authconfig is run.auth required pam_env.soauth sufficient pam_fprintd.soauth sufficient pam_unix.so nullok try_first_passauth requisite pam_succeed_if.so uid >= 500 quietauth required pam_deny.soaccount required pam_unix.soaccount sufficient pam_localuser.soaccount sufficient pam_succeed_if.so uid < 500 quietaccount required pam_permit.sopassword requisite pam_cracklib.so try_first_pass retry=3 type=password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtokpassword required pam_deny.sosession optional pam_keyinit.so revokesession required pam_limits.sosession [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uidsession required pam_unix.so其中,具體被引用(使用)到的是:
password requisite pam_cracklib.so try_first_pass retry=3 type=password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtokpassword required pam_deny.sopam_cracklib.so模塊有不少參數,主要常用的有這幾個(摘抄于網上):
minlen=N:最小密碼長度。dcredit=N:當N>=0時,N代表新密碼最多可以有多少個阿拉伯數字。當N<0時,N代表新密碼最少要有多少個阿拉伯數字。ucredit=N:和dcredit差不多,但是這里說的是大寫字母。lcredit=N:和dcredit差不多,但是這里說的是小寫字母。ocredit=N:和dcredit差不多,但是這里說的是特殊字符。似乎到這里就差不多了,因為都找到了實際控制新密碼最小長度的地方了,但其實還沒完呢。
因為網上關于pam_cracklib模塊中這幾個參數的解釋,可以說,基本上都是不準確的。
那當然,我都這么說了,我這里自然會給一個準確的解釋(我覺得這應該是全網唯一清楚且準確的中文解釋了,因為我自己在查找資料的時候完全沒有搜到,有些資料比較接近,但實際還是沒說清楚)。
準確的解釋來man命令輸出的說明文檔:https://linux.die.net/man/8/pam_cracklib
其實寫得還是比較清楚的,但是還是有點抽象,我稍微解釋下。
minlen確實有最小長度的意思,但是當dcredit、ucredit、lcredit、ocredit的值(N)大于等于零的時候,情況就不同了。
N大于零的時候,完全不是網上說的“最多可以有多少個數字或大小寫字母或特殊字符”的意思,而是計算長度的時候會有變化。
比如ocredit(特殊字符)的值是2的時候,就代表有最多有2個特殊字符的長度額外能加1。
當你設置的密碼是:@#¥,它的長度被算作是5,而不是3。因為有2個特殊字符的長度被看做是2(額外加了個1),而第3個特殊字符沒有此類變化,長度仍被視作是1,所以總共長度時(2+2)+1=5。
所以,如果ocredit的值是4,那么@#¥%&的長度就是(4+4)+1=9。
其余的大小寫字母和數字的值大于零時,也是這個意思。而他們的默認值都是1,也就是會有1個字符的長度額外加1。
所以如果你什么都不設置,就設置minlen=8的話,理論上你的新密碼只要4類字符都包含,那么4個字符就夠了,比如:1Aa@
當然,如果你真這么設置,實際上是不行的,因為除了minlen對長度有限制,cracklib內部有代碼對其有限制,而且優先級高于minlen。
解釋如下:Note that there is a pair of length limits in Cracklib itself, a “way too short” limit of 4 which is hard coded in and a defined limit (6) that will be checked without reference to minlen。
大概的代碼如下:
#define MINLEN 6 char * FascistLook(pwp, instring) PWDICT *pwp; char *instring; { int ii; char *ptr; char *jptr; char junk[STRINGSIZE]; char *password; char rpassword[STRINGSIZE]; int32 notfound; notfound = PW_WORDS(pwp); /* already truncated if from FascistCheck() */ /* but pretend it wasn't ... */ strncpy(rpassword, instring, TRUNCSTRINGSIZE); rpassword[TRUNCSTRINGSIZE - 1] = ''; password = rpassword; if (strlen(password) < 4) { return ("it's WAY too short"); } if (strlen(password) < MINLEN) { return ("it is too short"); } jptr = junk; *jptr = ''; for (ii = 0; ii < STRINGSIZE && password[ii]; ii++) { if (!strchr(junk, password[ii])) { *(jptr++) = password[ii]; *jptr = ''; } } if (strlen(junk) < MIND所以說,如果長度小于4,會輸出it’s WAY too short,如果大于4小于6,會輸出it is too short。
當然,超過了6之后,就是由minlen控制了。
嗯……扯了這么久,大概把修改密碼時密碼長度的事情說完了。
正如前言所說,和等保關系不大。
不過如果在檢查的時候看到PASS_MIN_LEN ? ?8 的時候,是給這1分還是不給分呢?
我想大家在心里都是有答案的,嘿嘿。
另外,這個pam認證機制還是經常會碰到的,比如在登錄失敗處理功能中,是用pam_tally或者pam_tally2模塊去實現。
所以聰明的你一定知道具體應該去哪個配置文件里查看是否進行設置了。
比如遠程ssh連接的登錄失敗處理功能,自然就是去pam.d文件夾中的sshd文件查看,sshd又引用passwd-auth,所這兩個文件都可以實現失敗處理(所以初級教程讓你去system-auth里查看配置,其實是管不了ssh遠程連接登錄的,實際上管的是本地tty終端登錄)。
而本地tty終端登錄,也就是使用login命令,是去pam.d文件夾中的login文件查看,login則引用system-auth文件,同理,這兩個文件都可以實現。
至于su命令和圖形化界面窗口登錄(比如gdm-password)也是按照這種方法去查看有效配置文件在哪兒。
就先寫到這了,以后有空再寫一寫其他的。
*本文原創作者:起于凡而非于凡,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載
精彩推薦
總結
以上是生活随笔為你收集整理的centos删除文件夹_等保测评主机安全之centos密码长度的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: node --- 使用koa-rout
- 下一篇: 解压.tar.bz2文件出现错误