feat: add ssh-harden
This commit is contained in:
@@ -220,6 +220,36 @@ check_firewall() {
|
|||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
|
add_sudoers_file() {
|
||||||
|
local file="$1" existing
|
||||||
|
[[ -r "$file" ]] || return
|
||||||
|
|
||||||
|
for existing in "${SUDOERS_FILES[@]}"; do
|
||||||
|
[[ "$existing" == "$file" ]] && return
|
||||||
|
done
|
||||||
|
SUDOERS_FILES+=("$file")
|
||||||
|
}
|
||||||
|
|
||||||
|
collect_sudoers_files() {
|
||||||
|
local file
|
||||||
|
SUDOERS_FILES=()
|
||||||
|
|
||||||
|
# visudo 会按照 sudo 实际的 #include / #includedir 关系解析配置,并逐个报告已检查的文件。
|
||||||
|
if command -v visudo >/dev/null 2>&1; then
|
||||||
|
while IFS= read -r file; do
|
||||||
|
add_sudoers_file "$file"
|
||||||
|
done < <(visudo -c 2>&1 | awk '/: parsed OK$/ {sub(/: parsed OK$/, ""); print}')
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 若 visudo 不可用或配置本身有语法错误,仍尽力检查标准位置。
|
||||||
|
add_sudoers_file /etc/sudoers
|
||||||
|
if [[ -d /etc/sudoers.d ]]; then
|
||||||
|
for file in /etc/sudoers.d/*; do
|
||||||
|
add_sudoers_file "$file"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
check_privileged_accounts() {
|
check_privileged_accounts() {
|
||||||
local uid_zero sudo_rules
|
local uid_zero sudo_rules
|
||||||
|
|
||||||
@@ -236,9 +266,15 @@ check_privileged_accounts() {
|
|||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
sudo_rules=$(grep -REh '^[[:space:]]*[^#].*NOPASSWD' /etc/sudoers /etc/sudoers.d 2>/dev/null || true)
|
collect_sudoers_files
|
||||||
|
if ((${#SUDOERS_FILES[@]} == 0)); then
|
||||||
|
warn "未找到可读取的 sudoers 配置文件"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
sudo_rules=$(grep -EH '^[[:space:]]*[^#].*NOPASSWD' "${SUDOERS_FILES[@]}" 2>/dev/null || true)
|
||||||
if [[ -n "$sudo_rules" ]]; then
|
if [[ -n "$sudo_rules" ]]; then
|
||||||
warn "发现免密 sudo 规则:$(printf '%s' "$sudo_rules" | tr '\n' ';')"
|
warn "发现免密 sudo 规则(含文件路径):$(printf '%s' "$sudo_rules" | tr '\n' ';')"
|
||||||
else
|
else
|
||||||
pass "未发现 sudoers 中的 NOPASSWD 免密 sudo 规则"
|
pass "未发现 sudoers 中的 NOPASSWD 免密 sudo 规则"
|
||||||
fi
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user