From 5d3d59e1b210a56232fc0abc4a30e483e5217e2b Mon Sep 17 00:00:00 2001 From: smolkik-code Date: Mon, 12 Jan 2026 19:15:21 +0700 Subject: [PATCH] v.1.0.1 --- ib.sh | 164 ++++++++++++++++++++++++++++++++++------------------------ 1 file changed, 97 insertions(+), 67 deletions(-) diff --git a/ib.sh b/ib.sh index 78deb74..c56da33 100644 --- a/ib.sh +++ b/ib.sh @@ -1,84 +1,114 @@ #!/bin/bash -# --- НАСТРОЙКИ --- -USERNAME="" -USER_PASSWORD="" -SSH_PUB_KEY="" +GREEN='\033[0;32m' +RED='\033[0;31m' +YELLOW='\033[1;33m' +NC='\033[0m' -# Проверка прав root if [ "$EUID" -ne 0 ]; then - echo "Пожалуйста, запустите скрипт от имени root (sudo)." + echo -e "${RED}Запустите скрипт от имени root!${NC}" exit 1 fi -# 1. Определение дистрибутива и имени службы SSH -if [ -f /etc/os-release ]; then - . /etc/os-release - OS=$ID -else - OS=$(uname -s | tr '[:upper:]' '[:lower:]') -fi +pause(){ + read -p "Нажмите [Enter], чтобы продолжить..." fackEnterKey +} -case "$OS" in - ubuntu|debian|raspbian) - SSH_SERVICE="ssh" - ;; - centos|rhel|fedora|almalinux|rocky) - SSH_SERVICE="sshd" - ;; - *) - SSH_SERVICE="sshd" # Значение по умолчанию - ;; -esac +# --- ПРОВЕРКИ --- -echo "Определена ОС: $OS. Используемая служба SSH: $SSH_SERVICE" +check_other_users() { + # Считаем пользователей с UID >= 1000 (обычные пользователи) + USER_COUNT=$(awk -F: '$3 >= 1000 && $3 != 65534 {print $1}' /etc/passwd | wc -l) + if [ "$USER_COUNT" -eq 0 ]; then + echo -e "${RED}ВНИМАНИЕ: В системе только root!${NC}" + echo -e "${YELLOW}Сначала создайте обычного пользователя (пункт 3), прежде чем отключать SSH пароли.${NC}" + return 1 + fi + return 0 +} -# 2. Создание пользователя -if id "$USERNAME" &>/dev/null; then - echo "Пользователь $USERNAME уже существует." -else - useradd -m -s /bin/bash "$USERNAME" - echo "$USERNAME:$USER_PASSWORD" | chpasswd - echo "Пользователь $USERNAME создан." -fi +# --- ФУНКЦИИ --- -# 3. Настройка SSH-ключа -USER_HOME=$(eval echo "~$USERNAME") -mkdir -p "$USER_HOME/.ssh" -echo "$SSH_PUB_KEY" > "$USER_HOME/.ssh/authorized_keys" -chown -R "$USERNAME:$USERNAME" "$USER_HOME/.ssh" -chmod 700 "$USER_HOME/.ssh" -chmod 600 "$USER_HOME/.ssh/authorized_keys" +install_audit() { + echo -e "${GREEN}Установка и настройка аудита (auditd)...${NC}" + apt update && apt install -y auditd audispd-plugins + # Базовые правила аудита (логирование изменений в sudoers, passwd, и SSH) + cat > /etc/audit/rules.d/audit.rules << EOF +-w /etc/sudoers -p wa -k scope +-w /etc/passwd -p wa -k identity +-w /etc/ssh/sshd_config -p wa -k sshd_config +EOF + service auditd restart + echo "Аудит запущен. Просмотр логов: ausearch -k sshd_config" +} -# 4. Настройка sudo NOPASSWD -SUDOERS_FILE="/etc/sudoers.d/$USERNAME" -echo "$USERNAME ALL=(ALL) NOPASSWD: ALL" > "$SUDOERS_FILE" -chmod 440 "$SUDOERS_FILE" +setup_ssh_security() { + if ! check_other_users; then pause; return; fi -# 5. Настройка sshd_config -SSHD_CONFIG="/etc/ssh/sshd_config" -[ -f "$SSHD_CONFIG" ] && cp "$SSHD_CONFIG" "${SSHD_CONFIG}.bak" # Бэкап - -sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' "$SSHD_CONFIG" -sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' "$SSHD_CONFIG" - -# 6. Универсальный перезапуск службы -restart_service() { - if command -v systemctl >/dev/null 2>&1; then - systemctl restart "$1" - elif command -v service >/dev/null 2>&1; then - service "$1" restart + echo -e "${YELLOW}ВНИМАНИЕ: Сейчас будет произведена настройка безопасности SSH.${NC}" + read -p "Отключить вход по ПАРОЛЮ и оставить только КЛЮЧИ? (y/n): " SSH_CONFIRM + + if [ "$SSH_CONFIRM" == "y" ]; then + SSHD_CONFIG="/etc/ssh/sshd_config" + cp "$SSHD_CONFIG" "${SSHD_CONFIG}.bak" + sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' "$SSHD_CONFIG" + sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' "$SSHD_CONFIG" + sshd -t && systemctl restart ssh + echo -e "${GREEN}SSH защищен. Вход под root и по паролю запрещен.${NC}" else - /etc/init.d/"$1" restart + echo "Настройка SSH отменена." fi } -echo "Проверка конфигурации SSH..." -if sshd -t; then - restart_service "$SSH_SERVICE" - echo "Настройка успешно завершена!" -else - echo "Ошибка в конфигурации SSH! Изменения не применены." - mv "${SSHD_CONFIG}.bak" "$SSHD_CONFIG" - exit 1 -fi +install_openvpn_angristan() { + echo -e "${GREEN}Установка OpenVPN (by Angristan)...${NC}" + curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh + chmod +x openvpn-install.sh + ./openvpn-install.sh +} + +# --- МЕНЮ --- + +while true; do + clear + echo "======================================" + echo " SERVER ULTIMATE SETUP v3.0 " + echo "======================================" + echo "1) Сменить Hostname" + echo "2) Настроить время и базу (mc, gdu...)" + echo "3) СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ (SSH Key + sudo)" + echo "4) БЕЗОПАСНОСТЬ SSH (Только после п.3!)" + echo "5) Аудит системы (auditd)" + echo "6) Установить Docker + Compose" + echo "7) Установить WireGuard" + echo "8) Установить OpenVPN (Angristan)" + echo "9) Мониторинг (Netdata/Glances)" + echo "10) Защита (Fail2Ban)" + echo "11) ОЧИСТКА: Удалить старые ядра" + echo "0) Выход" + echo "======================================" + read -p "Выберите пункт: " opt + + case $opt in + 1) hostnamectl set-hostname "$(read -p 'Name: ' name; echo $name)" ; systemctl restart systemd-hostnamed ; pause ;; + 2) timedatectl set-timezone Europe/Moscow ; apt update && apt install -y mc htop zip wget curl git net-tools gnupg2 ; pause ;; + 3) + read -p "Имя: " UNAME + read -p "SSH Key: " UKEY + useradd -m -s /bin/bash "$UNAME" + usermod -aG sudo "$UNAME" + mkdir -p /home/$UNAME/.ssh && echo "$UKEY" > /home/$UNAME/.ssh/authorized_keys + chown -R $UNAME:$UNAME /home/$UNAME/.ssh + echo "$UNAME ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/$UNAME + echo -e "${GREEN}Пользователь $UNAME готов.${NC}" ; pause ;; + 4) setup_ssh_security ; pause ;; + 5) install_audit ; pause ;; + 6) curl -fsSL https://get.docker.com | sh ; apt install -y docker-compose-plugin ; pause ;; + 7) wget https://git.io/wireguard -O wg.sh && bash wg.sh ; pause ;; + 8) install_openvpn_angristan ; pause ;; + 9) apt install -y glances ; pause ;; + 10) apt install -y fail2ban ; systemctl enable --now fail2ban ; pause ;; + 11) apt-get purge $(dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | head -n -1) -y ; apt autoremove -y ; pause ;; + 0) break ;; + esac +done