net/check/zadanie2/br-srv.sh

99 lines
5.6 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 — BR-SRV: Samba DC, Ansible, Docker
# (только читает состояние; samba-tool/docker/ansible требуют root)
# ЕДИНСТВЕННАЯ запись — нет: все команды только для чтения
# (docker ps, samba-tool user list, ansible ping — информационный модуль).
# ============================================================
NAME="br-srv"
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; }
# ================= ПЕРЕМЕННЫЕ (заполните для проверки) =================
HQ_USERS_COUNT="5" # по заданию hquser1..5
HQ_GROUP="hq"
MIN_PWD_LENGTH="8" # политика по заданию
LOCKOUT_ATTEMPTS="5" # блокировка по заданию
# sudo-проверка группы hq выполняется на HQ-CLI (check/zadanie2/hq-cli.sh)
main () {
echo "=== Проверка задания 2: BR-SRV (Samba/Ansible/Docker) ==="
# --- 1. Пользователи hquser1..5 ---
if root_or_skip "samba-tool (требует root)"; then
if ! command -v samba-tool &>/dev/null; then
skip "Samba — samba-tool не найден (ПРОВЕРИТЬ установку samba-dc)"
else
USER_LIST=$(samba-tool user list 2>/dev/null)
COUNT_OK=0
for i in $(seq 1 "$HQ_USERS_COUNT"); do
if grep -qx "hquser${i}" <<<"$USER_LIST"; then COUNT_OK=$((COUNT_OK+1));
else fail "пользователь hquser${i}" "не найден в списке домена"; fi
done
[[ $COUNT_OK -eq $HQ_USERS_COUNT ]] && ok "пользователи hquser1..$HQ_USERS_COUNT созданы ($COUNT_OK)"
# --- группа hq ---
if samba-tool group list 2>/dev/null | grep -qx "$HQ_GROUP"; then
ok "группа $HQ_GROUP существует"
MEMBERS=$(samba-tool group listmembers "$HQ_GROUP" 2>/dev/null | grep -c "^hquser")
if [[ $MEMBERS -eq $HQ_USERS_COUNT ]]; then ok "в группе $HQ_GROUP все $HQ_USERS_COUNT пользователей"
else fail "состав группы $HQ_GROUP" "ожидалось $HQ_USERS_COUNT hquser*, найдено $MEMBERS: $(samba-tool group listmembers "$HQ_GROUP" 2>&1)"; fi
else fail "группа $HQ_GROUP" "группа не найдена"; fi
# --- политика паролей ---
POLICY=$(samba-tool domain passwordsettings show 2>/dev/null)
if grep -Eqi "minimum password length.*$MIN_PWD_LENGTH" <<<"$POLICY"; then
ok "минимальная длина пароля = $MIN_PWD_LENGTH"
else fail "длина пароля" "ожидалось $MIN_PWD_LENGTH: $(echo "$POLICY" | grep -i length)"; fi
if grep -Eqi "bad password count.*$LOCKOUT_ATTEMPTS|lockout.*$LOCKOUT_ATTEMPTS" <<<"$POLICY"; then
ok "блокировка после $LOCKOUT_ATTEMPTS неудачных попыток"
else fail "блокировка учётной записи" "ожидалось $LOCKOUT_ATTEMPTS: $(echo "$POLICY" | grep -Ei 'lockout|attempt')"; fi
fi
fi
# --- 2. Ansible: ansible all -m ping (все pong) ---
if command -v ansible &>/dev/null; then
PING_OUT=$(ansible all -m ping 2>&1)
N_OK=$(grep -c "SUCCESS" <<<"$PING_OUT")
N_FAILS=$(grep -c "UNREACHABLE\|failed" <<<"$PING_OUT")
if [[ $N_OK -ge 4 && $N_FAILS -eq 0 ]]; then ok "ansible all -m ping: $N_OK машин ответили"
else fail "ansible ping" "успешных $N_OK (ожидалось ≥4), проблем $N_FAILS"; fi
else
skip "ansible — не установлен/не в PATH (инвентарь в /etc/ansible)"
fi
# --- 3. Docker: контейнеры и порт 8080 ---
if root_or_skip "docker ps / сетевая проверка порта"; then
if command -v docker &>/dev/null; then
CWEB=$(docker ps 2>/dev/null | grep -ciE "site|web|app")
CDB=$(docker ps 2>/dev/null | grep -ciE "mariadb|db")
if [[ $CWEB -ge 1 && $CDB -ge 1 ]]; then
ok "docker: найдено $CWEB контейнер(ов) приложения, $CDB — БД"
else fail "docker контейнеры" "ожидалось приложение + mariadb: $(docker ps 2>&1)"; fi
if curl -s -o /dev/null -w "%{http_code}" "http://127.0.0.1:8080/" 2>/dev/null | grep -q "200\|301\|302\|401"; then
ok "testapp отвечает на порт 8080 (curl)"
else fail "testapp порт 8080" "нет ответа от локального порта 8080"; fi
else
skip "docker — команда не найдена (ПРОВЕРИТЬ пакет docker на РЕД ОС 8)"
fi
fi
echo ""
echo "=== Проверить вручную ==="
echo " — testapp доступен на 8080 извне: с ISP curl http://<линк к BR-RTR>:8080"
echo " — вход пользователей группы hq на HQ-CLI (см. check/zadanie2/hq-cli.sh)"
echo ""
echo "=== Итог: OK=$OK FAIL=$FAIL ПРОПУЩЕНО=$SKIP ==="
[[ $FAIL -eq 0 ]]
}
main 2>&1 | tee "$LOG"
STATUS=${PIPESTATUS[0]}
echo "Лог сохранён: $LOG"
exit $STATUS