1. 介紹
今天登錄自己的阿里云ECS服務(wù)器時(通過Xshell 利用用戶名和密碼登錄的)。登錄成功后,提示讓我們修改root密碼。
效果如下:
WARNING: Your password has expired.
You must change your password now and login again!
Changing password for user root.
New password:
翻譯之后:
警告:您的密碼已過期。
您必須立即更改密碼,然后再次登錄!
更改用戶root的密碼。
新密碼:
需要我更新root密碼。在更新時,不用輸入老密碼了,直接輸入新密碼。然后 Retype new password:(再次輸入新密碼)
當(dāng)密碼修改完畢后就會輸出:
passwd: all authentication tokens updated successfully.
Connection closed.
Disconnected from remote host(新建會話) at 10:01:21.
Type `help' to learn how to use Xshell prompt.
[C:~]$
密碼修改完畢了,遠(yuǎn)程連接斷開。我們需要重新開始鏈接。
這個時候,當(dāng)我們再使用Xshell登錄的時候,就會自動彈出密碼輸入界面(Xshell的會話屬性界面)。在密碼欄中輸入我們的密碼,就可以正確登錄。
1.2 釋疑
突然讓我們改密碼,是因為賬戶有風(fēng)險被盜了么?在改密碼的時候,其他人登錄是不是也能直接改新密碼?
當(dāng)然不是這樣,linux系統(tǒng)自帶的安全驗證機(jī)制中,有一個密碼過期管理功能。當(dāng)該賬戶密碼過期了。那么我們使用該賬戶密碼進(jìn)行登錄時系統(tǒng)就會提示讓我們改密碼了。(PS:也就是我上面出現(xiàn)的突然讓我們創(chuàng)建新密碼的情況)。
當(dāng)密碼過期后,并不代表這個賬戶不用密碼就能登錄了。而是老密碼登錄之后系統(tǒng)強(qiáng)制跳轉(zhuǎn)到新密碼更新操作中來。
所以也不用擔(dān)心密碼過期時就懷疑可能被攻擊了。
從密碼角度而言,一段時間后更新一遍密碼。可以提高密碼的安全性。(PS:只要每次不是都用相同的幾個字母數(shù)字來回來組合)
2. 密碼管理
默認(rèn)情況下,Linux的賬戶密碼過期時間是90天。從我們創(chuàng)建密碼開始計算。90天后就會過期。
然后在90-7=83天前,就會在登錄的時候進(jìn)行提示。
如果賬戶狀態(tài)為過期失效。那么在90天內(nèi)還不進(jìn)行修改,就會進(jìn)入失效狀態(tài)。無法登錄。
密碼失效也會無法登錄,需要root賬戶進(jìn)行修改后才能進(jìn)行登錄操作。
root賬戶也會有密碼過期,但是賬戶不會失效。也就是說密碼過期后我們?nèi)匀豢梢允褂美厦艽a登錄,只是登錄后需要修改密碼。
2.1 chage 指令
PS: 你如果要使用該命令,請確保是root賬戶權(quán)限。普通用戶沒有操作Chage的權(quán)限。
查詢當(dāng)前賬戶的密碼過期信息,例如我查下root用戶的過期信息: chage -l [賬戶名]
[root@i0uh8g ~]# chage -l root
Last password change : Nov 09, 2022
Password expires : Feb 07, 2023
Password inactive : never
Account expires : never
Minimum number of days between password change : 7
Maximum number of days between password change : 90
Number of days of warning before password expires : 7
上面的項目信息分別為:
Last password change:上次密碼修改時間,例如我的是2022年11月9日。
Password expires:下次密碼過期時間,例如 2023年2月07
Password inactive:密碼失效 ,never (從不)。 因為我的賬戶是root所以不能失效
Account expires:賬戶過期,never(從不)。因為我的賬戶是root所以不能失效
Minimum number of days between password change:兩次密碼更改之間相距最小天數(shù):7天
Maximum number of days between password change:兩次密碼更改之間相距最大天數(shù);90天 (登錄時出現(xiàn)密碼失效,需要更新就是這個配置項決定的)
Number of days of warning before password expires:密碼過期之前警告的天數(shù)。7天(也就是密碼過期之前提前7天開始警告)
我們可以通過chage 查詢。那么也可以通過該指令進(jìn)行修改相關(guān)信息。相關(guān)參數(shù):
- -m:兩次密碼更改之間相距最小天數(shù),為零時代表任何時候都可以更改密碼。(-m 是 --mindays 的簡寫。兩者等效)
- 使用示例:chage --mindays 5 root或者使用 chage -m 5 root 將最小間距改為5 。兩者等效
- -M:兩次密碼更改之間相距最大天數(shù)。也就是最長有效間隔。(-m 是--maxdays的簡寫,兩者等效)
- 使用示例:chage -M 9999 root 設(shè)置為最長9999天過期。
- -W:用戶密碼到期前,提前收到警告信息的天數(shù)。(-W 是--warndays 的簡寫,兩者等效)
- 使用示例:chage -W 6 root 將密碼過期前的警告天數(shù)設(shè)置為7天。
- -E:帳號到期的日期。過了這天,此帳號將不可用。(-E 是 --expiredate 的簡寫,兩者等效)
- 使用示例:chage -E 2023-01-01 zinyan 設(shè)置賬戶zinyan 在2023年1月1日過期不可用。(PS:root賬戶不要設(shè)置為過期不可用)
- -d:修改賬戶的上次密碼修改時間,例如已經(jīng)過期了,我們可以通過修改該時間。讓用戶密碼還處于有效期內(nèi)。(-d是 --lastday的簡寫,兩者等效)
- 使用示例:chage -d 2022-11-11 zinyan 修改zinyan賬戶上一次密碼修改時間為2022-11-11日
- -I:停滯時期。如果一個密碼已過期這些天,那么此帳號將不可用。(-I是 --inactive的簡寫,兩者等效)
- 使用示例:chage -I 30 zinyan 如果賬戶密碼過期30天后,還不進(jìn)行密碼修改。那么老密碼將會失效,也就無法自己進(jìn)行登錄修改密碼了。
- -l:例出當(dāng)前賬戶的信息。可以用來確認(rèn)指定賬戶的密碼或帳號何時過期。(-l是 --list的簡寫,兩者等效)
- 使用示例: chage -l root 展示root的賬戶信息。
- -R:chroot到的目錄,需要填寫新的root目錄地址。(-R 是--root 的簡寫,兩者等效)
- 使用示例:chage -R /App/test zinyan 設(shè)置zinyan用戶登錄之后該賬戶的root根目錄地址。 可以用來隔絕不同賬戶的訪問范圍,用來規(guī)范權(quán)限的。 更多的知識可以通過chroot命名進(jìn)行了解。這里就不擴(kuò)展了。(ps:關(guān)鍵我也并不是很懂這塊)
- -h: 顯示chage命令的一些指令介紹和幫助信息。(-h 是--help 的簡寫,兩者等效)
- 使用示例:chage -h 顯示幫助信息
密碼過期和密碼失效賬戶失效 是不一樣的概念。
當(dāng)密碼過期的時候,我們可以用老密碼進(jìn)行繼續(xù)登錄,登錄成功后會提示:
You must change your password now and login again!
我的秘密已經(jīng)過期,會讓我們輸入新秘密進(jìn)修過。
而如果賬戶或者密碼失效,在登錄的時候會提示:
Authentication failed.
賬戶過期,無法登錄。
上面的示例,其實(shí)還可以拼接使用:
[root@i0uh8g ~]# chage -d 0 -m 7 -M 30 -W 5 -I 7 zinyan
2.2 login.defs配置文件
我們?nèi)绻脩暨^多,不可能每次都通過chage指令進(jìn)行修改。可以通過login.defs配置文件進(jìn)行統(tǒng)一修改。
但是要注意:已經(jīng)創(chuàng)建的用戶,不會再受該配置文件的影響。要進(jìn)行修改就只能通過chage指令進(jìn)行修改了。
如果修改login.defs配置后,創(chuàng)建了一個新賬戶。然后再修改login.defs配置。后一次修改的效果不會在已創(chuàng)建的賬戶上生效哦。
該文件地址為: /etc/login.defs 通過vim 打開文件的效果如下:
[root@i0uh8g ~]# vim /etc/login.defs
#
# Please note that the parameters in this configuration file control the
# behavior of the tools from the shadow-utils component. None of these
# tools uses the PAM mechanism, and the utilities that use PAM (such as the
# passwd command) should therefore be configured elsewhere. Refer to
# /etc/pam.d/system-auth for more information.
#
# *REQUIRED*
# Directory where mailboxes reside, _or_ name of file, relative to the
# home directory. If you _do_ define both, MAIL_DIR takes precedence.
# QMAIL_DIR is for Qmail
#
#QMAIL_DIR Maildir
MAIL_DIR /var/spool/mail
#MAIL_FILE .mail
# Password aging controls:
#
# PASS_MAX_DAYS Maximum number of days a password may be used.
# PASS_MIN_DAYS Minimum number of days allowed between password changes.
# PASS_MIN_LEN Minimum acceptable password length.
# PASS_WARN_AGE Number of days warning given before a password expires.
#
PASS_MAX_DAYS 90
PASS_MIN_DAYS 7
PASS_MIN_LEN 5
PASS_WARN_AGE 7
#
# Min/max values for automatic uid selection in useradd
#
UID_MIN 1000
UID_MAX 60000
# System accounts
比較重要的的幾個配置項:
PASS_MAX_DAYS 90 # 過期時間,默認(rèn)是90, 我們可以調(diào)整為9999 表示密碼永不過期
PASS_MIN_DAYS 7 # 修改間隔,默認(rèn)是7
PASS_MIN_LEN 5 # 密碼長度,默認(rèn)是5
PASS_WARN_AGE 7 # 告警天數(shù),默認(rèn)是7,即過期前7天進(jìn)行提醒
2.3 useradd配置文件
上面的示例中,我們可以發(fā)現(xiàn)login.defs中關(guān)于密碼過期的選項不夠全。沒有chage的操作全。例如
密碼到期日期,密碼停滯時間等。這些信息在useradd文件中進(jìn)行配置。該文件地址:/etc/default/useradd。示例:
[root@i0uh8g ~]# vim /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
其中的INACTIVE 停滯時期。如果一個密碼已過期這些天,那么此帳號將不可用。-1就代表沒有停滯時間,永遠(yuǎn)可用。
EXPIRE 帳號到期的日期。過了這天,此帳號將不可用。我們可以按照 YYYY-MM-DD 的格式進(jìn)行配置。例如配置2023-11-11日所有賬戶過期。
問題和login.defs配置一樣,只對之后創(chuàng)建的賬戶有效。已經(jīng)創(chuàng)建的賬戶無效。需要通過chage指令進(jìn)行修改。
3. 總結(jié)
到這里,關(guān)于Linux登錄密碼的過期邏輯和相關(guān)配置就總結(jié)的差不多了。
login.defs 和useradd配置文件,都是只針對之后創(chuàng)建的賬戶有效。而如果想讓已有賬戶進(jìn)行配置那么就需要chage命令進(jìn)行修改了。
其次,chage命名。是需要權(quán)限才能進(jìn)行操作的。不是所有賬戶都有該命令的權(quán)限。