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

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

OpenBSD

openbsd

OpenBSD свободная многоплатформенная операционная система, основанная на 4.4BSD — BSD-реализации UNIX системы. Основным отличием OpenBSD от других свободных операционных систем, базирующихся на 4.4BSD (таких, как NetBSD и FreeBSD) является изначальная ориентированность проекта на создание наиболее безопасной, свободной и лицензионно чистой из существующих операционных систем.

Из заголовка уже понятно, что эта ветвь просвещенна OpenBSD значит, мы будем ее окучивать и развивать, чтобы она начала приносить свои плоды. Эта система немного отличается от моего любимого FreeBSD, и есть свои нюансы в работе, что уже интригует :). Как мы знаем, она из семьи UNIX clone, а значит, что она тоже удобная, стабильная и безопасная. Как известно лозунг разработчиков OpenBSD таков
"Безопасность по умолчанию!" и по моим скромным наблюдениям разработчики хотят сделать открытый аналог CISCO, а это много что значит...

В OpenBSD есть свои области применения. Наиболее популярным и далеко не единственным применением OpenBSD являются системы защиты сетей (межсетевые экраны). В немалой степени этому способствуют дочерние проекты, разрабатываемые параллельно такие как:

  • Packet Filter (PF) — межсетевой экран (файрвол), PF был высоко оценен и взят на вооружение разработчиками параллельных проектов NetBSD и FreeBSD.
  • OpenSSH — самая распространённая открытая реализация SSH.
  • OpenNTPD — демон для синхронизации времени по протоколу NTP; может работать и как сервер.
  • OpenOSPFD — реализация протокола динамической маршрутизации OSPF (локальная маршрутизация)
  • OpenBGPD — реализация протокола динамической маршрутизации BGP (глобальная маршрутизация).
  • OpenCVS — более гибкая, безопасная и свободная реализация CVS, чем разрабатываемая в рамках GNU.
Ваша оценка: Нет Средняя: 5 (10 голосов)

Установка

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

Удаленная установка OpenBSD

Возникла необходимость установить OpenBSD на компьютере лишенного CD-ROM и в наличие был только флоппи дисковод. Ну что же будем устанавливать систему из удаленных источников.

Для начала расскажу какие есть методы удаленной установки. Для начало вам нужно понять что для начала работы вам необходима программа установки с помощью которой вы сможете загрузится и установить систему скачав автоматически дистрибутив с существующих источников. Существуют различные вариации установки ISO образы, флоппи диски для ноутбуков, серверов и настольных ПК.

  • CD-R образ: cd45.iso - это 5 мегабайтный ISO файл содержит программу удаленной установки.
  • Floppy файл: floppy45.fs - это образ загрузочной дискеты удаленной установки.

Создание загрузочной дискеты

Windows XP вам необходимо использовать программу, ntrw.exe.
Пример использования программы ntrw:

C:\> ntrw floppy45.fs a:
3.5", 1.44MB, 512 bytes/sector
bufsize is 9216
1474560 bytes written

Создание установочой дискеты в Linux командой:

cp floppy45.fs /dev/fd0

Загрузка с дискеты и установка

Загружаетесь с созданной дискеты или с образа диска. Создаете разделы и тп все как в статье Установка OpenBSD 4.5. Но после указание Сетевой конфигурации нужно быть внимательным и указать в установке компонентов следующее:

Let's install the sets!
Location of sets? (cd disk ftp http or 'done') [cd] ftp
HTTP/FTP proxy URL? (e.g. 'http://proxy:8080', or 'none') [none] <enter>
Display the list of known ftp servers? [no] yes
Getting the list from 129.128.5.191 (ftp.openbsd.org)...

Отобразится список FTP серверов выберете ближайший сервер, для более быстрой загрузки. И затем программа установки спросит какой сервер выбрать тип подключения и компоненты.

