#!/bin/bash # ============================================================ # ПРОВЕРКА ЗАДАНИЯ 1 — BR-SRV (только читает состояние!) # Пункты sshd -T и sudo требуют root. # ============================================================ NAME="br-srv" LOG="check_${NAME}_z1.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; } expect_eq() { if [[ "$3" == "$2" ]]; then ok "$1"; else fail "$1" "ожидалось '$2', получено '$3'"; fi; } # ================= ПЕРЕМЕННЫЕ (заполните для проверки) ================= HOSTNAME_EXPECTED="br-srv.au-team.irpo" # таблица 3 SRV_IF="" # интерфейс к BR-SRV SRV_ADDR="" # адрес BR-SRV, адрес/префикс SRV_GW="" # шлюз (адрес BR-FW) SSH_PORT="2027" SSH_USER="sshuser" SSH_USER_UID="2027" SSH_BANNER_TEXT="Authorized access only" EXAM_TZ="" main () { echo "=== Проверка задания 1: BR-SRV ===" # --- 1. Имя хоста --- check_var "имя хоста" HOSTNAME_EXPECTED && expect_eq "имя хоста" "$HOSTNAME_EXPECTED" "$(hostname)" # --- 2. Сеть --- check_var "адрес" SRV_ADDR && if grep -qF -- "$SRV_ADDR" <(ip -4 -o addr show "$SRV_IF" 2>/dev/null); then ok "адрес = $SRV_ADDR" else fail "адрес" "не нашёлся $SRV_ADDR"; fi check_var "шлюз" SRV_GW && expect_eq "шлюз по умолчанию" "$SRV_GW" "$(ip route show default 2>/dev/null | awk '{print $3}')" # --- 3. Пользователь sshuser --- check_var "пользователь sshuser" SSH_USER && if id "$SSH_USER" &>/dev/null; then expect_eq "UID $SSH_USER" "$SSH_USER_UID" "$(id -u "$SSH_USER")" else fail "пользователь $SSH_USER" "нет такого пользователя"; fi check_var "sudo для sshuser" SSH_USER && if root_or_skip "sudo для sshuser"; then if sudo -ln -U "$SSH_USER" 2>/dev/null | grep -q "NOPASSWD: ALL"; then ok "sshuser — sudo без пароля" else fail "sudo для sshuser" "нет NOPASSWD: ALL"; fi fi # --- 4. SSH: порт 2027, только sshuser, 2 попытки, баннер --- if root_or_skip "sshd -T"; then T=$(sshd -T 2>/dev/null) expect_eq "SSH порт" "$SSH_PORT" "$(grep -E "^port " <<<"$T" | awk '{print $2}')" if grep -E "^allowusers " <<<"$T" | grep -qw "$SSH_USER"; then ok "SSH AllowUsers = $SSH_USER" else fail "SSH AllowUsers" "$(grep -E '^allowusers' <<<"$T")"; fi expect_eq "SSH MaxAuthTries" "2" "$(grep -E "^maxauthtries " <<<"$T" | awk '{print $2}')" got_banner=$(grep -E "^banner " <<<"$T" | awk '{print $2}') if [[ -n "$got_banner" ]] && grep -qF "$SSH_BANNER_TEXT" "$got_banner" 2>/dev/null; then ok "SSH баннер '$SSH_BANNER_TEXT'" else fail "SSH баннер" "banner=$got_banner"; fi fi # --- 5. Часовой пояс --- check_var "часовой пояс" EXAM_TZ && expect_eq "часовой пояс" "$EXAM_TZ" "$(timedatectl show -p Timezone --value)" echo "" echo "=== Проверить вручную ===" echo " — ssh -p 2027 sshuser@<адрес BR-SRV> с другой машины" echo "" echo "=== Итог: OK=$OK FAIL=$FAIL ПРОПУЩЕНО=$SKIP ===" [[ $FAIL -eq 0 ]] } main 2>&1 | tee "$LOG" STATUS=${PIPESTATUS[0]} echo "Лог сохранён: $LOG" exit $STATUS