136 lines
4.9 KiB
Bash
136 lines
4.9 KiB
Bash
#!/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
|
||
|
||
# --- Сеть ---
|
||
SRV_IF="enp0s3" # 1-й NIC — к BR-FW
|
||
SRV_ADDR="" # адрес BR-SRV в сети BR (префикс проставится сам: /28 — не более 16 адресов)
|
||
SRV_GW="" # шлюз — адрес BR-FW в этой же сети
|
||
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="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 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 доступен?)"
|