我的Linux生活日記 21.使用者帳號管理

2024-02-28 我的Linux生活日記 linux

我的Linux生活日記 21.使用者帳號管理

今天來簡單說明一下帳號管理的部份,我以 Gnome 的使用介面會比較親進一些。

新增使用者

位置如下

settings >> Details >> Users
  1. 到使用者管理頁面之後,需要先解鎖。密碼就是你登入的密碼。

  2. 點擊 「add user」

  3. 輸入要新增的使用者資訊

  4. 點擊 「add」

  5. 之後就會出現剛剛新增使用者的資訊在使用者管理頁面中

看完以上,是不是覺得跟在 windows 上一樣簡單。接下來看看剛剛一番操作之後系統發生什麼變化呢?

帳號資訊: /etc/passwd

系統會將使用者資訊紀錄在這個文件中:/etc/passwd

> $ cat /etc/passwd | grep pollochang
pollochang❌1001:1001:pollochang,,,:/home/pollochang:/bin/bash

以冒號 : 為分隔欄位

  1. 帳號名稱
  2. 密碼: 因為密碼都紀錄在 /etc/shadow 文件中,所以這裡是以 x 表示
  3. UID: 使用者在系統的唯一代號
  4. GID: 使用者群組代號
  5. 使用者資訊說明欄位
  6. 使用者家目錄
  7. 使用者預設shell 名稱

密碼資訊: /etc/shadow

以冒號 : 為分隔欄位

root@JamesChangNB:~# cat /etc/shadow | grep pollochang
pollochang:$6$JaseGnZpc.VeUeCM$/iu963R2FHzoGV5zBkh390weaQ0osO3wwE54xobUX8I6llYULw/004iL8mvUVAFfq9SraOPBWV97.EgPhslvt.:19269:0:99999:7:::
  1. Username(使用者名稱)

  2. Password(密碼): 這裡已經是加密過後資訊

    規則為: $[加密方式]$[加鹽]$[值]

    加密方式

    1. $1$ : MD5
    2. $2a$ : Blowfish
    3. $2y$ : Blowfish
    4. $5$ : SHA-256
    5. $6$ : SHA-512
  3. Last password change(密碼更動時間)

  4. Minimum(密碼不可以更動天數)

  5. Maximum(密碼有效天數): 99999 表示永久有效

  6. Warn(密碼快失效前發出警告訊息)

  7. Inactive(允許密碼過期後可變更密碼天)

  8. Expire(密碼到期):以 1970 年 1 月 1 日以來的天數表示(UNIX 時間元年)

密碼設定相關

資安及國安,在2021年被政府大聲倡導之後,作業系統帳戶安全變成這幾年資安集合的重點,所以這邊我也提及一下密碼相關設定吧。

設定密碼必須相隔 7 天才能換

chage -m 7 pollochang

設定密碼 90 天必須重新設定

chage -M 90 pollochang
for user in $(cut -f1 -d: /etc/passwd); do
    sudo chage --maxdays 90 --mindays 7 --warndays 7 $user
done

設定密碼到期前 5 天發處警告訊息

chage -W 5 pollochang

密碼原則-/etc/login.defs

以上是針對目前已經存在系統上的帳戶資訊做設定,未來新增帳號後需要可以透過 密碼原則文件 /etc/login.defs 做處理

這份檔案類似模板,只會影響到新加的使用者,對於已經存在的使用者並不影響

  • PASS_MAX_DAYS 99999 #密碼最大有效期
  • PASS_MIN_DAYS 0 #兩次修改密碼的最小間隔時間
  • PASS_MIN_LEN 5 #密碼最小長度,對於root無效, 此參數於 CentOS 已失效,改用 system-auth,須於 /etc/pam.d/system-auth 設定
  • PASS_WARN_AGE 7 #密碼過期前多少天開始提示

設定密碼複雜度規則

debian 需要安裝 libpam-pwquality

