From cbb3db2364b5206a5fd2d44c1c5bd36fb38eb844 Mon Sep 17 00:00:00 2001 From: hosh1 Date: Thu, 14 Aug 2025 08:30:37 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20=D1=81=20?= =?UTF-8?q?=D0=91=D0=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- install.sh | 147 ++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 130 insertions(+), 17 deletions(-) diff --git a/install.sh b/install.sh index 82eb3c7..7ec3fd9 100644 --- a/install.sh +++ b/install.sh @@ -909,6 +909,7 @@ EOF log_step "Настройка базы данных MariaDB..." + # Проверка и запуск MariaDB if ! systemctl is-active --quiet mariadb; then log_info "MariaDB не запущен. Попытка запуска..." systemctl start mariadb @@ -919,39 +920,151 @@ EOF fi fi + CURRENT_USER=$(logname 2>/dev/null || whoami) + log_info "Текущий пользователь: $CURRENT_USER" + + # Функция для выполнения SQL с подробным логированием + execute_sql() { + local user="$1" + local password="$2" + local sql_script="$3" + local connection_params="" + + if [[ -n "$password" ]]; then + connection_params="-u $user -p$password" + else + connection_params="-u $user" + fi + + log_info "Попытка выполнения SQL как пользователь: $user" + + # Создаем временный файл для вывода ошибок + local error_file="/tmp/mysql_error_$$.log" + + if echo "$sql_script" | mysql $connection_params 2>"$error_file"; then + rm -f "$error_file" + return 0 + else + log_error "Ошибка выполнения SQL:" + cat "$error_file" >&2 + rm -f "$error_file" + return 1 + fi + } + + # Функция для проверки подключения + test_connection() { + local user="$1" + local password="$2" + local connection_params="" + + if [[ -n "$password" ]]; then + connection_params="-u $user -p$password" + else + connection_params="-u $user" + fi + + mysql $connection_params -e "SELECT 1;" >/dev/null 2>&1 + } + log_info "Выполнение базовой настройки безопасности MariaDB..." - if mysql -u root -e "SELECT 1;" >/dev/null 2>&1; then - log_info "Первичная настройка MariaDB (подключение без пароля доступно)..." - - MYSQL_SECURE_SCRIPT="/tmp/mysql_secure.sql" - cat > "$MYSQL_SECURE_SCRIPT" << MYSQL_SCRIPT -ALTER USER 'root'@'localhost' IDENTIFIED BY '$DB_PASSWORD'; + # Сценарий 1: Подключение как root без пароля + if test_connection "root" ""; then + log_info "Подключение как 'root' без пароля успешно. Настраиваем root-пользователя..." + + SQL_SCRIPT=" +SET sql_mode = ''; +UPDATE mysql.user SET authentication_string = PASSWORD('$DB_PASSWORD') WHERE User = 'root' AND Host = 'localhost'; +UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE User = 'root' AND Host = 'localhost'; DELETE FROM mysql.user WHERE User=''; DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1'); DROP DATABASE IF EXISTS test; DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%'; +FLUSH PRIVILEGES; CREATE DATABASE IF NOT EXISTS ALTCor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; GRANT ALL PRIVILEGES ON ALTCor.* TO 'root'@'localhost'; -FLUSH PRIVILEGES; -MYSQL_SCRIPT - - if mysql -u root < "$MYSQL_SECURE_SCRIPT" >/dev/null 2>&1; then +FLUSH PRIVILEGES;" + + if execute_sql "root" "" "$SQL_SCRIPT"; then log_success "Первичная настройка MariaDB выполнена успешно" else log_error "Не удалось выполнить первичную настройку MariaDB" - rm -f "$MYSQL_SECURE_SCRIPT" exit 1 fi - rm -f "$MYSQL_SECURE_SCRIPT" + + # Сценарий 2: Подключение как root с паролем + elif test_connection "root" "$DB_PASSWORD"; then + log_info "MariaDB уже настроен с текущим паролем для root..." - elif mysql -u root -p"$DB_PASSWORD" -e "SELECT 1;" >/dev/null 2>&1; then - log_info "MariaDB уже настроен с текущим паролем..." - mysql -u root -p"$DB_PASSWORD" -e "CREATE DATABASE IF NOT EXISTS ALTCor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" >/dev/null 2>&1 - log_success "База данных ALTCor создана/проверена" + SQL_SCRIPT="CREATE DATABASE IF NOT EXISTS ALTCor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" + if execute_sql "root" "$DB_PASSWORD" "$SQL_SCRIPT"; then + log_success "База данных ALTCor создана/проверена" + else + log_error "Не удалось создать базу данных ALTCor" + exit 1 + fi + + # Сценарий 3: Подключение как текущий пользователь без пароля + elif test_connection "$CURRENT_USER" ""; then + log_info "Подключение как '$CURRENT_USER' без пароля успешно." + + # Проверяем права пользователя + if mysql -u "$CURRENT_USER" -e "SELECT User FROM mysql.user WHERE User='root';" >/dev/null 2>&1; then + log_info "Пользователь '$CURRENT_USER' имеет доступ к системным таблицам. Настраиваем root..." + + SQL_SCRIPT=" +SET sql_mode = ''; +UPDATE mysql.user SET authentication_string = PASSWORD('$DB_PASSWORD') WHERE User = 'root' AND Host = 'localhost'; +UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE User = 'root' AND Host = 'localhost'; +DELETE FROM mysql.user WHERE User=''; +DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1'); +DROP DATABASE IF EXISTS test; +DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%'; +FLUSH PRIVILEGES; +CREATE DATABASE IF NOT EXISTS ALTCor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; +GRANT ALL PRIVILEGES ON ALTCor.* TO 'root'@'localhost'; +FLUSH PRIVILEGES;" + + if execute_sql "$CURRENT_USER" "" "$SQL_SCRIPT"; then + log_success "Первичная настройка MariaDB выполнена успешно" + else + log_error "Не удалось выполнить первичную настройку MariaDB" + exit 1 + fi + else + log_info "Пользователь '$CURRENT_USER' не имеет прав администратора. Создаем только базу данных..." + + SQL_SCRIPT="CREATE DATABASE IF NOT EXISTS ALTCor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" + + if execute_sql "$CURRENT_USER" "" "$SQL_SCRIPT"; then + log_success "База данных ALTCor создана" + else + log_error "Не удалось создать базу данных ALTCor" + exit 1 + fi + fi + + # Сценарий 4: Подключение как текущий пользователь с паролем + elif test_connection "$CURRENT_USER" "$DB_PASSWORD"; then + log_info "MariaDB уже настроен с текущим паролем для пользователя '$CURRENT_USER'..." + + SQL_SCRIPT="CREATE DATABASE IF NOT EXISTS ALTCor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" + + if execute_sql "$CURRENT_USER" "$DB_PASSWORD" "$SQL_SCRIPT"; then + log_success "База данных ALTCor создана/проверена" + else + log_error "Не удалось создать базу данных ALTCor" + exit 1 + fi + else - log_error "Не удалось подключиться к MariaDB. Попробуйте проверить пароль root вручную." + log_error "Не удалось подключиться к MariaDB." + log_info "Попробуйте выполнить настройку вручную:" + log_info "1. sudo mysql_secure_installation" + log_info "2. mysql -u root -p" + log_info "3. Проверьте состояние службы: systemctl status mariadb" exit 1 fi