#Как распознать проблему и когда применять инструкции
SFTP открывает каталог, но загрузка файла завершается Permission denied или Failure. Нужно разделить права каталога, ограничения chroot, свободное место и особенности файлового сервера. Уточните модель/сборку системы, наличие резервной копии и способ восстановить доступ, прежде чем применять действия.
#Причины и признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Нет права на записьВладелец/группа и разрешения каталога не подходят учётной записи | put возвращает Permission denied | Смотрите соответствующий диагностический шаг ниже: проверяйте именно этот признак перед изменением настроек. |
| Chroot сделан для безопасностиКорневой каталог chroot не должен быть записываемым пользователем в типичной конфигурации OpenSSH | Можно читать, но нельзя писать в корень jail | Смотрите соответствующий диагностический шаг ниже: проверяйте именно этот признак перед изменением настроек. |
| Файловая система доступна только для чтенияМонтирование read-only или закончилось место/квота | Даже владелец каталога не может создать файл | Смотрите соответствующий диагностический шаг ниже: проверяйте именно этот признак перед изменением настроек. |
#Подробная проверка и безопасное решение
- Шаг 1. Уточните именно удалённый каталогВ SFTP после входа введите
pwd,ls -la, затемlpwd. Первые команды относятся к серверу, последняя показывает локальную папку. Не путайте путь на компьютере пользователя с путём на сервере.
- Шаг 2. Повторите запись безопасным тестомСоздайте на локальном компьютере маленький текстовый файл без личных данных и попробуйте его загрузить командой
put. Если записать нельзя, сохраните точный текст ошибки; чужие файлы не перезаписывайте. - Дополнительная команда по темеLinux · Терминал (Bash)КомандаОткройте терминал той машины, которая названа в шаге; команда содержит примерные имена/пути. Подставьте свои значения, сравните вывод с ожидаемым результатом и при ошибке выясните причину прежде, чем продолжать.
printf "SFTP test\n" > /tmp/sftp-test.txt
- Шаг 3. Проверьте права на сервереПри наличии обычного SSH-доступа откройте терминал на сервере под тем же пользователем. Просмотрите владельца, группу и права именно нужной папки. Без SSH попросите администратора сделать проверку.
- Дополнительная команда по темеLinux · Терминал (Bash)КомандаОткройте терминал той машины, которая названа в шаге; команда содержит примерные имена/пути. Подставьте свои значения, сравните вывод с ожидаемым результатом и при ошибке выясните причину прежде, чем продолжать.
ls -ld /srv/sftp/uploads
- Шаг 4. Проверьте разрешения на каждом родительском каталогеСерверная команда namei показывает, где отсутствует право прохода x. Укажите фактический путь; менять chmod -R нельзя, это сломает разграничение доступа.Linux · Терминал (Bash)КомандаОткройте терминал той машины, которая названа в шаге; команда содержит примерные имена/пути. Подставьте свои значения, сравните вывод с ожидаемым результатом и при ошибке выясните причину прежде, чем продолжать.
namei -l /srv/sftp/uploads
- Шаг 5. Уточните ограничения ChrootDirectory и ForceCommandНа сервере администратор проверяет применённый Match и ChrootDirectory. В конфигурации chroot корневая папка должна удовлетворять требованиям OpenSSH; рабочую папку для записи создают внутри, не делают корень jail доступным на запись.
- Выполняется в терминале сервера с правами администратора; требуется разрешение владельцаLinux · Терминал (Bash)КомандаНужен sudoВыполняется в терминале сервера с правами администратора; требуется разрешение владельца. Уточните фактические адреса и имена, прочитайте вывод и не выполняйте действия, если среда отличается от описанной.
sudo sshd -T | grep -E "^(chrootdirectory|forcecommand|subsystem) "
- Шаг 6. Проверьте свободное место и режим томаНа сервере для фактического каталога узнайте наличие места и режим монтирования; при квоте на пользователя место может быть, но запись всё равно запрещена. Ничего не форматируйте.
- Дополнительная команда по темеLinux · Терминал (Bash)КомандаОткройте терминал той машины, которая названа в шаге; команда содержит примерные имена/пути. Подставьте свои значения, сравните вывод с ожидаемым результатом и при ошибке выясните причину прежде, чем продолжать.
df -h /srv/sftp/uploads
- Шаг 7. Исправляйте адресно и повторите загрузкуАдминистратор должен назначить запись только согласованной группе/пользователю на выделенный подкаталог, не расширяя права всего
/srv. После согласованной правки повторитеput /tmp/sftp-test.txtв нужный удалённый каталог и удалите лишь свой тестовый файл.
#Как проверить результат и что делать, если не помогло
Тестовый файл можно загрузить и прочитать под нужной учётной записью, а другие пользователи не получили лишних прав. При запрете записи в корень chroot используйте специально выделенный writable-подкаталог. Если симптомы не исчезли, сохраните точное сообщение об ошибке и выполненные проверки; не повторяйте опасные процедуры циклически.