igNix.ru
Опубликовано igNix.ru (http://www.ignix.ru)

Главная > Версия для печати > Версия для печати

Демоны

Ваша оценка: Нет Средняя: 5 (12 голосов)

MySQL

В данной статье рассмотрена установка MySQL на OpenBSD с установкой лимитов, конфигурацией класса mysql, небольшим тюнингом, сохранением\восстановлением базы и т.п.

  • Установка
  • Лимиты
    • Cfg /etc/sysctl.conf
    • Cfg /etc/login.conf
    • Cfg /etc/rc.local
    • Cfg /etc/my.cnf
  • Запуск
  • Пароль
  • Обновление
  • Backup\restore
  • Оптимизация

Установка

Обновим порты под свой релиз OpenBSD и проверим текущую версию MySQL.

# cd /usr/ports/
# cvs -d anoncvs@ftp5.eu.openbsd.org:/cvs update -PdrOPENBSD_4_7
~~~~
# make search name=mysql-server
Port:   mysql-server-5.1.42
Path:   databases/mysql,-server
Info:   multithreaded SQL database (server)
Maint:  Brad Smith <brad@comstyle.com>
Index:  databases
L-deps: mysqlclient:mysql-client->=5.1,<5.2:databases/mysql
B-deps: :devel/gmake :devel/libtool :devel/metaauto autoconf-2.61:devel/autoconf/2.61
R-deps: mysql-client->=5.1,<5.2:databases/mysql p5-DBD-mysql-*:databases/p5-DBD-mysql
Archs:  any

Можно собрать из портов, но в данном примере чтобы не ждать сборки я установлю пакет.

# export PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/4.7/packages/`machine -a`/
# pkg_add mysql-server
mysql-server-5.1.42:mysql-client-5.1.42: ok (2 to go)
mysql-server-5.1.42:p5-Net-Daemon-0.43: ok (4 to go)
mysql-server-5.1.42:p5-PlRPC-0.2018p0: ok (3 to go)
mysql-server-5.1.42:p5-DBI-1.609: ok (2 to go)
mysql-server-5.1.42:p5-DBD-mysql-4.013: ok (1 to go)
mysql-server-5.1.42: ok
--- +mysql-server-5.1.42 -------------------
You can find detailed instructions on how to install a database
in /usr/local/share/doc/mysql/README.OpenBSD.
# pkg_info
mysql-client-5.1.42 multithreaded SQL database (client)
mysql-server-5.1.42 multithreaded SQL database (server)
p5-DBD-mysql-4.013  MySQL drivers for the Perl DBI
p5-DBI-1.609        unified perl interface for database access
p5-Net-Daemon-0.43  extension for portable daemons
p5-PlRPC-0.2018p0   module for writing rpc servers and clients

Лимиты

Вы можете изменить некоторые характеристики демона для повышения устойчивости в работе и\или для ограничению прожорливости MySQL. Обычно изменяют такие переменные (есть и другие):

  • количество соединений
  • количество открытых таблиц
  • ограничения ядра для защиты вашей системы

В OpenBSD настройки по умолчанию является действительно хорошим и сконфигурировано на то, чтобы защитить себя. Суть в том: не изменяйте то, что вам не нужно менять тем более не зная, что вы делаете и почему!

Простой способ проверить, если вы достигнете некоторые из этих ограничений для числа открытых таблиц, которые имеются в качестве примера. Просто проверьте командой mysqlcheck, и если вы достигнете ограничения на макс файлы (в качестве примера) то вы увидите это сразу же.

mysqlcheck -m -A -uYourUsers -pYourPassword

Cfg /etc/sysctl.conf

Сначала вы можете увидеть ограничения накладываемые на открытые таблицы. Таким образом, вам необходимо увеличить количество открытых таблиц не только в конфигурации MySQL, но и в системе. Таким образом, необходимо простое изменение в sysctl.conf.
Значение по умолчанию хороши для большинства, но у вас может быть очень много открытых таблиц и вам этого может не хватать. Так что следите за системой. И при необходимости скорректируйте MySQL для своих значений.

Изменим ограничения на открытые таблицы вам нужно увеличить не только в конфигурации MYSQL, но и в системе. Для начала я сделаю простое изменение в системе.
Добавим в /etc/sysctl.conf.

# Increase for MySQL
kern.maxfiles=14060

Посмотреть текущее значение.

# sysctl kern.maxfiles
kern.maxfiles=7030

Установить необходимое значение.

# sysctl kern.maxfiles kern.maxfiles=14060
# sysctl kern.maxfiles
kern.maxfiles= 7030 -> 14060

Cfg /etc/login.conf

По умолчанию ваш сервер будет работать под пользователем и классом _mysql.
Они были созданы на время установки таким образом, вы должны использовать этот класс. Однако, если вы просто добавите скрипт запуска в rc.local то вы будете использовать дефолтный класс вашего login.conf, а не класс _mysql. Помните, что MySQL это демон и в этом качестве вы должны указать ему использовать класс _mysql при запуске или перезагрузке демона, или он будет использовать класс по умолчанию. Многие пользователи либо забываю этот факт или не знают об этом с самого начала.

В /etc/login.conf добавим:

# Setting used by MySQL daemon
#_mysql:\
#            :datasize=infinity:\
#            :maxproc=infinity:\
#            :openfiles-cur=2048:\
#            :openfiles-max=4096:\
#            :stacksize-cur=8M:\
#            :localcipher=blowfish,8:\
#            :tc=default:
 
_mysql:\
        :openfiles-cur=1024:\
        :openfiles-max=2048:\
        :tc=daemon:

При необходимости перестроим файл login.conf.db:

# cap_mkdb /etc/login.conf

Cfg /etc/rc.local

Теперь мы должны все это использовать. Если вы просто запустите MySQL с вашего rc.local скрипта, он будет использовать класс по умолчанию, а не тот, который вы добавили. Таким образом, сделаем созданный класс по умолчанию.

Добавим в /etc/rc.local:

# Start MySQL server
 if [ -x /usr/local/bin/mysqld_safe ] ; then
   su -c _mysql root -c '/usr/local/bin/mysqld_safe >/dev/null 2>&1 &'
   echo -n ' mysql'
 fi

Cfg /etc/my.cnf

Этот файл, вам необходимо изменить для ваших конкретных потребностей, конечно, и зависит от типов используемых таблиц характеристик оборудования и тп.

# Пример MySQL файла конфигурации для средних систем.
#
# Это для системы с небольшим объемом памяти (32M - 64M) или для 
# системы до 128M, где MySQL используется совместно с другими 
# программами (такими как веб-сервер)
#
# Вы можете скопировать этот файл в
# /etc/my.cnf и установить глобальные параметры,
# mysql-data-dir/my.cnf установить сервер-специфические опции
# (в данном каталоге установки /var/mysql) или
# ~/.my.cnf установить пользовательские опции.
#
# Для помощи выберете "--help" опцию.
 
# Следующие параметры будут переданы MySQL клиентам
[client]
#password       = your_password
port            = 3306
socket          = /var/run/mysql/mysql.sock
 
# Здесь идут записи для некоторых специфичных программ
 
# Для MySQL сервера
[mysqld]
port            = 3306
socket          = /var/run/mysql/mysql.sock
#skip-innodb
#skip-bdb
#skip-locking
key_buffer_size = 256M   # по умолчанию 16M
max_allowed_packet = 1M
table_open_cache = 256 # по умолчанию 64
sort_buffer_size = 1M  # по умолчанию 512K
net_buffer_length = 8K
read_buffer_size = 1M    # по умолчанию 256K
read_rnd_buffer_size = 4M # по умолчанию 512K
myisam_sort_buffer_size = 64M # по умолчанию 8M
 
# Не слушайте все TCP / IP-порты. Вы должны повысить безопасность,
# если все процессы, которые необходимо подключиться к mysqld работать на одном хосте.
# Все взаимодействие с mysqld должны идти через Unix сокеты или именованные каналы.
# Обратите внимание, что использование этой опции не включая именованные каналы на Windows
# (через опцию "enable-named-pipe" ) будет для mysqld бесполезно!
#
#skip-networking
 
# Репликации Master Server (по умолчанию)
# Бинарный лог, необходимые для репликации
log-bin=mysql-bin
 
# Двоичный формат журнала - рекомендован смешанный режим
binlog_format=mixed
 
# требуется уникальный идентификатор между 1 и 2^32 - 1
# по умолчанию 1, если мастер-хозяин не установлен
# но не будет работать, как мастер, если пропущен
server-id       = 1
 
# Репликации Slave (комментарий использования из мастер-секции)
#
# Чтобы настроить этот хост, как репликация slave, вы можете выбирать между
# двумя способами:
#
# 1) Используйте команду CHANGE MASTER TO  (подробно описаны в нашем руководстве)
# Синтаксис:
#
# CHANGE MASTER TO MASTER_HOST = <host>, MASTER_PORT = <port>,
# MASTER_USER = <user>, MASTER_PASSWORD = <password>;
#
#, Где вы замените <host>, <user>, <password> и
# <port> номер порта master (по умолчанию 3306).
#
# Пример:
#
# CHANGE MASTER TO MASTER_HOST = '125 .564.12.1, MASTER_PORT = 3306,
# MASTER_USER = 'Joe', MASTER_PASSWORD "секрет" =;
#
# Или
#
# 2) Установить переменные ниже. Однако, в случае, если вы выбираете этот метод,
#   то в начале репликации в первый раз (например если вы 
#   опечатаетесь в пароле мастер-пароля, slave не cможет
#   подключится), slave создаст master.info файл, и любые более позднии
#   изменения значений в этом файле переменных ниже будут игнорироваться, и
#   переопределения содержания master.info файла идет при выключении
#   slave серверов и дальше удалите master.info с перезагрузкой серверов slave.
#   По этой причине, вы можете оставить нетронутыми строки ниже
#   (закоментированными) и вместо этого использовать CHANGE MASTER TO (см. выше)
#
# Требуется уникальный идентификатор между 2 и 2^32 - 1
# (отличный от мастера)
# по умолчанию 2, если мастер-хост установлен
# но не будет работать, как slave, если пропущено
#server-id       = 2
#
# Репликации master для этого slave - требуется
#master-host     =   <hostname>
#
# Имя пользователя slave будет использовать для аутентификации при 
# подключении к master серверу - требуется
#master-user     =   <username>
#
# Пароль slave будет использовать для аутентификации при 
# подключении к master серверу - требуется
#master-password =   <password>
#
# Порт прослушивания master сервера.
# опция - по умолчанию 3306
#master-port     =  <port>
#
# бинарный лог - не требуется для slave, но рекомендуется
#log-bin=mysql-bin
 
# Точка следующих путей к различным разделенным дискам
#tmpdir         = /tmp/
#log-update     = /path-to-dedicated-directory/hostname
# Раскомментируйте следующее, если вы используете InnoDB таблицы
#innodb_data_home_dir = /var/mysql/
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /var/mysql/
# Вы можете установить .. _buffer_pool_size до 50 - 80%
# оперативной памяти, но будьте осторожны настройки памяти слишком высоки
#innodb_buffer_pool_size = 16M
#innodb_additional_mem_pool_size = 2M
# Установите .. _log_file_size до 25% от размера пула буфера
#innodb_log_file_size = 5M
#innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50
 
[mysqldump]
quick
max_allowed_packet = 16M
 
[isamchk]
key_buffer = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_buffer = 2M
 
[my sql]
no-auto-rehash
# Удалить следующий символ комментария, если вы не знакомы с SQL
#safe-updates
 
[myisamchk]
key_buffer_size = 128M  # по умолчанию 20M
sort_buffer_size = 128M # по умолчанию 20M
read_buffer = 2M
write_buffer = 2M
 
[mysqlhotcopy]
interactive-timeout

Запуск

Запустим демон

# su -c _mysql root -c '/usr/local/bin/mysqld_safe &' > /dev/null &
[1] 22118

Проверим работу.
# ps aux |grep _mysql
_mysql   25593  0.2  1.8 42892 19032 p1  S      3:07PM    0:00.34 
/usr/local/libexec/mysqld --basedir=/usr/local --datadi

Если вы устанавливаете MySQL в первый раз, вы должны создать
базы данных по умолчанию в первую очередь. Для того чтобы создать базу данных, запустите:

# /usr/local/bin/mysql_install_db
Installing MySQL system tables...
OK
Filling help tables...
OK

Пароль

Не забудьте изменить пароль рута создаем после запуска MySQL.

# /usr/local/bin/mysqladmin -u root password 'ПАРОЛЬ'

Обновление

Если вам нужно обновить MySQL при обновлении OpenBSD на новую версию, можете использовать pkg_add -u, и вы свободны. =)

