Мы — долго запрягаем, быстро ездим, и сильно тормозим.

FreeBSD
  настройка
  подсчёт трафика
  программы
  frox
  SARG
  samba & ClamAV
  named
  proftpd
  cacti
  SAMBA+AD+NT ACL
  MySQL
  hylafax
  DDNS+DHCP
  cvsupd
  Samba как PDC
  Основы LDAP
  LDAP+SSL
  LDAP auth
  knockd
  rsync
  MRTG
  Rejik
  Jabber - OpenFire
  Samba(PDC) + Ldap
  squid+AD
  ATSlog
  vsftpd
  LDAP: samba, dns, dhcp
  Free-SA
  cups-samba на samba+AD
  irc + services
  Nagios - мониторинг сети
  TeamSpeak
  icecast2
  verlihub (p2p)
  Icecast2 + Darkice
  OOPS
  vsftpd + mysql
  Amanda
  HAVP
  Рыбалка на FreeBSD
  DNS сервер NSD
  DNS сервер Unbound
  mpd5, msmtp, dynamic ip
  ProFTPd + LDAP
  OpenVPN + LDAP
  Samba (PDC+BDC)
  BIND & AD
  POWERDNS
  3proxy
  eGroupWare
  GLPI
  SugarForge CRM
  Bacula
  Mysql - базовое описание
  Asterisk IP PBX
  Samba & CUPS & AD & ACL
  SMSTools 3
  Samba+ NT ACL
  phpmyadmin
  1С:Предприятие 8.1
  PurefFTPd
  qemu network
  AimSniff
  comms/scmxx
  Zoneminder
  Openfire Jabber Server
  Zoneminder 2
  Принт-Сервер Samba+LPD & AD
  Кластер OpenLDAP 2.4
  Lightsquid
  Установка Zabbix-1.6
  Установка net2ftp
  VSFTPD + AD && MySQL
  Network UPS Tools
  mpd5 L2TP client
  Apache 2.2 as a proxy
  ejabberd+mysql+icq
  HotSpot
  Установка и использование Zenoss на FreeBSD 7.2
  mysql-proxy
  DNS zones
  squid+sams+sqstat
  transmission-daemon
  Squid+AD (group access)
  named 9.7.0
  SysAid Server
  MySQL Master+Master
  proftpd file auth&quota
  usb_modeswitch
  NSDadmin
  iperf Тест скорости между хостами
  Простой факс-сервер mgetty+sendfax
  SQUID-MultiCpuSystem
  vsftpd + system users
  Syslog server
  Температура в серверной
  Nagios+Digitemp
  Avast! FreeBSD
  Настройка git+gitosis
  Firefox SyncServer
  Scan+Print server FreeBSD 9
  proftpd,pgsql,web
  почтовые системы
  Шелезяки
  Мелочи
  Файловая система
  WWW
  Security
  system
  Games Servers
  X11
  Programming
Очумелые Ручки
OpenBSD
Cisco


www.lissyara.su —> статьи —> FreeBSD —> программы —> proftpd,pgsql,web

Proftpd с автризацией в postgresql и web управлением

Автор: DNK.


Пришлось недавно помочь товарищу с установкой proftpd сервера с авторизацией
в postgresql, заодно и web интерфейс управления навоял. Собственно я уже
писал такую статью раньше (уберу ее , что бы не плодить лишнего), но время
идет и все меняется. Изменился немного принцип установки, плюс добавил
форму управления пользователями.Кроме того, сразу уберем ошибку proftpd_sql_pgsql
связанную с кодировкой БД.
Итак начнем.
Устанавливать будем на freebsd10. При создании сервера я сразу разметил диск
с директорией /ftp , это будет наша корневая директория для FTP сервера ( вы
можете изменить ее на другую потом).
Как обычно, все делаем копи-пастом.
Устанавливаем :

cd /usr/ports/www/apache24/
make config-recursive
make install clean

cd /usr/ports/lang/php5
make config

[x] APACHE Build Apache Module


make install clean

cd /usr/ports/databases/postgresql90-server/
make config-recursive
make install clean

cd /usr/ports/databases/postgresql90-contrib/
make config-recursive
make install clean

cd /usr/ports/ftp/proftpd/
make install clean

cd /usr/ports/databases/proftpd-mod_sql_postgres/
make install clean

mkdir -p /srv/www/PAS
echo 'postgresql_enable="YES"' >> /etc/rc.conf
echo 'apache24_enable="YES"' >> /etc/rc.conf
echo 'proftpd_enable="YES"' >> /etc/rc.conf
chown -R nobody:nogroup /ftp
htpasswd -c /srv/www/PAS/.htpasswd admin

С установкой покончили, конфигурим.
Редактируем файл /usr/local/etc/apache24/httpd.conf
Ищем <IfModule mime_module>
и вставляем
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

