99 lines
5.6 KiB
Bash
99 lines
5.6 KiB
Bash
#!/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
|