man 1 pkg_add

Backup\restore

Я покажу как сохранить и восстановить базу данных.
Сохраняем.

# mysqldump -uUSER_DB -h127.0.0.1 -pUSER_DB_PASS DB > DB.sql

Восстанавливаем

# mysql --host=127.0.0.1 -u USER_DB -p DB < DB.sql

Оптимизация

В MYSQL есть возможность кэширования часто встречающихся запросов в оперативной памяти, и при поступлении конкретного запроса в MYSQL она возвратит его непосредственно из кеша. Однако в MYSQL по умолчанию эта функция отключена. И нам необходимо править конфигурационный файл MYSQL my.cnf Мы для примера добавим кэш размером в 64МБ. И на будущее с этим кэшом необходимо экспериментировать, чтобы добиться максимальной эффективности. Слишком маленький кэш приведет к тому, что кэшируемые запросы очень часто будут недействительными, а чересчур большой повлечет за собой относительно длительный поиск в кэше. Память будет неэффективно использоваться которая, могла бы пригодится другим службам.

[mysqld]
# Включам кэш запросов равным 64МБ
query_cache_size=64M
# Для индификации ресурсоемких запросов включаем следующее.
# Это приведет к регистрации
# всех запросов, для которых требуется больше 5 секунд (порог можете менять)
long_query_time = 5
log-slow-queries = /var/log/mysql/slow.log

