Linux 系統安全加固涉及多個層面,從使用者檔案的安全性檢查到系統帳戶許可權的嚴格管理,每個環節都至關重要。本文提供的 Shell 指令碼,能有效協助管理員自動化稽核流程,快速識別潛在風險並提供修復建議。透過移除不必要的檔案、設定正確的許可權,並確保系統設定符合安全規範,能有效提升 Linux 系統的整體安全性。此外,文章也強調了檔案系統完整性檢查的重要性,建議使用工具如 AIDE 並定期執行檢查,及早發現並應對潛在的安全威脅。
加強使用者檔案的安全性檢查與管理
在確保系統安全性的過程中,檢查和管理使用者檔案是至關重要的環節。本篇文章將討論如何檢查和移除可能造成安全風險的使用者檔案,包括 .netrc、.forward 和 .rhosts 檔案,並提供相關的稽核和修復指令碼。
為什麼要檢查這些檔案?
這些檔案都與系統安全有關,因為它們可能被用於未經授權的存取或資料外洩。
- .netrc 檔案:該檔案用於儲存 FTP 登入資訊,包括使用者名稱和密碼,以明文形式儲存。這使得它成為一個安全風險,因為未經授權的使用者可能會取得這些資訊。
- .forward 檔案:該檔案用於將使用者的郵件轉寄到其他郵件地址。如果組態不當,可能會導致敏感資訊的外洩。
- .rhosts 檔案:該檔案用於設定哪些遠端主機可以不用密碼登入系統。即使系統設定為不支援
.rhosts檔案,這些檔案仍可能包含有用的資訊給攻擊者,特別是當使用者從其他系統遷移過來時。
如何稽核和修復這些問題?
稽核
為了檢查是否存在這些檔案並評估其安全性,可以執行以下指令碼:
#!/bin/bash
# 檢查 .netrc 檔案
awk -F: '($1!~/(halt|sync|shutdown)/ && $7!~/^(\/usr)?\/sbin\/nologin(\/)?$/ && $7!~/(\/usr)?\/bin\/false(\/)?$/) { print $1 " " $6 }' /etc/passwd | while read -r user dir; do
if [ -d "$dir" ]; then
file="$dir/.netrc"
if [ ! -h "$file" ] && [ -f "$file" ]; then
if stat -L -c "%A" "$file" | cut -c4-10 | grep -Eq '[^-]+'; then
echo "FAILED: User: \"$user\" file: \"$file\" exists with permissions: \"$(stat -L -c "%a" "$file")\", remove file or excessive permissions"
else
echo "WARNING: User: \"$user\" file: \"$file\" exists with permissions: \"$(stat -L -c "%a" "$file")\", remove file unless required"
fi
fi
fi
done
# 檢查 .forward 檔案
awk -F: '($1!~/(root|halt|sync|shutdown)/ && $7!~/^(\/usr)?\/sbin\/nologin(\/)?$/ && $7!~/(\/usr)?\/bin\/false(\/)?$/) { print $1 " " $6 }' /etc/passwd | while read -r user dir; do
if [ -d "$dir" ]; then
file="$dir/.forward"
if [ ! -h "$file" ] && [ -f "$file" ]; then
echo "User: \"$user\" file: \"$file\" exists"
fi
fi
done
# 檢查 .rhosts 檔案
awk -F: '($1!~/(root|halt|sync|shutdown)/ && $7!~/^(\/usr)?\/sbin\/nologin(\/)?$/ && $7!~/(\/usr)?\/bin\/false(\/)?$/) { print $1 " " $6 }' /etc/passwd | while read -r user dir; do
if [ -d "$dir" ]; then
file="$dir/.rhosts"
if [ ! -h "$file" ] && [ -f "$file" ]; then
echo "User: \"$user\" file: \"$file\" exists"
fi
fi
done
修復
如果稽核結果顯示存在這些檔案,可以使用以下指令碼進行移除:
#!/bin/bash
# 移除 .netrc 檔案
awk -F: '($1!~/(halt|sync|shutdown)/ && $7!~/^(\/usr)?\/sbin\/nologin(\/)?$/ && $7!~/(\/usr)?\/bin\/false(\/)?$/) { print $6 }' /etc/passwd | while read -r dir; do
if [ -d "$dir" ]; then
file="$dir/.netrc"
[ ! -h "$file" ] && [ -f "$file" ] && rm -f "$file"
fi
done
# 移除 .forward 檔案
awk -F: '($1!~/(root|halt|sync|shutdown)/ && $7!~/^(\/usr)?\/sbin\/nologin(\/)?$/ && $7!~/(\/usr)?\/bin\/false(\/)?$/) { print $6 }' /etc/passwd | while read -r dir; do
if [ -d "$dir" ]; then
file="$dir/.forward"
[ ! -h "$file" ] && [ -f "$file" ] && rm -r "$file"
fi
done
# 移除 .rhosts 檔案
awk -F: '($1!~/(root|halt|sync|shutdown)/ && $7!~/^(\/usr)?\/sbin\/nologin(\/)?$/ && $7!~/(\/usr)?\/bin\/false(\/)?$/) { print $6 }' /etc/passwd | while read -r dir; do
if [ -d "$dir" ]; then
file="$dir/.rhosts"
[ ! -h "$file" ] && [ -f "$file" ] && rm -r "$file"
fi
done
詳細解說:
.netrc 檔案的處理:首先檢查
.netrc檔案是否存在且許可權是否過於寬鬆。如果存在且許可權不正確,則輸出警告或錯誤訊息。修復時,直接移除該檔案以避免潛在的安全風險。.forward 和 .rhosts 檔案的處理:這兩個檔案的檢查和移除邏輯相似。如果發現這兩個檔案存在,則輸出訊息提示。修復時,直接移除這些檔案以消除安全隱患。
加強Linux系統帳戶與許可權的安全性
在維護Linux系統的安全時,帳戶和許可權的管理是至關重要的環節。本文將詳細探討如何確保系統帳戶的安全性,特別是在使用者ID(UID)和群組ID(GID)管理、root帳戶的安全性以及PATH環境變數的完整性方面。
6.2.10 確保只有root是UID 0的帳戶
描述與原理
任何具有UID 0的帳戶都擁有系統的超級使用者許可權。這種許可權必須嚴格限制在預設的root帳戶,並且只能從系統主控台進行存取。管理員應透過無許可權帳戶使用核准的機制(如su命令)來執行管理工作。
稽核與修復
- 稽核:執行命令
awk -F: '($3 == 0) { print $1 }' /etc/passwd,確認只有root被傳回。 - 修復:移除除了
root以外所有具有UID 0的使用者,或為他們分配新的UID。
CIS控制措施
- 版本7,4.6 使用專用機器進行所有管理工作:確保管理員使用專用機器進行所有管理工作,這些機器與組織的主要網路隔離,並且不允許存取網際網路。
6.2.11 確保root的PATH完整性
描述與原理
root使用者可以執行系統上的任何命令。如果PATH環境變數設定不當,可能會被欺騙執行非預期的程式,從而導致安全風險。
稽核與修復
- 稽核:執行特定的指令碼檢查PATH變數,確認沒有不安全的設定。
#!/bin/bash
if echo $PATH | grep -q "::" ; then
echo "Empty Directory in PATH (::)"
fi
if echo $PATH | grep -q ":$" ; then
echo "Trailing : in PATH"
fi
for x in $(echo $PATH | tr ":" " ") ; do
if [ -d "$x" ] ; then
ls -ldH "$x" | awk '
$9 == "." {print "PATH contains current working directory (.)"}
$3 != "root" {print $9, "is not owned by root"}
substr($1,6,1) != "-" {print $9, "is group writable"}
substr($1,9,1) != "-" {print $9, "is world writable"}'
else
echo "$x is not a directory"
fi
done
- 修復:根據稽核結果修正或說明任何發現的問題。
CIS控制措施
- 版本7,5.1 建立安全組態:維護檔案化的、標準的安全組態標準,適用於所有授權的作業系統和軟體。
6.2.12 確保/etc/passwd中的所有群組都存在於/etc/group
描述與原理
隨著時間的推移,系統管理錯誤和變更可能導致群組在/etc/passwd中定義但未在/etc/group中定義,從而對系統安全構成威脅。
稽核與修復
- 稽核:執行指令碼檢查
/etc/passwd中的群組是否都在/etc/group中有對應定義。
#!/bin/bash
for i in $(cut -s -d: -f4 /etc/passwd | sort -u ); do
grep -q -P "^.*?:[^:]*:$i:" /etc/group
if [ $? -ne 0 ]; then
echo "Group $i is referenced by /etc/passwd but does not exist in /etc/group"
fi
done
- 修復:分析稽核結果並進行適當的修正。
CIS控制措施
- 版本7,16.6 維護帳戶清單:維護所有帳戶的清單,按認證系統組織。
- 版本7,16.7 建立復原存取的流程:建立並遵循自動化的流程,在員工或承包商終止或變更職責時立即停用帳戶。
6.2.13 確保沒有重複的UID
描述與原理
雖然useradd程式不會讓您建立重複的UID,但管理員可以手動編輯/etc/passwd檔案並更改UID欄位。重複的UID會對系統安全和存取控制造成問題。
稽核與修復
- 稽核:執行指令碼檢查是否有重複的UID。
#!/bin/bash
cut -f3 -d":" /etc/passwd | sort -n | uniq -c | while read x ; do
[ -z "$x" ] && break
set - $x
if [ $1 -gt 1 ]; then
users=$(awk -F: '($3 == n) { print $1 }' n=$2 /etc/passwd | xargs)
echo "Duplicate UID ($2): $users"
fi
done
- 修復:根據稽核結果,建立唯一的UID,並檢查由共用UID擁有的所有檔案,以確定它們應該屬於哪個UID。
6.2.14 確保沒有重複的GID
描述與原理
類別似於UID,重複的GID也可能由於手動編輯/etc/group檔案而出現。重複的GID會對群組許可權管理造成混亂。
稽核與修復
- 稽核:執行指令碼檢查是否有重複的GID。
#!/bin/bash
cut -d: -f3 /etc/group | sort | uniq -d | while read x ; do
echo "Duplicate GID ($x) in /etc/group"
done
- 修復:根據稽核結果,建立唯一的GID,並檢查由共用GID擁有的所有檔案,以確定它們應該屬於哪個群組。
加強Linux系統帳戶和許可權的安全性需要定期進行稽核和必要的修復工作,以確保系統的完整性和安全性。上述措施能夠有效提高系統的安全性,降低潛在的安全風險。
強化Linux系統帳戶安全:處理重複使用者名稱、群組名稱及shadow群組
在維護Linux系統的安全性時,帳戶管理是至關重要的一環。本文將重點討論三個關鍵的安全設定:確保沒有重複的使用者名稱、確保沒有重複的群組名稱,以及確保shadow群組為空。這些設定對於防止潛在的安全風險至關重要。
6.2.15 確保沒有重複的使用者名稱
雖然useradd程式不允許建立重複的使用者名稱,但管理員仍可能透過手動編輯/etc/passwd檔案來更改使用者名稱。這種情況下,如果有多個使用者名稱相同但UID不同的帳戶,將會導致安全問題。因為登入時,系統會使用第一個匹配的UID,這意味著多個使用者名稱可能會共用同一個UID,從而導致檔案存取許可權的混亂。
檢查方法
執行以下指令碼以驗證是否傳回任何結果:
#!/bin/bash
cut -d: -f1 /etc/passwd | sort | uniq -d | while read -r x; do
echo "Duplicate login name $x in /etc/passwd"
done
修復措施
根據稽核指令碼的結果,為使用者建立唯一的使用者名稱。只要使用者具有唯一的UID,檔案所有權將自動反映變更。
6.2.16 確保沒有重複的群組名稱
與使用者名稱類別似,雖然groupadd程式不允許建立重複的群組名稱,但管理員仍可能手動編輯/etc/group檔案來更改群組名稱。如果多個群組名稱相同但GID不同,將會導致安全問題,因為檔案將根據第一個匹配的GID進行群組所有權設定。
檢查方法
執行以下指令碼以驗證是否傳回任何結果:
#!/bin/bash
cut -d: -f1 /etc/group | sort | uniq -d | while read -r x; do
echo "Duplicate group name $x in /etc/group"
done
修復措施
根據稽核指令碼的結果,為群組建立唯一的名稱。只要群組具有唯一的GID,檔案群組所有權將自動反映變更。
6.2.17 確保shadow群組為空
shadow群組允許系統程式存取/etc/shadow檔案。該檔案包含敏感資訊,如密碼雜湊和帳戶過期資訊。不應將任何使用者分配到shadow群組,以避免潛在的安全風險。
檢查方法
執行以下命令以驗證是否傳回任何結果:
# grep ^shadow:[^:]*:[^:]*:[^:]+ /etc/group
# awk -F: -v GID="$(awk -F: '($1=="shadow") {print $3}' /etc/group)" '($4==GID) {print}' /etc/passwd
修復措施
從shadow群組中移除所有使用者,並更改以shadow為主要群組的使用者的主要群組。
#### 內容解密:
上述三個安全設定的檢查和修復措施對於確保Linux系統的帳戶安全至關重要。透過避免重複的使用者名稱和群組名稱,以及確保shadow群組為空,可以有效防止潛在的安全風險,如未授權存取敏感資訊。管理員應定期執行相關的稽核指令碼,並根據結果進行必要的修復,以保持系統的安全性。
加強Linux系統安全性的設定
Linux系統的安全性對於維護伺服器和個人電腦的安全至關重要。本根據一系列安全檢查清單,詳細介紹如何加強Linux系統的安全性。
檔案系統和掛載選項的安全設定
- 確保可移除媒體分割區設定了nodev選項:此設定可以防止在可移除媒體上建立裝置節點,從而提高安全性。
- 確保可移除媒體分割區設定了nosuid選項:禁止在可移除媒體上執行具有特殊許可權的檔案,減少安全風險。
- 確保可移除媒體分割區設定了noexec選項:此設定禁止在可移除媒體上直接執行檔案,進一步提高安全性。
- 確保所有全域可寫目錄都設定了sticky位元:這可以防止非目錄所有者刪除或重新命名目錄中的檔案。
軟體更新和sudo組態
- 組態軟體更新來源:確保系統的軟體包管理器已正確組態,以接收最新的安全更新。
- 安裝和組態sudo:sudo允許特定使用者以其他使用者(通常是root)的身份執行命令。正確組態sudo可以提高系統安全性。
檔案系統完整性檢查
- 安裝AIDE(Advanced Intrusion Detection Environment):AIDE是一個檔案完整性檢查工具,可以檢測檔案系統的變更。
- 定期執行檔案系統完整性檢查:定期的完整性檢查有助於及時發現潛在的安全問題。
開機載入程式的安全設定
- 設定開機載入程式的密碼:為開機載入程式(如GRUB)設定密碼可以防止未授權的使用者修改開機引數。
- 確保單使用者模式需要身份驗證:此設定可以防止攻擊者在單使用者模式下未經授權存取系統。
網路組態和防火牆設定
- 停用未使用的網路協定和裝置:關閉不必要的網路服務和協定可以減少攻擊面。
- 組態防火牆:使用如Uncomplicated Firewall(ufw)或nftables等工具來控制進出系統的網路流量。
其他安全措施
- 時間同步:確保系統時間正確,可以使用NTP(Network Time Protocol)進行時間同步。
- 移除或停用不必要的服務:關閉不必要的服務可以減少系統的攻擊面。
- 安裝安全更新和補丁:定期更新系統和軟體,以修復已知的安全漏洞。