HestiaCP - Shared Hosting (часть 1) - ограничение фтп-пользователей Данный патч ограничивает количество фтп-пользователей для определённого пакета (тарифного плана).
Автор патча: Gecko
Совместимость: v1.9.4 (должно работать на более старых/новых версиях панели)
HestiaCP - Shared Hosting (все статьи)
Далее все действия в терминале выполняем с правами суперпользователя (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
Не отвечаю на ЛС.