diff --git a/ib.sh b/ib.sh index 61dd9ad..8d614d1 100644 --- a/ib.sh +++ b/ib.sh @@ -264,23 +264,182 @@ status_all() { echo "📅 Время: $(date)" pause } +install_smb_interactive() { + echo "${GREEN}🗄️ SAMBA/SMB СЕРВЕР${NC}" + pkg_install samba smbclient cifs-utils + + # Создание папок для шар + mkdir -p /srv/samba + + while true; do + echo "" + echo "${YELLOW}➕ НОВАЯ ШАРА${NC}" + read -p "Путь к папке (ex: /srv/samba/docs): " SHARE_PATH + [ -z "$SHARE_PATH" ] && break + + read -p "Имя шары (ex: docs): " SHARE_NAME + read -p "Пользователи (ex: user1,user2 или guest): " SHARE_USERS + + # Создание папки + mkdir -p "$SHARE_PATH" + + if [[ "$SHARE_USERS" == *"guest"* ]]; then + chmod 777 "$SHARE_PATH" + GUEST_OK="yes" + VALID_USERS="" + else + chmod 770 "$SHARE_PATH" + GUEST_OK="no" + VALID_USERS="valid users = $SHARE_USERS" + fi + + # Добавление в smb.conf + cat >> /etc/samba/smb.conf << EOF + +[${SHARE_NAME}] + path = $SHARE_PATH + browsable = yes + writable = yes + guest ok = $GUEST_OK + read only = no + create mask = 0664 + directory mask = 0775 + $VALID_USERS +EOF + + echo "${GREEN}✅ Шара '$SHARE_NAME' → '$SHARE_PATH'${NC}" + done + + # Базовый smb.conf + cat > /etc/samba/smb.conf << 'EOF' +[global] + workgroup = WORKGROUP + server string = %h server (Samba, v5.2) + security = user + map to guest = bad user + socket options = TCP_NODELAY IPTOS_LOWDELAY +EOF + + service_restart smbd nmbd + service_enable smbd nmbd + + echo "${GREEN}✅ SMB перезапущен!${NC}" + echo "📡 IP: $(hostname -I | awk '{print $1}')" + echo "📁 Подключение: //IP/share_name" + pause +} + +setup_disks_advanced() { + clear + echo "${GREEN}💾 НОВЫЕ ДИСКИ${NC}" + + # Список дисков с размерами + echo "==============================================" + echo "ДИСКИ (непримонтированные):" + lsblk -dno NAME,SIZE,TYPE,ROTA | grep disk | while read name size type rota; do + disk="/dev/$name" + if ! mount | grep -q "$disk"; then + echo " 📦 $disk [$size] ($(blockdev --getsize64 "$disk" | numfmt --to=iec))" + fi + done + + echo "==============================================" + read -p "Диск для настройки (/dev/sdb): " SELECTED_DISK + + if [ -z "$SELECTED_DISK" ] || [ ! -b "$SELECTED_DISK" ]; then + echo "${RED}❌ Диск не найден${NC}" + pause + return + fi + + echo "" + echo "${YELLOW}⚙️ НАСТРОЙКА $SELECTED_DISK${NC}" + echo "1) ext4 (Linux)" + echo "2) xfs (RHEL/CentOS)" + echo "3) btrfs (современный)" + echo "4) ntfs (Windows совместимость)" + read -p "Файловая система: " FS_CHOICE + + case $FS_CHOICE in + 1) FS="ext4";; + 2) FS="xfs";; + 3) FS="btrfs";; + 4) FS="ntfs";; + *) echo "Отмена"; return;; + esac + + # Форматирование + echo "${YELLOW}⚠️ ВНИМАНИЕ: Данные будут УДАЛЕНЫ!${NC}" + read -p "ПРОДОЛЖИТЬ? (y/N): " CONFIRM + [ "$CONFIRM" != "y" ] && return + + parted "$SELECTED_DISK" --script mklabel gpt + parted "$SELECTED_DISK" --script mkpart primary "$FS" 1MiB 100% + partprobe "$SELECTED_DISK" + sleep 3 + + PARTITION="${SELECTED_DISK}1" + + case $FS in + ext4) mkfs.ext4 -F "$PARTITION" ;; + xfs) mkfs.xfs -f "$PARTITION" ;; + btrfs) mkfs.btrfs -f "$PARTITION" ;; + ntfs) mkfs.ntfs -Q "$PARTITION" ;; + esac + + # Монтирование + echo "" + read -p "Точка монтирования (ex: /srv/data): " MOUNT_POINT + MOUNT_POINT=${MOUNT_POINT:-/srv/data} + + mkdir -p "$MOUNT_POINT" + mount "$PARTITION" "$MOUNT_POINT" + + # FSTAB + UUID=$(blkid -s UUID -o value "$PARTITION") + case $FS in + ntfs) FSTAB_OPTS="defaults,uid=1000,gid=1000" ;; + *) FSTAB_OPTS="defaults" ;; + esac + + echo "UUID=$UUID $MOUNT_POINT $FS $FSTAB_OPTS 0 2" >> /etc/fstab + + # Проверка + mount -a + df -h "$MOUNT_POINT" + + echo "${GREEN}✅ $PARTITION → $MOUNT_POINT ($FS)${NC}" + echo "📝 Добавлено в /etc/fstab" + pause +} + # --- ГЛАВНОЕ МЕНЮ --- detect_os while true; do clear - echo "==============================================" - echo " 🚀 SERVER ULTIMATE v1.2.1 ($OS_ID $OS_VERSION) 🚀" - echo "==============================================" - echo "1) 📛 Hostname 2) 🌍 Часовой пояс + база" - echo "3) 👤 Пользователь 4) 🔒 SSH безопасность" - echo "5) 📊 Аудит + ротация 6) 🐳 Docker + Compose" - echo "7) 🌐 WireGuard 8) 🔐 OpenVPN (Angristan)" - echo "9) 📈 Мониторинг 10) 🛡️ Fail2Ban" - echo "11) 🧹 Очистка пакетов 12) 🔄 Автообновления" - echo "S) 📊 Статус всех сервисов 0) ❌ Выход" - echo "==============================================" + printf "==============================================\n" + printf " 🚀 SERVER ULTIMATE v5.2 (%s %s) 🚀\n" "$OS_ID" "$OS_VERSION" + printf "==============================================\n" + printf "1) 📛 Hostname \n" + printf "2) 🌍 Часовой пояс + база \n" + printf "3) 👤 Пользователь \n" + printf "4) 🔒 SSH безопасность \n" + printf "5) 📊 Аудит \n" + printf "6) 🐳 Docker \n" + printf "7) 🌐 WireGuard \n" + printf "8) 🔐 OpenVPN \n" + printf "9) 📈 Мониторинг \n" + printf "10) 🛡️ Fail2Ban \n" + printf "11) 🧹 Очистка \n" + printf "12) 🔄 Автообновления \n" + printf "13) 🗄️ SAMBA (шары+пользователи) \n" + printf "14) 💾 Диски (выбор+форматирование)\n" + printf "15) 📈 Расширение дисков \n" + printf "S) 📊 Статус \n" + printf "0) ❌ Выход \n" + printf "==============================================\n" read -p "► " opt case $opt in @@ -296,6 +455,9 @@ while true; do 10) pkg_install fail2ban; service_enable fail2ban; pause ;; 11) $PKG_MGR autoremove -y && $PKG_MGR autoclean -y; pause ;; 12) install_unattended_upgrades ;; + 13) install_smb_interactive ;; + 14) setup_disks_advanced ;; + 15) extend_disk_space ;; [Ss]) status_all ;; 0) break ;; *) echo "❌ Неверный пункт!"; sleep 1 ;;