Вопрос или проблема
Я хочу настроить vsftpd, чтобы разрешить пользователю (foouser) загружать и создавать директории в /var/www/ с намерением загружать целые вебсайты.
Текущие права доступа:
- Apache работает от имени www-data.
- Корневая папка документа: /var/www/
- Права доступа www-data:www-data для /var/www (рекурсивно).
Шаги, которые уже предприняты:
Создан пользователь: foouser
useradd foouser
Добавлен пользователь foo в группу www-data.
usermod -a -G www-data foouser
Установлена /var/www/ как домашняя директория foouser:
usermod -d /var/www/
Вот мой файл vsftpd.conf:
root@c9e0266eb8c8:/var# cat /etc/vsftpd.conf | grep -v ^#
listen=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chown_uploads=YES
chown_username=www-data
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
Но я все еще не могу загрузить файл:
Команда: USER foouser
Ответ: 331 Пожалуйста, укажите пароль.
Команда: PASS ******
Ответ: 230 Успешный вход в систему.
Статус: Сервер не поддерживает не-ASCII символы.
Статус: Подключено
Статус: Начинается загрузка /home/michael/settings.json
Команда: CWD /var/www
Ответ: 250 Директория успешно изменена.
Команда: TYPE I
Ответ: 200 Переход в бинарный режим.
Команда: PASV
Ответ: 227 Вход в пассивный режим (172,17,0,2,174,22).
Команда: STOR settings.json
Ответ: 553 Не удалось создать файл.
Ошибка: Критическая ошибка передачи файлов
СЕЙЧАС… если я изменю права доступа директории с www-data на foouser:foouser, я смогу загружать без проблем, но это (конечно) сломает apache.
Что я делаю не так?
Правка: Разрешение анонимной загрузки файлов в /var/www/ также будет приемлемо. Это контейнер Docker, поэтому такая небезопасная практика допустима, поскольку это будет использоваться для разработки, а не для продакшена.
Я думаю, вам нужно добавить конфигурации пассивного режима в ваш файл ‘/etc/vsftpd.conf’, так как ваше соединение переходит в пассивный режим. Ниже приведены конфигурации.
# Дополнительная конфигурация
pasv_enable=YES
pasv_min_port=1024
pasv_max_port=1048
pasv_address=xx.xx.xx.xx # Публичный IP вашего сервера
local_root=/var/www
Вы можете настроить pasv_min_port
и pasv_max_port
по вашему усмотрению, но убедитесь, что вы разрешили их в вашем файрволе.
Ответ или решение
Для успешной загрузки файлов с использованием сервера FTP, настроенного с помощью vsftpd, необходимо обратить особое внимание на как разрешения файловой системы, так и на конфигурацию самого сервера. В этом случае проблема заключается в том, что пользователь foouser
не может загружать файлы в директорию /var/www
, и причиной этого являются права доступа и настройки vsftpd.
Правила доступа к файловой системе
-
Проверка прав и владения: Убедитесь, что каталог
/var/www
имеет необходимые права доступа для группыwww-data
, к которой добавленfoouser
. Текущие права на директорию выглядят следующим образом:drwxr-xr-x 7 www-data www-data 4096 Oct 10 10:00 www
Чтобы
foouser
мог загружать файлы, ему необходимо иметь права на запись в этой директории. Чтобы это исправить, вы можете изменить владельца каталога/var/www
на группуwww-data
, как вы уже сделали. Однакоfoouser
как пользователь должен иметь следующие права:sudo chmod -R 775 /var/www
Это позволит пользователю и группе
www-data
записывать в каталог, не меняя владельца. -
Проверка принадлежности к группе: Убедитесь, что
foouser
действительно добавлен в группуwww-data
. Для этого выполните команду:groups foouser
Если
www-data
отсутствует в списке групп, то выполнение командыusermod
нужно повторить.
Настройки конфигурации vsftpd
Ваш текущий файл конфигурации /etc/vsftpd.conf
содержит необходимые настройки, но также рекомендуется внести некоторые изменения:
-
Включение пассивного режима: Поскольку ваш клиент FTP использует пассивный режим (PASV), убедитесь, что в конфигурации vsftpd активированы соответствующие настройки:
pasv_enable=YES pasv_min_port=1024 pasv_max_port=1048
Обратите внимание, что порты из диапазона
1024-1048
должны быть открытыми в вашем файерволе, чтобы клиент мог установить соединение. -
Права на загрузку: Em у вас уже установлено
chown_uploads=YES
иchown_username=www-data
, что означает, что файлы загруженные пользователем, будут принадлежать группеwww-data
. Убедитесь, что эта настройка активно работает в контексте загружаемых файлов.
Прочие аспекты
Если после внесения всех указанных изменений проблема не исчезает, можно рассмотреть возможность временного разрешения анонимной загрузки:
anonymous_enable=YES
anon_root=/var/www
Но помните, что это должно использоваться только в целях тестирования, так как в продакшене такие практики могут подвергать серьезным рискам безопасность вашего сервера.
Заключение
Следуйте указанным рекомендациям и проверьте настройки прав доступа и конфигурацию вашего сервера. Эти шаги должны позволить пользователю foouser
успешно загружать файлы в директорию /var/www
, сохранив при этом функционирование веб-сервера Apache.