Server? (IP address, hostname, list# or 'done') [q] 5
Using  ftp5.usa.openbsd.org/pub/OpenBSD Redwood City, CA, USA
Server? (IP address, hostname , list#, 'done' or '?') [ftp5.usa.openbsd.org] <enter>
Does the server support passive mode ftp? [yes] <enter>
Server directory? [pub/OpenBSD/4.5/i386] <enter>
Login? [anonymous] <enter>


Все остальное последовательно проделываете как в статье Установка OpenBSD 4.5.

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

Установка OpenBSD 4.5

OpenBSD — свободная многоплатформенная операционная система, основанная на 4.4BSD — BSD-реализации UNIX системы. Основным отличием OpenBSD от других свободных операционных систем, базирующихся на 4.4BSD (таких, как NetBSD, FreeBSD) является изначальная ориентированность проекта на создание наиболее безопасной, свободной и лицензионно чистой из существующих операционных систем.

OpenBSD отличается от других свободных BSD-систем своей системой разработки. Никакой код не может попасть в систему извне случайно; любые изменения просматриваются ответственными за соответствующую часть системы лицами. Любая ошибка, найденная в одном месте, вызывает пересмотр всего аналогичного кода. В системе уделяется огромное внимание качеству документации. Любая ошибка в man-странице считается серьёзной и
немедленно исправляется. Также большое внимание уделяется простоте и ясности кода — поскольку разработчики небезосновательно полагают, что чем проще код, тем меньше вероятность не заметить ошибку.

Разработчики категорически не приемлют использование любого несвободного кода в
системе. Неоднократно части операционной системы исключались из репозитория из-за
проблем с лицензированием:

Содержание:

  • Получение OpenBSD
  • Создание CD
  • Установка
  • Разбивка диска
  • Сетевая конфигурация
  • Установка компонентов
  • Ссылки

Получение OpenBSD

Есть три основных способа получить OpenBSD:

  • Купить диск с системой
  • Установить, используя FTP установку
  • Загрузить и использовать ISO с ftp OpenBSD

При покупке диска помимо OpenBSD вы еще получаете набор скомпилированного ПО, инструкции по работе с системой и многое другое, а так же помогаете развиваться проекту.

Создание CD

OpenBSD можно устанавливать как локально так и через удаленную установку например:

  • Floppy файл [floppy45.fs] - удаленная установка
  • CD-R образ [cd45.iso] - удаленная установка
  • CD-R установочный образ [install45.iso] - локальная установка

install45.iso - весь OpenBSD 4.5 включая дополнения, будут упакованы в 218 мегабайтный ISO файл, что позволит вам установить OpenBSD без соединения с сетью Интернет.
cd45.iso - этот 5 мегабайтный ISO файл содержит программу удаленной установки и используется в случае, если вы захотите установить OpenBSD удаленно.
floppy45.fs - так же вы можете создать установочную дискету удаленной установки.

В Windows XP вам следует использовать программу ntrw.exe
Пример использования ntrw:

C:\> ntrw floppy45.fs a:
3.5", 1.44MB, 512 bytes/sector
bufsize is 9216
1474560 bytes written

Создание установочой дискеты в Linux командой:

cp floppy45.fs /dev/fd0

Мы остановимся на варианте использования локального установочного образа install45.iso.

Установка

OpenBSD обладает надежной и адаптируемой системой установки с текстовым интерфейсом и может быть установлена с FDD, CD-ROM, по сети, с ленты, bsd.rd и тд. На большинстве платформ процедура установки одинакова, но имеются некоторые отличия в деталях. В любом случае рекомендую ознакомиться с файлом INSTALL в платформенном каталоге на CD или FTP.

Для установки OpenBSD используется специальное ядро с набором утилит и установочных скриптов, сжатых в единый загружаемый предварительно виртуальный диск в памяти. После загрузки ядра из сжатых архивных файлов tar извлекается операционная система. Для обновления и/или переустановки на всех платформах можно использовать bsd.rd. После загрузки установочного ядра вы можете получить установочные компоненты несколькими методами посредством CD, FTP, HTTP, NFS, HDD и ленты мы остановимся на CD.

Загружаемся (в OpenBSD все что выдает ядро подсвечивается синим маркером, а во FreeBSD белым :) )

erase ^?, werase ^W, kill ^U, intr ^C, status ^T
(I)nstall, (U)pgrade or (S)hell? i

Вам предлагается выбрать из трех вариантов это (I)nstall для установки или (U)pgrade для обновления старой версии OpenBSD и (S)hell для просмотра как система восприняла железо, есть ли ошибки при загрузке или произвести восстановление/обслуживание. Мы выбираем (I)nstall.

Welcome to the OpenBSD/i386 4.5 install program.
 
This program will help you install OpenBSD. At any prompt except password
prompts you can escape to a shell by typing '!'. Default answers are shown
in []'s and are selected by pressing RETURN.  At any time you can exit this
program by pressing Control-C, but exiting during an install can leave your
system in an inconsistent state.
 
Terminal type: [vt220] <enter>
kbd(8) mapping? ('L' for list) [none] ru

Terminal type - выбор типа терминала (оставьте по умолчанию, если вы не используете для установки последовательный порт)
kbd - раскладка клавиатуры (по умолчанию [us]) просмотр всего списка нажмем L и из него выберем ru.

IS YOUR DATA BACKED UP? As with anything that modifies disk contents, this
program can cause SIGNIFICANT data loss.
 
It is often helpful to have the installation notes handy. For complex disk
configurations, relevant disk hardware manuals and a calculator are useful.
 
Proceed with install? [no] yes

Предупреждение, что при входе в переборку откачайте надежду на возвращение и сохраните данные. Соглашаемся войти :)

Разбивка диска

Разбивка диска протекает, так же как и в FreeBSD в два этапа сначала выделяется слайс жесткого диска с помощью fdisk, а затем слайс разбивается на разделы с использованием disklabel.

Cool!  Let's get to it.
 
You will now initialize the disk(s) that OpenBSD will use. To enable all
available security features you should configure the disk(s) to allow the
creation of separate filesystems for /, /tmp, /var, /usr, and /home.
 
