В данной статье я попытаюсь просто и доступно описать установку и настройку ProFTPd, для предоставления ftp доступа к сайту для конкретного пользователя к определенному виртуальному хосту.
Такой пользователь может изменять файлы, закачивать новые на сайт, но только в пределах сайта к которому предоставлен ftp доступ.
Сервер Apache2 работает от имени www-data, у которого UserId=33, GroupId=33, соответственно наш пользователь должен обладать такими же правами.
Устанавливаем сервер proftpd
sudo apt-get install proftpd
Открываем конфиг ProFTPd, по-умолчанию он располагается /etc/proftpd/proftpd.conf.
sudo gedit /etc/proftpd/proftpd.conf
Удаляем в нем все и вставляем весь текст показанный ниже:
# выключаем использование IP v6 за ненадобностью ServerType standalone UseIPv6 off # DeferWelcome off DefaultServer on # права, с которыми будут создаваться файлы и папки Umask 022 #ServerName "0.0.0.0" # Любое имя для ftp-сервера ServerIdent on "My FTP Server" ServerAdmin nik_user@mail.ru # использование протокола ident (RFC 1413) для идентификации подслединившегося
клиента; # рекомендуется отключить, все равно этот протокол никто больше не использует; # область действия - основной сервер, Global, VirtualHost IdentLookups off RootLogin off # запрещаем подключать от пользователя root # определять имя хоста клиента по IP адресу (желательно отключать для ускорения
доступа) UseReverseDNS off # Порт сервера Port 21 # из соображений безопасности можете поставить любой незанятый PassivePorts 49152 65534 #MasqueradeAddress None TimesGMT off # Против DDOS атаки, полезно для безопасности # максимальное число одновременно запускаемых процессов в режиме standalone MaxInstances 8 MaxLoginAttempts 3 MaxClientsPerHost 8 MaxClientsPerUser 8 MaxHostsPerUser 8 # Сообщение после успешного захода на сервер AccessGrantMsg "Welcome to Server" TimeoutLogin 20 TimeoutNoTransfer 1200 TimeoutIdle 1200 DisplayLogin welcome.msg DisplayChdir .message #Запрещаем заливать на сайт файлы начинающиеся с точки, полезно для безопасности DenyFilter *.*/ # директория, на которую устанавливается сервер # (сейчас указана домашняя директория подключенного пользователя) DefaultRoot ~ # Пользователь и группа, от которого работает сервер User nobody Group nogroup AuthUserFile /etc/proftpd/ftpd.passwd DirFakeUser off nobody DirFakeGroup off nobody DefaultTransferMode binary AllowForeignAddress off AllowRetrieveRestart on AllowStoreRestart on # Автоматическое удаление недогруженного файла. DeleteAbortedStores off TransferRate RETR 220 TransferRate STOR 250 TransferRate STOU 250 TransferRate APPE 250 SystemLog /var/log/secure RequireValidShell off <IfModule mod_tls.c> TLSEngine off TLSRequired off TLSVerifyClient off TLSProtocol SSLv23 TLSLog /var/log/proftpd_tls.log TLSRenegotiate required off </IfModule> <IfModule mod_ratio.c> # Количество попыток ввода пароль перед отсоединением MaxLoginAttempts 30 # Ограничить допустимый размер загружаемых файлов #MaxStoreFileSize 2 Gb # Ограничить допустимый размер скачиваемых файлов #MaxRetrieveFileSize 2 Gb # Логи TransferLog /var/log/proftpd/xferlog SystemLog /var/log/proftpd/proftpd.log Ratios off SaveRatios off RatioFile "/restricted/proftpd_ratios" RatioTempFile "/restricted/proftpd_ratios_temp" CwdRatioMsg "Please upload first!" FileRatioErrMsg "FileRatio limit exceeded, upload something first..." ByteRatioErrMsg "ByteRatio limit exceeded, upload something first..." LeechRatioMsg "Your ratio is unlimited." </IfModule> #VALID LOGINS Добавляем пользователей, которым разрешен доступ к серверу <Limit LOGIN> AllowUser ubuntu AllowUser name_user DenyALL </Limit> <Anonymous /var/www/ubuntu-desktop.ru> User ubuntu Group group1 AnonRequirePassword on MaxClients 10 "The server is full, hosting %m users" DisplayLogin welcome.msg <Limit LOGIN> Allow from all Deny from all </Limit> # Разрешить перезапись файлов AllowOverwrite off # разрешить перезаписывать существующие файлы, # область действия - server config, VirtualHost, Anonymous, Directory, Global,
.ftpaccess AllowOverwrite on <Limit LIST NLST STOR STOU APPE RETR RNFR RNTO DELE MKD XMKD SITE_MKDIR RMD
XRMD SITE_RMDIR SITE SITE_CHMOD SITE_CHGRP MTDM PWD XPWD SIZE STAT CWD XCWD
CDUP XCUP > AllowAll </Limit> <Limit NOTHING > DenyAll </Limit> </Anonymous>
<Limit LOGIN>Все настройки файла можно оставить как есть, нас интересуют настройки пользователя которому разрешен доступ к серверу:
AllowUser ubuntu AllowUser name_user DenyALL </Limit>
и
<Anonymous /var/www/ubuntu-desktop.ru> User ubuntu Group group1 AnonRequirePassword on MaxClients 10 "The server is full, hosting %m users" DisplayLogin welcome.msg <Limit LOGIN> Allow from all Deny from all </Limit>
Как видно, я создал пользователя «ubuntu», задал ему пароль (см.ниже), указал сайт (ubuntu-desktop.ru) к которому разрешен ftp доступ.
Теперь приступим к созданию пользователя (пример) «ubuntu». Нам необходимо чтобы пользователь мог удалять, редактировать файлы. Пользователь должен иметь идентификатор 33, группу 33 и ограничен домашним каталогом сайта /var/www/ubuntu-desktop.ru.
Создаем пользователя:
sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=ubuntu --uid=33 --gid=33 --home=/var/www/ubuntu-desktop.ru --shell=/bin/false
Далее придумайте пароль для нового пользователя.
После выполнения команды у вас появится файл /etc/proftpd/ftpd.passwd, в нем будут находится данные созданного пользователя.
Перезапускаем ftp:
sudo /etc/init.d/proftpd restart
Проверяем доступно ли содержимое сайта через веб-браузер:
В адресной строке набираем (пример): ftp://ubuntu-desktop.ru
Указываем имя пользователя и пароль.
Как видите все получилось. Для редактирования и добавления файлов можно воспользоваться программой FileZilla.
FileZilla это полнофункциональный FTP-клиент с простой и удобной графической оболочкой.
Программа написана на C++ и использует библиотеку wxWidgets.
Возможности FileZilla:
- Поддержка протоколов FTP, FTPS и SFTP
- Поддержка
- Более 40 языков интерфейса
- Поддержка передачи и докачки больших (более 4 Гб) файлов
- Простой и удобный менеджер сайтов, очередь передачи
- Закладки
- Поддержка Drag&Drop
- Установка ограничений скорости
- Фильтры имён файлов
- Сравнение папок
- Менеджер настройки сети
- Редактирование файлов на сервере
- Удержание соединения (Keep-alive)
- Поддежка прокси-серверов для HTTP/1.1, SOCKS5 и FTP
- Журналирование в файл
- Синхронный обзор папок
- Поиск по файлам на сервере
- Поддержка вкладок позволяет подключаться к нескольким серверам одновременно
Установка программы:
sudo apt-get install filezilla
В пункте хост указываем имя сайта, далее имя пользователя созданного вами и его пароль, после чего нажимаем «Быстрое соединение».
Теперь в принципе пользователю доступен сайт через протокол передачи данных ftp. Но если у Вас все получилось сделать на локальном хосте, это не значит что доступ через ftp будет доступен за пределами Вашей сети (из Интернета).
Необходимо открыть 21 порт:
sudo ufw allow 21