net/check/zadanie1/br-srv.sh

88 lines
3.7 KiB
Bash
Raw 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
# ============================================================
# ПРОВЕРКА ЗАДАНИЯ 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