Создаем лог меделенных запросов.

# touch /var/log/mysql/slow.log
# chown mysql:mysql /var/log/mysql/slow.log

В последствии присматриваем этот лог и смотрим, кто попался и делаем выводы.

Перезапустим mysql-server

# /usr/local/etc/rc.d/mysql-server restart

Проверим настройку

# mysql -u otor --password=*****
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 692516
Server version: 5.0.77 FreeBSD port: mysql-server-5.0.77_1
 
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
 
mysql> show variables like 'query_cache%';
+------------------------------+----------+
| Variable_name                | Value    |
+------------------------------+----------+
| query_cache_limit            | 1048576  |
| query_cache_min_res_unit     | 4096     |
| query_cache_size             | 67108864 |
| query_cache_type             | ON       |
| query_cache_wlock_invalidate | OFF      |
+------------------------------+----------+
5 rows in set (0.00 sec)

Как видим мы включили кэш (query_cache_type ON) и установили размер его равным 64МБ (query_cache_size 67108864)

Изменение типа таблиц с MyISAM на InnoDB

MYSQL использует два варианта типа таблиц MyISAM и InnoDB. По умолчанию MYSQL использует MyISAM. MyISAM использует блокировку на уровне таблиц, а InnoDB на уровне строк. Блокировка очень важна для сохранении целостности базы данных она препятствует одновременному обновлению одних и тех же данных двумя разными процессами БД. Посмотрим, является ли причина плохой производительности блокировка таблиц. Для этого посмотрим кол-во конфликтных блокировок в MySQL это Table_locks_immediate и Table_locks_waited.

