#!/bin/bash # ============================================================ # ЗАДАНИЕ 1. Настройка HQ-SRV (Linux / РЕД ОС 8) # Имя, адрес в VLAN 100, пользователь sshuser (UID 2027, sudo без пароля), # SSH: порт 2027, только sshuser, 2 попытки, баннер, # DNS-сервер (dnsmasq): зона au-team.irpo по таблице 3, forwarder, # часовой пояс. # ============================================================ # --- Проверка прав root --- if [[ $EUID -ne 0 ]]; then echo "Запустите скрипт с правами root (sudo bash hq-srv.sh)" exit 1 fi # ================= ПЕРЕМЕННЫЕ (заполните перед запуском) ================= HOSTNAME_FQDN="hq-srv.au-team.irpo" # таблица 3, запись hq-srv.au-team.irpo # --- Сеть --- SRV_IF="enp0s3" # 1-й NIC — к HQ-SW (VLAN 100; тег снимает HQ-SW или сетевой адаптер) SRV_ADDR="" # адрес HQ-SRV в VLAN 100, формат адрес/префикс SRV_GW="" # шлюз — адрес HQ-RTR в VLAN 100 DNS_SRV="" # внешний DNS для самого сервера (необязательно, напр. 77.88.8.7) # --- Пользователь sshuser (значения из задания) --- SSH_USER="sshuser" SSH_USER_PASS="P@ssw0rd" SSH_USER_UID="2027" # --- SSH (значения из задания) --- SSH_PORT="2027" # порт подключения SSH_BANNER_TEXT="Authorized access only" SSH_BANNER_FILE="/etc/ssh/exam-banner" SSHD_CONF="/etc/ssh/sshd_config" # --- DNS-сервер (dnsmasq; ПРОВЕРИТЬ: пакет/служба на РЕД ОС 8) --- DNS_PACKAGE="dnsmasq" DNS_SERVICE="dnsmasq" DNS_HOSTS_FILE="/etc/exam.hosts" # наши записи A/PTR, перезаписывается целиком DNS_EXTRA_CONF="/etc/dnsmasq.d/exam.conf" DNS_DOMAIN="au-team.irpo" DNS_UPSTREAM="77.88.8.7" # forwarder: любой общий DNS по заданию (можно 77.88.8.3 и др.) # Адрес, на котором слушать DNS (DNS_LISTEN), вычисляется из SRV_ADDR # --- Адреса для записей таблицы 3 (все без префикса) --- HQ_RTR_IP="" # hq-rtr.au-team.irpo BR_RTR_IP="" # br-rtr.au-team.irpo BR_FW_IP="" # br-fw.au-team.irpo HQ_CLI_IP="" # hq-cli.au-team.irpo BR_SRV_IP="" # br-srv.au-team.irpo ISP_TO_HQ_IP="" # docker.au-team.irpo — ISP со стороны HQ-RTR ISP_TO_BR_IP="" # web.au-team.irpo — ISP со стороны BR-RTR # --- Прочее --- EXAM_TZ="Europe/Moscow" # проверить на экзамене NM_CONF_DIR="/etc/NetworkManager/system-connections" # ============ Проверка заполнения переменных ============ MISSING=() for NAME in HOSTNAME_FQDN SRV_IF SRV_ADDR SRV_GW SSH_USER SSH_USER_PASS SSH_USER_UID \ SSH_PORT DNS_UPSTREAM HQ_RTR_IP BR_RTR_IP BR_FW_IP HQ_CLI_IP \ BR_SRV_IP ISP_TO_HQ_IP ISP_TO_BR_IP EXAM_TZ; do [[ -z "${!NAME}" ]] && MISSING+=("$NAME") done if [[ ${#MISSING[@]} -gt 0 ]]; then echo "Заполните переменные в начале скрипта: ${MISSING[*]}" exit 1 fi # Адрес HQ-SRV без префикса — для записей A/PTR и listening DNS SRV_ADDR_HOST="${SRV_ADDR%/*}" DNS_LISTEN="$SRV_ADDR_HOST" echo "=== Настройка HQ-SRV ===" # --- 1. Имя хоста --- hostnamectl set-hostname "$HOSTNAME_FQDN" echo "Имя хоста: $(hostname)" # --- 2. Сеть --- echo "--- Профиль $SRV_IF ---" cat > "$NM_CONF_DIR/$SRV_IF.nmconnection" </dev/null; then echo "DNS уже прописан: $(grep '^nameserver' /etc/resolv.conf)" else echo "nameserver $DNS_SRV" > /etc/resolv.conf fi fi # --- 3. Пользователь sshuser: UID 2027, пароль, sudo без пароля --- if id "$SSH_USER" &>/dev/null; then echo "Пользователь уже существует" else useradd -u "$SSH_USER_UID" -m "$SSH_USER" fi echo "$SSH_USER:$SSH_USER_PASS" | chpasswd echo "$SSH_USER ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/sshuser chmod 440 /etc/sudoers.d/sshuser echo "Проверка UID: id $SSH_USER" # --- 4. SSH: порт 2027, только sshuser, MaxAuthTries 2, баннер --- echo "--- Настройка SSH (порт $SSH_PORT) ---" echo "$SSH_BANNER_TEXT" > "$SSH_BANNER_FILE" # Удаляем старые значения (в т.ч. закомментированные), затем дописываем новые. # Повторный запуск не создаёт дублей: сначала чистим, потом пишем. for KEY in Port AllowUsers MaxAuthTries Banner; do sed -riE "s/^[[:space:]]*[#]*[[:space:]]*${KEY}[[:space:]].*$//" "$SSHD_CONF" done cat >> "$SSHD_CONF" </dev/null 2>&1 && [[ $(getenforce) == "Enforcing" ]]; then if ! semanage port -l | grep -qw "$SSH_PORT" 2>/dev/null; then semanage port -a -t ssh_port_t -p tcp "$SSH_PORT" 2>/dev/null \ || echo "ПРОВЕРИТЬ: не удалось добавить SELinux-порт $SSH_PORT" fi fi sshd -t && echo "Конфиг sshd корректен" || echo "ПРОВЕРИТЬ: sshd -t вернул ошибку" systemctl restart sshd || systemctl restart ssh echo "Проверка: ss -tlnp | grep ':$SSH_PORT'" # --- 5. DNS-сервер (dnsmasq): зона au-team.irpo по таблице 3 --- echo "--- DNS ($DNS_PACKAGE) ---" dnf install -y "$DNS_PACKAGE" || echo "ПРОВЕРИТЬ: пакет $DNS_PACKAGE не установился" # Записи A и PTR (PTR появляется автоматически по записям hosts — # убедитесь на стенде, что обратные зоны отвечают) cat > "$DNS_HOSTS_FILE" < "$DNS_EXTRA_CONF" <