Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

> Правила форума

Раздел для общения на любые темы, для которых не нашлось места в остальных разделах. Если Вашу тему можно отнести по смыслу к другому разделу, лучше создайте её там, иначе Вас накажут.

В данном форуме немного понижены требования к Общим правилам форума, а именно:
1. Информативность темы
2. Отходить от первоначального смысла темы

!
В разделе запрещено создавать темы связанные с раскруткой игровых серверов

HestiaCP - Shared Hosting (часть 1)

, ограничение фтп-пользователей
Статус пользователя Gecko
сообщение 19.8.2025, 12:15
Сообщение #1
Стаж: 7 лет 4 месяца

Сообщений: 1247
Благодарностей: 518
Полезность: 345

HestiaCP - Shared Hosting (часть 1) - ограничение фтп-пользователей
Данный патч ограничивает количество фтп-пользователей для определённого пакета (тарифного плана).

Автор патча: Gecko
Совместимость: v1.9.4 (должно работать на более старых/новых версиях панели)



Далее все действия в терминале выполняем с правами суперпользователя (root)

Создаём конфигурационный файл:
Код
mkdir -p /etc/hst_conf && cat > /etc/hst_conf/pkg-ftp-limits.conf <<'EOF'
#----------------------------------------------------------
#   FTP limits for HestiaCP packages                                        
#   Format: PACKAGE=LIMIT                                            
#   LIMIT = 0  → disabled                                                                     
#----------------------------------------------------------
default=5

EOF


Ручная установка патча

В конфигурационном файле:
Код
micro /etc/hst_conf/[b]pkg-ftp-limits.conf

Нужно прописать (с каждой новой строки) названия пакетов для которых будут применены лимиты.
Пакеты которые не прописаны в конфигурационном файле позволят пользователям создавать неограниченное количество фтп-учёток.

Пример:
Цитата
default=5 #Разрешено пять фтп-пользователь в пакете default
start = 0 #Запрещено создавать фтп-пользователей в пакете start
start = 5 #Разрешено создать пять фтп-пользователей в пакете start


Сделайте резервную копию файлов которые будут пропатчены:
Код
cp /usr/local/hestia/bin/v-add-web-domain-ftp /usr/local/hestia/bin/v-add-web-domain-ftp.bak
cp /usr/local/hestia/web/edit/web/index.php /usr/local/hestia/web/edit/web/index.php.bak


Найти в файле:
Код
micro /usr/local/hestia/bin/v-add-web-domain-ftp


Этот блок кода:
Код
if [ -n "$check_ftp_user" ] && [ "$FTP_USER" != "$ftp_user" ]; then
    echo "Error: ftp user $ftp_user already exists"
    log_event "$E_EXISTS" "$ARGUMENTS"
    exit "$E_EXISTS"
fi


И ниже добавить следующий блок кода:
Код
#--------------------------------------------------------------------
#   Custom FTP limit check for selected packages  
#--------------------------------------------------------------------

CONFIG_FILE="/etc/hst_conf/pkg-ftp-limits.conf"
declare -A PACKAGE_FTP_LIMITS

if [ -f "$CONFIG_FILE" ]; then
    while IFS='=' read -r pkg limit; do
        [[ -z "$pkg" || "$pkg" =~ ^[[:space:]]*# ]] && continue
        PACKAGE_FTP_LIMITS["$pkg"]="$limit"
    done < "$CONFIG_FILE"
fi

USER_PACKAGE=$($BIN/v-list-user "$user" | awk -F': *' '/^PACKAGE:/{print $2}' | tr -d '[:space:]')

if [[ -v PACKAGE_FTP_LIMITS["$USER_PACKAGE"] ]]; then
    FTP_LIMIT=${PACKAGE_FTP_LIMITS[$USER_PACKAGE]}
else
    FTP_LIMIT=-1
fi

if [ "$FTP_LIMIT" -eq 0 ]; then
    ERR=${E_LIMIT:-${E_EXISTS:-9}}
    log_event "$ERR" "$ARGUMENTS"
    echo "Error: FTP creation is disabled for package $USER_PACKAGE"
    exit "$ERR"
fi

if [ "$FTP_LIMIT" -gt 0 ]; then
    EXISTING_FTP_COUNT=$(getent passwd | awk -F: -v home="$HOMEDIR/$user/web" '$6 ~ "^"home {c++} END{print c+0}')
    if [ "$EXISTING_FTP_COUNT" -ge "$FTP_LIMIT" ]; then
        ERR=${E_LIMIT:-${E_EXISTS:-9}}
        log_event "$ERR" "$ARGUMENTS"
        echo "Error: FTP limit reached for package $USER_PACKAGE"
        exit "$ERR"
    fi
fi

#Resolve/validate password BEFORE useradd
if [ -n "$password" ] && [ -f "$password" ]; then
    password="$(head -n1 -- "$password" | tr -d '\r\n')"
fi

if [ -z "${password//[[:space:]]/}" ]; then
    echo "Error: Empty FTP password is not allowed"
    log_event "$E_INVALID" "$ARGUMENTS"
    exit "$E_INVALID"
fi


Найти в файле:
Код
micro /usr/local/hestia/web/edit/web/index.php


Этот блок кода:
Код
                    exec(
                        HESTIA_CMD .
                            "v-add-web-domain-ftp " .
                            $user .
                            " " .
                            quoteshellarg($v_domain) .
                            " " .
                            $v_ftp_user .
                            " " .
                            $v_ftp_password .
                            " " .
                            $v_ftp_path,
                        $output,
                        $return_var,
                    );
                    check_return_code($return_var, $output);


И ниже добавить:
Код
                    if ($return_var !== 0) {
                        if (empty(trim(@file_get_contents($v_ftp_password)))) {
                            $_SESSION['error_msg'] = "Пароль для FTP не может быть пустым";
                        } else {
                            $_SESSION['error_msg'] = "Задействовано ограничение на создание FTP-пользователей";
                        }
                        if (is_file($v_ftp_password)) {
                            unlink($v_ftp_password);
                        }
                        header("Location: " . $_SERVER['REQUEST_URI']);
                        exit;
                    }


Автоматическая установка патча

Скачайте скрипт на сервер и распакуйте:
[attachment=55673:hst_ftplimits.sh.zip]
Код
unzip hst_ftplimits.sh.zip && chmod +x hst_ftplimits.sh

Запустите установку патча:
Код
./hst_ftplimits.sh


Опционально делаем симлинки для основных конфигурационных файлов ПУ:
Код
ln -sfn /usr/local/hestia/conf /etc/hst_conf/conf && \
ln -sfn /usr/local/hestia/data/packages /etc/hst_conf/packages && \
ln -sfn /etc/nginx/conf.d/domains /etc/hst_conf/domains && \
ln -sfn /usr/local/hestia/data /etc/hst_conf/data


Теперь все пакеты доступны по адресу: /etc/hst_conf/packages
Все настройки панели доступны по адресу: /etc/hst_conf/conf
Конфиги сайтов тут: /etc/hst_conf/domains
Тут все основные данные ПУ: /etc/hst_conf/data
Конфигурационный файл лимита фтп-пользователей: /etc/hst_conf/pkg-ftp-limits.conf

Прикрепленное изображение

Отредактировал: Gecko, - 24.8.2025, 12:04


Не отвечаю на ЛС.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: