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