Служба передачи файлов отказывает при входе: каталог доступен для записи
Служба передачи файлов запирает пользователя в его каталоге и отказывается работать, если этот каталог доступен для записи самому пользователю. Это защита от обхода ограничения, а не ошибка настройки. Правильное устройство — каталог только для чтения с подкаталогом для записи внутри.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Домашний каталог доступен для записи владельцу
Защита не разрешает такую схему: из каталога, доступного для записи, ограничение можно обойти.
-
Ограничение отключают вместо правильной настройки
Отключение защиты убирает сообщение, но открывает пользователю всю файловую систему.
-
Пассивный режим не работает через брандмауэр
Вход проходит, а список файлов не приходит: диапазон портов пассивного режима закрыт.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Сообщения службы о входах и ограничении каталога.
journalctl -u vsftpd -n 30 --no-pagerПрава домашнего каталога пользователя.
sudo ls -ld /home/ftpuserНастройки ограничения каталога и пассивного режима.
sudo grep -iE "chroot|pasv" /etc/vsftpd.confРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Защита не разрешает такую схему: из каталога, доступного для записи, ограничение можно обойти.
- Как проверить
-
Посмотрите права домашнего каталога и сообщение службы.
sudo ls -ld /home/ftpuser 2>/dev/null journalctl -u vsftpd -n 20 --no-pager | grep -i chroot
- Как исправить
-
Сделайте домашний каталог доступным только для чтения, а внутри создайте подкаталог для загрузки с правом записи. Это правильная схема, а не обход защиты.
sudo chmod a-w /home/ftpuser && sudo mkdir -p /home/ftpuser/upload && sudo chown ftpuser /home/ftpuser/upload
- Почему происходит
- Отключение защиты убирает сообщение, но открывает пользователю всю файловую систему.
- Как проверить
-
Посмотрите, не отключена ли защита.
sudo grep -iE "allow_writeable_chroot|chroot_local_user" /etc/vsftpd.conf 2>/dev/null
- Как исправить
- Не отключайте защиту на доступной извне службе. Схема с каталогом только для чтения решает задачу без потери ограничения.
- Почему происходит
- Вход проходит, а список файлов не приходит: диапазон портов пассивного режима закрыт.
- Как проверить
-
Посмотрите диапазон портов и правила.
sudo grep -iE "pasv_min_port|pasv_max_port|pasv_address" /etc/vsftpd.conf 2>/dev/null sudo ss -tlnp | grep vsftpd
- Как исправить
- Задайте узкий диапазон портов пассивного режима и откройте именно его. Без этого клиенты будут зависать на получении списка файлов.
Пример вывода
Домашний каталог доступен для записи владельцу. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
vsftpd[7500]: [ftpuser] FAIL LOGIN: Client "192.0.2.10"
vsftpd[7500]: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
$ sudo ls -ld /home/ftpuser
drwxr-xr-x 3 ftpuser ftpuser 4096 Sep 15 17:50 /home/ftpuser
Связанные ошибки
- Permission denied в журнале службы Отказ в доступе у службы systemd: права на файл, каталоги по пути, пользователь службы, параметры изоляции, SELinux и AppArmor.
- status=210/CHROOT в systemd Код 210/CHROOT: не удалось сменить корневой каталог из RootDirectory= или подключить образ RootImage=.
- sshd: отказ аутентификации из-за прав на файлы Вход по ключу не работает: слишком широкие права на домашний каталог или authorized_keys. Разбор через журнал sshd.
- AppArmor: apparmor="DENIED" в журнале ядра Профиль AppArmor запретил операцию: как прочитать запись, найти профиль и поправить его правильно.
- Caddy не занимает порты 80 и 443 без прав Служба падает при открытии слушателя: нет возможности занимать привилегированные порты.
- Configuration file is marked executable Предупреждение о правах: unit-файл помечен исполняемым. Откуда берётся и почему это стоит исправить.
- Configuration file is marked world-inaccessible Предупреждение о правах на unit-файл: служба работает, но файл недоступен для чтения другим.
- Interactive authentication required при управлении службой systemctl требует аутентификации: обращение от непривилегированного пользователя через polkit. Как разрешить точечно.
Где встречается чаще всего
Источники
-
vsftpd.conf(5)
Ограничение каталога пользователя и требования к правам. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено домашним каталогом с правом записи для владельца.