Available disks are: wd0.
Which one is the root disk? (or done) [wd0] <enter>
Do you want to use *all* of wd0 for OpenBSD? [no] yes
Putting all of wd0 into an active OpenBSD MBR partion (type 'A6')...done.
 
You will now create an OpenBSD disklabel inside the OpenBSD MBR
partition. The disklabel defines how OpenBSD splits up the MBR partition
into OpenBSD partitions in which filesystems and swap space are created.
 
The offsets used in the disklabel are ABSOLUTE, i.e. relative to the
start of the disk, NOT the start of the OpenBSD MBR partition.
 
# Inside MBR partition 3: type A6 start 63 size 80292807
 
Treating sectors 63-80292870 as the OpenBSD portion of the disk.
You can use the 'b' command to change this.
 
Initial label editor (enter '?' for help at any prompt)

OpenBSD спрашивает, на каком диске размещаться. IDE диски определяются как wd0, wd1, тд. А SCSI и RAID диски как sd0, sd1, и тд. В этом списке будут все определенные диски. Так же OpenBSD спрашивает, можно ли использовать весь этот диск под систему.

fdisk

Использование этой программы аналогично FreeBSD.

fdisk: 1> help
 
help Command help list
manual Show entire OpenBSD man page for fdisk
reinit Re-initialize loaded MBR (to defaults)
setpid Set the identifier of a given table entry
disk Edit current drive stats
edit Edit given table entry
flag Flag given table entry as bootable
update Update machine code in loaded MBR
select Select extended partition table entry MBR
swap Swap two partition entries
print Print loaded MBR partition table
write Write loaded MBR to disk
exit Exit edit of current MBR, without saving changes
quit Quit edit of current MBR, saving current changes
abort Abort program without saving current changes
 
fdisk: 1> 

Немного перевода:
reinit [r] - заново инициализирует загрузочный MBR.
print [p] - отображает разделов в "p m" - в мегабайтах, и "p g" - в гигабайтах.
write [w] - запись загрузочного MBR на диск.
edit [e] - редактирование записи.
flag [f] - помечает необходимый раздел как активный (с чего грузимся).
update [u] - устанавливает в MBR загрузочный код OpenBSD, как "reinit", но без изменения существующей таблицы разделов.
exit [e] - не сохранять изменения при выходе.
quit [q] - сохранять изменения при выходе.

Так как у нас новый диск cделаем reinit

fdisk: 1> r

Нас вежливо попросят Use 'write' to update disk, что и выполним.
fdisk: 1> w
Writing MBR at offset 0.

Выйдем сохраняя изменения.

fdisk: 1> q

disklabel

Теперь нам необходимо разбить слайс, на разделы, используя disklabel.
Некоторые команды:
p — вывод на экран информации о разбиении, используйте команду с ключами k, m или g для вывода в кило-, мега- и гигабайтах.
D — стирает существующую таблицу, создает новую со схемой по умолчанию, которая заполняет весь текущий слайс OpenBSD. Эту команда бывает полезна в случае, если на диске уже была какая-либо старая таблица, а заново созданный слайс OpenBSD имеет другой размер — в этом случае старая таблица может сохраниться и стать источником ,недоразумений.
m — Модификация существующей таблицы. Несмотря на то, что она может изменять размер раздела в таблице disklabel, она НЕ будет изменять файловые системы на диске.

В отличие от FreeBSD в которой каждому разделу автоматически присваивается буква слайса в OpenBSD мы должны сами ее назначить. Так же обязательно создание разделов 'a' и 'b' без них установки не пойдет дальше.
Используемые буквенные обозначения:

  • 'a' - /
  • 'b' - SWAP
  • 'd' - /tmp
  • 'e' - /var
  • 'g' - /usr
  • 'h' - /home

Процесс создания слайса происходит в несколько этапов рассмотрим их.

> a a
offset: [3069360] Enter
size: [36030960] 150m
Rounding to nearest cylinder: 307440
FS type: [4.2BSD] Enter
mount point: [none] /

Рассмотрим более подробно:
a a - создаем новый слайс с буквенным обозначением 'а'.
offset: [3069360] Enter - отступ.
size: [36030960] 150m - выделяем необходимый размер под слайс (m, g).
FS type: [4.2BSD] Enter - потверждаем, что будем использовать основной тип ФС.
mount point: [none] / - указываем точку монтирования корневой ФС.

