#!/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