
1. 介紹
今天登錄自己的阿里云ECS服務器時(通過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:(再次輸入新密碼)
當密碼修改完畢后就會輸出:
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:~]$
密碼修改完畢了,遠程連接斷開。我們需要重新開始鏈接。
這個時候,當我們再使用Xshell登錄的時候,就會自動彈出密碼輸入界面(Xshell的會話屬性界面)。在密碼欄中輸入我們的密碼,就可以正確登錄。
1.2 釋疑
突然讓我們改密碼,是因為賬戶有風險被盜了么?在改密碼的時候,其他人登錄是不是也能直接改新密碼?
當然不是這樣,linux系統自帶的安全驗證機制中,有一個密碼過期管理功能。當該賬戶密碼過期了。那么我們使用該賬戶密碼進行登錄時系統就會提示讓我們改密碼了。(PS:也就是我上面出現的突然讓我們創建新密碼的情況)。
當密碼過期后,并不代表這個賬戶不用密碼就能登錄了。而是老密碼登錄之后系統強制跳轉到新密碼更新操作中來。
所以也不用擔心密碼過期時就懷疑可能被攻擊了。
從密碼角度而言,一段時間后更新一遍密碼??梢蕴岣呙艽a的安全性。(PS:只要每次不是都用相同的幾個字母數字來回來組合)
2. 密碼管理
默認情況下,Linux的賬戶密碼過期時間是90天。從我們創建密碼開始計算。90天后就會過期。
然后在90-7=83天前,就會在登錄的時候進行提示。
如果賬戶狀態為過期失效。那么在90天內還不進行修改,就會進入失效狀態。無法登錄。
密碼失效也會無法登錄,需要root賬戶進行修改后才能進行登錄操作。
root賬戶也會有密碼過期,但是賬戶不會失效。也就是說密碼過期后我們仍然可以使用老密碼登錄,只是登錄后需要修改密碼。
2.1 chage 指令
PS: 你如果要使用該命令,請確保是root賬戶權限。普通用戶沒有操作Chage的權限。
查詢當前賬戶的密碼過期信息,例如我查下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:兩次密碼更改之間相距最小天數:7天
Maximum number of days between password change:兩次密碼更改之間相距最大天數;90天 (登錄時出現密碼失效,需要更新就是這個配置項決定的)
Number of days of warning before password expires:密碼過期之前警告的天數。7天(也就是密碼過期之前提前7天開始警告)
我們可以通過chage 查詢。那么也可以通過該指令進行修改相關信息。相關參數:
- -m:兩次密碼更改之間相距最小天數,為零時代表任何時候都可以更改密碼。(-m 是 --mindays 的簡寫。兩者等效)
- 使用示例:chage --mindays 5 root或者使用 chage -m 5 root 將最小間距改為5 。兩者等效
- -M:兩次密碼更改之間相距最大天數。也就是最長有效間隔。(-m 是--maxdays的簡寫,兩者等效)
- 使用示例:chage -M 9999 root 設置為最長9999天過期。
- -W:用戶密碼到期前,提前收到警告信息的天數。(-W 是--warndays 的簡寫,兩者等效)
- 使用示例:chage -W 6 root 將密碼過期前的警告天數設置為7天。
- -E:帳號到期的日期。過了這天,此帳號將不可用。(-E 是 --expiredate 的簡寫,兩者等效)
- 使用示例:chage -E 2023-01-01 zinyan 設置賬戶zinyan 在2023年1月1日過期不可用。(PS:root賬戶不要設置為過期不可用)
- -d:修改賬戶的上次密碼修改時間,例如已經過期了,我們可以通過修改該時間。讓用戶密碼還處于有效期內。(-d是 --lastday的簡寫,兩者等效)
- 使用示例:chage -d 2022-11-11 zinyan 修改zinyan賬戶上一次密碼修改時間為2022-11-11日
- -I:停滯時期。如果一個密碼已過期這些天,那么此帳號將不可用。(-I是 --inactive的簡寫,兩者等效)
- 使用示例:chage -I 30 zinyan 如果賬戶密碼過期30天后,還不進行密碼修改。那么老密碼將會失效,也就無法自己進行登錄修改密碼了。
- -l:例出當前賬戶的信息??梢杂脕泶_認指定賬戶的密碼或帳號何時過期。(-l是 --list的簡寫,兩者等效)
- 使用示例: chage -l root 展示root的賬戶信息。
- -R:chroot到的目錄,需要填寫新的root目錄地址。(-R 是--root 的簡寫,兩者等效)
- 使用示例:chage -R /App/test zinyan 設置zinyan用戶登錄之后該賬戶的root根目錄地址。 可以用來隔絕不同賬戶的訪問范圍,用來規范權限的。 更多的知識可以通過chroot命名進行了解。這里就不擴展了。(ps:關鍵我也并不是很懂這塊)
- -h: 顯示chage命令的一些指令介紹和幫助信息。(-h 是--help 的簡寫,兩者等效)
- 使用示例:chage -h 顯示幫助信息
密碼過期和密碼失效賬戶失效 是不一樣的概念。
當密碼過期的時候,我們可以用老密碼進行繼續登錄,登錄成功后會提示:
You must change your password now and login again!
我的秘密已經過期,會讓我們輸入新秘密進修過。
而如果賬戶或者密碼失效,在登錄的時候會提示:
Authentication failed.
賬戶過期,無法登錄。
上面的示例,其實還可以拼接使用:
[root@i0uh8g ~]# chage -d 0 -m 7 -M 30 -W 5 -I 7 zinyan
2.2 login.defs配置文件
我們如果用戶過多,不可能每次都通過chage指令進行修改。可以通過login.defs配置文件進行統一修改。
但是要注意:已經創建的用戶,不會再受該配置文件的影響。要進行修改就只能通過chage指令進行修改了。
如果修改login.defs配置后,創建了一個新賬戶。然后再修改login.defs配置。后一次修改的效果不會在已創建的賬戶上生效哦。
該文件地址為: /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 # 過期時間,默認是90, 我們可以調整為9999 表示密碼永不過期
PASS_MIN_DAYS 7 # 修改間隔,默認是7
PASS_MIN_LEN 5 # 密碼長度,默認是5
PASS_WARN_AGE 7 # 告警天數,默認是7,即過期前7天進行提醒
2.3 useradd配置文件
上面的示例中,我們可以發現login.defs中關于密碼過期的選項不夠全。沒有chage的操作全。例如
密碼到期日期,密碼停滯時間等。這些信息在useradd文件中進行配置。該文件地址:/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就代表沒有停滯時間,永遠可用。
EXPIRE 帳號到期的日期。過了這天,此帳號將不可用。我們可以按照 YYYY-MM-DD 的格式進行配置。例如配置2023-11-11日所有賬戶過期。
問題和login.defs配置一樣,只對之后創建的賬戶有效。已經創建的賬戶無效。需要通過chage指令進行修改。
3. 總結
到這里,關于Linux登錄密碼的過期邏輯和相關配置就總結的差不多了。
login.defs 和useradd配置文件,都是只針對之后創建的賬戶有效。而如果想讓已有賬戶進行配置那么就需要chage命令進行修改了。
其次,chage命名。是需要權限才能進行操作的。不是所有賬戶都有該命令的權限。