iT邦幫忙

0

如何查詢使用者最近一次變更密碼的日期?

在Linux 郵件伺服器的管理上,不良的使用者習慣往往是管理上最大風險之所在,站在管理者的立場,會要求使用者定期變更安全強度夠的密碼。
請問要如何下指令,才能查詢一般郵件使用者最近一次變更密碼的日期? 另外,有沒有辦法透過套件或指令來強制要求一定期間內,使用者必須變更一次安全強度夠的密碼?

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

28
逮丸逮丸
iT邦大師 1 級 ‧ 2009-12-14 20:53:25
最佳解答

問題討論
這個問題比較理論,
在實際上一般不大會碰到此情形。
用 Linux 做郵件伺服器,
通常重點在郵件用,而少會開放Command Line Interface (CLI),
也就是提供 ssh 連線給使用者,
而比較多提供的是 POP3、IMAP或Webmail等服務。

您目題中的「一般郵件使用者」,
希望強制他們變更密碼;
對上述的郵件Client而言,
只有密碼對或不對的問題,
強制變更的政策,
對逾時不變更密碼者,
是造成無法順利使用而得向管理者處理密碼事宜。
如果是用 Webmail ,
而且webmail 是可以獲取系統password的相關資訊,
才有可能像CLI 界面,
算出了現在是否密碼到期,
若到期就立即要求改密碼才可繼續使用。
現有常用的webmail 是否有這樣的認證機制?
可能很少,但要實作改寫應是可行。

如果真有機構這樣嚴格執行的話,
用的是一般的收信軟體,
又非 webmail 的話,
我想系統必須每天檢查密碼檔,
若有近期密碼會過期的使用者,
就發出必須改密碼的通知信,
使用者才會知道該換密碼;
不然每天只用收發信的功能,
怎可能記得什麼時候該改密碼?

另外真有這樣需求的地方,
可能是實驗室共用的主機吧?
提供成員CLI 的登入,
就會有這樣的需求吧?

先回答第二個問題:
定時更新密碼
強制一段時間更新密碼的功能,
在一般Linux上的系統就內建了,
可參考:
http://linux.vbird.org/linux_basic/0410accountmanager.php#users
帳號管理這一部份,
去修改 /etc/login.def 裡的值:
鳥哥把各參數的作用解釋得很清楚,就不多言了。

但一般現有的系統已有一堆帳號,
可能都是用預設/etc/login.defs 中的
PASS_MAX_DAYS 99999
所以每個帳號的/etc/shadow 的第5欄都是99999,
如果真的要執行新政策,
就要看哪些帳號要強制幾天改密碼,
在那些帳號的第五欄改數字,
不然要等到第3欄的天數再加99999天,
才要求要改密碼…

密碼安全強度要求
至於安全強度夠的密碼,
則要靠 PAM, cracklib 來完成。
請參考:
http://www.deer-run.com/~hal/sysadmin/pam_cracklib.html
Linux-PAM系統管理指南(2)
寫得很詳盡,以下簡單摘錄:

不同Linux的PAM 的 password 設定檔名略有不同,
但找到 cracklib 的字樣,就是設在該行,
預設的政策都還沒那麼複雜:

<pre class="c" name="code">
#在Fedora /etc/pam.d/system-auth-ac
password    requisite     pam_cracklib.so try_first_pass retry=3

#在Ubuntu /etc/pam.d/common-password:
password required       pam_cracklib.so retry=3 minlen=6 difok=3

若要更嚴僅的話,可利用以下參數:
minlen 至少幾個字元
lcredit 至少幾個小寫
ucredit 至少幾個大寫
dcredit 至少幾個數字
ocredit 至少幾個非字母、非數字的字元
retry 改變輸入密碼的次數,預設值是1。就是說,如果使用者輸入的密碼強度不夠就退出。可以使用這個選項設置輸入的次數,以免一切都從頭再來。
difok 預設值為10。這個參數設置允許的新、舊密碼相同字元的個數。不過,如果新密碼中1/2的字元和舊密碼不同,則新密碼被接受。

更嚴僅的是還要比對是否與曾設過的舊密碼重覆,
而可以用 remember 的參數來記歷史密碼:

<pre class="c" name="code">
# 首先產生此空檔案供存歷史密碼用
touch /etc/security/opasswd
chown root:root /etc/security/opasswd
chmod 600 /etc/security/opasswd
#在Ubuntu /etc/pam.d/common-password 檔設以下字樣:
password required pam_unix.so md5 remember=12 use_authtok

查詢上次變更密碼日期
至於第一個問題,參考:
http://linux.vbird.org/linux_basic/0410accountmanager.php#chage
/etc/shadow 第三欄位記錄了密碼更動日期,
利用以下指令查相關資訊:

<pre class="c" name="code">
[root@www ~]# chage -l vbird2
Last password change                               : Feb 26, 2009
Password expires                                   : Apr 27, 2009
Password inactive                                  : May 07, 2009
Account expires                                    : never
Minimum number of days between password change     : 0
Maximum number of days between password change     : 60
Number of days of warning before password expires  : 7

更多的考量
對CLI 的使用者,也可利用
<pre class="c" name="code">passwd -e 帳號

無條件讓他下次登入時強迫改密碼。

對於不使用CLI 的使用者,
就必須透過網頁程式語言,
在做驗證的過程中,
加入來檢查密碼有效期及強迫改密碼的機制。

而只提供POP3、IMAP之類的,
用cron 每天檢查每個使用者密碼有效期,
到期前發mail通知改密碼,
已到期者,則使其無法收信,
直到變更新密碼為止。
(怎樣讓某使用者POP3不能收,但信仍能進到該信箱,
這倒不曉得怎麼做?)

蟹老闆 iT邦大師 1 級 ‧ 2009-12-15 03:10:26 檢舉

twtw都很詳細又有依據,真是專業。

超專業+1

我要發表回答

立即登入回答