mysql> show status like 'Table%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| Table_locks_immediate | 29958 |
| Table_locks_waited    | 0     |
+-----------------------+-------+
2 rows in set (0.00 sec)

Table_locks_immediate - количество случаев, когда блокировка таблицы была получена немедленно.
Table_locks_waited - когда получение блокировка таблиц сопровождалось ожиданием. Если это значение велико, то у вас проблемы =)

Если у вас CMS, например Drupal то можно некоторые таблицы преобоазовать в InnoDB, например cache, watchdog, session, acceslog делается это так.

mysql> alter table cache type='InnoDB';

(Для настройки производительности MYSQL можно загрузить сценарий MySQL Performance Tuning Primer Script) который позволяет корректировать переменные сервера MySQL.

Дополнительные материалы
Ссылки: 
>>ВЕТКА ФОРУМА<<
Ваша оценка: Нет Средняя: 5 (15 голосов)

Pure-FTPd+MySQL+Web

Мне было необходимо установить FTP сервер с поддержкой учетных записей в MySQL гибким управлением скорости загрузки\закачки для авторизованных и анонимных пользователей, виртуальными хостами, веб-интерфейсом для клиентов и грамотным логированием для статистики (AwStats) с возможностью просмотра через веб интерфейс, и тп. Система OpenBSD и поэтому большинство FTP серверов идет фтопку (как к примеру используемый мною ProFTPD). Ну что же новое это как минимум интересно и полезно ладна хватит лирику и так поехали.