Приступим.

 > a a
 offset: [63] Enter
 size: [10474317] 256m
 Rounding to nearest cylinder: 530082
 FS type: [4.2BSD] Enter
 mount point: [none] /
 > a b
 offset: [530145] Enter
 size: [9944235] 512m
 Rounding to nearest cylinder: 1060290
 FS type: [swap] Enter
 > a d
 offset: [1590435] Enter
 size: [8883945] 256m
 Rounding to nearest cylinder: 530145
 FS type: [4.2BSD] Enter
 mount point: [none] /tmp
 > a e
 offset: [2120580] Enter
 size: [8353800] 1g
 Rounding to nearest cylinder: 2104515
 FS type: [4.2BSD] Enter
 mount point: [none] /var
 > a g
 offset: [4225095] Enter
 size: [6249285] 1.5g
 Rounding to nearest cylinder: 3148740
 FS type: [4.2BSD] Enter
 mount point: [none] /usr
 > a h
 offset: [7373835] Enter
 size: [3100545] 1.4g
 Rounding to nearest cylinder: 2939895
 FS type: [4.2BSD] Enter
 mount point: [none] /home
 > p g
 device: /dev/rwd0c
 type: ESDI
 disk: ESDI/IDE disk
 label: ST320011A
 bytes/sector: 512
 sectors/track: 63
 tracks/cylinder: 255
 sectors/cylinder: 16065
 cylinders: 652
 total sectors: 5.0G
 free sectors: 0.0G
 rpm: 3600
 16 partitions:
#        size     offset  fstype [fsize bsize  cpg]
a:       0.3G       0.0G  4.2BSD   2048 16384   16 # /
b:       0.5G       0.3G    swap                   
c:       5.0G       0.0M  unused      0     0      
d:       0.3G       0.8M  4.2BSD   2048 16384   16 # /tmp
e:       1.0G       1.0G  4.2BSD   2048 16384   16 # /var
g:       1.5G       2.0G  4.2BSD   2048 16384   16 # /usr
h:       1.4G       3.5G  4.2BSD   2048 16384   16 # /home

Наверное заметили раздел 'c'

c:       5.0G       0.0M  unused      0     0

Этот раздел весь наш диск и не нужно его трогать.
Записываем изменения и выходим
> q
Write new label?: [y] Enter

Точек монтирования

Конечный этап - определения точек монтирования и форматирование. Как мы определили выше точки монтирования с помощью disklabel, то вам нужно будет лишь проверить правильность монтирования, в случае ошибки вы можете исправить их здесь. А если все в порядке то можно подтвердить точку монтирования Enter и если закончили и пошли по второму кругу подтверждения, то напишите 'done' и нажмите Enter.

Mount point for wd0d (size=265072k)? (or 'none' or 'done') [/tmp] Enter
Mount point for wd0e (size=1052257k)? (or 'none' or 'done') [/var] Enter
Mount point for wd0g (size=1574370k)? (or 'none' or 'done') [/usr] Enter
Mount point for wd0h (size=1469947k)? (or 'none' or 'done') [/home] Enter
Mount point for wd0d (size=265072k)? (or 'none' or 'done') [/tmp] done
No more disks to initialize.
OpenBSD filesystems:
wd0a /
wd0d /tmp
wd0e /var
wd0g /usr
wd0h /home
 
The next step *DESTROYS* all existing data on these partitions!
Are you really sure that you're ready to proceed? [no] y

После подтверждения мы переходим к следующему этапу.

Сетевая конфигурация

Я приведу вымышленные настройки, которые естественно никому не подойдут. Используйте свои настройки.

System hostname (short form, e.g. 'foo'): home
Configure the network? [yes] <enter>
Available interfaces are: fxp0.
Which one do you wish to initialize? (or 'done') [fxp0] <enter>
Symbolic (host) name for fxp0? [home] <enter>
The media options for fxp0 are currently
      media: Ethernet autoselect (100baseTX full-duplex)
Do you want to change the media options? [no] <enter>
IPv4 address for fxp0? (or 'none' or 'dhcp') 192.168.0.3
Netmask? [255.255.255.0] <enter>
IPv6 address for fxp0? (or 'rtsol' or 'none') [none] <enter>
No more interfaces to initilaize.
DNS domain name? (e.g. 'bar.com') [my.domain] ampul.local 
DNS nameserver? (IP address or 'none') [none] 192.168.0.1
Use the nameserver now? [yes] <enter>
Default IPv4 route? (IP address, 'dhcp' or 'none') 192.168.0.10
add net default: gateway 192.168.0.10
Edit hosts with ed? [no] <enter> 
Do you want to do any manual network configuration? [no] <enter>
Password for root account? (will not echo) password
Password for root account? (again) password

Посредством DHCP можно настроить только один из сетевых интерфейсов. Остальные интерфейсы необходимо править самим после установки.

В OpenBSD по умолчанию разрешен заход root по ssh. Для запрета такого поведения после создания wheel пользователя в файле /etc/ssh/sshd_config пропишите параметр PermitRootLogin no и перезапустить демон ssh.

Установка компонентов

Нам будет предложенно установить систему с CD, ftp и тд. и мы выбираем CD.

Let's install the sets!
 Location of sets? (cd disk ftp http or 'done') [cd] Enter
 Available CD-ROMs are: cd0.
 Which one contains the install media? (or 'done') [cd0] Enter
 Pathname to the sets?  (or 'done') [4.5/i386] Enter