Ищем <Directory />
и меняем
#    Require all denied
    Allow from all

Ищем DirectoryIndex index.html
и дописываем
DirectoryIndex index.html index.php

Так же меняем
ServerName nash_server
Listen 9999

Создаем файл /usr/local/etc/apache24/Includes/webftp.conf
такого содержания
<VirtualHost *:9999>
    ServerAdmin webmaster@nash_server.ua
    DocumentRoot "/srv/www/webftp"
    <Directory / >
        Allowoverride All
    </Directory>
    ServerName nash_server.ua
    ErrorLog "/var/log/webftp.error_log"
    CustomLog "/var/log/webftp.access_log" common
</VirtualHost>

Для забывчивых : в /etc/hosts вставляем ваш IP с именем сервера.
Убираем ошибку модуля SQL proftpd :
открываем файл /usr/local/etc/rc.d/postgresql и меняем строку
postgresql_initdb_flags=${postgresql_initdb_flags:-
"--encoding=utf-8 --lc-collate=C"}
на
postgresql_initdb_flags=${postgresql_initdb_flags:-
"--encoding=koi8-r --lc-collate=C"}
(строки разбил на 2 - т.к. не влазит в 1 строку)

Вообще странно, почему разрабы не устраняют ошибку, связанную с использованием
кодировки utf-8.
Приводим конфиг /usr/local/etc/proftpd.conf
к следующему виду


LoadModule mod_sql.c
LoadModule mod_sql_postgres.c
SQLBackend postgres

ServerName                      "FTP server"
# тип сервера standalone/inetd - сам или через inetd
ServerType                      standalone
DefaultServer                   on
Port                            21
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
#для открытия доступа в пассивном режиме
#когда сервер за роутером
#MasqueradeAddress Внешний_IP_на шлюзе
#<Global>
#PassivePorts 60126 60128
#</Global>
#в pf.conf вставить 2 строчки
#rdr on $ext_if1 inet proto tcp to $ext_if1 port 21 -> IP-СЕРВЕРА
#rdr on $ext_if1 inet proto tcp to $ext_if1 port 60126:60128 -> IP-СЕРВЕРА
#========================================================================

ServerAdmin             admin@vash_domen.ua
# Маска с которой создаются новые файлы (не совсем маска - маска получается
# из этого значения, путём его вычитания из 777 - т.е. в даном случае получится
# маска 755)
Umask                           022
MaxInstances                    50
CommandBufferSize       512

User                            nobody
Group                           nogroup

AllowOverwrite          on
# Директории
<Directory ~>
AllowOverwrite          on
<Limit Write>
AllowAll
</Limit>
<Limit READ>
AllowAll
</Limit>
</Directory>
<Limit SITE_CHMOD>
  DenyAll
</Limit>

SQLAuthTypes            Plaintext
SQLAuthenticate         users
SQLConnectInfo          proftp@localhost proftp
SQLUserInfo             users username password uid gid homedir shell
RequireValidShell off
#SQLLogFile      /var/log/proftpd.log

SQLLog          PASS            counter_login
SQLNamedQuery   counter_login   UPDATE "\
        last_login=date_trunc ( 'seconds' ,\
        timestamp without time zone 'now' ),\
        login_count=login_count+1 WHERE \
        username='%u'" users

# пишем неудачные логины в БД
SQLLog          ERR_PASS        counter_err
SQLNamedQuery   counter_err     UPDATE "\
        last_error_login=date_trunc ( 'seconds' ,\
        timestamp without time zone\'now' ), \
        login_error_count=login_error_count+1 WHERE \
        username='%U'" users

# логируем что сохраняет и тащщит с сервера:
# переменные
# %u - имя пользователя (с которым залогинился)
# %f - полный путь и имя файла который был скачан
# %b - число байт, которые были скачаны
# %h - имя клиента (из DNS), если не удалось разрешить - IP
# %a - IP-адрес клиента
# %m - имя команды полученной от клиента (RETR/STOR)
# %T - время (секунд) ушедшее на передачу файла клиенту
SQLLog          DELE,RETR,STOR,         log_work

SQLNamedQuery  log_work FREEFORM "\
INSERT INTO worklog (\
         date,\
         user_name,\
         file_and_path,\
         bytes,\
         send_time,\
         client_ip,\
         client_name,\
         client_command) \
VALUES(\
date_trunc ( 'seconds' , timestamp without time zone 'now' ),\
'%u','%f','%b','%T','%a','%h','%m')"


# записываем ошибки при сохранении и чтении файлов
# (в одну строку не влезли - но работает и в таком виде :))

