gannicus.ЗАПИСКИ ПРОГРАММИСТА
Linux · 2018-06-17

ProFTPD: как разобрать ошибку Append/Restart not permitted

Прерванная загрузка большого файла, запрет возобновления и проверка результата: от сообщения FTP-клиента до решения на сервере.

В этой записи
  1. Как выглядела проблема
  2. Сначала уточните направление и протокол
  3. Что проверить до правки конфигурации
  4. Что означает AllowStoreRestart
  5. Как применить и проверить

Как выглядела проблема

В июне 2018 года автор загружал архив размером 11 ГБ. После обрыва соединения FTP-клиент не смог продолжить передачу и показал сообщение 451 Append/Restart not permitted, try again. Сервер использовал ProFTPD на CentOS 7.

Окно FTP-клиента с сообщением 451 Append/Restart not permitted, try again
Сообщение из исходной заметки: передача не возобновляется после обрыва соединения.

Сам код 451 не доказывает, что сломалась сеть или закончился диск. Важны полный текст ответа, команда клиента и серверный журнал. В этом случае предмет проверки — возможность продолжить запись уже начатого файла.

Сначала уточните направление и протокол

  • Upload: файл передаётся с компьютера на сервер. Это запись; настройка её возобновления — AllowStoreRestart.
  • Download: файл скачивается с сервера. Для него ProFTPD имеет отдельную настройку AllowRetrieveRestart.
  • SFTP: другой протокол. Похожий интерфейс клиента не делает параметры FTP-сервера применимыми к SSH-серверу.

Что проверить до правки конфигурации

  1. Зафиксируйте путь назначения, имя аккаунта, время ошибки и размер оставшейся части файла. Проверьте, что частичный файл действительно принадлежит нужному пользователю.
  2. Найдите действующую конфигурацию ProFTPD и её включаемые файлы. Путь /etc/proftpd.conf из старой заметки не универсален для всех установок.
  3. Проверьте правила именно того virtual host и каталога, в который пишет клиент. Общий параметр может отличаться от настройки в более узком контексте.
  4. Посмотрите права записи, свободное место и журнал отказа. Не исправляйте любой отказ одним расширением FTP-разрешений.

Что означает AllowStoreRestart

По документации модуля mod_xfer, AllowStoreRestart разрешает или запрещает продолжение прерванной загрузки на сервер. По умолчанию оно запрещено. Для закрытого каталога конкретного аутентифицированного аккаунта администратор может рассмотреть эту настройку, когда докачка действительно нужна.

# Пример фрагмента для обсуждения с администратором.
# Путь условный: он должен совпадать с реальным закрытым каталогом.
<Directory /srv/ftp/private-upload>
  AllowStoreRestart on
</Directory>

Этот фрагмент не создаёт каталог и не настраивает пользователей или права сам по себе. Он не предназначен для анонимного общего incoming-каталога: возможность продолжить чужой файл может позволить изменить его содержимое. Разрешение перезаписи через AllowOverwrite — отдельный вопрос; не включайте его автоматически вместе с докачкой.

Если используется HiddenStores, учитывайте описанное в документации ограничение FTP-команды REST. Изменять сразу несколько связанных параметров без разбора журнала не стоит.

Клиент хранит целый файл, сервер — принятую часть. Продолжение начинается со смещения N только при разрешении сервера.
Дозагрузка передаёт остаток файла с согласованного смещения N.

Как применить и проверить

Сохраните копию изменяемого конфигурационного файла. Используйте способ проверки конфигурации, предусмотренный установленной версией ProFTPD, и заранее запишите способ возврата. Если сервер управляется панелью, выясните, не перезапишет ли она ручную правку. Применение выполняет администратор в подходящее время: старую команду перезапуска не нужно запускать вслепую на другом сервере.

Проверку начните с небольшого тестового файла и отдельного имени: прервите передачу, продолжите её, сравните размер и контрольную сумму исходника с результатом. Только затем возвращайтесь к большому архиву. Сообщение клиента «завершено» полезно, но проверка содержимого надёжнее одной зелёной строки.

Первичный источник: ProFTPD, модуль mod_xfer. Для места на диске и состояния сервера пригодится памятка Linux.