/etc/pam.d/system-auth » centos /etc/pam.d/system-auth-ac 強制使用強密碼(使用者密碼安全配置)

  • minlen=N: 密碼長度+分數後的最小值
  • lcredit: 密碼中若包含小寫字元,所得的分數
    • lcredit=-1 至少包含1個小寫字母
  • ucredit: 密碼中若包含大寫字元,所得的分數
    • ucredit=-1 至少包含1個大寫字母
  • dcredit=N: 密碼中若包含數字,所得的分數。若 N 大於或等於 0,則此數值代表密碼中的數字對密碼長度 minlen 的最大額外貢獻值。預設值為 0,代表數字沒有任何額外貢獻值。若 N 小於 0,則此數值代表密碼中至少要包含多少個數字。
    • dcredit=-1 至少包含1個數字
  • ocredit: 密碼中若包含其他字元,所得的分數
    • ocredit=-1 至少包含1個特殊字元
  • debug: 啟用除錯功能,將除錯資訊輸出至 syslog。
  • retry=N: 設定使用者輸入密碼的最高嘗試次數,當密碼輸入超過 N 次就會產生錯誤。
  • difok=N: 設定新密碼中必須有 N 個字元要與舊密碼不同,預設值為 1。若設定為 0 則代表停用相似度檢測,只要新密碼與舊密碼不要完全一樣即可。
  • dcredit=N
  • lcredit=N: 若 N 大於或等於 0,則此數值代表密碼中的小寫英文字母對密碼長度 minlen 的最大額外貢獻值。預設值為 0,代表小寫英文字母沒有任何額外貢獻值。若 N 小於 0,則此數值代表密碼中至少要包含多少個小寫英文字母。
  • ocredit=N: 若 N 大於或等於 0,則此數值代表密碼中的特殊字元(除了數字、英文字母之外的字元)對密碼長度 minlen 的最大額外貢獻值。預設值為 0,代表特殊字元沒有任何額外貢獻值。若 N 小於 0,則此數值代表密碼中至少要包含多少個特殊字元。\
  • minclass=N: 密碼中至少須包含 N 類型的字元,可用的字元類型有小寫英文字母、大寫英文字母、數字與特殊字元四類。
  • maxrepeat=N: 密碼中相同的字元最多只能連續出現 N 個,若一個字元連續出現超過 N 次,則密碼就會被拒絕使用。
  • maxsequence=N: 密碼中有規則的單調(monotonic)字元最多只能連續出現 N 個,若單調字元連續出現超過 N 次,則密碼就會被拒絕使用。常見的單調字元有 12345、fedcb。
  • maxclassrepeat=N: 密碼中有相同類型的字元(大小寫字母、數字、特殊字元)最多只能連續出現 N 個,若相同類型字元連續出現超過 N 次,則密碼就會被拒絕使用。
  • gecoscheck=N: 若 N 為非 0 的數值,則檢查 /etc/passwd 的各 GECOS 欄位中,長度超過三的單字是否有被包含在密碼中。預設值為 0,代表不檢查。
  • dictcheck=N: 若 N 為非 0 的數值,則檢查密碼是否包含於字典檔中,目前使用 cracklib 所提供的字典檔進行檢測。預設值為 1,代表進行本項檢測。
  • usercheck=N: 若 N 為非 0 的數值,則檢查密碼是否包含使用者名稱。預設值為 1,代表進行本項檢測。
  • enforcing=N: 若 N 為非 0 的數值,則當密碼不合格時,就強制退回密碼,讓使用者重設,若設定為 0,則當密碼不合格時就只會顯示警告訊息。預設值為 1。
  • badwords=word1 word2 word3 …: 指定密碼中不可以包含的字串。
  • dictpath=/path/to/dict: 自訂 cracklib 字典檔路徑。
  • enforce_for_root: 設定 root 管理者亦需遵守密碼檢查的各種規定。此功能預設為關閉,代表 root 管理者輸入不符合規定的密碼時,只會顯示警告訊息,但是依然可以使用指定的密碼。
  • local_users_only: 指定 pam_pwquality 模組只針對存在於 /etc/passwd 的使用者進行密碼品質檢查。

針對上面提到的分數,舉例來說如果設定值是 minlen=8 lcredit=1 ucredit=1 dcredit=0 ocredit=0

那麼即使使用者的密碼只有 6 個字:ATGByujn,但是因為密碼包含了大小寫,所以另外拿了 2 分 因此 6+2=8,還是會滿足了 minlen=8 的設定

  • RedHat
password    requisite     pam_cracklib.so try_first_pass retry=3 type= minlen=8 lcredit=1 ucredit=1 dcredit=0 ocredit=0
  • Debian
password        requisite                       pam_pwquality.so retry=5 minlen=8

帳戶密碼資訊

chage -l pollochang
root@JamesChangNB:~# chage -l pollochang
Last password change                                    : Oct 04, 2022
Password expires                                        : Nov 03, 2022
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change          : 7
Maximum number of days between password change          : 30
Number of days of warning before password expires       : 5

GCB 政府組態基準

在 GBC 規範中有提及帳戶資訊安全,我覺得可以嘗試部屬在你我的電腦中,在TWGCB-01-008_Red Hat Enterprise Linux 8政府組態基準說明文件v1.0_1100924.pdf 第196頁 第208項 至 第226頁

查詢帳號登入

journalctl --since "2024-06-16" --until "2024-06-18" -u systemd-logind

參考資料

Understanding /etc/shadow file format on Linux

Linux 設定使用者密碼使用期限教學與範例

/etc/login.defs

Linux 密碼原則設定

Linux多次登入失敗使用者被鎖定使用Pam_Tally2解鎖