Содержание:

  • Порты
  • Конфигурация pure-ftpd.conf
  • Конфигурация pureftpd-mysql.conf
  • Работа с СУБД
  • Директории и anonymous
  • Запуск
  • Virtual-Users
  • Web интерфейс
  • Заключение
  • Ссылки

Порты

Из всех выбранных портов мне показался интересным 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.conf

Установили порт и теперь нам необходимо настроить 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

Конфигурация pureftpd-mysql.conf

Приступим к редактированию файла соединения с сервером 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)

Все в порядке движемся дальше.

Директории и anonymous

Для начала определимся, что нам необходимо от ftp и как все должно выглядеть - базовая настройка.

  • Работа с авторизированными пользователями
    • Дать возможность полной работы со своими файлами и директориями (своя домашняя директория на сервере)
  • Работа с анонимными пользователями
    • Дать возможность скачивать (download) файлы из общей директории
    • Дать возможность закачивать (upload) файлы в специальную директорию upload
    • Запретить скачивание (download) из директории upload (те загрузили - молодцы я приду, проверю и вынесу в общую директорию. Не хочу чтобы мой добрый сервис использовали в качестве распространении порно и вареза)

Создаем пользователя 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!

Создадим директории и установим необходимые права:

  • /home/ftp - это основная директория. Она должна принадлежать root и иметь разрешение 755 (или для фанов 555)
  • /home/ftp/pub - иногда делают каталог pub это стандартный каталог для файлов которыми вы хотите поделится. Она должна иметь разрешение 755 (или для фанов 555)
  • /home/ftp/upload - это стандартный каталог (можете называть и incoming) для загрузки файлов анонимными пользователями. Она должна иметь разрешение 755 (или для фанов 555)

Создадим необходимые директории и укажем права:

$ 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

Добавить Virtual-Users пользователя можно так

$ sudo pure-pw useradd Vasia -m -u ftp -d /home/ftp

Прочтите README.Virtual-Users

Web интерфейс

Использовать будем проверенный временем net2ftp. Его удобно пилить до нужного состояния.

1 - Скачиваем последнюю версию и распаковываем в директорию веб сервера.
2 - Изменим права на директорию /temp как 777.

$ chmod 777 temp/

3 - Изменим настройки в файле settings.inc.php
<?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

