174 lines
8.2 KiB
Bash
174 lines
8.2 KiB
Bash
#!/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="Europe/Moscow" # проверить на экзамене
|
||
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"
|