Полная установка OpenBSD разбита на некоторое количество компонентов. Не каждое приложение требует наличия всех компонентов. Вот краткое описание:

  • bsd — основное ядро. (Необходимо).
  • bsd.mp — ядро для многопроцессорных (SMP) машин.
  • bsd.rd — ядро с виртуальным RAM-диском
  • base45.tgz — базовая система OpenBSD (Необходимо).
  • etc45.tgz — содержит все файлы в /etc (Необходимо).
  • comp45.tgz — содержит компиляторы и необходимые для разработки инструменты, заголовочные файлы и библиотеки. Рекомендуется).
  • man45.tgz — руководства (маны) (Рекомендуется).
  • misc45.tgz — разная информация, документация по настройке.
  • game45.tgz — игры.
  • xbase45.tgz — базовая установка X11.
  • xetc45.tgz — Содержит конфигурационные файлы /etc/X11 и /etc/fonts.
  • xfont45.tgz — Содержит сервер шрифтов и шрифты X11.
  • xserv45.tgz — Серверы X11.
  • xshare45.tgz — руководства, установки локали, заголовочные файлы и др. для X11.

    • Пакеты etc45.tgz и xetc45.tgz не устанавливаются при обновлении FreeBSD, только при полной установке. И вам придется вручную отредактировать /etc, /dev и /var. Некоторые программы иногда требуют установленного xbase45.tgz и вы можете поставить его позже.
      Select sets by entering a set name, a file name pattern or 'all'. De-select
      sets by prepending a '-' to the set name, file name pattern or 'all'. Selected
      sets are labelled '[X]'.
       
              [X] bsd
              [X] bsd.rd
              [ ] bsd.mp
              [X] base45.tgz
              [X] etc45.tgz
              [X] misc45.tgz
              [X] comp45.tgz
              [X] man45.tgz
              [X] game45.tgz
              [ ] xbase45.tgz
              [ ] xetc45.tgz
              [ ] xshare45.tgz
              [ ] xfont45.tgz
              [ ] xserv45.tgz
      Set Name? (or 'done') [bsd.mp] +bsd.mp
      Set Name? (or 'done') [bsd.mp] -bsd.mp
      Set name? (or 'done') [bsd.mp] all
       
              [X] bsd
              [X] bsd.rd
              [X] bsd.mp
              [X] base45.tgz
              [X] etc45.tgz
              [X] misc45.tgz
              [X] comp45.tgz
              [X] man45.tgz
              [X] game45.tgz
              [X] xbase45.tgz
              [X] xetc45.tgz
              [X] xshare45.tgz
              [X] xfont45.tgz
              [X] xserv45.tgz
      Set name? (or 'done') [done] <enter>
      Ready to install sets? [yes] <enter>
      Getting bsd ...
      100% |**************************************************|  5972 KB    00:26    
      Getting bsd.rd ...
      100% |**************************************************|  4887 KB    00:25    
      Getting bsd.mp ...
      100% |**************************************************|  6020 KB    00:23    
      Getting base45.tgz ...
      100% |**************************************************| 41437 KB    02:39    
      Getting etc45.tgz ...
      100% |**************************************************|  1210 KB    00:08    
      Getting misc45.tgz ...
      100% |**************************************************|  2238 KB    00:14    
      Getting comp45.tgz ...
      100% |**************************************************| 76666 KB    01:36    
      Getting man45.tgz ...
      100% |**************************************************|  7473 KB    00:30    
      Getting game45.tgz ...
      100% |**************************************************|  2548 KB    00:12    
      Getting xbase45.tgz ...
      100% |**************************************************| 10344 KB    00:51    
      Getting xetc45.tgz ...
      100% |**************************************************| 90772       00:03    
      Getting xshare45.tgz ...
      100% |**************************************************|  2024 KB    00:10    
      Getting xfont45.tgz ...
      100% |**************************************************| 32456 KB    02:41    
      Getting xserv45.tgz ...
      100% |**************************************************| 19365 KB    01:26   
       
      Location of sets? (cd disk ftp http or 'done') [done] <enter>


      Закончили установку и теперь необходимо ответить на несколько вопросов. Запускать SSHD при старте системы, синхронизироваться с сервером времени, запустить иксы и пользуетесь ли вы консолью на com-порте далее предложат, выбрать часовой пояс.
      Start sshd(8) by default? [yes] <enter>
      NTP server? (or 'none' or 'default') [none] <enter>
      Do you expect to run the X Window System? [no] <enter>
      Change the default console to com0? [no] <enter>
      Saving configuration files...done.
      Generating initial host.random file...done.
      What timezone are you in? ('?' for list) [Canada/Mountain] ?
      Africa/      Chile/       GB-Eire      Israel       NZ-CHAT      UCT
      America/     Cuba         GMT          Jamaica      Navajo       US/
      Antarctica/  EET          GMT+0        Japan        PRC          UTC
      Arctic/      EST          GMT-0        Kwajalein    PST8PDT      Universal
      Asia/        EST5EDT      GMT0         Libya        Pacific/     W-SU
      Atlantic/    Egypt        Greenwich    MET          Poland       WET
      Australia/   Eire         HST          MST          Portugal     Zulu
      Brazil/      Etc/         Hongkong     MST7MDT      ROC          posix/
      CET          Europe/      Iceland      Mexico/      ROK          posixrules
      CST6CDT      Factory      Indian/      Mideast/     Singapore    right/
      Canada/      GB           Iran         NZ           Turkey       zone.tab
      What timezone are you in? ('?' for list) [Canada/Mountain] Europe
      Select a sub-timezone of 'Europe' ('?' for list): Moscow
      Setting local timezone to 'Europe/Moscow'...done.
      Making all device nodes...done.
      Installing boot block...
      boot: /mnt/boot
      proto: /usr/mdec/biosboot
      device: /dev/rwd0c
      /usr/mdec/biosboot: entry point 0
      proto bootblock size 512
      /mnt/boot is 3 blocks x 16384 bytes
      fs block shift 2; part offset 63; inode block 104, offset 11816
      using MBR partition 3: type 166 (0xa6) offset 63 (0x3f) 
      done.
       
      CONGRATULATIONS! Your OpenBSD install has been successfully completed!
      To boot the new system, enter halt at the command prompt. Once the
      system has halted, reset the machine and boot from the disk.
      # halt
      syncing disks... done
       
      The operating system has halted.
      Please press any key to reboot.

      Ну вот и все! :)
      Как говорится в первом Message - Welcome to OpenBSD 4.5! Secure bu Default!

      После установки - первая загрузка

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

      # man afterboot

      Ссылки

      • OpenBSD 4.5 Installation Guide
      • Предыдущая статья "Установка OpenBSD 4.2"

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

