Мне было необходимо установить FTP сервер с поддержкой учетных записей в MySQL гибким управлением скорости загрузки\закачки для авторизованных и анонимных пользователей, виртуальными хостами, веб-интерфейсом для клиентов и грамотным логированием для статистики (AwStats) с возможностью просмотра через веб интерфейс, и тп. Система OpenBSD и поэтому большинство FTP серверов идет фтопку (как к примеру используемый мною ProFTPD). Ну что же новое это как минимум интересно и полезно ладна хватит лирику и так поехали.
Содержание:
Из всех выбранных портов мне показался интересным Pure-ftp, он отвечал моим самым изысканным запросам. Да и выбор был невелик.
$ cd /usr/ports/ $ make search name=pure-ftp Port: pure-ftpd-1.0.22 Path: net/pure-ftpd Info: small, easy to set up, fast and very secure FTP server Maint: Brad Smith <brad@comstyle.com> Index: net L-deps: iconv.>=2::converters/libiconv B-deps: R-deps: libiconv-*:converters/libiconv Archs: any Port: pure-ftpd-1.0.22-ldap Path: net/pure-ftpd,ldap Info: small, easy to set up, fast and very secure FTP server Maint: Brad Smith <brad@comstyle.com> Index: net L-deps: iconv.>=2::converters/libiconv ldap.>=2,lber:openldap-client->=2,<3:databases/openldap B-deps: R-deps: libiconv-*:converters/libiconv Archs: any Port: pure-ftpd-1.0.22-mysql Path: net/pure-ftpd,mysql Info: small, easy to set up, fast and very secure FTP server Maint: Brad Smith <brad@comstyle.com> Index: net L-deps: iconv.>=2::converters/libiconv lib/mysql/mysqlclient.>=10::databases/mysql B-deps: R-deps: libiconv-*:converters/libiconv Archs: any Port: pure-ftpd-1.0.22-postgresql Path: net/pure-ftpd,postgresql Info: small, easy to set up, fast and very secure FTP server Maint: Brad Smith <brad@comstyle.com> Index: net L-deps: iconv.>=2::converters/libiconv pq.>=2::databases/postgresql B-deps: R-deps: libiconv-*:converters/libiconv Archs: any
Теперь нам ясно, где находится нужный нам порт и что мы сможем с ним сделать. Нам необходим пакет с MySQL и песочницей и virtual_chroot:
$ cd net/pure-ftpd
Посмотрим, какие есть варианты сборок:
$ make show=FLAVORS ldap mysql postgresql no_banner virtual_chroot
Описание:
Flavors:
ldap - установите поддержку LDAP как источник аутентификации
mysql - установите поддержку MySQL как источник аутентификации
postgresql - установите поддержку PostgreSQL как источник аутентификации
no_banner - установите Pure-FTPd чтобы не отображался баннер при соединении
virtual_chroot - установите Pure-FTPd с возможность следить за симлинками выходящии из песочницы
Соберем данный порт:
$ sudo env FLAVOR="mysql virtual_chroot" make install clean ~~~ --- pure-ftpd-1.0.22-mysql-virtual_chroot ------------------- In order to start Pure-FTPd at boot-time, add something like this to /etc/rc.local: if [ -x /usr/local/sbin/pure-ftpd ]; then echo Starting Pure-FTPd /usr/local/sbin/pure-ftpd -A -B -H -u1000 fi ===> Cleaning for pure-ftpd-1.0.22-mysql-virtual_chroot
Установили порт и теперь нам необходимо настроить pure-ftpd.
$ cd /usr/local/share/examples/pure-ftpd/ $ ls pure-ftpd.conf.sample pureftpd-mysql.conf pure-vpopauth.pl xml_python_processors.txt
Нас интересует два конфигурационных файла pure-ftpd.conf.sample и pureftpd-mysql.conf которые скопируем в директорию /usr/local/etc/.
$ sudo mkdir /usr/local/etc/ $ sudo cp pure-ftpd.conf.sample /usr/local/etc/pure-ftpd.conf $ sudo cp pureftpd-mysql.conf /usr/local/etc/
Приступим к конфигурации.
$ sudo chown u+w pure-ftpd.conf pureftpd-mysql.conf $ vi /usr/local/pure-ftpd.conf ############################################################ # 28.08.09 - Raven2000 # Конфигурационный файл для pure-ftpd # ############################################################ # Для запуска Pure-FTPd с этой конфигурацией # вместо параметров командной строки, запустите # следующую команду: # # /usr/local/sbin/pure-config.pl /usr/local/etc/pure-ftpd.conf # # Пожалуйста, не забудьте заглянуть в документацию на сайте # _http://www.pureftpd.org/documentation.shtml для получения полного списка # параметров. # Клетка каждого пользователя в его домашней директории ChrootEveryone yes # Если в предыдущей опции было установлено положение "no", то члены следующей # группы не будет в клетке (chroot). Все остальные будут. Если вы не хотите всех # сажать в клетку, просто закомментируйте ChrootEveryone и TrustedGID. # TrustedGID 100 # Включить хак совместимости, для кривых клиентов BrokenClientsCompatibility no # Максимальное число одновременных пользователей MaxClientsNumber 50 # Работать в фоновом режиме Daemonize yes # Максимальное количество одновременных соединений SIM-клиентов с одного # IP адреса MaxClientsPerIP 8 # Если вы хотите логировать все команды клиента, то установите "yes". # Эта директива может дублировать также на лог сервер. VerboseLog no # Отображение dot-файлов (показывать или нет файлы начинающиеся с точки), даже # если клиент не отправляет команду "-а". Рекомендую скрыть "no" DisplayDotFiles yes # Не разрешать авторизованных пользователей - этот FTP # предназначен только для анонимных клиентов. AnonymousOnly no # Запретить анонимные соединения. Разрешить только для авторизованных # пользователей. NoAnonymous no # Средства syslog (auth, authpriv, daemon, ftp, security, user, local*) # По умолчанию "ftp". "none" - отключает логирование. SyslogFacility ftp # Показывать сообщения (необходимо создать файл и прочитать man). Например # приветствие сервера, правила работы или шутки. # FortunesFile /usr/share/fortune/zippy # Не резольвить имена хостов в логах. Логи становятся менее информативными, # но и ресурсов требуется меньше. Установка "yes" - имеет смысл ставить на очень # загруженных серверах, или при неработающем DNS. DontResolve yes # Максимальное время простоя в минутах (по окончании соединение закрывается) # (по умолчанию = 15 минут) MaxIdleTime 15 # Файл конфигурации LDAP (смотрите README.LDAP) # LDAPConfigFile /etc/pureftpd-ldap.conf # Файл конфигурации MySQL (смотрите README.MySQL) MySQLConfigFile /usr/local/etc/pureftpd-mysql.conf # Файл конфигурации Postgres (смотрите README.PGSQL) # PGSQLConfigFile /etc/pureftpd-pgsql.conf # База данных пользователей PureDB (смотрите README.Virtual-Users) # PureDB /etc/pureftpd.pdb # Путь к сокету pure-authd (смотрите README.Authentication-Modules) # ExtAuth /var/run/ftpd.sock # Если вы хотите использовать PAM аутентификацию то # раскомментируйте следующую строку # PAMAuthentication yes # Если нужна простая системная, Unix аутентификация (/etc/passwd), то # раскомментируйте следующую строку # UnixAuthentication yes # Обратите внимание, что LDAPConfigFile, MySQLConfigFile, # PAMAuthentication и UnixAuthentication могут использоваться только # один раз, но они могут работать вместе. Например, если вы # используете MySQLConfigFile, затем UnixAuthentication, то идёт запрос # к Server SQL. Если в БД такой пользователь не найден, то пробуется # системный пользователь в /etc/passwd и /etc/shadow. Если проверка подлинности # в SQL неудачна по причине неправильного пароля, то происходит # остановка дальнейшего поиска пользователя. Методы аутентификации # будут пользоваться в порядке в котором они были заданы # Ограничения рекурсии команды 'ls'. Первй аргумент - максимально число файлов, # которые будет показаны. Второе - максимальное число подкаталогов LimitRecursion 2000 8 # Позволить ли анонимным пользователям создавать новые директории? AnonymousCanCreateDirs no # Если система загружена более, чем указанное тут значение, то # анонимным пользователям не разрешается скачивать. MaxLoad 4 # Диапазон портов для пассивного ответа соединения. Для файрвола. # PassivePortRange 30000 50000 # Принудительный IP адрес в PASV/EPSV/SPSV ответах. Для NAT. # Символические имена хостов такде приняты для шлюзов с динамическим IP адресом. # ForcePassiveIP 192.168.0.1 # Соотношение upload/download для анонимных пользователей. # AnonymousRatio 1 10 # Соотношение upload/download для всех пользователей. # Эта директива не перекрывает предыдущую. # UserRatio 1 10 # "WaReZ защита". Не разрешает анонимным пользователям загружать (download) # файлы, владельцем которых является "ftp" (как правило, файлы, загруженные # с другими анонимными пользователями). Закачка должны быть подтверждены # системным администратором (chown другому пользователю), прежде чем этот # файл будет доступен для скачивания. AntiWarez yes # IP адрес/порт для прослушивания (по умолчанию = all IP и порт 21). # Bind 127.0.0.1,21 # Максимальная пропускная способность для анонимных пользователей в KB/s # AnonymousBandwidth 8 # Максимальная пропускная способность для всех пользователей (в том числе # анонимные) в KB/s. Используйте AnonymousBandwidth или UserBandwidth, # использовать оба, не имеет смысла. # UserBandwidth 8 # Маска для создаваемых файлов. <umask for files>:<umask for dirs>. # 177:077 - если вы чувствуете себя параноиком. Umask 133:022 # Минимальный UID с которым пользователь будет авторизован. # (рекомендую указать от 1000) MinUID 100 # Разрешить передачу FXP для авторизованных пользователей. AllowUserFXP no # Разрешить передачу FXP для анонимных и не анонимных пользователей. AllowAnonymousFXP no # Пользователи не могут удалять и\или изменять файлы начинающиеся с точки '.' # даже если они их владельцы. Если TrustedGID включена, эта группа будет иметь # доступ дот-файлам. ProhibitDotFilesWrite no # Запретить чтение файлов начинающихся с точки '.' (.history, .ssh...) ProhibitDotFilesRead no # Никогда не перезаписывать файлы. Когда имя, для закачиваемго файла уже # существует, он будет автоматически переименован в file.1, file.2, file.3, ... AutoRename no # Запретить анонимным пользователям загружать новые файлы (no = upload разрешён) AnonymousCantUpload no # Только подключения к этому конкретному IP адресу могут быть не анонимными. Вы # можете использовать эту директиву чтобы открыть несколько публичных IP # адреса для анонимного FTP, и оставить приватный, защищенный файрволом IP для # удалённого администрирования. Вы также можете разрешить не маршрутизируемые # локальные IP (например, 10.x.x.x) для аутентификации и оставить публичный # для анонимных пользователей FTP-сервер на другом IP. #TrustedIP 10.1.1.1 # Если вы хотите чтобы PID добавлялся в каждую строку лога, # то раскомемнтируйте следующую строку. #LogPID yes # Создать дополнительный файл журнала с переданными файлами в Apache-подобном # формате: # fw.c9x.org - jedi [13/Dec/1975:19:36:39] "GET /ftp/linux.tar.bz2" 200 21809338 # Этот лог-файл может быть обработан программами для анализа логов апача AwStats # AltLog clf:/var/log/pureftpd.log # Создать дополнительный файл журнала в формате с переданными файлами # оптимизированном для статистических отчётов. # AltLog stats:/var/log/pureftpd.log #Создать дополнительный файл журнала в формате с переданными файлами в стандарте # W3C. Этот формат совместим с большинством коммерческих анализаторов лог-файлов # AltLog w3c:/var/log/pureftpd.log # Запрет CHMOD команд. Пользователи не смогут менять разрешения # на своих файлах. #NoChmod yes # Разрешить пользователям закачивать, но не удалять файлы. #KeepAllFiles yes # Автоматически создавать домашние директории пользователям, если они отсутствует #CreateHomeDir yes # Включить виртуальную квоту. Первое число - максимальное число файлов. # Второе число - максимальный размер, в мегабайтах. # Итак 1000:10 ограничивает каждого пользователя 1000 файлов и 10 Мб. #Quota 1000:10 # Если ваш pure-ftpd скомпилен с поддержкой standalone режима, вы можете изменить # местоположение pid-файла. По умолчанию используется /var/run/pure-ftpd.pid #PIDFile /var/run/pure-ftpd.pid # Если pure-ftpd скомпилен с поддержкой pure-uploadscript, # то этот пункт позволяет писать информацию о новых загруженных # файлах в /var/run/pure-ftpd.upload.pipe так, что pure-uploadscript может # прочесть их и обработать загруженный файл. #CallUploadScript yes # Эта опция полезна на серверах, где позволен upload анонимным пользователям. # Разрешается. Если /var/ftp находится в отдельном разделе /var, это позволяет # сохранить свободное место и защитить файлы логов. Когда процент # заполнения больше чем указанный тут, аплоад автоматом запрещается. MaxDiskUsage 99 # Установите 'yes' в этой опции если не хотите разрешить пользователям # переименовывать файлы. #NoRename yes # Включить 'customer proof'. Как обход против распространенных ошибок клиентов # к примеру 'chmod 0 public_html'. Чтобы исключить некоторые проблемы. CustomerProof yes # Число параллельных процессов. Он будет работать только если ftp сервер # был собран с опцией '--with-peruserlimits' # Формат: # <максимум сессий на пользователей>:<максимум сеансов анонимных пользователей> # Например, 3:20 означает, что авторизованный пользователь может иметь 3 активных # активных сессии. А для всех анонимных пользователей - максимум 20 сессий. # PerUserLimits 3:20 # Если файл загружается на сервер, и есть предыдущая его версия с тем же именем, # то старый файл не будет ни удалён ни усечён. Загрузка будет произведена # во временный файл и по окончании загрузки будет произведено атомарное # переключение к новой версии файла. Например, при загрузке большого PHP # сценария, апач будет работать со старой версией до полной загрузки # и немедленно переключится на новый как только, он будет полностью передан # Эта опция несовместима с виртуальными квотами. # NoTruncate yes # Этот параметр (TLS) может принимать три значения: # 0 - отключить SSL/TLS шифрование (по-умолчанию). # 1 - принимать обычные и шифрованные подключения. # 2 - отклонять подключения которые не используют SSL/TLS, # включая анонимные соединения. # Не раскомментируйте это вслепую. Проверьте, что: # 1) Ваш сервер был собран с поддержкой SSL/TLS (--with-tls), # 2) На месте есть действительный сертификат, # 3) Только совместимые клиенты будут заходить. # TLS 1 # Слушать только IPv4 адреса в режиме standalone(автономном режиме) # (т.е. IPv6 отключен). По дефолту, IPv4 и IPv6 включены. # IPV4Only yes # Слушать только IPv6 адрес в режиме standalone (т.е. IPv4 отключен) # По дефолту, IPv4 и IPv6 включены. (IPv6 я обычно отключаю) # IPV6Only yes # Поддержка UTF-8 для имён файлов (RFC 2640) # Определите кодировку для файловой системы сервера и, опционально, # дефолтовую кодировку для клиентов, которые не используют UTF-8. # Работает тока если pure-ftpd скомпилен с '--with-rfc2640' # FileSystemCharset big5 # ClientCharset big5
Приступим к редактированию файла соединения с сервером MySQL.
$ sudo vi /usr/local/etc/pureftpd-mysql.conf ############################################## # 28.08.09 - Raven2000 # Конфигурационный файл pure-ftpd для MySQL. # Смотрите README.MySQL для объяснений. # ############################################## # Опционально: Имя или IP адрес MySQL-сервера. Не задавать этот # пункт, если используется локальный unix сокет. MYSQLServer 127.0.0.1 # Опционально: Порт MySQL. Не задавать этот # пункт, если используется локальный unix сокет. MYSQLPort 3306 # Опционально: Задаётся имя сокета и местоположения mysql.sock если MySQL сервер # работает на этом же узеле. MYSQLSocket /tmp/mysql.sock # Обязательно: пользователь, которым работаем с MySQL. MYSQLUser root # Обязательно: пароль пользователя, от которого работаем в MySQL. MYSQLPassword rootpw # Обязательно: БД с которой работаем. MYSQLDatabase pureftpd # Mandatory : how passwords are stored # Valid values are : "cleartext", "crypt", "md5" and "password" # ("password" = MySQL password() function) # You can also use "any" to try "crypt", "md5" *and* "password" MYSQLCrypt cleartext # В последующих директивах части строк заменены, до # выполнения запроса: # # \L заменяется именем пользователя который логинится. # \I заменяется IP адресом сервера, на который заходит пользователь # \P заменяется номером порта с которым соединился пользователь. # \R заменяется IP адресом пользователь. # \D заменяется IP адресом пользователь, в виде long decimal number # # Очень сложные запросы могут быть выполнены с помощью совмещения этих строк, # Запрос на получение пароля из БД: MYSQLGetPW SELECT Password FROM users WHERE User="\L" # Запросов на получение системного имени пользователя, или UID MYSQLGetUID SELECT Uid FROM users WHERE User="\L" # Опционально: default UID вместо запроса на его извлечение MYSQLGetUID #MYSQLDefaultUID 1000 # Запрос на получение имени группы или gid MYSQLGetGID SELECT Gid FROM users WHERE User="\L" # Опционально: default GID - вместо запроса MYSQLGetGID #MYSQLDefaultGID 1000 # Запрос на получения домашней директории MYSQLGetDir SELECT Dir FROM users WHERE User="\L" # Опционально: Запрос на максимальное число файлов у пользователя # Pure-FTPd должен был собран с поддержкой виртуальных квот. # MySQLGetQTAFS SELECT QuotaFiles FROM users WHERE User="\L" # Опционально: запрос на квоту использования диска (виртуальных квот) # Число должно быть в мегабайтах. # Pure-FTPd должен был собран с поддержкой виртуальных квот. # MySQLGetQTASZ SELECT QuotaSize FROM users WHERE User="\L" # Опционально: Коэффициенты. Запросы на соотношение download/upload. # Сервер должен быть собран с ratio поддержкой. # MySQLGetRatioUL SELECT ULRatio FROM users WHERE User="\L" # MySQLGetRatioDL SELECT DLRatio FROM users WHERE User="\L" # Опционально: Полосой пропускания для пользователя. Сервер должен быть # собран с throttling опцией. Значение в KB/s . # MySQLGetBandwidthUL SELECT ULBandwidth FROM users WHERE User="\L" # MySQLGetBandwidthDL SELECT DLBandwidth FROM users WHERE User="\L" # Разрешить расширение "~" . НИКОГДА не делайте этого, если: # 1) Вы точно знаете что делаете. # 2) Совпадают реальные и виртуальные юзеры. # MySQLForceTildeExpansion 1 # Если Вы обновили таблицы до транзакционных (Gemini, # BerkeleyDB, Innobase...), можно включить транзакции SQL # Оставьте закомменченым, если используются MyISAM базы данных, # или старая версия MySQL (< 3.23.x). # MySQLTransactions On
Установка MySQL для OpenBSD.
Теперь будем подключать Pure-ftp к MySQL для начала желательно прочитать:
$ more /usr/local/share/doc/pure-ftpd/README.MySQL
Как сказано в README.MySQL создадим sql файл для создания запроса в БД.
$ cat table_user.sql CREATE TABLE users ( User VARCHAR(16) BINARY NOT NULL, Password VARCHAR(64) BINARY NOT NULL, Uid INT(11) NOT NULL default '-1', Gid INT(11) NOT NULL default '-1', Dir VARCHAR(128) BINARY NOT NULL, PRIMARY KEY (User) );
И файл для создания пользователя (в дальнейшем лучше написать скрипт):
$ cat user_ftp.sql INSERT INTO `users` VALUES ('Raven2000', '12345', 1000, 1000, '/home/Raven2000');
Далее (пример) как вы уже откорректировали под себя конфигурационный файл pureftpd-mysql.conf:
$ sido vi /usr/local/etc/pureftpd-mysql.conf MYSQLServer 127.0.0.1 #MYSQLPort 3306 MYSQLSocket /tmp/mysql.sock MYSQLUser user_pureftpd MYSQLPassword user_pureftpd_pw MYSQLDatabase homenet_pureftpd MYSQLCrypt cleartext MYSQLGetPW SELECT Password FROM users WHERE User="\L" MYSQLGetUID SELECT Uid FROM users WHERE User="\L" MYSQLGetGID SELECT Gid FROM users WHERE User="\L" MYSQLGetDir SELECT Dir FROM users WHERE User="\L"
Создадим БД и пользователя имеющего полные права на созданную БД.
$ sudo mysqladmin -h 127.0.0.1 --user=root --password=root_pw create homenet_pureftpd $ sudo mysql -h 127.0.0.1 --user=root --password=root_pw -e"GRANT ALL ON homenet_pureftpd.* TO user_pureftpd@127.0.0.1 IDENTIFIED BY 'user_pureftpd_pw'" homenet_pureftpd
Теперь создадим структуру БД и добавим пользователя FTP:
$ sudo mysql -h 127.0.0.1 --user=root --password=root_pw Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.1.37-log OpenBSD port: mysql-server-5.1.37 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql> use homenet_pureftpd; Database changed mysql> source /usr/local/etc/table_user.sql; Query OK, 0 rows affected (0.00 sec) mysql> source /usr/local/etc/user_ftp.sql; Query OK, 1 row affected (0.00 sec)
Проверим:
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | homenet_pureftpd | | mysql | | test | +--------------------+ 4 rows in set (0.02 sec) mysql> use homenet_pureftpd; Database changed mysql> show tables from homenet_pureftpd; +----------------------------+ | Tables_in_homenet_pureftpd | +----------------------------+ | users | +----------------------------+ 1 row in set (0.02 sec) mysql> select user,password,dir,uid,gid from users; +-----------+----------+-----------------+------+------+ | user | password | dir | uid | gid | +-----------+----------+-----------------+------+------+ | Raven2000 | 12345 | /home/Raven2000 | 1000 | 1000 | +-----------+----------+-----------------+------+------+ 1 row in set (0.00 sec)
Для начала определимся, что нам необходимо от ftp и как все должно выглядеть - базовая настройка.
Создаем пользователя ftp для работы не авторизированных - анонимных пользователей. Эта учетная запись не должна использовать пароль. Так же нам необходимо создать домашнюю директорию. И к слову говоря этому пользователю не нужно быть в учетных записях БД MySQL
Добавим псевдо shells для анонимных пользователей:
$ sudo echo /usr/bin/false >> /etc/shells
Добавим учетную запись и директорию пользователя. Анонимным пользователям не нужна учетка в БД.
$ sudo adduser Use option ``-silent'' if you don't want to see all warnings and questions. Reading /etc/shells Check /etc/master.passwd Check /etc/group Ok, let's go. Don't worry about mistakes. There will be a chance later to correct any input. Enter username []: ftp Enter full name []: anonymous ftp Enter shell csh false ksh nologin sh [ksh]: false Uid [1001]: Enter Login group ftp [ftp]: Enter Login group is ``ftp''. Invite ftp into other groups: guest no [no]: no Login class authpf daemon default mysql staff [default]: Enter Enter password []: Enter Set the password so that user cannot logon? (y/n) [n]: y Name: ftp Password: **** Fullname: anonymous ftp Uid: 1001 Gid: 1001 (ftp) Groups: ftp Login Class: default HOME: /home/ftp Shell: /usr/bin/false OK? (y/n) [y]: y Added user ``ftp'' Copy files from /etc/skel to /home/ftp Add another user? (y/n) [y]: n Goodbye!
Создадим директории и установим необходимые права:
Создадим необходимые директории и укажем права:
$ sudo mkdir -p /home/ftp/upload $ sudo chown -R root:ftp /home/ftp $ sudo chmod -R 755 /home/ftp $ sudo chmod -R 1775 /home/ftp/upload
И теперь все анонимные пользователи смогут загружать все свои файлы в директорию /home/ftp/upload (но от туда уже им не удалить и не скачать ;)). Далее администратор скопирует нужный и удалит не нужные файлы в подходящую директорию и будет возможность анонимным пользователям скачать их.
Для запуска при перезагрузке системы добавляем в файл /etc/rc.local следующее
$ cat /etc/rc.local # Pure-ftp if [ -x /usr/local/sbin/pure-config.pl ]; then echo 'Starting Pure-FTPd'; /usr/local/sbin/pure-config.pl /usr/local/etc/pure-ftpd.conf fi
Запустим Pure-FTPd и проверим его работоспособность:
$ sudo /usr/local/sbin/pure-config.pl /usr/local/etc/pure-ftpd.conf Running: /usr/local/sbin/pure-ftpd -A -c50 -B -C8 -D -fftp -H -I15 -lmysql:/usr/local/etc/pureftpd-mysql.conf -L2000:8 -m4 -s -U133:022 -u999 -g/var/run/pure-ftpd.pid -k99 -Z -4 $ ps -ax |grep ftp 21284 ?? Ss 0:00.00 pure-ftpd: -pure-ftpd (SERVER) (pure-ftpd)
Смотрим кто и что качает:
$ sudo /usr/local/sbin/pure-ftpwho +------+---------+-------+------+-------------------------------------------+ | PID | Login |For/Spd| What | File/IP | +------+---------+-------+------+-------------------------------------------+ |26663 | ftp | 00:00 | UL | adminstudioconfigurationmanagered.exe| | '' | '' | 7M/s| '' | -> chief_it.***.local | +------+---------+-------+------+-------------------------------------------+ $ sudo /usr/local/sbin/pure-ftpwho +------+---------+-------+------+-------------------------------------------+ | PID | Login |For/Spd| What | File/IP | +------+---------+-------+------+-------------------------------------------+ |31777 | Raven2000| 00:00 | UL | adminstudioconfigurationmanagered.exe| | '' | '' | 8M/s| '' | -> chief_it.***.local | +------+---------+-------+------+-------------------------------------------+
Попробуем зайти с консоли:
$ ftp 127.0.0.1 Connected to 127.0.0.1. 220---------- Welcome to Pure-FTPd [privsep] [TLS] ---------- 220-You are user number 1 of 50 allowed. 220-Local time is now 09:21. Server port: 21. 220-IPv6 connections are also welcome on this server. 220 You will be disconnected after 15 minutes of inactivity. Name (127.0.0.1:Raven2000): Raven2000 331 User Raven2000 OK. Password required Password: 230-User Raven2000 has group access to: wheel Raven2000 230 OK. Current restricted directory is / Remote system type is UNIX. Using binary mode to transfer files. ftp> pwd 257 "/" is your current location ftp> ls 150 Accepted data connection drwxr-xr-x 8 Raven2000 wheel 512 Aug 31 15:25 net2ftp -rw-r--r-- 1 Raven2000 wheel 223 Aug 31 15:32 db.txt 226-Options: -l 226 2 matches total ftp> exit; ?Invalid command. ftp> exit 221-Goodbye. You uploaded 0 and downloaded 0 kbytes. 221 Logout.
В лог файле
$ tail -3 /var/log/xferlog Sep 1 09:21:06 madcat pure-ftpd: (?@127.0.0.1) [INFO] New connection from 127.0.0.1 Sep 1 09:21:12 madcat pure-ftpd: (?@127.0.0.1) [INFO] Raven2000 is now logged in Sep 1 09:21:25 madcat pure-ftpd: (Raven2000@127.0.0.1) [INFO] Logout.
Добавить Virtual-Users пользователя можно так
$ sudo pure-pw useradd Vasia -m -u ftp -d /home/ftp
Использовать будем проверенный временем net2ftp. Его удобно пилить до нужного состояния.
1 - Скачиваем последнюю версию и распаковываем в директорию веб сервера.
2 - Изменим права на директорию /temp как 777.
$ chmod 777 temp/
<?php // 28.08.09 - Raven2000 // ----------------------------------------------------------------------------- // Базовые настройки // ----------------------------------------------------------------------------- // Введите ваш адрес электронной почты // Это используется в качестве адреса "от" при отправке файлов вложений $net2ftp_settings["email_feedback"] = "webmaster@enter-your-domain-here.com"; // Язык и скин по умолчанию (смотрите в директории /languages // и /skins чтобы посмотреть имеющиеся) $net2ftp_settings["default_language"] = "ru"; $net2ftp_settings["default_skin"] = "blue"; // Введите адрес вашей страницы помощи, форума или тикет системы. Добавится // ссылка в низу страницы. Если у вас нет ничего то оставьте строку пустой. $net2ftp_settings["help_text"] = ""; $net2ftp_settings["help_link"] = ""; // Рапорт PHP об ошибках //$net2ftp_settings["error_reporting"] = "NONE"; $net2ftp_settings["error_reporting"] = "standard"; //$net2ftp_settings["error_reporting"] = "ALL"; // Фиксим прозрачные PNG изображения для IE $net2ftp_settings["fix_png"] = "yes"; // MD5 шифрование строки (замените их для лучшей безопастности) $net2ftp_settings["encryption_string"] = "462E16CB7C3F369BD9F4DBEE0A926F4FFB3"; // ----------------------------------------------------------------------------- // Администраторская панель имя пользователя и пароль // Если пароль не задан то панель не будет доступна. // ----------------------------------------------------------------------------- $net2ftp_settings["admin_username"] = "admin"; $net2ftp_settings["admin_password"] = "admin_pw"; // ----------------------------------------------------------------------------- // Сообщение в браузере // ----------------------------------------------------------------------------- $net2ftp_settings["message_browse"] = "Welcome to the FTP server!"; // ----------------------------------------------------------------------------- // MySQL БД опционально. Может быть использована: для логирования пользователей, // проверка использования сетевых и серверных ресурсов (объем передачи данных // и время выполнения скрипта), а так же проверка домашней директории // пользователей // ----------------------------------------------------------------------------- // MASTER ПАРАМЕТР который перекрывает другие параметры ниже: использования БД? $net2ftp_settings["use_database"] = "yes"; // "yes" или "no" (по умолчанию) // Введите MySQL настройки $net2ftp_settings["dbusername"] = "user_net2ftp"; $net2ftp_settings["dbpassword"] = "user_pureftpd_pw"; $net2ftp_settings["dbname"] = "homenet_net2ftp"; $net2ftp_settings["dbserver"] = "localhost"; // в основном "localhost" // Переключатель различных типов журналов или выключатель $net2ftp_settings["log_access"] = "yes"; $net2ftp_settings["log_error"] = "yes"; // Автоматическое удаление журналов старше Х дней. $net2ftp_settings["log_length_days"] = 31; // число дней // ----------------------------------------------------------------------------- // Вход в систему регистратора // ----------------------------------------------------------------------------- $net2ftp_settings["use_syslog"] = "no"; $net2ftp_settings["syslog_priority"] = LOG_NOTICE; $net2ftp_settings["syslog_facility"] = LOG_MAIL; $net2ftp_settings["syslog_ident"] = "net2ftp"; // ----------------------------------------------------------------------------- // Файлы размором больше чем тут указанны быдут исключенны из: // upload, download, copy, move, search, view, edit // ----------------------------------------------------------------------------- // 100 MB в байтах, ( по умолчанию 10 MB) $net2ftp_settings["max_filesize"] = "100000000"; // Примечание: Если вы хотите, чтобы закачивали большие файлы. // Вам придется отредактировать следующие параметры: // 1 - в файле php.ini: upload_max_filesize, post_max_size, // max_execution_time, memory_limit // 2 - в файле php.conf: LimitRequestBody // ----------------------------------------------------------------------------- // Параметры потребление ресурсов сервера // ----------------------------------------------------------------------------- // Переключатель проверки потребления или выключить. $net2ftp_settings["check_consumption"] = "yes"; // Максимальная скорость передачи данных объемом в день (в байтах) $net2ftp_settings["max_consumption_ipaddress_datatransfer"] = 50000000; // на IP $net2ftp_settings["max_consumption_ftpserver_datatransfer"] = 50000000; // на FTP // Максимальное время исполнения скрипта в день (в секундах) $net2ftp_settings["max_consumption_ipaddress_executiontime"] = 1500; // на IP $net2ftp_settings["max_consumption_ftpserver_executiontime"] = 1500; // на FTP // Максимальное количество FTP серверов, которые могут быть доступна в один день. $net2ftp_settings["max_consumption_ipaddress_nr_of_ftpservers"] = 50; // на IP // Проверка домашней директории пользователя? $net2ftp_settings["check_homedirectory"] = "yes"; // ----------------------------------------------------------------------------- // Ничего не изменяйте НИЖЕ ЭТОЙ ЛИНИИ // ----------------------------------------------------------------------------- $net2ftp_settings["application_version"] = "0.98"; $net2ftp_settings["application_build_nr"] = "45"; // Это net2ftp.com или net2ftp установка $net2ftp_settings["net2ftpdotcom"] = "no"; // Реклама Google Adsense // Не показан при использовании HTTPS, чтобы избежать предупреждений при // каждом перзагрузке страницы $net2ftp_settings["show_google_ads"] = "no"; ?>
3.1 - Изменим настройки в файле settings_authorizations.inc.php
В этом файле настраиваем скрипт для работы с фтп серверами и дополнительными разрешениями.
<?php // 28.08.09 - Raven2000 // ----------------------------------------------------------------------------- // Проверка авторизации? // Значение да или нет. // ----------------------------------------------------------------------------- $net2ftp_settings["check_authorization"] = "yes"; // ----------------------------------------------------------------------------- // Разрешенные FTP сервера // Установите значение "ALL" или сделайте список серверов доступных к работе // с скриптом. // Виды настроек: // - При выборе значения "ALL" то в поле входа в FTP сервер будет показана // строка для заполнения // - если введено один сервер, то поле входа в FTP сервер не будет показан // - если введено более чем один сервер, то сервер FTP нужно будет выбрать // из выпадающего сервера // ----------------------------------------------------------------------------- //$net2ftp_settings["allowed_ftpservers"][1] = "ALL"; //$net2ftp_settings["allowed_ftpservers"][1] = "localhost"; //$net2ftp_settings["allowed_ftpservers"][2] = "192.168.1.1"; //$net2ftp_settings["allowed_ftpservers"][3] = "ftp.mydomain2.org"; $net2ftp_settings["allowed_ftpservers"][3] = "ftp.homenet.local"; // ----------------------------------------------------------------------------- // Заблокированные FTP сервера // Установить первому NONE, или введите список запрещенных серверов // ----------------------------------------------------------------------------- $net2ftp_settings["banned_ftpservers"][1] = "NONE"; //$net2ftp_settings["banned_ftpservers"][1] = "127.0.0.1"; //$net2ftp_settings["banned_ftpservers"][2] = "192.168.1.2"; //$net2ftp_settings["banned_ftpservers"][3] = "192.168.1.3"; // ----------------------------------------------------------------------------- // Разрешённый порт FTP сервера // Установите значение ALL, или конкретный порт // ----------------------------------------------------------------------------- //$net2ftp_settings["allowed_ftpserverport"] = "ALL"; $net2ftp_settings["allowed_ftpserverport"] = "21"; // ----------------------------------------------------------------------------- // Разрешённые IP адреса или IP диапазон адресов с которых пользователь может // подключатся // Установите первое значение ALL, или список разрешенных IP адресов // ----------------------------------------------------------------------------- $net2ftp_settings["allowed_addresses"][1] = "ALL"; //$net2ftp_settings["allowed_addresses"][1] = "127.0.0.1"; // IP address //$net2ftp_settings["allowed_addresses"][2] = "192.168.100"; // IP address range //$net2ftp_settings["allowed_addresses"][3] = "10.0.0.1"; // ----------------------------------------------------------------------------- // Заблокированные IP адреса или диапазон IP адресов с которых запрещено работать // Установите первое значение ALL, или список запрещенных IP адресов // ----------------------------------------------------------------------------- $net2ftp_settings["banned_addresses"][1] = "NONE"; //$net2ftp_settings["banned_addresses"][1] = "127.0.0.1"; //$net2ftp_settings["banned_addresses"][2] = "192.168.1.2"; //$net2ftp_settings["banned_addresses"][3] = "192.168.1.3"; // ----------------------------------------------------------------------------- // Запрещенные директории и имена файлов // Установите первое значение NONE, или список запрещенных слов // ----------------------------------------------------------------------------- //$net2ftp_settings["banned_keywords"][1] = "NONE"; $net2ftp_settings["banned_keywords"][1] = "paypal"; $net2ftp_settings["banned_keywords"][2] = "ebay"; $net2ftp_settings["banned_keywords"][3] = "wachoviabank"; $net2ftp_settings["banned_keywords"][4] = "wellsfargo"; $net2ftp_settings["banned_keywords"][5] = "bankwest"; $net2ftp_settings["banned_keywords"][6] = "hsbc"; $net2ftp_settings["banned_keywords"][7] = "halifax-online"; $net2ftp_settings["banned_keywords"][8] = "lloydstsb"; $net2ftp_settings["banned_keywords"][9] = "egg.com";
3.2 - Изменим настройки в файле settings_screens.inc.php
.
В этом файле тонко настраивается скрипт под текущие нужды администратора, что показать или убрать с глаз пользователей. Я стараюсь убрать все, что мне не нужно.
<?php // 28.08.09 - Raven2000 // ----------------------------------------------------------------------------- // Функция просмотра в браузере - Верхее левое // Укажите какие функции должны быть включены или выключены. // ----------------------------------------------------------------------------- // Создание новой директории $net2ftp_settings["functionuse_newdir"] = "yes"; // Создание нового файла $net2ftp_settings["functionuse_newfile"] = "yes"; // Закачка (закачать, закачать и распаковать) $net2ftp_settings["functionuse_upload"] = "yes"; // Закачать через Java $net2ftp_settings["functionuse_jupload"] = "no"; // Закачать через Flash $net2ftp_settings["functionuse_swfupload"] = "no"; // Создание веб-сайта из готового HTML шаблонов $net2ftp_settings["functionuse_easyWebsite"] = "no"; // Закладки на странице $net2ftp_settings["functionuse_bookmark"] = "yes"; // Установить функции $net2ftp_settings["functionuse_install"] = "yes"; // Дополнительные функции $net2ftp_settings["functionuse_advanced"] = "yes"; // ----------------------------------------------------------------------------- // Функция просмотра в браузере - Верхее правое // Укажите какие функции должны быть включены или выключены. // ----------------------------------------------------------------------------- // Копирования, перемещения и удаления директорий и файлов $net2ftp_settings["functionuse_copy"] = "yes"; $net2ftp_settings["functionuse_move"] = "yes"; $net2ftp_settings["functionuse_delete"] = "yes"; // Переименовать $net2ftp_settings["functionuse_rename"] = "yes"; // Изменить права (chmod) $net2ftp_settings["functionuse_chmod"] = "yes"; // Zip-and-download $net2ftp_settings["functionuse_downloadzip"] = "yes"; // Unzip $net2ftp_settings["functionuse_unzip"] = "yes"; // Zip-and-save, zip-and-email $net2ftp_settings["functionuse_zip"] = "yes"; // Подсчет размера $net2ftp_settings["functionuse_calculatesize"] = "yes"; // Строка поиска $net2ftp_settings["functionuse_findstring"] = "yes"; // ----------------------------------------------------------------------------- // Функция просмотра в браузере - уровень строк // Укажите какие функции должны быть включены или выключены. // ----------------------------------------------------------------------------- // Скачать файл $net2ftp_settings["functionuse_downloadfile"] = "yes"; // Просмотр файла $net2ftp_settings["functionuse_view"] = "yes"; // Редактирование файла $net2ftp_settings["functionuse_edit"] = "yes"; // Обновить файл (бета-функция) $net2ftp_settings["functionuse_update"] = "no"; // Открыть файл $net2ftp_settings["functionuse_open"] = "yes"; ?>
4 - Создадим БД и таблицы, а так же пользователя для работы net2ftp с БД.
$ sudo mysqladmin -h 127.0.0.1 --user=root --password=root_pw create homenet_net2ftp $ sudo mysql -h 127.0.0.1 --user=root --password=root_pw -e"GRANT ALL ON homenet_net2ftp.* TO user_net2ftp@127.0.0.1 IDENTIFIED BY 'user_pureftpd_pw'" homenet_net2ftp
В директории net2ftp есть файл create_tables.sql оттуда возьмем структуру.
Теперь создадим структуру БД:
$ sudo mysql -h 127.0.0.1 --user=root --password=root_pw Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.1.37-log OpenBSD port: mysql-server-5.1.37 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql> use homenet_net2ftp; Database changed mysql> source /home/Raven2000/net2ftp/create_tables.sql; Query OK, 0 rows affected, 1 warning (0.01 sec) Query OK, 0 rows affected, 1 warning (0.00 sec) Query OK, 0 rows affected, 1 warning (0.02 sec) Query OK, 0 rows affected, 1 warning (0.00 sec) Query OK, 0 rows affected, 1 warning (0.00 sec) Query OK, 0 rows affected, 1 warning (0.00 sec) Query OK, 0 rows affected, 1 warning (0.00 sec) Query OK, 0 rows affected, 1 warning (0.00 sec) Query OK, 0 rows affected, 1 warning (0.01 sec) Query OK, 0 rows affected, 1 warning (0.00 sec) Query OK, 0 rows affected, 1 warning (0.00 sec) Query OK, 0 rows affected, 1 warning (0.00 sec) Query OK, 0 rows affected, 1 warning (0.00 sec) Query OK, 0 rows affected, 1 warning (0.01 sec) mysql> show tables from homenet_net2ftp; +-----------------------------------+ | Tables_in_homenet_net2ftp | +-----------------------------------+ | net2ftp_log_access | | net2ftp_log_consumption_ftpserver | | net2ftp_log_consumption_ipaddress | | net2ftp_log_error | | net2ftp_users | +-----------------------------------+ 5 rows in set (0.02 sec) mysql> exit; Bye
Скриншоты:
Вот и все теперь пользователи работают и я все вижу, логирую, управляю, смотрю статистику (про AWStats, MySQL, Apache будет отдельная статья) и отдыхаю.
Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer
а где можно задать расширение
а где можно задать расширение которые можно закачивать на ФТП или наоборот - запретить закачивать?
RE:а где можно задать расширение
В самом конфиге фтп я такого не видел. Скорее всего надо будет писать скрипт.
Если хочешь разобраться... Так иди и разбирайся!
[ igNix.ru | Технология жизни - технологии будущего ] [ Forum.igNix.ru ]
Pure-FTPd+MySQL+Web
Не могли бы вы поподробнее описать настройку Web интерфейса. Я никогда этого не делал и возникает масса "дурацких" вопросов. На Openbsd директория
Web сервера это /var/www? Я так понимаю надо было установить пакеты PHP. Надо ли что-то изменять в httpd.conf или в php.ini или ещё где-то? Что из папки net2ftp надо положить в директорию Web сервера или всю папку? А то всё работает кроме Web.
RE:Pure-FTPd+MySQL+Web
Пожалуйста задайте вопрос в соответствующей ветке форума.
Если хочешь разобраться... Так иди и разбирайся!
[ igNix.ru | Технология жизни - технологии будущего ] [ Forum.igNix.ru ]
Отлично , спасибо за перевод
Отлично , спасибо за перевод на русский конфига, токо что ставил сравнил дифом дефольтный конфиг , все тоже самое, ничего нового,в синтаксисе :)
буду осваивать как замену proftpd
Хранение аккаунтов pure-ftpd в файлах формата puredb (ftp)
http://www.opennet.ru/base/net/pureftpd_puredb.txt.html
Web интерфейс для Pure-FTPd
Open source интерфейс для управления Pure-FTPd+MySQL
http://pure-ftpd-webui.org/
Настройка конфига под AwStats
Добрый день.
Подскажите как поправить файлы конфигурации, чтобы можно было смотреть статистику по Pure-ftpd в AwStats.
Строка AltLog clf:/var/log/pureftpd.log у меня разкомментирована, но файл /var/log/pureftpd.log не пишется, а awstats не парсит стандартный лог, который пишется в /var/log/xferlog
Помогите
Уважаемый автор помогите мне с настройкой и установкой.