SSH 安全設定對於系統防護至關重要,本文提供的強化措施涵蓋多個導向,從連線管理到認證機制,都能有效提升安全性。警告橫幅能提醒使用者系統政策,PAM 認證提供更彈性的認證方式,停用 TCP Forwarding 則能避免未授權的連線。設定 MaxStartups 和 MaxSessions 可以有效防禦 DoS 攻擊。此外,PAM 模組的設定,例如密碼複雜度和鎖定策略,能強化密碼安全。最後,帳戶管理策略,包含密碼過期、非活動鎖定和系統帳戶的 shell 設定,能有效降低帳戶被盜用的風險,提升系統整體安全性。
加強 SSH 安全性的設定與最佳實踐
SSH(Secure Shell)是一種用於安全遠端登入和網路服務的協定。在企業環境中,正確組態 SSH 服務對於保護系統和資料的安全至關重要。本文將探討多項強化 SSH 安全性的設定,並提供詳細的設定方法和原理說明。
1. 設定 SSH 警告橫幅
為什麼需要警告橫幅?
在使用者登入前顯示警告橫幅有助於告知使用者系統的使用政策和法律宣告,從而在法律上提供保護依據。
設定方法
- 編輯
/etc/ssh/sshd_config檔案。 - 設定
Banner /etc/issue.net。 - 重新啟動 SSH 服務。
程式碼範例
# 編輯 /etc/ssh/sshd_config
echo "Banner /etc/issue.net" >> /etc/ssh/sshd_config
# 重新啟動 SSH 服務
systemctl restart sshd
內容解密:
Banner引數指定了一個檔案,其內容將在使用者認證前顯示給遠端使用者。/etc/issue.net是常見的橫幅檔案位置,管理員應確保其內容符合組織的安全政策和法律要求。
2. 啟用 SSH PAM 認證
為什麼需要 PAM 認證?
PAM(Pluggable Authentication Modules)提供了靈活的認證機制,能夠增強系統的安全性和管理靈活性。
設定方法
- 編輯
/etc/ssh/sshd_config檔案。 - 設定
UsePAM yes。 - 重新啟動 SSH 服務。
程式碼範例
# 編輯 /etc/ssh/sshd_config
echo "UsePAM yes" >> /etc/ssh/sshd_config
# 重新啟動 SSH 服務
systemctl restart sshd
內容解密:
UsePAM yes啟用了 PAM 認證機制,使得 SSH 能夠利用 PAM 的帳戶和會話管理功能。- 這有助於實作根據 IP、時間或其他帳戶因素的存取控制。
3. 停用 SSH TCP Forwarding
為什麼停用 TCP Forwarding?
TCP Forwarding 可能被用於建立未經授權的隧道,從而繞過安全控制或進行資料竊取。
設定方法
- 編輯
/etc/ssh/sshd_config檔案。 - 設定
AllowTcpForwarding no。 - 重新啟動 SSH 服務。
程式碼範例
# 編輯 /etc/ssh/sshd_config
echo "AllowTcpForwarding no" >> /etc/ssh/sshd_config
# 重新啟動 SSH 服務
systemctl restart sshd
內容解密:
AllowTcpForwarding no停用了 TCP Forwarding 功能,防止潛在的安全風險。- 這項設定可能會影響某些需要 SSH 隧道的應用程式,因此需要根據實際情況進行評估。
4. 組態 SSH MaxStartups
為什麼需要組態 MaxStartups?
MaxStartups 控制了 SSH 服務允許的最大未認證連線數,防止了拒絕服務攻擊(DoS)。
設定方法
- 編輯
/etc/ssh/sshd_config檔案。 - 設定
MaxStartups 10:30:100或更嚴格的值。 - 重新啟動 SSH 服務。
程式碼範例
# 編輯 /etc/ssh/sshd_config
echo "MaxStartups 10:30:100" >> /etc/ssh/sshd_config
# 重新啟動 SSH 服務
systemctl restart sshd
內容解密:
MaxStartups的值採用了start:rate:full的格式,分別表示開始拒絕連線的起始點、拒絕率增長的速度以及完全拒絕連線的最大值。- 這項設定有助於保護 SSH 服務免受大量未認證連線的攻擊。
5. 組態 SSH MaxSessions
為什麼需要組態 MaxSessions?
MaxSessions 控制了單個 SSH 連線允許的最大會話數,防止了資源耗盡攻擊。
設定方法
- 編輯
/etc/ssh/sshd_config檔案。 - 設定
MaxSessions 10或根據本地安全策略調整。 - 重新啟動 SSH 服務。
程式碼範例
# 編輯 /etc/ssh/sshd_config
echo "MaxSessions 10" >> /etc/ssh/sshd_config
# 重新啟動 SSH 服務
systemctl restart sshd
內容解密:
MaxSessions的值限制了單個 SSH 連線可以開啟的最大會話數,有助於防止攻擊者建立大量會話耗盡系統資源。
5.3 設定PAM(Pluggable Authentication Modules)
PAM(可插拔式驗證模組)是一種在UNIX系統上實作模組化驗證的服務。PAM透過載入和執行分享物件來驗證使用者身份,通常相關檔案位於/etc/pam.d目錄。正確組態PAM對於系統驗證的安全至關重要。本文將介紹PAM的基本組態,建議參考其他資源以全面瞭解其組態能力。
5.3.1 確保密碼建立需求已組態(自動化)
適用範圍:
- 第一級 - 伺服器
- 第一級 - 工作站
描述:
pam_pwquality.so模組檢查密碼的強度,例如確保密碼不是字典中的單詞、具有一定的長度、包含多種字元(如字母、數字、特殊字元)等。以下是在/etc/security/pwquality.conf檔案中設定的選項:
- 密碼長度:
minlen = 14- 密碼至少需要14個字元 - 密碼複雜度:
minclass = 4- 新密碼中所需的最少字元類別數量(數字、大寫字母、小寫字母、其他字元) 或dcredit = -1- 至少包含一個數字ucredit = -1- 至少包含一個大寫字母ocredit = -1- 至少包含一個特殊字元lcredit = -1- 至少包含一個小寫字母
在/etc/pam.d/common-password檔案中的設定:
retry=3- 在傳回失敗之前允許3次嘗試
理由:
強密碼可以保護系統免受暴力破解攻擊。
稽核:
驗證密碼建立需求是否符合組織政策。執行以下命令檢查密碼最小長度是否為14或以上:
# grep '^\s*minlen\s*' /etc/security/pwquality.conf
minlen = 14
檢查密碼複雜度要求:
# grep '^\s*minclass\s*' /etc/security/pwquality.conf
minclass = 4
或
# grep -E '^\s*[duol]credit\s*' /etc/security/pwquality.conf
dcredit = -1
ucredit = -1
lcredit = -1
ocredit = -1
檢查傳回失敗前的嘗試次數是否不多於3次:
# grep -E '^\s*password\s+(requisite|required)\s+pam_pwquality\.so\s+(\S+\s+)*retry=[1-3]\s*(\s+\S+\s*)*(\s+#.*)?$' /etc/pam.d/common-password
password requisite pam_pwquality.so retry=3
修復:
安裝pam_pwquality模組:
apt install libpam-pwquality
編輯/etc/security/pwquality.conf檔案,新增或修改以下行以符合站點政策:
minlen = 14
minclass = 4
或
dcredit = -1
ucredit = -1
ocredit = -1
lcredit = -1
編輯/etc/pam.d/common-password檔案,新增適當的pam_pwquality.so選項:
password requisite pam_pwquality.so retry=3
5.3.2 確保已組態失敗密碼嘗試的鎖定(自動化)
描述:
在連續登入失敗n次後鎖定使用者帳戶。第一組變更應用於PAM組態檔案,第二組變更應用於特定的程式PAM組態檔案。
理由:
在連續登入失敗n次後鎖定使用者帳戶,可以減輕對系統的暴力破解密碼攻擊。
稽核:
驗證密碼鎖定是否已組態。這些設定通常在/etc/pam.d/common-auth中使用pam_tally2.so模組組態:
# grep "pam_tally2" /etc/pam.d/common-auth
auth required pam_tally2.so onerr=fail audit silent deny=5 unlock_time=900
驗證/etc/pam.d/common-account中是否包含pam_deny.so和pam_tally2.so模組:
# grep -E "pam_(tally2|deny)\.so" /etc/pam.d/common-account
account requisite pam_deny.so
account required pam_tally2.so
修復:
編輯/etc/pam.d/common-auth檔案並新增以下行:
auth required pam_tally2.so onerr=fail audit silent deny=5 unlock_time=900
編輯/etc/pam.d/common-account檔案並新增以下行:
account requisite pam_deny.so
account required pam_tally2.so
強化Linux系統密碼安全與帳戶管理
在維護Linux系統的安全性時,密碼管理與帳戶組態是至關重要的環節。本文將探討如何透過強化密碼安全機制和最佳化帳戶環境來提升系統整體安全性。
限制密碼重複使用
為防止使用者重複使用舊密碼,系統管理員可透過設定pam_pwhistory模組來限制密碼重複使用次數。此設定的主要目的是降低攻擊者猜測或破解密碼的可能性。
稽核與修正
稽核: 執行以下命令以驗證
remember選項是否設定為5或更大:grep -E '^password\s+required\s+pam_pwhistory.so' /etc/pam.d/common-password預期輸出結果應包含
remember=5。修正: 編輯
/etc/pam.d/common-password檔案,加入或修改remember選項以符合安全政策:password required pam_pwhistory.so remember=5
程式碼解密:
grep -E '^password\s+required\s+pam_pwhistory.so' /etc/pam.d/common-password:此命令用於搜尋/etc/pam.d/common-password檔案中包含password required pam_pwhistory.so的行,以驗證remember選項的設定。password required pam_pwhistory.so remember=5:此設定確保系統記住使用者最近使用的5個密碼,並禁止使用者重複使用這些密碼。
使用SHA-512作為密碼雜湊演算法
將密碼雜湊演算法升級為SHA-512可顯著提高密碼儲存的安全性。相較於MD5,SHA-512提供了更強大的雜湊功能,使攻擊者更難以破解密碼。
稽核與修正
稽核: 執行以下命令以驗證是否包含
sha512選項:grep -E '^\s*password\s+(\S+\s+)+pam_unix\.so\s+(\S+\s+)*sha512\s*(\S+\s*)*(\s+#.*)?$' /etc/pam.d/common-password預期輸出結果應包含
sha512。修正: 編輯
/etc/pam.d/common-password檔案,加入或修改為使用sha512:password [success=1 default=ignore] pam_unix.so obscure sha512
程式碼解密:
grep -E '^\s*password\s+(\S+\s+)+pam_unix\.so\s+(\S+\s+)*sha512\s*(\S+\s*)*(\s+#.*)?$' /etc/pam.d/common-password:此命令用於檢查/etc/pam.d/common-password檔案中是否包含使用pam_unix.so模組並啟用sha512雜湊演算法的設定。password [success=1 default=ignore] pam_unix.so obscure sha512:此行組態確保系統使用SHA-512演算法進行密碼雜湊,並啟用混淆(obscure)檢查以增強密碼安全性。
設定密碼過期策略
密碼過期策略是透過設定/etc/login.defs中的PASS_MAX_DAYS引數來實作的,建議將其設定為365天或更短,以減少密碼被破解的風險。
審核與修正
審核: 執行以下命令以驗證
PASS_MAX_DAYS的設定:grep PASS_MAX_DAYS /etc/login.defs預期輸出結果應不大於365。
修正: 編輯
/etc/login.defs檔案,將PASS_MAX_DAYS設定為符合安全政策的值(例如365):PASS_MAX_DAYS 365並對現有使用者執行:
chage --maxdays 365 <user>
程式碼解密:
grep PASS_MAX_DAYS /etc/login.defs:此命令用於檢查/etc/login.defs檔案中PASS_MAX_DAYS的當前設定。PASS_MAX_DAYS 365:此設定確保使用者密碼的有效期不超過365天,強制使用者定期更新密碼。chage --maxdays 365 <user>:此命令用於修改特定使用者的密碼最大有效期,以符合新的安全政策。
設定最小密碼變更間隔
透過在/etc/login.defs中設定PASS_MIN_DAYS引數,可以防止使用者在短時間內頻繁更改密碼,從而繞過密碼重用控制。
審核與修正
審核: 執行以下命令以驗證
PASS_MIN_DAYS的設定:grep PASS_MIN_DAYS /etc/login.defs預期輸出結果應不小於1。
修正: 編輯
/etc/login.defs檔案,將PASS_MIN_DAYS設定為1或更大:PASS_MIN_DAYS 1並對現有使用者執行:
chage --mindays 1 <user>
程式碼解密:
grep PASS_MIN_DAYS /etc/login.defs:此命令檢查/etc/login.defs中PASS_MIN_DAYS的當前值。PASS_MIN_DAYS 1:此設定確保使用者在更改密碼後至少等待1天才能再次更改,從而防止頻繁更改密碼。chage --mindays 1 <user>:此命令用於為特定使用者設定最小密碼變更間隔,以符合安全要求。
加強Linux系統密碼安全與帳戶管理
在維護Linux系統的安全性時,密碼管理和帳戶安全是至關重要的環節。本文將探討如何透過組態系統引數和稽核帳戶狀態來增強系統的安全性,確保帳戶的安全性和合規性。
密碼過期警告天數的設定
設定密碼過期警告天數為7天或以上
確保系統在密碼即將過期時給予使用者足夠的警告時間是非常重要的。系統管理員可以透過修改/etc/login.defs檔案中的PASS_WARN_AGE引數來實作這一點。
# 修改PASS_WARN_AGE引數
PASS_WARN_AGE 7
詳細解說
- PASS_WARN_AGE引數的作用:該引數用於設定密碼即將過期時的警告天數。
- 設為7天或以上的原因:給予使用者足夠的時間來更新密碼,避免因密碼過期而導致的帳戶鎖定或安全風險。
- 如何檢查目前設定:執行
grep PASS_WARN_AGE /etc/login.defs命令來檢查目前的設定值。
帳戶非活動鎖定策略
設定非活動帳戶鎖定為30天或以下
對於一段時間內未使用的帳戶,系統應自動進行鎖定,以減少潛在的安全風險。
# 設定預設的密碼非活動期限為30天
useradd -D -f 30
詳細解說
- 非活動鎖定的重要性:防止未使用的帳戶被利用於未經授權的存取。
- 如何檢查目前設定:執行
useradd -D | grep INACTIVE命令來檢查目前的非活動鎖定設定。 - 對現有使用者的調整:使用
chage --inactive 30 <user>命令來修改現有使用者的非活動鎖定設定。
檢查使用者最後一次密碼變更日期
確保所有使用者的最後一次密碼變更日期是在過去
檢查使用者的最後一次密碼變更日期可以幫助管理員發現潛在的安全問題。
# 檢查使用者最後一次密碼變更日期
for usr in $(cut -d: -f1 /etc/shadow); do [[ $(chage --list $usr | grep '^Last password change' | cut -d: -f2) > $(date) ]] && echo "$usr :$(chage --list $usr | grep '^Last password change' | cut -d: -f2)"; done
詳細解說
- 檢查的重要性:確保沒有使用者的密碼變更日期被設定在未來,這可能被利用來繞過密碼過期策略。
- 處理異常使用者:對於檢查出來的異常使用者,需要進行進一步的調查和處理,例如鎖定帳戶或重置密碼。
系統帳戶的安全加固
確保系統帳戶的安全
系統帳戶不應具有登入shell,以防止潛在的安全風險。
# 將系統帳戶的shell設為nologin
usermod -s $(which nologin) <user>
詳細解說
- 系統帳戶的管理:確保系統帳戶不被用於登入操作。
- 如何檢查目前設定:執行特定的
awk命令來檢查不符合要求的系統帳戶。 - 對不符合要求的帳戶進行處理:使用
usermod命令將不符合要求的系統帳戶的shell設為nologin,並鎖定這些帳戶。
透過上述措施,可以顯著提高Linux系統的密碼安全和帳戶管理水平,從而加強整體的安全性。定期稽核和調整安全策略是維護系統安全的重要環節。