Настройка

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

Шлюз (NAT) + DHCP-сервер на OpenBSD

В этой статье я хочу рассказать о своём опыте создания шлюза на базе операционной системы (ОС) OpenBSD, так как, по-моему, это оптимальное решение для большинства организаций, офисов и, в особенности, для дома. Здесь я не буду давать подробные теоретические выкладки, коих и так полно в Интернете и документации, а просто постараюсь кратко и лаконично изложить основные шаги для достижения цели.

Содержание:

  • Введение
  • Установка
  • Сетевые настройки
  • NAT
  • DHCPD
  • Заключение

Введение

Итак. Почему я выбрал в качестве основы для сервера (шлюза) именно систему OpenBSD, а не какую-то другую? Этот выбор не случайный, а вполне обоснованный, и причин для выбора данной ОС более чем достаточно. Дело в том, что до OpenBSD мне приходилось работать со многими системами (DOS, Windows, Linux, Lindows, BeOS, FreeBSD и т.д.), однако ни одна из них меня настолько не впечатлила своей простотой, целостностью, гибкостью и надёжностью как OpenBSD.
Для начала давайте определимся чего мы хотим, что конкретно и как должен делать наш сервер. Если это обычный шлюз (типа "мост"), то достаточно просто включить перенаправление сетевого трафика с одной сетевой карты на другую и всё. Делается это правкой всего двух-трёх конфигурационных файлов. Если же наш сервер должен выполнять ещё какие-то функции, то это уже сложнее, но не намного.

Установка

Возьмём более или менее стандартную ситуацию. Допустим нам нужно просто-напросто соединить локальную сеть провайдера, типа 10.135.62.0 (класса A), провод от которой приходит к нам в дом или офис, и нашу внутреннюю (локальную) сеть Ethernet, типа 172.18.7.0 (класса B), которая проложена по офису или квартире. Адреса сетей могут быть и другими (и других классов), это несущественно. Практически то же самое представляет собой соединение через ADSL- или кабельный модем, который имеет обычный сетевой выход и выполняет функцию роутера. Плюс к этому, для уменьшения точек (узлов) настройки и облегчения администрирования, на шлюз мы поставим DHCP-сервер, который будет автоматически назначать адреса всем компьютерам локальной сети. Теперь, когда задача ясна, приступим к её решению.
Для этого понадобится сделать всего 4 шага:

  1. собрать компьютер для нашего шлюза (возьмём старый IBM PC Pentium II).
  2. установить и настроить саму ОС (мы будем ставить OpenBSD 4.8 для платформы i386).
  3. настроить пересылку пакетов (трансляцию трафика) между сетевыми интерфейсамию.
  4. настроить сервер DHCP (DHCPD).

На выполнение всех этих действий уйдёт всего несколько минут! Итак, приступим.

Оборудование

Для шлюза можно взять любой старый компьютер (например, приготовленный на выброс или списанный в утиль) или, при его отсутствии, покупаем такой компьютер через Интернет или у знакомых (или берём старьё в другой организации). Стоит он копейки, или даже совсем ничего не стоит, так как это хлам. Также, можно собрать такую машину из старых запчастей, которых в организациях и у компьютерщиков, обычно, навалом! Не забудьте поставить в него 2 сетевые карты (ведь сети у нас 2).

Операционная система