Скриншоты:

  • Вход в net2ftp
  • Работа
  • Закачать
  • Выполнение закачки
  • Администраторская панель

Заключение

Вот и все теперь пользователи работают и я все вижу, логирую, управляю, смотрю статистику (про AWStats, MySQL, Apache будет отдельная статья) и отдыхаю.

Ссылки

  • _http://www.pureftpd.org/project/pure-ftpd
  • _http://ru.wikipedia.org/wiki/Pure-FTPd
  • _http://openports.se/net/pure-ftpd

Дополнительные материалы
Ссылки: 
>>ВЕТКА ФОРУМА<<
Ваша оценка: Нет Средняя: 4 (5 голосов)

Устанавливаем Samba в OpenBSD

Данный метод относится к OpenBSD во FreeBSD немного отличается (местонахождения пакетов и конфигурационных файлов)
Устанавливаем Samba из портов:

cd /usr/ports/net/samba; make install clean CLEANDEPENDS=Yes

Так же можно установить Samba с помощью скомпилированного пакета:
export PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/4.5/packages/i386/
pkg_add samba-3.0.33.tgz

Создаем расшаренные каталоги и установим на них необходимые права:
mkdir -p /var/samba/{public,music}
chmod 777 /var/samba/public

Редактируем конфигурационный файл smb.conf:
vi /etc/samba/smb.conf
[global]
   workgroup = WORKGROUP
   netbios name = Server
   server string = Samba Server %v
   security = share
   hosts allow = 192.168.2. 127.
   load printers = no
   guest account = nobody
   guest ok = yes
   log file = /var/log/smbd.%m
   max log size = 1024
   interfaces = fxp1 lo0
;  bind interfaces only = yes
   local master = no
   os level = 1
   domain master = no
   preferred master = no
   wins support = no
   wins proxy = no
   dns proxy = no
   dos charset = cp866
   unix charset = koi8-r
 
[public]
   path = /var/samba/public
   comment = Share folder
   browseable = yes
   writable = yes
;  create mask = 0644
;  directory mask = 0775
 
[music]
   path = /var/samba/music
   comment = Music files
   browseable = yes
   writeable = no

Проверяем конфигурационный файл на наличие ошибок:
testparm /etc/samba/smb.conf

Запускаем демоны smbd и nmbd:
/usr/local/libexec/smbd -D
/usr/local/libexec/nmbd -D

Проверяем работоспособность:
smbclient -U% -L localhost
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.0.33]
 
	Sharename       Type      Comment
	---------       ----      -------
	public	        Disk      Share folder
	music	        Disk	     Music files
	IPC$	        IPC       IPC Service (Samba Server 3.0.33)

Чтобы Samba автоматически запускалась при старте системы, внесем соответствующие
изменения в /etc/rc.local:
vi /etc/rc.local
if [ -x /usr/local/libexec/smbd ]; then
	echo -n ' smbd';	/usr/local/libexec/smbd -D
fi
 
if [ -x /usr/local/libexec/nmbd ]; then
	echo -n ' nmbd';	/usr/local/libexec/nmbd -D
fi

При необходимости можно воспользоваться SWAT - программой веб администрирования Samba:
vi /etc/inetd.conf
901 stream tcp nowait.400 root /usr/local/libexec/swat swat

И перезагрузить конфигурацию inetd:
kill -HUP `head -1 /var/run/inetd.pid`

Внимание: по умолчанию при использовании SWAT вся информация, в том числе и пароли, передается в открытом виде. Для обеспечения безопасности соединений необходимо дать указание stunnel принимать входящие SSL-соединения на 902 порту, расшифровывать данные и передавать их на порт 901.
vi /etc/stunnel/stunnel.conf
[swats]
accept  = 902
connect = 901

Ссылки:

  • Source.nnov.ru | блог о программировании и администрировании linux
Ваша оценка: Нет Средняя: 5 (3 голоса)

Источник (получено 16/06/2025 - 00:55): http://www.ignix.ru/book/openbsd/daemon