net/zadanie2/br-srv.sh

174 lines
8.2 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
# ============================================================
# ЗАДАНИЕ 2. Настройка BR-SRV (Linux / РЕД ОС 8)
# DC samba уже установлен на стенде — настраиваем домен дальше:
# 1. Пользователи hquser1..5, политика паролей, группа hq
# 5. Ansible: инвентарь (HQ-SRV, HQ-CLI, HQ-RTR, BR-RTR), каталог /etc/ansible
# 6. Docker: стек testapp из Additional.iso (порт 8080 наружу)
# ============================================================
# --- Проверка прав root ---
if [[ $EUID -ne 0 ]]; then
echo "Запустите скрипт с правами root (sudo bash br-srv.sh)"
exit 1
fi
# ================= ПЕРЕМЕННЫЕ (заполните перед запуском) =================
EXAM_TZ="Asia/Yekaterinburg" # по заданию — Екатеринбург
ISO_DIR="/mnt/iso" # точка монтирования Additional.iso
DOMAN="au-team.irpo"
# --- 1. Samba DC (утилита samba-tool; ПРОВЕРИТЬ путь на РЕД ОС 8) ---
SMB_DOMAIN="au-team.irpo"
SMB_DB_USER="administrator" # ПРОВЕРИТЬ как называется админ DC на стенде
DOMAIN_USER_PASS="P@ssw0rd" # пароль пользователей hquser1..5 (по желанию)
NUM_HQ_USERS="5" # количество пользователей по заданию
MIN_PWD_LENGTH="8" # минимальная длина пароля по заданию
LOCKOUT_ATTEMPTS="5" # блокировка после N неудачных попыток
# Команда для lockout зависит от версии samba — ПРОВЕРИТЬ на стенде:
# samba-tool domain settings set --lockout-attempt=5 (новые версии)
# samba-tool domain passwordsettings set --lockout-threshold=5 (старые)
LOCKOUT_CMD="samba-tool domain settings set --lockout-attempt=$LOCKOUT_ATTEMPTS"
# --- 5. Ansible ---
ANSIBLE_PACKAGE="ansible-core" # ПРОВЕРИТЬ: пакет ansible на РЕД ОС 8
ANSIBLE_DIR="/etc/ansible"
INVENTORY="$ANSIBLE_DIR/inventory"
ANSIBLE_CFG="$ANSIBLE_DIR/ansible.cfg"
# --- Адреса и учётные данные для инвентаря (без префиксов) ---
HQ_SRV_IP=""
HQ_CLI_IP=""
HQ_RTR_IP=""
BR_RTR_IP=""
HQ_SRV_USER="sshuser" # пользователь из задания 1 на HQ-SRV
HQ_CLI_USER="sshuser"
HQ_RTR_USER="net_admin"
BR_RTR_USER="net_admin"
# SSH-ключ для ansible: ключ генерим, но copy-id на каждый хост требует
# пароль — это РУЧНОЙ шаг (MANUAL.md)
ANSIBLE_KEY="/root/.ssh/id_ed25519"
# --- 6. Docker ---
DOCKER_PACKAGE="docker-engine" # ПРОВЕРИТЬ: пакет docker на РЕД ОС 8 (docker-ce?)
DOCKER_SERVICE="docker"
APP_DIR="/opt/testapp" # рабочий каталог стека
ISO_DOCKER_DIR="$ISO_DIR/docker" # образы site_latest, mariadb_latest (ПРОВЕРИТЬ имена файлов)
COMPOSE_FILE="compose.yaml" # файл compose из Additional.iso
APP_EXTERNAL_PORT="8080" # наружу приложение доступно через этот порт
# ============ Проверка заполнения переменных ============
MISSING=()
for NAME in HQ_SRV_IP HQ_CLI_IP HQ_RTR_IP BR_RTR_IP EXAM_TZ; do
[[ -z "${!NAME}" ]] && MISSING+=("$NAME")
done
if [[ ${#MISSING[@]} -gt 0 ]]; then
echo "Заполните переменные в начале скрипта: ${MISSING[*]}"
exit 1
fi
echo "=== Настройка BR-SRV, задание 2 ==="
# --- 1. Пользователи hquser1..5, политика, группа hq ---
echo "--- Samba: доменные пользователи и группа ---"
samba-tool domain passwordsettings set --min-pwd-length="$MIN_PWD_LENGTH" \
|| echo "ПРОВЕРИТЬ: не установилась min-pwd-length"
$LOCKOUT_CMD \
|| echo "ПРОВЕРИТЬ: не сработала установка lockout (см. комментарий в переменных выше)"
for i in $(seq 1 "$NUM_HQ_USERS"); do
if samba-tool user list | grep -qw "hquser${i}"; then
echo "hquser${i} уже существует"
else
samba-tool user create "hquser${i}" "$DOMAIN_USER_PASS" \
|| echo "ПРОВЕРИТЬ: не создан hquser${i}"
fi
done
if samba-tool group list | grep -qw "hq"; then
echo "Группа hq уже существует"
else
samba-tool group create hq
fi
samba-tool group addmembers hq "hquser1,hquser2,hquser3,hquser4,hquser5" 2>/dev/null \
|| echo "ПРОВЕРИТЬ: члены не добавлены — вручную: samba-tool group addmembers hq hquser1,hquser2,..."
samba-tool group listmembers hq
# --- 5. Ansible ---
echo "--- Ansible (каталог /etc/ansible) ---"
dnf install -y "$ANSIBLE_PACKAGE" || echo "ПРОВЕРИТЬ: пакет $ANSIBLE_PACKAGE не установился"
mkdir -p "$ANSIBLE_DIR"
cat > "$ANSIBLE_CFG" <<EOF
[defaults]
inventory = $INVENTORY
host_key_checking = False
EOF
cat > "$INVENTORY" <<EOF
[hq_srv]
hq_srv ansible_host=$HQ_SRV_IP ansible_user=$HQ_SRV_USER
[hq_cli]
hq_cli ansible_host=$HQ_CLI_IP ansible_user=$HQ_CLI_USER
[hq_rtr]
hq_rtr ansible_host=$HQ_RTR_IP ansible_user=$HQ_RTR_USER
[br_rtr]
br_rtr ansible_host=$BR_RTR_IP ansible_user=$BR_RTR_USER
EOF
chmod 600 "$INVENTORY"
# Ключ для входа по SSH (копирование на хосты — вручную, см. MANUAL.md)
if [[ ! -f "$ANSIBLE_KEY" ]]; then
ssh-keygen -t ed25519 -N "" -f "$ANSIBLE_KEY"
fi
echo ""
echo "=== РУЧНОЙ ШАГ: скопировать ключ на все машины инвентаря ==="
echo " ssh-copy-id ${HQ_SRV_USER}@${HQ_SRV_IP}"
echo " ssh-copy-id ${HQ_CLI_USER}@${HQ_CLI_IP}"
echo " ssh-copy-id ${HQ_RTR_USER}@${HQ_RTR_IP}"
echo " ssh-copy-id ${BR_RTR_USER}@${BR_RTR_IP}"
echo "=== После этого проверить: ansible all -m ping ==="
# --- 6. Docker: стек из Additional.iso ---
echo "--- Docker (стек testapp из $ISO_DOCKER_DIR) ---"
dnf install -y "$DOCKER_PACKAGE" || echo "ПРОВЕРИТЬ: пакет $DOCKER_PACKAGE не установился"
systemctl enable --now "$DOCKER_SERVICE" \
|| { echo "ПРОВЕРИТЬ: служба $DOCKER_SERVICE не запустилась"; systemctl status "$DOCKER_SERVICE" --no-pager; }
mkdir -p "$APP_DIR" || exit 1
if [[ ! -d "$ISO_DOCKER_DIR" ]]; then
echo "ДЕЛАЕТСЯ ВРУЧНУЮ: нет $ISO_DOCKER_DIR — смонтируйте Additional.iso в $ISO_DIR"
else
# Образы могут быть в .tar — загружаем любые найденные тары
shopt -s nullglob
for TAR in "$ISO_DOCKER_DIR"/*.tar; do
docker load -i "$TAR" && echo "Образ загружен: $TAR"
done
if [[ -f "$ISO_DOCKER_DIR/$COMPOSE_FILE" ]]; then
cp "$ISO_DOCKER_DIR/$COMPOSE_FILE" "$APP_DIR/"
echo "compose скопирован в $APP_DIR"
else
echo "ДЕЛАЕТСЯ ВРУЧНУЮ: $COMPOSE_FILE не найден в $ISO_DOCKER_DIR"
fi
shopt -u nullglob
fi
echo "ПРОВЕРИТЬ вручную в $APP_DIR:"
echo " cat $APP_DIR/$COMPOSE_FILE (что там по портам? наружу нужен $APP_EXTERNAL_PORT)"
echo " docker compose -f $APP_DIR/$COMPOSE_FILE up -d (или docker-compose командой)"
echo " docker ps; curl -I http://localhost:$APP_EXTERNAL_PORT"
timedatectl set-timezone "$EXAM_TZ"
echo ""
echo "=== Самопроверка на BR-SRV ==="
echo "samba-tool user list | grep hquser"
samba-tool user list | grep hquser
echo ""
echo "ansible --version"
ansible --version 2>/dev/null || echo "ПРОВЕРИТЬ: ansible не установился"
echo ""
echo "ansible all -m ping (после ручного ssh-copy-id, см. выше)"
echo "docker ps (контейнеры testapp и mariadb?)"
echo ""
echo "Связность через задание 1 (без неё ansible/docker не заработают):"
echo " ping -c2 $HQ_RTR_IP (маршрутизация через туннель)"
echo " ping -c2 $HQ_SRV_IP"