Дальше скачиваем с официального сайта http://openbsd.org/ последний стабильный релиз OpenBSD (ISO-образ) и записываем его на CD или DVD (ну или на другой носитель, если Вы будете ставить систему с него). Затем вставляем этот диск в наш будущий сервер и устанавливаем с него OpenBSD. Для полноценного понимания установки можете прочитать статью Установка OpenBSD 4.5

Сетевые настройка

Теперь у нас есть действующий сервер с уже работающими и подключёнными сетевыми интерфейсами, если конечно Вы их правильно настроили при установке. Если нет, тоже не так страшно, просто отредактируйте конфигурационные файлы сетевых карт типа /etc/hostname.fxp0 и /etc/hostname.rtl0 (здесь предполагается, что наши сетевые карты определены как fxp0 и rtl0). Посмотреть список всех подобных файлов можно командой ls, например:

# ls /etc/hostname.*

Чтобы убедиться в правильности настроек, можно вывести параметры всех сетевых интерфейсов с помощью команды ifconfig, например так:

# ifconfig -a

Или же просто пустить ping на те адреса, которые вы указали в настройках, например:

# ping 10.135.62.26

10.135.62.26 - IP-адрес от Вашего провайдера или модема.
# ping 172.18.7.1

172.18.7.1 - IP-адрес Вашего внутреннего интерфейса.

Если проверка прошла успешно, переходим к настройкам трансляции сетевого трафика между нашими сетями (NAT).

NAT

Для трансляции сетевого трафика между нашими сетями (NAT) достаточно включить forwarding (пересылку) в файле /etc/sysctl.conf:

net.inet.ip.forwarding=1   # для протокола TCP 4-й версии
net.inet6.ip6.forwarding=1 # для TCP 6-й версии, если она используется

А также настроить встроенный пакетный фильтр (pf) на работу в качестве NAT (Network Address Translation). Делается это в файле конфигурации /etc/pf.conf с помощью параметра nat-to, например так:

pass out on $ext_if from 172.18.7.0/16 nat-to 10.135.62.26

В данном случае мы перенаправляем весь трафик из внутренней (локальной) сети 172.18.7.0 на адрес провайдера (или модема) 10.135.62.26.
Обратите внимание на переменную $ext_if. Вместо неё должно быть подставлено название внешнего интерфейса (который подключён к сети провайдера). Обычно она определяется в самом начале pf.conf примерно следующим образом:

ext_if="fxp0" # если fxp0 имеет адрес 10.135.62.26, как в нашем примере

Ну вот и все настройки NAT-а в OpenBSD. Как видите это делается правкой всего двух конфигов, в которые нужно дописать по одной строчке. Простота и доступность - главные преимущества систем BSD!

Автозагрузка

Осталось только добавить NAT (точнее pf) в автозагрузку. Самый простой способ это сделать - найти и изменить строчку типа "pf=" в файле /etc/rc.conf, должно быть так:

pf=YES

После перезагрузки Вы увидите, что pf был запущен и настроен, а следовательно, все пользователи локальной сети могут подключаться к сети провайдера и наслаждаться доступом в Интернет!

DHCPD

Ну и последний штрих в настройке нашего сервера - включение и настройка DHCPD. Эта штука позволит нам автоматически раздавать IP-адреса, ограничивать количество компов в сети, а также изолировать некоторые компьютеры в отдельные сетевые группы не вставая из-за консоли сервера. Причём все настройки делаются в одном единственном файле - /etc/dhcpd.conf, например так:

option domain-name-servers 10.135.62.2;
 
 subnet 172.18.7.0 netmask 255.255.0.0 {
 
  routers 172.18.7.1;
 
  range 172.18.7.130 172.18.7.190;
 
 }

В этом примере мы указываем общий для всех DNS-сервер 10.135.62.2, затем создаём подсеть (блок адресов) из 60 адресов (с 172.18.7.130 по 172.18.7.190) и прописываем для неё шлюз (маршрутизатор) 172.18.7.1. Таким образом, компьютеры локальной сети, при обращении к нашему серверу будут получать свободный адрес из указанного диапазона, шлюз 172.18.7.1 и DNS-сервер 10.135.62.2. И таких подсетей можно сделать сколько угодно с разными настройками.
Если же в этот диапазон попал, например, принтер или просто требуется жёсткая привязка компьютера к какому-то IP-адресу, тоже не проблема. Нужно всего лишь указать MAC-адрес сетевой карты этого компа и выделить ему IP, например так:

host static-client {
 
hardware ethernet 00:12:25:2a:3c:17;
fixed-address 172.18.7.150;
 
}

Таким образом мы делаем постоянную привязку IP-адреса 172.18.7.150 к MAC-адресу 00:12:25:2a:3c:17. То есть только компьютер (или принтер) с MAC-ом 00:12:25:2a:3c:17 будет получать IP-шник 172.18.7.150, он будет для этой машины зарезервирован. И, опять же, таких привязок можно сделать сколько угодно, хоть на всю подсеть, например так:

