介紹如何在 Linux 中停用使用者帳號、設定帳號使用期限,禁止特定使用者登入系統。
若要讓使用者不能以密碼登入,可以使用 usermod
搭配 -L
參數將指定使用者的密碼停用:
# 停用 myuser 的密碼 sudo usermod -L myuser
passwd
的 -l
參數也可以用來停用使用者的密碼:
# 停用 myuser 的密碼 sudo passwd -l myuser
停用使用者密碼實際上只是在 /etc/shadow
的密碼之前加入一個驚嘆號 !
而已,其效果只是讓使用者無法以密碼登入,但是並沒有完全停用帳號,使用者還是可以透過 SSH 金鑰認證等其他方式登入系統,若要完全停用帳號,應該改用設定帳號使用期限的方式。
停用指定帳號的密碼之後,可以使用 passwd
搭配 --status
檢查密碼的狀態:
# 檢查密碼狀態 sudo passwd --status myuser
myuser L 11/23/2020 0 99999 7 -1
當密碼被停用時,這裡的第二欄就會顯示 L
(locked password)。
密碼被停用之後,若要恢復成正常狀態,可以使用 usermod
搭配 -U
參數:
# 恢復 myuser 的密碼 sudo usermod -U myuser
或是以 passwd
搭配 -u
參數來解除密碼的鎖定:
# 恢復 myuser 的密碼 sudo passwd -u myuser
檢查密碼的狀態:
# 檢查密碼狀態 sudo passwd --status myuser
myuser P 11/23/2020 0 99999 7 -1
正常狀態之下,這裡的第二欄會顯示 P
(usable password)。
Linux 帳號的使用期限可以使用 usermod
指令搭配 -e
參數來設定,例如設定 myuser
帳號的使用期限至 2022 年 11 月 23 日,也就是說該使用者只能使用帳號至 2022 年 11 月 22 日:
# 設定 myuser 帳號使用期限 sudo usermod -e 2022-11-23 myuser
若要立即停用指定的 Linux 帳號,可以將使用期限指定為今天的日期:
# 立即停用 myuser 帳號(將使用期限指定為今天) sudo usermod -e `date +%Y-%m-%d` myuser
我們可以搭配 date
自動依據使用的時間算出帳號的過期日:
# 設定使用期限為 2 年 sudo usermod -e `date -d "2 year" +%Y-%m-%d` myuser # 設定使用期限為 6 個月 sudo usermod -e `date -d "6 month" +%Y-%m-%d` myuser # 設定使用期限為 90 天 sudo usermod -e `date -d "90 day" +%Y-%m-%d` myuser
若要解除帳號的使用期限,可以將使用期限設定為空的值:
# 解除帳號使用期限 usermod -e '' myuser
Linux 使用者帳號的使用期限可以使用 chage
指令來查詢:
# 檢查帳號使用期限 sudo chage -l myuser
Last password change : Nov 23, 2020 Password expires : never Password inactive : never Account expires : Feb 21, 2021 Minimum number of days between password change : 0 Maximum number of days between password change : 99999 Number of days of warning before password expires : 7
這裡的 Account expires
所顯示的日期就是帳號的過期日。
透過變更使用者的登入 shell 可以讓使用者無法使用互動式的操作環境:
# 更改 myuser 帳號的 shell 為 /sbin/nologin usermod -s /sbin/nologin myuser
這種方式只是不讓使用者以互動式的 shell 登入操作,但不是完全停用帳號。