SQLLOG    ERR_RETR,ERR_STOR,ERR_DELE,ERR_RMD,ERR_RNTO log_error
SQLNamedQuery  log_error FREEFORM "\
INSERT INTO errorlog (\
         date,\
         user_name,\
         file_and_path,\
         bytes,\
         send_time,\
         client_ip,\
         client_name,\
         client_command) \
VALUES(\
date_trunc ( 'seconds' , timestamp without time zone 'now' ),\
'%u','%f','%b','%T','%a','%h','%m')"
# если вылезет проблема, типа тормозов при подключении
# (в момент установления коннекта `задумывается` на 10-20 секунд)
# то раскомментируйте следующие две строки
#UseReverseDNS     off
#IdentLookups      off

# ВСЕ пользователи по ftp ограниченны
# своей домашней директорией
DefaultRoot     ~

DefaultRoot             ~       !admin
MaxClients 55 "Слишком много соединений с сервером"
MaxClientsPerHost 24 "%m клиента уже подключены с Вашего хоста"
MaxLoginAttempts 3 "Слишком много попыток войти"
AccessDenyMsg "ATTENTION!!! ALL CONNECTIONS LOGED"
AccessGrantMsg "Now upload/download files"

#Возможно определить с каких ip соединения допустимы или запрещены
#UseHostsAllowFile /etc/proftpd.allow
#UseHostsDenyFile /etc/proftpd.deny

# Установим ограничения по времени
#TimeoutIdle 180
#TimeoutLogin 120
#TimeoutNoTransfer 360
#TimeoutStalled 640

# Логи
SyslogLevel notice
UseReverseDNS off
#TransferLog /var/log/proftpd-tranfer.log
#SystemLog /var/log/proftpd-error.log
#ExtendedLog /var/log/proftpd-extended.log read,write

#Для кодировки win-cp1251
#(корректо отображается вин кодировка, а не кракозябры)
LangEngine on
UseEncoding KOI8-R CP1251

#Для корректного отображения времени
TimesGMT  off
SetEnv TZ :/etc/localtime

Теперь стягиваем web морду,
webftp.tgz
файл скачан размер размещён примечание
webftp.tgz
155 3.1kb 2014-01-30 web interface

заходим в /srv/www/, распаковываем ее (получим директорию webftp)
Редактируем /srv/www/webftp/webftp.conf :
меняем $server='10.10.10.10'; на ваш IP.(иначе не откроются
FTP соединения в браузере с вашим сервером)

/usr/local/etc/rc.d/postgresql initdb
/usr/local/etc/rc.d/postgresql start
su - pgsql
createuser proftp
exit
createdb -Uproftp proftp
psql -Uproftp proftp

Создаем таблицы

CREATE TABLE users (id serial PRIMARY KEY,username varchar(20),password varchar
(20),groupname varchar(24),uid int,gid int,homedir varchar(70),shell varchar
(20),last_login varchar(30),login_count int,last_error_login varchar
(30),login_error_count int);
CREATE TABLE worklog (id serial PRIMARY KEY,date varchar(30),user_name varchar
(20),file_and_path text,bytes int8,send_time varchar(9),client_ip varchar
(15),client_name text,client_command varchar(5));
CREATE TABLE errorlog (id serial PRIMARY KEY,date varchar(30),user_name varchar
(20),file_and_path text,bytes int8,send_time varchar(9),client_ip varchar
(15),client_name text,client_command varchar(5));
insert INTO users VALUES (1,'admin','12345876','nobody',65534,65533,
'/ftp','/bin/sh','0',0,'0',0);


exit
/usr/local/etc/rc.d/apache24 start
/usr/local/etc/rc.d/proftpd start

Заходим на http://ваш_ip:9999/

PS вин-кодировка будет корректно отображаться по ls. За внешний вид web не ругайте :)
пива было мало, настроение было серое.И еще, со временем логи в БД будут расти,
поэтому, сделал отображение только последних 100 строчек.
И на последок, если вам нужен ftp сервер для 5-10 пользователей :) не заморачивайтесь
с данным решением.



размещено: 2014-01-30,
последнее обновление: 2014-01-30,
автор: DNK

оценить статью:

hopto, 2014-06-05 в 23:06:32

Где указывать пароль к БД в proftpd.conf
Веб интрефейс пишет только "An error occured."

DNK, 2014-06-06 в 9:43:17

SQLConnectInfo          proftp@localhost proftp
в данном случае БД на локалхосте, юзер без пароля.
SQLConnectInfo          proftp:passwd@localhost proftp


Оставьте свой комментарий:
Ваше имя:   *
e-mail:  
жирный
наклонный
подчёркнутый
ссылка
цвет
Нынешний год:   *
 


Хостинг HOST-FOOD

2014-07-27, lissyara
gmirror

Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9

Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
подписка

    вверх      
Статистика сайта
Сейчас на сайте находится: 19 чел.
За последние 30 мин было: 54 человек
За сегодня было
4271 показов,
539 уникальных IP
 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.151 секунд
Из них PHP: 57%; SQL: 43%; Число SQL-запросов: 79 шт.
Исходный размер: 143377; Сжатая: 22684