subnet 172.18.7.0 netmask 255.255.0.0 {
 
  routers 172.18.7.1;
 
  range 172.18.7.130 172.18.7.190;
 
 host static-client {
 
   hardware ethernet 00:12:25:2a:9c:12;
   fixed-address 172.18.7.140;
 
 }
 
 host static-client1 {
 
   hardware ethernet 00:12:25:2a:3c:17;
   fixed-address 172.18.7.150;
 
 }
 
 host static-client2 {
 
   hardware ethernet 00:12:25:4b:3c:45;
   fixed-address 172.18.7.160;
 
 }
 
}

В этом примере зарезервированы 3 адреса: 172.18.7.140, 172.18.7.150, 172.18.7.160.
В завершение включаем автоматический запуск данного демона (службы) всё в том же /etc/rc.conf следующей строчкой:

dhcpd_flags=""

Её просто нужно найти и поменять значение параметра.

Ну вот и всё. После перезагрузки компьютера Вы увидите запуск всех настроенных демонов (сервисов), а проверить их работу и состояние можно с помощью команды pgrep, например:

# pgrep -lf dhcpd

При этом на экран будет выведен номер процесса (PID) и ссылка на сам DHCP-сервер. Аналогично проверяется работа и других сервисов (демонов), запущенных в OpenBSD.

Для более расширенной настройки DHCPD демона прочтите следующую статью ISC-DHCP

Заключение

Как видите в создании сервера (шлюза) на базе операционной системы OpenBSD нет ничего сложного и страшного. Попробуйте, у Вас обязательно получится!

Калегин Сергей Николаевич
май 2011 года

Дополнительные материалы
Ссылки: 
Задать вопрос по статье [Форум]
Скачать книги по OpenBSD [Библиотека]
Скачать книги о PF [Библиотека]
Ваша оценка: Нет Средняя: 3.3 (43 голоса)

Демоны

Ваша оценка: Нет Средняя: 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 голоса)

Файловая система

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

Дополнительно

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

Защита ssh от брутфорса на OpenBSD

Блокировка брутфорс атак на ssh средствами sshwatchd

Ставим:

cd /usr/ports/security/
wget http://www.ignix.ru/system/files/sshwatchd.tar.gz

tar xfv sshwatchd.tar.gz
cd /usr/ports/security/sshwatchd/
make && make install clean 

Проверяем, если всё в порядке то увидим примерно это:
ls /usr/local/sbin | grep sshwatchd 
-r-xr-xr-x  1 root  bin  14.2K Feb 16 08:37 sshwatchd

Правим /etc/rc.local:

У меня допускается 2 ошибки за 60 секунд.
vi /etc/rc.local

if [ -x /usr/local/sbin/sshwatchd ]; then
        /usr/local/sbin/sshwatchd -s 60 -m 2  && echo -n ' sshwatchd'
fi


Правим /etc/pf.conf:
vi /etc/pf.conf
table <blocked> persist
block in log quick from <blocked>
pass in on $int_if proto tcp from $int_if:network to $int_if port ssh synproxy state
pass in on $ext_if proto tcp from any to $ext_if port ssh synproxy state

Варианты запуска sshwatchd:


usage: sshwatchd [-dk] [-f logfile] [-l facility] [-m maxfails] [-s seconds] [-t table]

  • -d - Отладочный режим. Не отцепляться от терминала, на stderr выводить диагностические сообщения.
  • -f logfile - Указывает log файл, за которым нужно наблюдать. По умолчанию используется /var/log/authlog.
  • -k - Указывает на то, что при блокировке адреса следует убить PF статы, относящиеся к нему.
  • -l facility - Указывает syslog facility. Допустимыми значениями являются auth, authpriv, daemon, local0-local7. Значение по умолчанию auth.
  • -m maxfails - Указывает количество ошибок авторизации за заданный промежуток времени, вызывающее блокировку адреса. Значение по умолчанию 8.
  • -s seconds - Указывает промежуток времени для измерения количества ошибок авторизации в секундах. Значение по умолчанию 5.
  • -t table - Указывает имя PF таблицы, в которую добавляются заблокированные адреса. Значение по умолчанию blocked.

Посмотреть тех кто в таблице можно так:

pfctl -t blocked -T show

Удалить ip адрес (например 192.168.1.9), из таблицы можно так:
pfctl -t blocked -T delete 192.168.1.9

осталось настроить cron
crontab -e

30  *  *  *  *  /sbin/pfctl -t blocked -T expire 86400

Каждые час (в 30 минут) "-T expire 86400" удаляет все записи из таблицы старше 86400 секунд (сутки)

В OpenSSH версий до 4.3 включительно при использовании режима разделения привилегий (режим по умолчанию) на каждую ошибку авторизации в лог пишутся два сообщения.

На всякий случай программа по умолчанию собирается как static.

Чтобы собрать dynamic вариант, нужно дать команду "make LDSTATIC=".

Также можно защитится от ssh брутфорса и средствами pf (Защита ssh от брутфорса)

ВложениеРазмер
sshwatchd.tar.gz30 КБ
Дополнительные материалы
Ссылки: 
sshwatchd
Голосов пока нет

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