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