Анонимный FTP-сервер с поддержкой аплода на Ubuntu
Задачи сделать какое-то защищённое или частично защищённое хранилище для файлов не было - нужна самаяпростая помойка с неограниченным доступов в её пределах. Сперва пробовал настроить vsftpd по многочисленным инструкциям, но в конечном счёте не удалось заставить его назначать нужные права. С proFTPd всё оказалось намного проще. Первым делом нужно установить сам пакет. В ubuntu просто делаем:
sudo apt-get install proftpd-basic
Для файлопомйки заранее была подготовлена следующая стурктура:
mkdir /var/ftp# Папка для фтп, но не для файлопомйки chmod 555 /var/ftp # Папку можно только читать всем groupadd ftpuser # Добавили группу ftpuser # Создали пользователя ftpuser с домашней директорией /var/ftp и без шелла useradd ftpuser -g ftpuser -d /var/ftp -s /sbin/nologin chown root:ftpuser /var/ftp # Владельцем назначили root'а, группа будет ftpuser mkdir /var/ftp/pub # Папка, где будут храниться файлы chown ftpuser:ftpuser /var/ftp/pub chmod 775 /var/ftp/pub # Полный контроль ftpuser (пользователь и группа), остальным чтение
Проделанные манипуляции позволят отдать на растерзание пользователям папку pub, которая и будет файлопомойкой. Естественно, за её пределы пользователи попадать не должны. Следующим шагом будетредактирование конфигурации самого proFTPd. Найти её можно здесь: /etc/proftpd/proftpd.conf. Сразу приведу пример своего небольшого готового конфига, позволяющего дать полный контроль над папкой пользователю anonymous:
ServerName "name" ServerType standalone # Сервер будет сам слушать запросы на соединение DefaultServer on Port 21 # Можно переназначить для большей безопасности PassivePorts 10000 10001 # Порты для пассивного режима; если различные фаерволы\NAT не мешают, можно убрать User nobody # Для безопасности Group nogroup MaxClientsPerHost 10 "Не больше 10 подключений" # Ограничение подключений с одного хоста MaxInstances 10 # Максимум подключений TimeoutStalled 300 # Таймауты до отключения TimeoutNoTransfer 600 PersistentPasswd off DefaultRoot /var/ftp/pub # Папка по умолчанию для всех UseEncoding UTF8 CP1251 # Используемые кодировки # Эта секция запрещает логин всем <Limit LOGIN> DenyAll </Limit> # Секция для пользователя anonymous - папка /var/ftp/pub <Anonymous /var/ftp/pub> User ftpuser # От какого пользователя и группы ведутся действия Group ftpuser UserAlias anonymous ftpuser # Алиас для псевдонима: пользователя AnonRequirePassword off # Не запрашивать пароль # Эта секция разрешает логин # В моём случае логин возможен только с localhost, укажите свои ограничения # или оставьте AllowAll для всех пользователей <Limit LOGIN> AllowAll 127.0.0.1 </Limit>
RequireValidShell off # Не проверять шелл пользователя MaxClients 10 # Максимум подключений AllowOverwrite on # Разрешаем перезапись файлов </Anonymous>
Данная конфигурация отключает возможность залогиниться на сервере, кроме как пользователю anonymous. Использование пассивных портов оправдано не всегда. Почитать про разницу между активным и пассивным режимом ftp можно по ссылке - http://mynetnotes.livejournal.com/5952.html СтрокаAllowAll 127.0.0.1 позволяет лоигиниться только на локалхосте - в моём случае пользователи сидят на сервере через проброшенные порты на SSH.
Такая небольшая и простая конфигурация позволяет развернуть файлопомойку, где не нужно логиниться, а пользователи могут творить всё, что угодно: скачивать и закачивать файлы, заменять файлы на сервере, создавать и удалять папки, удалять файлы.
Из замеченных проблем: в proFTPd почему-то опцияAnonRequirePassword off не отключает запрос пароля для anonymous - пароль такой же. Получается, что анонимный вход без пароля равносилен входу по anonymous/anonymous.