net/zadanie1/br-srv.sh

138 lines
5.1 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
# ============================================================
# ЗАДАНИЕ 1. Настройка BR-SRV (Linux / РЕД ОС 8)
# Имя, адрес в сети BR (через BR-FW), пользователь sshuser
# (UID 2027, sudo без пароля), SSH: порт 2027, только sshuser,
# 2 попытки, баннер, часовой пояс.
# ============================================================
# --- Проверка прав root ---
if [[ $EUID -ne 0 ]]; then
echo "Запустите скрипт с правами root (sudo bash br-srv.sh)"
exit 1
fi
# ================= ПЕРЕМЕННЫЕ (заполните перед запуском) =================
HOSTNAME_FQDN="br-srv.au-team.irpo" # таблица 3, запись br-srv.au-team.irpo
# --- Единственная адресная переменная: базовая сеть офиса BR ---
# BR-SRV получает второй адрес сети BR-SRV (см. схему в tools/subnets.py)
BR_BASE="10.10.200.0/24" # поменяйте на свой расчёт при необходимости
# --- Интерфейс ---
SRV_IF="enp0s3" # 1-й NIC — к BR-FW (адрес из BR_BASE-схемы)
DNS_SRV="" # DNS для сервера — адрес HQ-SRV (основной DNS по заданию)
# либо внешний, например 8.8.8.8 — уточните у экзаменатора
# --- Пользователь 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"
# --- Прочее ---
EXAM_TZ="Asia/Yekaterinburg" # по заданию — Екатеринбург
NM_CONF_DIR="/etc/NetworkManager/system-connections"
# ============ Проверка заполнения переменных ============
MISSING=()
for NAME in HOSTNAME_FQDN SRV_IF BR_BASE SSH_USER SSH_USER_PASS \
SSH_USER_UID SSH_PORT EXAM_TZ; do
[[ -z "${!NAME}" ]] && MISSING+=("$NAME")
done
if [[ ${#MISSING[@]} -gt 0 ]]; then
echo "Заполните переменные в начале скрипта: ${MISSING[*]}"
exit 1
fi
echo "=== Настройка BR-SRV ==="
# Префикс по заданию (достаточно голого IP)
add_prefix () { if [[ "$2" == */* ]]; then echo "$2"; else echo "$2/$1"; fi; }
SRV_ADDR=$(add_prefix 28 "$SRV_ADDR")
# --- 1. Имя хоста ---
hostnamectl set-hostname "$HOSTNAME_FQDN"
echo "Имя хоста: $(hostname)"
# --- 2. Сеть ---
echo "--- Профиль $SRV_IF ---"
cat > "$NM_CONF_DIR/$SRV_IF.nmconnection" <<EOF
[connection]
id=$SRV_IF
type=ethernet
autoconnect=yes
interface-name=$SRV_IF
[ethernet]
[ipv4]
address1=$SRV_ADDR
gateway=$SRV_GW
method=manual
[ipv6]
method=disabled
[proxy]
EOF
chmod 600 "$NM_CONF_DIR/$SRV_IF.nmconnection"
nmcli connection reload
nmcli connection up "$SRV_IF" || echo "ВНИМАНИЕ: не поднялся $SRV_IF"
if [[ -n "$DNS_SRV" ]]; then
if grep -q "^nameserver" /etc/resolv.conf 2>/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" <<EOF
Port $SSH_PORT
AllowUsers $SSH_USER
MaxAuthTries 2
Banner $SSH_BANNER_FILE
EOF
if command -v getenforce >/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. Часовой пояс ---
timedatectl set-timezone "$EXAM_TZ"
echo ""
echo "=== Самопроверка для BR-SRV ==="
ip -4 -br address show
echo ""
echo "Дополнительные проверки вручную:"
echo " ss -tlnp | grep ':$SSH_PORT' (SSH на порту 2027?)"
echo " ping -c2 $SRV_GW (BR-FW доступен?)"