Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 5d3d59e1b2 |
164
ib.sh
164
ib.sh
@@ -1,84 +1,114 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# --- НАСТРОЙКИ ---
|
GREEN='\033[0;32m'
|
||||||
USERNAME=""
|
RED='\033[0;31m'
|
||||||
USER_PASSWORD=""
|
YELLOW='\033[1;33m'
|
||||||
SSH_PUB_KEY=""
|
NC='\033[0m'
|
||||||
|
|
||||||
# Проверка прав root
|
|
||||||
if [ "$EUID" -ne 0 ]; then
|
if [ "$EUID" -ne 0 ]; then
|
||||||
echo "Пожалуйста, запустите скрипт от имени root (sudo)."
|
echo -e "${RED}Запустите скрипт от имени root!${NC}"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 1. Определение дистрибутива и имени службы SSH
|
pause(){
|
||||||
if [ -f /etc/os-release ]; then
|
read -p "Нажмите [Enter], чтобы продолжить..." fackEnterKey
|
||||||
. /etc/os-release
|
}
|
||||||
OS=$ID
|
|
||||||
else
|
|
||||||
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
|
|
||||||
fi
|
|
||||||
|
|
||||||
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-ключа
|
install_audit() {
|
||||||
USER_HOME=$(eval echo "~$USERNAME")
|
echo -e "${GREEN}Установка и настройка аудита (auditd)...${NC}"
|
||||||
mkdir -p "$USER_HOME/.ssh"
|
apt update && apt install -y auditd audispd-plugins
|
||||||
echo "$SSH_PUB_KEY" > "$USER_HOME/.ssh/authorized_keys"
|
# Базовые правила аудита (логирование изменений в sudoers, passwd, и SSH)
|
||||||
chown -R "$USERNAME:$USERNAME" "$USER_HOME/.ssh"
|
cat > /etc/audit/rules.d/audit.rules << EOF
|
||||||
chmod 700 "$USER_HOME/.ssh"
|
-w /etc/sudoers -p wa -k scope
|
||||||
chmod 600 "$USER_HOME/.ssh/authorized_keys"
|
-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
|
setup_ssh_security() {
|
||||||
SUDOERS_FILE="/etc/sudoers.d/$USERNAME"
|
if ! check_other_users; then pause; return; fi
|
||||||
echo "$USERNAME ALL=(ALL) NOPASSWD: ALL" > "$SUDOERS_FILE"
|
|
||||||
chmod 440 "$SUDOERS_FILE"
|
|
||||||
|
|
||||||
# 5. Настройка sshd_config
|
echo -e "${YELLOW}ВНИМАНИЕ: Сейчас будет произведена настройка безопасности SSH.${NC}"
|
||||||
SSHD_CONFIG="/etc/ssh/sshd_config"
|
read -p "Отключить вход по ПАРОЛЮ и оставить только КЛЮЧИ? (y/n): " SSH_CONFIRM
|
||||||
[ -f "$SSHD_CONFIG" ] && cp "$SSHD_CONFIG" "${SSHD_CONFIG}.bak" # Бэкап
|
|
||||||
|
if [ "$SSH_CONFIRM" == "y" ]; then
|
||||||
sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' "$SSHD_CONFIG"
|
SSHD_CONFIG="/etc/ssh/sshd_config"
|
||||||
sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' "$SSHD_CONFIG"
|
cp "$SSHD_CONFIG" "${SSHD_CONFIG}.bak"
|
||||||
|
sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' "$SSHD_CONFIG"
|
||||||
# 6. Универсальный перезапуск службы
|
sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' "$SSHD_CONFIG"
|
||||||
restart_service() {
|
sshd -t && systemctl restart ssh
|
||||||
if command -v systemctl >/dev/null 2>&1; then
|
echo -e "${GREEN}SSH защищен. Вход под root и по паролю запрещен.${NC}"
|
||||||
systemctl restart "$1"
|
|
||||||
elif command -v service >/dev/null 2>&1; then
|
|
||||||
service "$1" restart
|
|
||||||
else
|
else
|
||||||
/etc/init.d/"$1" restart
|
echo "Настройка SSH отменена."
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
echo "Проверка конфигурации SSH..."
|
install_openvpn_angristan() {
|
||||||
if sshd -t; then
|
echo -e "${GREEN}Установка OpenVPN (by Angristan)...${NC}"
|
||||||
restart_service "$SSH_SERVICE"
|
curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh
|
||||||
echo "Настройка успешно завершена!"
|
chmod +x openvpn-install.sh
|
||||||
else
|
./openvpn-install.sh
|
||||||
echo "Ошибка в конфигурации SSH! Изменения не применены."
|
}
|
||||||
mv "${SSHD_CONFIG}.bak" "$SSHD_CONFIG"
|
|
||||||
exit 1
|
# --- МЕНЮ ---
|
||||||
fi
|
|
||||||
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user