net/check/zadanie2/isp.sh

68 lines
3 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# ============================================================
# ПРОВЕРКА ЗАДАНИЯ 2 — ISP: chrony-сервер, стратум 5
# (только читает состояние)
# ============================================================
NAME="isp"
LOG="check_${NAME}_z2.txt"
OK=0; FAIL=0; SKIP=0
ok() { echo "[OK] $1"; OK=$((OK+1)); }
fail() { echo "[FAIL] $1 — $2"; FAIL=$((FAIL+1)); }
skip() { echo "[ПРОПУЩЕНО] $1"; SKIP=$((SKIP+1)); }
root_or_skip() { if [[ $EUID -ne 0 ]]; then skip "$1 (нужен root)"; return 1; fi; return 0; }
check_var() { if [[ -z "${!2}" ]]; then skip "$1 — не задано $2"; return 1; fi; return 0; }
# ================= ПЕРЕМЕННЫЕ (заполните для проверки) =================
CHRONY_CONF="/etc/chrony.conf" # ПРОВЕРИТЬ путь на РЕД ОС 8
STRATUM_EXPECTED="5" # по заданию 2 п. 4
ALLOW_NETS="" # сети клиентов, через пробел (как в isp.sh настройки)
main () {
echo "=== Проверка задания 2: ISP (chrony) ==="
# --- 1. Стратум 5 ---
if command -v chronyc &>/dev/null; then
GOT_STRATUM=$(chronyc tracking 2>/dev/null | awk '/^Stratum/ {print $2}')
if [[ "$GOT_STRATUM" == "$STRATUM_EXPECTED" ]]; then ok "стратум = $GOT_STRATUM"
else fail "стратум" "ожидалось $STRATUM_EXPECTED, получено '$GOT_STRATUM'"; fi
# служба активна
if systemctl is-active chronyd &>/dev/null; then ok "служба chronyd активна"
else fail "служба chronyd" "не активна (ПРОВЕРИТЬ имя службы на РЕД ОС 8)"; fi
else
skip "chronyc — не найден (ПРОВЕРИТЬ пакет chrony)"
fi
# --- 2. Разрешено доступ для клиентских сетей (allow) ---
NETS_OK=0; NETS_TOTAL=0
for NET in $ALLOW_NETS; do
NETS_TOTAL=$((NETS_TOTAL+1))
if grep -qE "^allow[[:space:]]+$NET" "$CHRONY_CONF" 2>/dev/null; then
NETS_OK=$((NETS_OK+1))
else fail "allow $NET" "нет строки в $CHRONY_CONF"; fi
done
if [[ $NETS_TOTAL -eq 0 ]]; then skip "allow-сети — не задано ALLOW_NETS"
elif [[ $NETS_OK -eq $NETS_TOTAL ]]; then ok "allow для всех $NETS_TOTAL сетей клиентов"
fi
# --- 3. Сервер NTP слушает 123/udp ---
if root_or_skip "порт NTP (ss)"; then
if ss -uln 2>/dev/null | grep -q ":123 "; then ok "NTP слушает udp/123"
else fail "NTP порт 123" "не слушает (chronyd: allow без локального статуса?)"; fi
fi
echo ""
echo "=== Проверить вручную ==="
echo " — chronyc clients (кто реально опрашивает)"
echo " — chronyc sources точно сообщает о вышестоящем сервере"
echo ""
echo "=== Итог: OK=$OK FAIL=$FAIL ПРОПУЩЕНО=$SKIP ==="
[[ $FAIL -eq 0 ]]
}
main 2>&1 | tee "$LOG"
STATUS=${PIPESTATUS[0]}
echo "Лог сохранён: $LOG"
exit $STATUS