FreeBSD. Руководство пользователя


495 68 4MB

Russian Pages 555 Year 2006

Report DMCA / Copyright

DOWNLOAD PDF FILE

Recommend Papers

FreeBSD. Руководство пользователя

  • 0 0 0
  • Like this paper and download? You can publish your own PDF file online for free in a few minutes! Sign Up
File loading please wait...
Citation preview

Daemon News Russia

новости ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь

Инсталляция системы; Работа в сети; Конфигурирование и перегенерация ядра; Начальная загрузка и останов системы; Краткое описание некоторых полезных команд; Несколько слов о "режиме безопасности"; Инсталляция FreeBSD в качестве Internet-сервера; Интерактивные интерфейсы пользователей; Как перевести систему от a.out к ELF (миграция с 2.X на 3.X); Конфигурация (Fast) Ethernet; Типы файлов и права доступа; Управление процессами; Регистрация в системе и учет системных ресурсов; Пользовательские бюджеты и группы (часть 1); Пользовательские бюджеты и группы (часть 2); Конфигурирование принтеров и очередей FreeBSD; Настраиваем socks5 для работы с ICQ;

Система X Window; Конфигурация IPX под FreeBSD; Работа с man- страницами; UNIX и интернет; UDP Scanner for UniX - просто? Администрирование UNIX через Webmin; Вопросы безопасности в ОС семейства UNIX; Гадости на FreeBSD; Меняем баннеры некоторых демонов; Русификация; Сжатие файлов: программа gzip; Создание архивов: программа tar; BASTION ROUTER на базе FreeBSD; Fido станция под Unix; FreeBSD и безопасность; ProFTPD в FreeBSD; UUCP - Unix to Unix Copy; Использование VINUM под FreeBSD; Краткое руководство по настройке uucp почты в FreeBSD; Некоторые аспекты безопасности Веб-серверов на Unix платформах; Форматирование дисков в FreeBSD; PortSentry - узнай своих врагов в лицо; История UNICS (aka UNIX) и семейства;

http://www.freebsd.bip.ru/lib.shtml (1 of 3)10.04.2004 17:23:21

Daemon News Russia

FTN - софт под FreeBSD; ● Пример подсчета трафика через ipfw; ● Пример построения пакетного фильтра на ipfw; ● Настройка IOMEGA ZIP 100 LTP в операционной системе FreeBSD; ● Какие бывают юниксойды; ● Как добавить юзера? ● Как создать или удалить группу? ● Kак удалить юзера? ● Установка сервера Apache; ● Дерево, на котром живут черти; ● Работа с E-mail; ● Выделенная линия между сервером клиента с Windows NT4 и FreeBSD; ● Готовность к 2000 году ("Ошибка тысячелетия"); ● Добавление жестких дисков для FreeBSD версий 2.2.5 и выше; ● Редактор vi; ● NFS; ● Создание Web-сервера на базе Apache версии 1.3.* Rus, интегрированного с СУБД MySQL версии 3.22.32 посредством гипертекстового препроцессора PHP версии 3.0.*; ● Мосты; ● Инсталяция FireWall; ● Интерпритатор команд; ● Причины существования уязвимостей в UNIX-системах; ● Новое в мире демонов: FreeBSD 4.4; ● Установка и конфигурирование fetchmail; ● Установка и конфигурирование postfix; ● Мониторинг траффика с использованием trafd; ● Эффекты тонкой настройки; ● Инсталяция MRTG (Multi Router Traffic Grapher); ● WWW Proxy; ● Построение межсетевого экрана на коммутируемом канале связи при помощи FreeBSD; ● Использование загрузчика Windows NT для загрузки FreeBSD; ● ОС BSD жила, живет и будет жить; ● Настройка NATD в среде FreeBSD; ● Синхронизация своей FreeBSD машины с мировым временем по протоколу NT; ● Установка защищенного соединения на FreeBSD; ● Надежная SMB; ● Трюки BSD - Memory File System; ● Пять причин, почему не стоит устанавливать Linux у себя дома; ● Запуск механизма квот; ● Конфигурирование SLIP-сервера; ● UNIX: достоинства, недостатки и эмоции; ● Использование IPSec в среде Windows 2000 и FreeBSD; ● Введение в демонологию или сколько BSD-систем может уместиться на PC; ● Маленькие ньюансы при установке и настройке ProFTPD; ● FreeBSD-4.x and multimedia; ● Поиск в unix; ● Скроллер; ●

http://www.freebsd.bip.ru/lib.shtml (2 of 3)10.04.2004 17:23:21

Daemon News Russia

Пишем perl-скрипт для trafd; ● Защита сетей общего пользования от хищения параметров IP; ● Создание моста-фильтра на основе FreeBSD; ● Policy routing в FreeBSD с помощью ipfw; ● Введение в автоматизацию. Часть 1; ● Исследуем процессы. Часть 2; ● Интеграция Антивируса Касперского с почтовой системой; ● Руководство по настройке аутентификации пользователей посредством LDAP; ● Accept-фильтры; ● FreeBSD 4.3 и Initial Sequence Number; ● FAQ по установке и настройке IC-RADIUS под FreeBSD; ● VMware2 и образы компактных дисков; ● Ограничение доступа пользователей; ● Как вернуть мышь из четвёртого измерения с плюсом; ● Как настроить PnP во FreeBSD; ● Aдреса в TCP/IP; ● Оболочки; ● FreeBSD на лэптопах; ● Переход с Linux на FreeBSD; ● Бездисковый X-сервер: руководство по настройке; ● Звук во FreeBSD; ● Мультимедиа в FreeBSD; ● Просмотр DVD фильмов на FreeBSD; ● Простая и эффективная система подсчета трафика в ОС FreeBSD; ● Построение Частных Виртуальных Сетей на основе UNIX сервера FreeBSD; ● Мини-руководство по созданию Makefile-ов; ● Система фильтрации интернет траффика на основе squidGuard + Apache + Squid + Berkeley DB; ● GPL или BSD? Да!; ● Установка Oracle8i 8.1.7.4 на FreeBSD шаг за шагом; ● Настройка почтового сервера на базе sendmail на FreeBSD 4.7; ● Postfix изнутри; ● Настройка VLAN в FreeBSD; ● Создание бездисковых терминалов; ● Мультиплексор MOXA в FreeBSD; ● Сохранение и восстановление операционной системы FreeBSD; ● Обновление локального дерева портов в FreeBSD; ● Создание системы сетевого мониторинга на основе Nagios; ●

(c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/lib.shtml (3 of 3)10.04.2004 17:23:21

Daemon News Russia

Название FreeBSD

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Пояснение Последняя версия FreeBSD

arc

Создает и извлекает файлы из DOS .ARC файлов

bzip

Архиватор файлов с блочной сортировкой

fastjar

Версия архиватора jar из поставки JDK написанная полностью с использованием C

freeze

Программа архивации - часто используемая в QNX

hpack

Многосистемный архиватор с поддержкой шифрования с открытым ключем на базе PGP

lha

Архиватор файлов использующий метод компрессии LZW (.lzh файлы)

zip

Создает/изменяет ZIP файлы совместимые с pkzip Требует: unzip-5.42

zoo

Манипулирует архивами файлов в упакованном виде

новости

http://www.freebsd.bip.ru/soft.shtml (1 of 4)10.04.2004 17:23:22

Daemon News Russia

bonnie

Тест на производительность Файловой Системы

iozone

Тест на производительность последовательного файлового ввода/ вывода

lmbench

Программа оценки производительности системы

nbench

Родные тесты Журнала BYTE

netpipe

Самомасштабирующийся сетевой тест

polygraph

Программа оценки производительности web proxy серверов

postmark

Программа тесторования скорости файловой системы от NetApps

rawio

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

tcpblast

Измерение пропускной способности tcp соединения

xengine

Оценивающая система для X-Window

bladeenc

MP3 encoder

http://www.freebsd.bip.ru/soft.shtml (2 of 4)10.04.2004 17:23:22

Daemon News Russia

fmio

FM radio card manipulation utility

xamp

Проигрыватель mpeg файлов Tребует: XFree86-3.3.6_9, gettext-0.10.35, gmake-3.79.1, qt-1.45_1

ru-apache+mod_ssl

Русский Apache webserver с функциями SSL/TLS Требует: mm-1.1.3

ru-apache

Apache http server

ru-cyrproxy

Cyrillic proxy для протоколов сети

ru-ispell

Русский (KOI8-R) словарь для ISPELL Требует: ispell-3.2.04

ru-koi8rPS

Русские PostScript шрифты

netscape

Netscape 4.7 ru Требует: XFree86-3.3.6_9, XFree86-aoutlibs-3.3.6.9, netscapecommunicator-4.76, netscape-remote-1.0_1, netscape-wrapper2000.07.07, ru-X11-3.3

ru-pgp

Русский модуль для PGP Требует: pgp-2.6.3i, unzip-5.42

http://www.freebsd.bip.ru/soft.shtml (3 of 4)10.04.2004 17:23:22

Daemon News Russia

HeroesOfMightAndMagic-BSD-версия игры "Heroes of Might and Magic III" Требует: linux-gtk-1.2_1, linux_base-6.1 3

QuakeForge

Клон QuakeForge под FreeBSD Требует: XFree86-3.3.6_9, autoconf-2.13_1, automake-1.4, bzip2-1.0.1, esound-0.2.22, gettext-0.10.35, gmake-3.79.1, libaudiofile-0.2.1_1, m4-1.4, sdl-1.0.8_1, svgalib-1.4.2_1

civ2demo

Бесплатная демо-версия игры "Civilization: Call to Power"

digger

FreeBSD графическая консольная (VGL) игра Digger

doom

DOOM 1 Требует: XFree86-3.3.6_9, gettext-0.10.35, gmake-3.79.1, unzip-5.42

reeciv-gtk

К лон "Цивилизации" для X11; multiplayer Требует: XFree86-3.3.6_9, bzip2-1.0.1, gettext-0.10.35, glib-1.2.10_3, gtk1.2.10_2, imlib-1.9.10_1, jpeg-6b, libungif-4.1.0b1, png-1.0.12, tiff-3.5.5, xpm-3.4k

hlserver-cs

Мод к Half-Life: Counter-Strike Требует: hlds-3.1.0.6_2, linux_base-6.1

hlserver-opfor

Мод к Half-Life: Opposing Forces Требует: hlds-3.1.0.6_2, linux_base-6.1 (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/soft.shtml (4 of 4)10.04.2004 17:23:22

Daemon News Russia

новости

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь

Инсталяция системы Где взять дистрибутив? Аппаратное обеспечение Подготовка к инсталляции Установка FreeBSD Установка программного обеспечения Где взять дистрибутив? В первую очередь все основные готовые версии FreeBSD доступны с ftp://ftp.FreeBSD.org/pub/ FreeBSD в России - ftp://ftp.ru/. Для получения списка серверов, с которых можно скачать свежую версию FreeBSD, обратитесь на http://www.freebsd.org/. Если Вы хотите приобрести компакт-диск с FreeBSD, обратитесь на http://www.freebsd.org.ru/. Диск с ОС FreeBSD также можно приобрести у компании CDROM, по адресу: Walnut Creek CDROM 4041 Pike Lane, Suite F Concord, CA 94520 USA Заказ: +1 800 786-9907 FAX: +1 925 674-0821 email: WC Orders address WWW: WC Home page Аппаратное обеспечение В настоящий момент FreeBSD работает на персональных компьютерах от 386sx до Pentium II (хотя 386sx не рекомендуется), с большим разнообразием шин: ISA, VLB, EISA и PCI. Предоставляется поддержка для основных конфигураций устройств IDE и ESDI, различных SCSI контроллеров, сетевых карт и карт последовательного доступа. Для запуска FreeBSD требуется как минимум 4 Мб RAM. Если версия вашей системы 2.2.8 и выше, вам потребуется не менее 5 Мб RAM. Если Вы планируете использовать X Window System, то Вам потребуется не менее 8 Мб RAM. Для примера, конфигурация моего ПК: AMD K6-400, 64 Mb RAM, SIS6326 video 4 Mb RAM integrated, HDD 3.2 Gb, Sound blaster ALS4000, floppy 3.5', PS/2 mouse.

http://www.freebsd.bip.ru/install.shtml (1 of 5)10.04.2004 17:23:29

Daemon News Russia

Подготовка к инсталляции Инсталлировать FreeBSD можно с различных носителей (раздела DOS, CD-ROM, через FTP и NFS). В данном курсе будет описана процедура инсталляции ОС FreeBSD 3.1-RELEASE с существующего раздела DOS. На существующем разделе DOS создайте каталоги C:\BIN и положите туда все файлы из директории bin C:\SRC и положите туда все файлы из директории src C:\FLOPPIES и положите туда все файлы из директории floppies C:\TOOLS и положите туда все файлы из директории tools дистрибутива FreeBSD. Если же у Вас нет дефицита места на диске C:, то Вы можете просто смело скопировать все каталоги с дистрибутива ОС FreeBSD в корневой каталог C:\. С помощью утилиты fdimage из каталога tools создайте загрузочный диск (предварительно вставив чистую отформатированную дискету в дисковод a:) из образа диска в директории C: \FLOPPIES c:\TOOLS\fdimage c:\FLOPPIES\kern.flp a: Аналогично сделаем дискету с mfsroot.flp: c:\TOOLS\fdimage c:\FLOPPIES\mfsroot.flp a: Инсталляционные дискеты подготовлены и можно приступать к установке самой операционной системы. Установка FreeBSD Вставьте дискету с kern.flp в дисковод а: и перезапустите компьютер. После того, как система считает информацию с дискеты, она попросит вставить вторую дискету: mfsroot.flp. Вставьте эту дискету и нажмите клавишу . Если Вы в первый раз инсталлируете ОС FreeBSD и/или не уверены в точном знании всех устройств вашего компьютера, то пропустите пункт конфигурации ядра. Через некоторое время ядро ОС FreeBSD опросит устройства вашего компьютера и запустит программу инсталляции, которая предоставит Вам меню для начала инсталляции. Выберете пункт меню Keymap и установите раскладку клавиатуры в Russia KOI8-R. Выберите в меню Custom подменю Options. Укажите нужный Вам редактор (я, например, плохо знаю редактор vi, поэтому пользуюсь /usr/bin/ ее) Выберите Media, как "Инсталляция с существующей DOS-partition". Нажмите "Q" для возврата в главное меню. Теперь нужно указать программе установки область диска для инсталляции. Выберите пункт Partition. Программа сообщит Вам, какие есть на диске разделы и их тип. Создайте с помощью команды "С" раздел (в системе FreeBSD он именуется - "слайс"). На запрос о количестве секторов, выделяемых под раздел, нажмите "ОК", если хотите использовать все оставшееся место, либо введите их количество. Если Вам трудно оперировать секторами, можно указать размер и в мегабайтах, поставив букву 'М". На запрос о типе файловой системе http://www.freebsd.bip.ru/install.shtml (2 of 5)10.04.2004 17:23:29

Daemon News Russia

наберите 165 и нажмите "ОК". Нажмите "Q"" для возврата в главное меню. Далее нам нужно на созданном слайсе определить файловые системы. Выберите в меню пункт Label. Это ответственный момент. Внимательно посмотрите на меню используемых команд. Если не хотите делать это вручную, то нажмите "А", и программа все сделает сама. Для примера, свой диск 3.2 Gb, я разделил таким образом: 2.2 Gb - DOS-partition 1.0 Gb - FreeBSD-slice Для FreeBSD место разделил так: - wd0s1 2200M - wd0s2a 100M / UFS Y - wd0s2b 125M swap - wd0s2e 575M /usr UFS Y - wd0s2f 200M /var UFS Y Пространство для swap достаточно сделать в два раза больше размера оперативной памяти компьютера. Нажмите "Q". Укажите, что программа установки FreeBSD должна установить BootManager. Это следует сделать для выбора операционной системы при загрузке компьютера. Следующий пункт - выбор инсталлируемого пакета. Если Вы копировали каталог /src с дистрибутива FreeBSD, то советую установить исходные коды ядра, они нам понадобятся при его переконфигурации. Если Вы не собираетесь этого делать (что бывает крайне редко), то укажите Distribution >> Custom >> bin, т.е. установить только исполняемые файлы. Выберите Commit. Программа установки спросит, не хотите ли Вы вернуться, чтобы сделать изменения. Если Вы уверены, что все сделали правильно - жмите "ОК". По завершении инсталляции компьютер перегрузится (не забудьте вынуть дискету из дисковода а:). Как видите, установка FreeBSD совсем не сложнее, чем MS Windows ;-). Установка программного обеспечения Существует большое количество программ в виде пакетов (packages) и портов (ports). Что такое package? Package (Пакет) - это архив типа *.tgz (tar-архив, сжатый zip'ом), в котором лежат уже собранные исполняемы файлы программ, описания и руководства к ним, необходимые конфигурационные файлы и т.п. Пакеты собраны под конкретную версию системы, поэтому желательно их не использовать с другой версией. Хотя некоторые из них работают и в других версиях. Пакет содержит также вспомогательные файлы, позволяющие устанавливать пакет автоматически. Используя эти файлы, утилита установки пакетов раскладывает все на свои места и регистрирует пакет в системе.

http://www.freebsd.bip.ru/install.shtml (3 of 5)10.04.2004 17:23:29

Daemon News Russia

Некоторые пакеты для нормальной работы требуют наличие установленных в системе других пакетов (обычно это библиотеки). В таких случаях программа установки проверяет наличие всего необходимого. При установке некоторых пакетов требуется выполнить какие-то дополнительные действия. В таком случае в пакет добавляется "инсталляционный скрипт" (командный файл, обычно с расширением .sh), который утилита установки и запустит в нужный момент. В чем заключается регистрация пакета? В директории /var/db/pkg создается директория с тем же названием, что и пакет, в которую помещаются несколько файлов. В этих файлах находится краткое описание пакета; список всех файлов из пакета, с указанием в какой директории лежит тот или иной файл пакета; дополнительные скрипты, исполняемые при инсталляции пакета и при удалении (если, конечно, таковые имеются); и, если файлы этого пакета используются другими пакетами, то здесь же отмечается, кем пакет используется. (Эти записи появятся позже, если Вы будете устанавливать "подчиненные" пакеты). Все эти данные используются соответствующими утилитами, которые добавляют пакеты удаляют пакеты показывают всевозможную информацию об установленных пакетах Все эти файлы просто текстовые и их легко можно посмотреть любым текстовым редактором. Как установить пакет? Чтобы установить пакет, наберите команду pkg_add Дальше система все сделает автоматически. Если в пакете есть "инсталляционный скрипт", Вам, возможно, придется ответить на несколько вопросов. После инсталляции пакета Вам скорее всего придется "вручную" отредактировать конфигурационные файлы. Но это уже зависит от той программы, которую Вы устанавливаете. Как удалить пакет? Чтобы установить пакет, наберите команду pkg_delete . Точное имя пакета можно подсмотреть в /var/db/pkg. (Даже если Вы каждый день пользуетесь программой, это еще не значит, что Вы безошибочно назовете имя пакета, откуда его поставили, например bash-2.02.1.tgz) При удалении пакета могут возникнуть некоторые сложности. Во-первых, если пакет используется другими пакетами, утилита откажется его удалять. Однако ее можно заставить все-таки это сделать с помощью ключа f, хотя это не совсем правильно. Во-вторых, если при установке пакета для него специально создавались какие-либо директории, обычно, при удалении пакета они не удаляются. Опять же, утилиту удаления можно заставить это делать ключом -d. И, наконец, кое-какой "мусор" все равно может остаться. Например, если для какой-то программы каждый пользователь может иметь собственный конфигурационный файл в своей домашней директории, естественно, программа удаления пакета их удалять не будет. Информацию об этих командах смотрите в man-страницах:

http://www.freebsd.bip.ru/install.shtml (4 of 5)10.04.2004 17:23:29

Daemon News Russia

man pkg_add - установка пакетов, man pkg_delete - удаление пакетов, man pkg_info - вывод информации об установленных пакетах. В некоторых версиях FreeBSD есть утилита pkg_manage, которая должна была по замыслу авторов объединить в себе все функции вышеперечисленных. Но, потом от нее отказались из-за нестабильной работы. Возможно, в последующих версиях FreeBSD она опять появится. Установка "портов" (ports). Что такое ports? Ports - это описание процесса "сборки" пакета (package). Как можно установить port? Для этого c любого хоста из Internet (смотри раздел "Где взять дистрибутив") из директории ports (такая директория есть для текущих версий FreeBSD) заберем нужный нам "свежий" port. Коллекция ports постоянно изменяется: добавляются новые приложения, исправляются ошибки и т.д. Поэтому, рекомендуется производить обновление коллекции ports. Строгих правил здесь нет, но по возможности делайте обновление хотя бы 2-3 раза в месяц. Для установки приложения zoo из коллекции ports введите команды: # cd /usr/ports/archivers/zoo # make # make install # make clean Для переустановки приложения: # cd /usr/ports/archivers/zoo # make reinstall # make clean Для удаления приложения: # cd /usr/ports/archivers/zoo # make deinstall

http://www.freebsd.bip.ru/install.shtml (5 of 5)10.04.2004 17:23:29

(c) 2001-2002 Daemon News Russia

Daemon News Russia

новости

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь

Работа в сети 1. Где можно найти информацию о "бездисковой загрузке"? 2. Может ли машина с FreeBSD использоваться как маршрутизатор? 3. Можно ли подключить машину с Win95 к Internet с помощью FreeBSD? 4. Почему не проходит компиляция последней версии BIND от ISC? 5. Поддерживает ли FreeBSD протоколы SLIP и PPP? 6. Поддерживает ли FreeBSD NAT или Masquerading? 7. Не могу создать устройство /dev/ed0! 8. Как настроить алиас на Ethernet? 9. Как заставить адаптер 3C503 использовать другой тип сетевого разъёма? 10. У меня проблемы при работе NFS во FreeBSD. 11. Почему я не могу смонтировать диск Linux по NFS? 12. Почему я не могу смонтировать диск Sun по NFS? 13. Почему mountd продолжает выдавать сообщения "can't change attributes" и "bad exports list" на моем сервере NFS, работающем под управлением FreeBSD? 14. Проблемы при связи по PPP с машинами NeXTStep. 15. Как включить поддержку multicast IP? 16. Какие сетевые адаптеры сделаны на наборе микросхем DEC PCI? 17. Почему я должен использовать FQDN для хостов не в моей сети? 18. Permission denied для любых действий, связанных с работой сети. 19. Какую нагрузку вызывает использование IPFW? 20. Как можно перенаправить запросы с одной машины на другую? 21. Где можно найти средства управления сетевым трафиком? 22. Почему появляются сообщения /dev/bpf0: device not configured? 23. Как смонтировать диск Windows-машины в моей локальной сети, как это делает smbmount в Linux? 24. Что значат эти сообщения "icmp-response bandwidth limit 300/200 pps" в моих журнальных файлах? 1. Где можно найти информацию о "бездисковой загрузке"? "Бездисковая загрузка" означает, что машина с FreeBSD загружается по сети и читает необходимые файлы с сервера, а не со своего диска. 2. Может ли машина с FreeBSD использоваться как маршрутизатор? Стандарты Internet и опыт практической работы не позволяют нам в FreeBSD держать маршрутизацию пакетов включенной по умолчанию. Вы можете сделать это, изменив значение следующей переменной в файле rc. conf на YES: gateway_enable=YES # Set to YES if this host will be a gateway Этот параметр изменит значение системной переменной net.inet.ip.forwarding на 1.

http://www.freebsd.bip.ru/networking.shtml (1 of 10)10.04.2004 17:23:32

Daemon News Russia

Кроме того, в большинстве случаев вам будет необходимо запустить программу маршрутизации, для того, чтобы объявить о появлении нового маршрутизатора другим системам в вашей сети; FreeBSD поставляется со стандартной для BSD-систем программой маршрутизации routed, в более сложных ситуациях вы можете попробовать GaTeD (доступный по адресу http://www.gated.org с ftp.gated.Merit.EDU), который поддерживает FreeBSD начиная с версии 3_5Alpha7. Мы обязаны предупредить вас, что даже когда FreeBSD настроена таким образом, она не полностью соответствует стандартам Internet для маршрутизаторов, однако для обычной работы этого хватает. 3. Можно ли подключить машину с Win95 к Internet с помощью FreeBSD? Как правило, те, кто задает такие вопросы, имеют дома два компьютера, один с FreeBSD, а другой с Win95; идея состоит в использовании FreeBSD для подключения к Internet, а затем осуществлять выход в Internet из Windows95 через FreeBSD. На самом деле это просто особый случай предыдущего вопроса. ... и ответ на него - да! Во FreeBSD 3.x, ppp режима пользователя имеет параметр -nat. Если вы запустите ppp с параметром -nat, установив в файле /etc/rc.conf gateway_enable в значение YES и правильно настроите машину с Windows, то всё должно прекрасно заработать. Если вы используете ppp режима ядра, или у вас Ethernet-подключение к Internet, можно воспользоваться командой natd. Пожалуйста, обратитесь к разделу о natd этого FAQ. 4. Почему не проходит компиляция последней версии BIND от ISC? Это - результат конфликта между файлом cdefs.h в дистрибутиве и тем, что поставляется с FreeBSD. Достаточно удалить файл compat/include/sys/cdefs.h. 5. Поддерживает ли FreeBSD протоколы SLIP и PPP? Да. Посмотрите страницы справочника по командам slattach, sliplogin, pppd и ppp. Pppd и ppp могут обслуживать как входящие, так и исходящие соединения. Sliplogin имеет дело исключительно со входящими соединениям, а slattach - только с исходящими. Если вы имеете доступ в Internet через командную строку оболочки, вам может подойти slirp. С его помощью можно получить (ограниченный) доступ к таким службам, как ftp и http прямо с вашей машины. 6. Поддерживает ли FreeBSD NAT или Masquerading? Если у вас есть локальная сеть (одна или больше машин), но только один IP адрес, предоставленный провайдером, вас может привлечь natd. natd позволяет подключить всю сеть к Internet, используя единственный IP адрес.

Программа ppp имеет похожую встроенную возможность через параметр -nat. В обоих случаях используется библиотека libalias.

http://www.freebsd.bip.ru/networking.shtml (2 of 10)10.04.2004 17:23:32

Daemon News Russia

7. Не могу создать устройство /dev/ed0!

В стандарте сетевого взаимодействия Беркли сетевые интерфейсы напрямую доступны только ядру. За дополнительной информацией обратитесь к файлу / etc/rc.network и страницам справочника, описывающим различные сетевые программы, упоминаемые здесь. Если всё это оставит вас в недоумении, почитайте книгу, описывающую администрирование сети в другой BSDподобной операционной системе; с некоторыми незначительными исключениями, администрирование сети во FreeBSD в основном совпадает с SunOS 4.0 и Ultrix. 8. Как настроить алиас на Ethernet? Добавьте netmask 0xffffffff в командной строке ifconfig так, как это сделано здесь: # ifconfig ed0 alias 204.141.95.2 netmask 0xffffffff 9. Как заставить адаптер 3C503 использовать другой тип сетевого разъёма? Если вы хотите задействовать другой разъём, то должны указать дополнительный параметр в командной строке ifconfig. Разъёмом по умолчанию является link0. Чтобы задействовать разъём AUI, а не BNC, используйте link2. Эти флаги должны быть указаны с помощью переменных ifconfig_* в /etc/rc. conf. 10. У меня проблемы при работе NFS во FreeBSD. Некоторые сетевые адаптеры работают (мягко говоря) хуже, чем другие что может иногда вызывать проблемы при работе приложений типа NFS, интенсивно использующих сеть.

11. Почему я не могу смонтировать диск Linux по NFS? Некоторые версии NFS для Linux поддерживают запросы на монтирование только с привилегированного порта; попробуйте # mount -o -P linuxbox:/blah /mnt 12. Почему я не могу смонтировать диск Sun по NFS? Рабочие станции Sun под управлением SunOS 4.X поддерживают запросы на http://www.freebsd.bip.ru/networking.shtml (3 of 10)10.04.2004 17:23:32

Daemon News Russia

монтирование только с привилегированного порта; попробуйте # mount -o -P sunbox:/blah /mnt 13. Почему mountd продолжает выдавать сообщения "can't change attributes" и "bad exports list" на моем сервере NFS, работающем под управлением FreeBSD? В большинстве случаев проблема заключается в недостаточном понимании следующей фразы из справочной страницы по exports(5): Каждая строка файла (отличная от строк комментариев, начинающихся символом #) описывает точку (точки) монтирования и флаги экспорта внутри одной локальной файловой системы сервера для одного или большего количества хостов. Для каждой локальной файловой системы сервер хост может быть указан только один раз, и для каждой файловой системы сервера может быть только одна используемая по умолчанию строка, которая используется при работе со всеми другими хостами. Наглядно это можно продемонстрировать на примере часто встречающейся ошибки. Если все, находящееся выше /usr, является частью одной файловой системы (то есть нет точек монтирования выше /usr), то следующий список экспортирования будет неправильным: /usr/src client /usr/ports client Здесь имееются две строки, описывающие свойства одной файловой системы, / usr, экспортируемой некоторому хосту с именем client. Правильный формат таков: /usr/src /usr/ports client Если перефразировать утверждение со страниц Справочника, то свойства одной файловой системы, экспортируемой некоторому хосту (экспортирование для всех интерпретируется как некий уникальный хост), должны быть описаны в одной строке. Да, при этом возникают ограничения на то, как вы можете экспортировать файловые системы, но для большинства людей проблем это не вызывает. Ниже дается пример правильно составленного списка экпортирования, где / usr и /exports являются локальными файловыми системами: # Экспортировать src и ports для client01 и client02, но только

http://www.freebsd.bip.ru/networking.shtml (4 of 10)10.04.2004 17:23:32

Daemon News Russia

# client01 имеет на них права администратора /usr/src /usr/ports -maproot=0 client01 /usr/src /usr/ports client02 # "Клиентские" машины имеют корень и могут выполнять монтирование # где угодно выше каталога. # Все остальные могут монтировать /exports/obj только для чтения /exports -alldirs -maproot=0 client01 client02 /exports/obj -ro

14. Проблемы при связи по PPP с машинами NeXTStep. Попробуйте отменить все расширения TCP в /etc/rc.conf, изменив значение следующей переменной в NO: tcp_extensions=NO Маршрутизаторы Annex фирмы Xylogic не работают по этой же причине, поэтому при подключении к ним вам нужно проделать то же самое. 15. Как включить поддержку multicast IP? Работа с многоадресной рассылкой по умолчанию полностью поддерживается версиями FreeBSD 2.0 и выше. Если вы хотите использовать ваш компьютер как маршрутизатор многоадресного трафика, вам нужно перекомпилировать ядро с включенной опцией MROUTING и запустить mrouted. Версии FreeBSD 2.2 и выше будут запускать mrouted во время загрузки, если переменная mrouted_enable в файле /etc/rc.conf установлена в значение YES. Приложения MBONE находятся в своей категории портов, mbone. Если вы ищете приложения для организации конференций vic и vat, посмотрите там! Более подробная информация располагается на сервере Mbone Information Web. 16. Какие сетевые адаптеры сделаны на наборе микросхем DEC PCI? Вот список, составленный Гленом Фостером (Glen Foster), с некоторыми незначительными добавлениями: Vendor Model ---------------------------------------------ASUS PCI-L101-TB Accton ENI1203 Cogent EM960PCI http://www.freebsd.bip.ru/networking.shtml (5 of 10)10.04.2004 17:23:32

Daemon News Russia

Compex D-Link Dayna DEC Danpex JCIS Linksys Mylex SMC SMC TopWare Znyx

ENET32-PCI DE-530 DP1203, DP2100 DE435, DE450 EN-9400P3 Condor JC1260 EtherPCI LNP101 EtherPower 10/100 (Model 9332) EtherPower (Model 8432) TE-3500P (2.2.x) ZX312, ZX314, ZX342, ZX345, ZX346, ZX348 (3.x) ZX345Q, ZX346Q, ZX348Q, ZX412Q, ZX414, ZX442, ZX444, ZX474, ZX478, ZX212, ZX214 (10mbps/hd)

17. Почему я должен использовать FQDN для хостов не в моей сети? Вы, наверное, обнаружили, что хост, к которому вы обратились, оказался на самом деле в другом домене; например, если вы находитесь в домене foo.bar. edu и хотите обратиться к хосту mumble в домене bar.edu, то должны указать его полное доменное имя, mumble.bar.edu, а не просто mumble. Традиционно, это позволял делать ресолвер BSD BIND. Однако текущая версия bind, поставляемая с FreeBSD, больше не добавляет имена доменов, отличающихся от того, в котором вы находитесь, для не полностью указанных имён хостов. Так что неполно указанный хост mumble будет найден либо как mumble.foo.bar.edu, либо будет искаться в корневом домене. Это отличается от предыдущего поведения, при котором поиск продолжался в mumble.bar.edu и mumble.edu. Посмотрите RFC 1535 о причинах объявления такого поведения плохой практикой и даже ошибкой в безопасности. Как хорошее решение, вы можете поместить строку search foo.bar.edu bar.edu вместо ранее используемой domain foo.bar.edu в файл /etc/resolv.conf. Однако удостоверьтесь, что порядок поиска не нарушает "границ полномочий между местным и внешним администрированием", как это названо в RFC 1535.

http://www.freebsd.bip.ru/networking.shtml (6 of 10)10.04.2004 17:23:32

Daemon News Russia

18. Permission denied для любых действий, связанных с работой сети.

Если вы компилировали ядро с опцией IPFIREWALL, имейте в виду, что политика по умолчанию настроена как в 2.1.7R (она на самом деле изменилась во время разработки 2.1-STABLE), то есть указан запрет на прохождение всех пакетов, которые явно не разрешены. Если вы случайно неверно отконфигурировали межсетевой экран, то для восстановления работоспособность сети дайте такую команду, войдя суперпользователем: # ipfw add 65534 allow all from any to any Также вы можете установить firewall_type='open' в файле /etc/rc.conf. 19. Какую нагрузку вызывает использование IPFW? Ответ на этот вопрос зависит главным образом от набора правил и производительности процессора. Для большинства приложений, имеющих дело с ethernet и простым набором правил, ответ: незначительно. Для тех, кому нужны реальные цифры для удовлетворения любопытства, читайте дальше. Следующие измерения были сделаны с использованием 2.2.5-STABLE на машине 486-66. IPFW был модифицирован для измерения времени, затрачиваемого внутри процедуры ip_fw_chk и вывода результатов на консоль каждую тысячу пакетов. Тестировались два набора по 1000 правил в каждом. Первый набор был предназначен для демонстрации наихудшего случая, повторяя условие # ipfw add deny tcp from any to any 55555 Это наихудший случай, так как все условия IPFW будут проверены перед тем, как будет принято окончательное решение о том, что пакет не соответствует условию (мы меняли номер порта). После 999 повторений этого условия находилось правило allow ip from any to any. Второй набор был предназначен для быстрого прерывания процесса проверки условий: # ipfw add deny ip from 1.2.3.4 to 1.2.3.4

http://www.freebsd.bip.ru/networking.shtml (7 of 10)10.04.2004 17:23:32

Daemon News Russia

Неподходящий IP-адрес источника для указанного условия быстро вызывает пропуск этого правила. Как и ранее, последним правилом было allow ip from any to any. Затраты на обработку пакета в первом случае было примерно 2.703 мс/пакет, или примерно 2.7 микросекунд на правило. Таким образом, теоретический предел скорости обработки пакетов с этими правилами равен примерно 370 пакетам в секунду. Предполагая использование ethernet 10Мб/с с размером пакета примерно 1500, мы можем достигнуть только 55.5% использования пропускной способности. В последнем случае на обработку каждого пакета было затрачено примерно 1.172мс, или около 1.2 микросекунд на правило. Теоретический предел обработки будет равен около 853 пакетам в секунду, что почти соответствует скорости 10Мб/с ethernet. Большое количество протестированных правил и природа этих правил не даёт представление о реальной жизни - они были использованы только для генерации информации о времени обработки. Вот несколько наблюдений, которые нужно иметь в виду для построении эффективного набора правил: ●



Поместите правило `established' в самое начало списка для обработки основного трафика TCP. Не помещайте перед ним никаких правил allow tcp. Старайтесь помещать часто вызываемые правила как можно раньше, а редко используемые - позже (без изменения политики, конечно). Вы можете выяснить частоту использования правил с помощью вывода статистики командой ipfw -a l.

20. Как можно перенаправить запросы с одной машины на другую? Вы можете перенаправить запрос на FTP (или другой сервис) с помощью пакаджа socket, доступного в дереве портов в категории "sysutils". Просто замените командную строку запуска сервиса на вызов socket, типа: ftp stream tcp nowait nobody /usr/local/bin/socket socket ftp.foo.com ftp где ftp.foo.com и ftp являются соответственно хостом и портом для перенаправления. 21. Где можно найти средства управления сетевым трафиком? Для FreeBSD существуют два средства управления трафиком: свободно http://www.freebsd.bip.ru/networking.shtml (8 of 10)10.04.2004 17:23:32

Daemon News Russia

распространяемый ALTQ и коммерческий продукт Bandwidth Manager от Emerging Technologies. 22. Почему появляются сообщения /dev/bpf0: device not configured?

Для работы программ, использующих Berkeley Packet Filter (bpf) необходимо включение в ядро соответствующего драйвера. Перекомпилируйте ядро, добавив в его конфигурационный файл следующую строку: pseudo-device bpfilter # Berkeley Packet Filter Затем, после перезапуска системы, вам нужно создать соответствующий файл устройства. Это можно сделать, сменив текущий каталог на /dev и выполнив команду # sh MAKEDEV bpf0 23. Как смонтировать диск Windows-машины в моей локальной сети, как это делает smbmount в Linux? Воспользуйтесь пакетом sharity light из Коллекции Портов. 24. Что значат эти сообщения "icmp-response bandwidth limit 300/200 pps" в моих журнальных файлах? Это ядро сообщает вам, что имела место некоторая активность, приводящая к посылке большего количества ответных пакетов ICMP или сбросов TCP (RST), чем, как предполагается, это следует делать. Ответы ICMP часто генерируются в результате попыток подключения к незанятым портам UDP. Сбросы TCP генерируются в результате попыток подключения к неоткрытым портам TCP. Кроме всяких прочих, такие сообщения могут быть вызваны следующими действиями: ●

Лобовая атака типа отказ в обслуживании DoS (в отличие от атак в один пакет, которые используют конкретную брешь в защите).



Сканирование портов в попытке осуществить подключение к большому количеству портов (в отличие от проб нескольких известных портов).

Первое число в сообщении указывает вам, какое количество пакетов ядро посылало бы при отсутствии ограничений, а второе число указывает лимит. Вы можете управлять этим ограничением при помощи системной переменной net. inet.icmp.icmplim приводимым ниже способом, где 300 является ограничением на количество посылаемых пакетов в секунду: http://www.freebsd.bip.ru/networking.shtml (9 of 10)10.04.2004 17:23:32

Daemon News Russia

# sysctl -w net.inet.icmp.icmplim=300 Если вы не хотите видеть подобные сообщения в журнальных файлах, но хотите использовать это ограничение в ядре, то можете использовать системную переменную net.inet.icmp.icmplim_output для подавления вывода, как это показано здесь: # sysctl -w net.inet.icmp.icmplim_output=0 И наконец, если вы хотите выключить это ограничение, то можете установить значение системной переменной net.inet.icmp.icmplim (смотрите пример выше) равным 0. Выключение этого лимита не приветствуется по причинам, перечисленным выше. (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/networking.shtml (10 of 10)10.04.2004 17:23:32

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Конфигурирование и перегенерация ядра новости

Зачем это нужно? Этапы процесса перегенерации Создание драйверов устройств Упражнения Вопросы и ответы Зачем это нужно? При инсталляции FreeBSD у вас создалось в системе ядро (файл /kernel), которое вполне работоспособно. Зачем же его переделывать? Дело в том, что это ядро (так называемая GENERIC конфигурация) как раз предназначено для того, чтобы система успешно развернулась на компьютере любой конфигурации из поддерживаемых. В эту конфигурацию встроена поддержка ВСЕХ типов накопителей (HDD и CD) и ВСЕХ сетевых карт, которые на данный момент поддерживаются FreeBSD. Это вполне логично - вы должны иметь возможность поставить свой Unix и дополнительные программы на тот HDD, который имеется у вас и суметь войти в сеть, какой бы сетевой карточкой вы ни пользовались. В то же время, в ядро не включены некоторые полезные модули, которые могут понадобится в дальнейшем, особенно, если вы хотите использовать вашу машину в качестве сервера. (Например - поддержка firewall, PPP-сервера, bpf и т.п.). Таким образом, перегенерировать ядро необходимо для того, чтобы: - убрать все лишнее (драйверы устройств, которых у вас нет); - добавить то, чего не хватает для работы. Первое позволит вам ускорить загрузку (так как система не будет тратить время на поиск и тестирование несуществующих в вашей машине устройств) и сэкономить место в ОЗУ, занимаемое ядром. А без второго вы, скорее всего, не сможете решать свои задачи. Этапы процесса перегенерации В общем виде этот процесс выглядит так: - установить исходные коды ядра (как правило их устанавливают в процессе инсталляции системы); - составить свою конфигурацию ядра (конфигурационный файл); - запустить программу config, которая создаст необходимые файлы *.h и *.c в соответствии с вашей конфигурацией;

http://www.freebsd.bip.ru/kernel.shtml (1 of 5)10.04.2004 17:23:35

Daemon News Russia

- скомпилировать новое ядро с помощью программы make; - установить новое ядро (make install); - перезагрузиться. Теперь рассмотрим эти пункты более подробно. Установка исходных кодов ядра. Прежде всего, посмотрите в директорию /usr/src/sys если она не пустая, то все что вам нужно уже на месте. И вы можете спокойно перейти к следующему пункту. В противном случае, вам надо взять из дистрибутива нужные файлы и установить их. Это легко можно проделать с помощью команды /stand/sysinstall. Более подробно, см. "Инсталляция системы". Составление конфигурационного файла. Перейдите в директорию /usr/src/sys/i386/conf. Здесь имеются два конфигурационных файла GENERIC и LINT. Первый представляет собой конфигурацию того ядра, которое установилось у вас при инсталляции системы. Вы можете посмотреть в нем, что именно может ваше текущее ядро. Второй же файл представляет собой подробное описание всех возможных элементов конфигурационного файла. Если вы попытаетесь построить ядро в конфигурации LINT, оно, скорее всего не будет работать. Вам необходимо составить свой конфигурационный файл. Его название значения не имеет. Можете назвать его, например, myKERNEL. Обычно ему дают то же название, что и доменное имя машины, либо (удобно, если вы заготавливаете несколько ядер для выполнения разных задач) – FIRST (SECOND, THIRD и т.п.). В качестве основы для нового файла вы можете использовать один из уже имеющихся файлов GENERIC или LINT. Если вы возьмете за основу GENERIC, то вам придется убрать оттуда описания всех лишних устройств и дописать необходимые вам options. Если же вы возьмете за основу LINT, то все редактирование будет заключаться в удалении всего ненужного. Это может оказаться весьма и весьма утомительным занятием. Возьмем за основу файл GENERIC. Скопируйте его: cp GENERIC myKERNEL Теперь нужно отредактировать его любым текстовым редактором. Как было сказано выше, основным руководством по составлению новой конфигурации служит файл LINT. Причем, там должны быть описаны самые последние options, которые появились в той версии FreeBSD. Ниже приводится список опций конфигурационного файла. 1) machine (в нашем случае это "i386", т.е. процессор совместимый с Intel 386 ); 2) cpu "I586_CPU" http://www.freebsd.bip.ru/kernel.shtml (2 of 5)10.04.2004 17:23:35

Daemon News Russia

"I386_CPU" - 386-е процессоры; "I486_CPU" - 486-е процессоры, включая AMD-5x86; "I586_CPU" - 586-e процессоры: Pentium, Pentium MMX, AMD-K5, AMD-K6; "I686_CPU" - 686-е процессоры: Pentium Pro, Pentium II; 3) ident myKERNEL (идентификатор, или название ядра). 4) options 5) config 6) controller 7) device 8) pseudo-device Проверить список устройств в вашей системе можно с помощью следующей команды: # dmesg Данная команда показывает системные сообщения, которые вы наверное видели при начальной загрузке системы. Что же нужно, чтобы сделать все правильно? *иметь при себе список всех устройств, установленных в вашем компьютере; *хорошо знать, чего вы хотите от FreeBSD на данной машине;

Подготовка к компиляции После того, как вы закончили редактировать свою конфигурацию, наберите команду /usr/sbin/config myKERNEL Она создаст в директории /usr/src/sys директорию compile/myKERNEL (о чем и сообщит вам в конце своей работы) и поместит туда файлы, необходимые для компиляции ядра. Так же эта команда попросит вас "не забыть" выполнить команду make depend. Выполните команды # cd ../../compile/myKERNEL # make depend Компиляция нового ядра Находясь в директории /usr/src/sys/compile/myKERNEL и наберите команду # make она сделает все что нужно. Учтите, что ядро системы - достаточно сложная программа, поэтому ее компиляция потребует довольно много времени. От 15-20 минут на процессоре Pentium до часа, на 386 процессоре.

http://www.freebsd.bip.ru/kernel.shtml (3 of 5)10.04.2004 17:23:35

Daemon News Russia

Если в процессе компиляции обнаружатся фатальные ошибки, придется пересмотреть свой конфигурационный файл, исправить его и повторить все заново. (Такие случаи бывают не только у новичков, но и у опытных администраторов, так что преждевременно не огорчайтесь). Установка нового ядра После того, как компиляция ядра успешно завершилась, наберите команду # make install она переименует старое ядро в /kernel.old и поместит в корневую директорию ваш новый / kernel. После этого нужно перегрузить компьютер. Если загрузка нового ядра не получилась (такое тоже возможно), вы можете загрузиться со старым ядром. Для этого, в начале загрузки на подсказку Boot: надо быстро сказать kernel.old. Естественно, после этого надо снова вернуться к редактированию вашей конфигурации и повторить все последующие пункты. Только не торопитесь. Если новое ядро опять окажется неработоспособным, вы можете попасть в неприятную ситуацию, так как после очередной инсталляции ядра командой make install получится: kernel.old - предыдущая неработающая версия ядра kernel - новая, но столь же бесполезная. Но даже теперь не отчаивайтесь. У вас должен был остаться в корневой директории файл kernel. GENERIC и вы можете всегда загрузить его (конечно, если вы не удалили его ранее в целях экономии места на диске). Поэтому на подсказку Boot: надо набрать kernel. GENERIC. Для того, чтобы не попасть в вышеописанную ситуацию, после загрузки старого ядра, замените им ваше новое ядро: # cd / # chflags noschg kernel # cp kernel kernel.new # cp kernel.old kernel # chflags schg kernel # reboot После этого можете смело продолжать ваши изыскания по конфигурированию ядра. И напоследок, проверьте наличие файла /boot.config. Если этого файла нет - создайте его: # echo /boot/loader > /boot.config В каталоге /boot должны содержаться файлы: boot0

http://www.freebsd.bip.ru/kernel.shtml (4 of 5)10.04.2004 17:23:35

Daemon News Russia

boot1 boot2 loader Создание драйверов устройств. Если вы добавили в конфигурации ядра устройства (реальные или pseudo-device), возможно потребуется создать для них файлы-устройства в директории /dev. Какие-то общие рекомендации по этому поводу дать трудно, поскольку это зависит от того какие устройства были добавлены в конфигурационный файл. Во всяком случае, если вы знаете какого файла (в /dev) не хватает, его можно создать с помощью программки MAKEDEV, которая лежит в той же /dev. Это даже не программа, а командный файл, в начале которого есть комментарии, в которых более-менее подробно описаны возможные аргументы (имена устройств) для MAKEDEV. Если в ядро включен, например, Sound Blaster 16, но устройства snd0 нет в каталоге /dev (проверить это можно командой ls /dev), нужно создать его: # cd /dev # sh MAKEDEV snd0 Упражнения Упражнения в данной главе, на мой взгляд, задавать бессмысленно, поскольку сам процесс построения нового ядра FreeBSD само по себе очень хорошее упражнение в деле освоения операционной системы. Вопросы и ответы Вопрос Я не могу скомпилировать ядро. Отсутствует _hw_float. Ответ Вы, возможно, удалили npx0 из вашего файла конфигурации ядра, потому что у вас нет сопроцессора. Это неправильно. Даже если у вас нет математического сопроцессора, вы должны включить поддержку npx0 (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/kernel.shtml (5 of 5)10.04.2004 17:23:35

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Начальная загрузка и останов системы новости

Этапы начальной загрузки Командные файлы начальной загрузки Вход в систему и выход из нее; программа login Перезагрузка и останов системы Неисправности в процессе загрузки Вопросы и ответы Этапы начальной загрузки FreeBSD - сложная операционная система, поэтому если Вы хотите, чтобы она работала корректно, выполняйте операции ее запуска и остановки по всем правилам. На этапе начальной загрузки (при запуске) система загружается и начинает выполняться ее ядро, затем запускается ряд инициализационных задач. После этого система готова к обслуживанию пользователей. Начальная загрузка - это период особой уязвимости в жизни системы. Ошибки в конфигурационных файлах, сбои в работе оборудования, повреждения файловых систем могут помешать компьютеру нормально начать работу. Настройка режимов загрузки во многих случаях является одной из первых задач, которую приходится выполнять администратору в новой системе. FreeBSD может загружаться либо в автоматическом, либо в ручном режиме. В автоматическом режиме система загружается самостоятельно, без какого-либо вмешательства извне. В ручном режиме до определенного момента система также загружается автоматически, но перед выполнением основных инициализирующих командных файлов (сценариев) управление передается администратору. В это время система находится в так называемом "однопользовательском режиме". Большинство системных процессов не выполняется, и вход других пользователей в систему невозможен. Процесс начальной загрузки состоит из этапов: загрузка и инициализация ядра; распознавание и конфигурирование устройств; создание системных процессов; выполнение команд администратора (при ручной загрузке); выполнение командных файлов запуска системы; переход в многопользовательский режим. Инициализация ядра Ядро операционной системы само по себе является программой, и первый этап начальной загрузки заключается в считывании этой программы в память для последующего выполнения. Конфигурация аппаратных средств http://www.freebsd.bip.ru/sysstart.shtml (1 of 8)10.04.2004 17:23:38

Daemon News Russia

Одна из первых задач, стоящих перед ядром, – выявление компонентов аппаратного обеспечения. Создавая ядро для своей системы, Вы можете задать, какие устройства оно должно проверять. Когда ядро начинает выполняться, оно пытается найти и инициализировать все устройства, о которых Вы ему сообщили. О каждом обнаруженном устройстве ядро выводит на консоль краткую информацию. Системные процессы После завершения базовой инициализации ядро создает в области памяти, выделенной для процедур пользователя, несколько процессов. swapper - процесс 0; init - процесс 1; pagedaemon - процесс 2. Из всех процессов только init является полноценным пользовательским процессом; остальные фактически представляют собой части ядра операционной системы, которые выглядят как процессы. Если систему нужно запустить в однопользовательском режиме, администратор на запрос boot: в командной строке вводит -s, а ядро передает информацию процессу init. При загрузке в однопользовательском режиме init просто запускает на системной консоли интерпретатор команд и ждет, пока он завершит работу (после нажатия Ctrl + D или ввода команды exit), а затем продолжает выполнять процесс запуска. В однопользовательском режиме всегда используется интерпретатор sh. В однопользовательском режиме администратор может выполнять команды почти так же, как и в многопользовательском. Однако автоматически монтируется только раздел диска с корневым каталогом. Другие файловые системы администратор должен смонтировать вручную. Демоны в однопользовательском режиме еще не запущены, поэтому команды, зависящие от некоторых обслуживающих процессов (например, mail), работать не будут. Команда fsck, которая проверяет и восстанавливает поврежденные файловые системы, обычно выполняется в процессе автоматической загрузки. Если система запускается в однопользовательском режиме, команду fsck нужно запустить вручную. Командные файлы начальной загрузки Следующий этап процесса начальной загрузки - выполнение командных файлов запуска. Эти файлы, по сути, представляют собой обычные командные файлы, и для их выполнения процесс init запускает процесс sh. В системе FreeBSD эти файлы хранятся в каталоге /etc, их имена начинаются буквами rc, и они выполняют функции: установка имени компьютера; установка часового пояса; проверка дисков командой fsck (только в автоматическом режиме); монтирование файловых систем; удаление файлов из каталога /tmp; конфигурирование сетевых интерфейсов; запуск процессов-демонов и сетевых служб; включение учета и контроля квот (в данном курсе не рассматривается). Вход в систему и выход из нее; программа login http://www.freebsd.bip.ru/sysstart.shtml (2 of 8)10.04.2004 17:23:38

Daemon News Russia

Во время начальной загрузки запускается демон init. Одна из его задач - породить процесс getty на каждом порту терминала, который определяется в файле /etc/ttys. Процесс getty устанавливает исходные характеристики порта (в частности, скорость передачи и контроль четности) и выводит на экран регистрационное приглашение login:. Последовательность событий при полной регистрации выглядит так: Пользователь вводит регистрационное имя по приглашению login: процесса getty. getty выполняет программу login, используя в качестве аргумента указанное имя. login запрашивает пароль и сверяет имя и пароль с записанными в файле /etc/passwd. login выводит на экран из файла /etc/motd "сообщение дня". login запускает интерпретатор shell, указанный в бюджете пользователя и устанавливает переменную среды TERM. shell выполняет соответствующие файлы запуска (если это Bourne-shell, выполняется файл . profile, если C-shell - .login и .cshrc, если Korn-shell - .profile и .kshrc). shell выводит на экран приглашение и ожидает ввода информации. Когда пользователь выходит из системы (после нажатия Ctrl + D или ввода команды exit), управление возвращается демону init, который пробуждается и порождает новый процесс getty на порту терминала. Перезагрузка и останов системы В отличие от начальной загрузки, которая может быть выполнена одним-единственным способом, останов и перезагрузку можно выполнить несколькими способами: выключить питание; дать команду shutdown; использовать команды halt и reboot; послать процессору init сигнал TERM; уничтожить процесс init. Выключение питания Запомните раз и навсегда - такой способ останова неприемлем!!!. Это может привести не только к потере данных, но и к повреждению системных файлов. Команда shutdown Команда shutdown - самый безопасный способ инициирования останова или перезагрузки системы, либо возврата в однопользовательский режим. Команда halt Команда halt выполняет все основные операции, необходимые для останова системы. Для вызова этой команды можно в командной строке указать shutdown с опцией -h или просто ввести halt. Команда reboot (ее алиас - fastboot) Команда reboot почти идентична команде halt. Различие заключается в том, что машина перезагружается, а не останавливается. Команда reboot эквивалентна команде shutdown -r. Посылка процессу init сигнала 15 (TERM)

http://www.freebsd.bip.ru/sysstart.shtml (3 of 8)10.04.2004 17:23:38

Daemon News Russia

Когда демон init получает сигнал TERM, он обычно уничтожает все пользовательские процессы, демоны, процессы getty и возвращает систему в однопользовательский режим. # sync (эта команда сбросит "все, что нужно" на диск) # kill - 15 1 (демон init всегда имеет pid=1) Уничтожение процесса init # kill -9 1 Результаты уничтожения процесса init вообще говоря непредсказуемы. Процесс init настолько важен для работы системы, что если его уничтожить, то компьютер автоматически перезагрузится (некоторые ядра при этом выдают сообщение kernel panic). Это очень грубый способ перезагрузки. Лучше пользоваться командами shutdown или reboot. Неисправности в процессе загрузки Нормальному протеканию процесса начальной загрузки системы могут препятствовать следующие дефекты и ошибки: неисправности аппаратных средств; дефектные блоки начальной загрузки; повреждения файловых систем; неверная конфигурация ядра; ошибки в сценариях запуска. Неисправности аппаратных средств Если, пытаясь загрузиться, Вы все время получаете сообщение о, допустим, дефекте памяти или другом конкретном сбое, то это верный признак того, что проблема связана с аппаратурой. Дефектные блоки начальной загрузки Как правило, в устройство управления ПЗУ машины встроена информация о том, как выполнять начальную загрузку системы. Если программа начальной загрузки повреждена, то система, скорее всего, не загрузится, даже если диск и сама операционная система целы. В этом случае попробуйте загрузить систему с дистрибутивов, (это могут быть гибкие диски, CDROM) и запустить shell, не выполняя инсталляцию программного обеспечения. Если Вы сможете смонтировать свои файловые системы из этого состояния, то Вам, возможно, понадобится просто реинсталлировать блоки начальной загрузки. Если это невозможно, попробуйте с помощью дистрибутивов продолжить начальную загрузку и смонтировать корневую файловую систему. Если это удастся и система заработает, можно реинсталлировать блоки начальной загрузки обычным способом. Повреждение файловых систем Повреждение файловых систем - это один из самых неприятных отказов, потому что файлы могут быть безвозвратно испорчены (а в некоторых случаях может быть приведен в негодность даже дисковод). Если невозможно прочитать корневой раздел, то ядро не загрузится, и система может повести себя так, как будто неисправность в ней связана с неисправностью аппаратуры. http://www.freebsd.bip.ru/sysstart.shtml (4 of 8)10.04.2004 17:23:38

Daemon News Russia

Если Вы подозреваете, что испорчена файловая система, попробуйте загрузить систему в однопользовательском режиме. Если это сделать невозможно, значит, в системе возникли серьезные проблемы. Может быть, удастся загрузиться с дистрибутива и проверить корневой раздел с помощью fsck. Если некоторые важные файлы пропали, можно восстановить их с дистрибутива. Если система все-таки вошла в однопользовательский режим, то прежде чем приступать к любым дальнейшим действиям, обязательно запустите команду fsck. Сначала проверьте корневой каталог командой fsck и, если обнаружатся какие-либо проблемы, перезагрузите систему. Повторяйте этот процесс до тех пор, пока корневой раздел не будет чист. Потом с помощью все той же команды fsck проверьте остальные файловые системы. Неверная конфигурация ядра Перестраивая и заменяя ядро, Вы каждый раз рискуете тем, что оно однажды перестанет работать, и Вы окажетесь в очень затруднительном положении. Обязательно примите меры по обеспечению возможности загрузки старого ядра на случай неожиданной проблемы. Рекомендуется держать старое ядро системы под рукой даже в повседневной работе (назовите его, скажем, kernel.super.old, и пусть оно лежит себе спокойно рядом с повседневным kernel в корневом каталоге, и ждет "своего часа"). Ошибки в сценариях запуска Ошибки в сценариях являются самыми распространенным препятствием для успешного осуществления процесса начальной загрузки. Такие ошибки устраняются легче всего. Необходимо идентифицировать ошибку и устранить ее так же, как при отладке любого другого сценария shell, но в однопользовательском режиме. Вопрос: Где расположены файлы конфигурации системы? Ответ: Для FreeBSD конфигурационным файлом является /etc/rc.conf. Все параметры указываются здесь, а остальные конфигурационные файлы /etc/rc* просто его используют. Посмотрите файл /etc/rc.conf и измените значения переменных на соответствующие вашей системе. В файле содержатся комментарии, описывающие смысл этих переменных и способ их задания. Файл /etc/rc.local можно использовать для запуска дополнительных локальных служб или для настройки дополнительных параметров. Файл /etc/rc.serial предназначен для инициализации коммуникационных адаптеров (например, установки характеристик работы последовательных портов). Файл /etc/rc.i386 предназначен для настройки специфичных для архитектуры Intel параметров, таких, как эмуляция iBCS2 или характеристик системной консоли ПК. В каталоге, указанном в файле /etc/rc.conf, вы можете создавать свои файлы автозапуска: # Location of local startup files. local_startup=/usr/local/etc/rc.d Каждый файл, оканчивающийся на .sh, будет запущен на выполнение в алфавитном порядке. Это простой и понятный метод для добавления дополнительных служб без редактирования файла /etc/rc.local. Многие порты/пакаджи предполагают, что каталог /usr/local/etc/rc.d

http://www.freebsd.bip.ru/sysstart.shtml (5 of 8)10.04.2004 17:23:38

Daemon News Russia

предназначен для размещения запускаемых при загрузке системы скриптов. Вопрос: Как запретить перезагрузку по клавишам Control-Alt-Delete? Ответ: Если вы используете драйвер консоли syscons (который является стандартным) во FreeBSD 2.2.7-RELEASE и выше, перегенерируйте и установите новое ядро со строчкой options SC_DISABLE_REBOOT в конфигурационном файле. Если же вы используете драйвер консоли PCVT во FreeBSD 2.2.5RELEASE и выше, то укажите следующую строку в конфигурационном файле: options PCVT_CTRL_ALT_DEL Вопрос: Как перечитать содержимое /etc/rc.conf и перестартовать /etc/rc без перезагрузки системы? Ответ: Перейдите в однопользовательский режим, а затем возвратитесь обратно в многопользовательский. На консоли выполните следующее: # shutdown now (Замечание: без -r или -h) # return # exit Нормальному протеканию процесса начальной загрузки системы могут препятствовать следующие дефекты и ошибки: неисправности аппаратных средств; дефектные блоки начальной загрузки; повреждения файловых систем; неверная конфигурация ядра; ошибки в сценариях запуска. Неисправности аппаратных средств Если, пытаясь загрузиться, Вы все время получаете сообщение о, допустим, дефекте памяти или другом конкретном сбое, то это верный признак того, что проблема связана с аппаратурой. Дефектные блоки начальной загрузки Как правило, в устройство управления ПЗУ машины встроена информация о том, как выполнять начальную загрузку системы. Если программа начальной загрузки повреждена, то система, скорее всего, не загрузится, даже если диск и сама операционная система целы. В этом случае попробуйте загрузить систему с дистрибутивов, (это могут быть гибкие диски, CDROM) и запустить shell, не выполняя инсталляцию программного обеспечения. Если Вы сможете смонтировать свои файловые системы из этого состояния, то Вам, возможно, понадобится просто реинсталлировать блоки начальной загрузки. Если это невозможно, попробуйте с помощью дистрибутивов продолжить начальную загрузку и смонтировать корневую файловую систему. Если это удастся и система заработает, можно реинсталлировать блоки начальной загрузки обычным способом. http://www.freebsd.bip.ru/sysstart.shtml (6 of 8)10.04.2004 17:23:38

Daemon News Russia

Повреждение файловых систем Повреждение файловых систем - это один из самых неприятных отказов, потому что файлы могут быть безвозвратно испорчены (а в некоторых случаях может быть приведен в негодность даже дисковод). Если невозможно прочитать корневой раздел, то ядро не загрузится, и система может повести себя так, как будто неисправность в ней связана с неисправностью аппаратуры. Если Вы подозреваете, что испорчена файловая система, попробуйте загрузить систему в однопользовательском режиме. Если это сделать невозможно, значит, в системе возникли серьезные проблемы. Может быть, удастся загрузиться с дистрибутива и проверить корневой раздел с помощью fsck. Если некоторые важные файлы пропали, можно восстановить их с дистрибутива. Если система все-таки вошла в однопользовательский режим, то прежде чем приступать к любым дальнейшим действиям, обязательно запустите команду fsck. Сначала проверьте корневой каталог командой fsck и, если обнаружатся какие-либо проблемы, перезагрузите систему. Повторяйте этот процесс до тех пор, пока корневой раздел не будет чист. Потом с помощью все той же команды fsck проверьте остальные файловые системы. Неверная конфигурация ядра

Перестраивая и заменяя ядро, Вы каждый раз рискуете тем, что оно однажды перестанет работать, и Вы окажетесь в очень затруднительном положении. Обязательно примите меры по обеспечению возможности загрузки старого ядра на случай неожиданной проблемы. Рекомендуется держать старое ядро системы под рукой даже в повседневной работе (назовите его, скажем, kernel.super.old, и пусть оно лежит себе спокойно рядом с повседневным kernel в корневом каталоге, и ждет "своего часа"). Ошибки в сценариях запуска Ошибки в сценариях являются самыми распространенным препятствием для успешного осуществления процесса начальной загрузки. Такие ошибки устраняются легче всего. Необходимо идентифицировать ошибку и устранить ее так же, как при отладке любого другого сценария shell, но в однопользовательском режиме. Вопросы и ответы Вопрос: Где расположены файлы конфигурации системы? Ответ: Для FreeBSD конфигурационным файлом является /etc/rc.conf. Все параметры указываются здесь, а остальные конфигурационные файлы /etc/rc* просто его используют. Посмотрите файл /etc/rc.conf и измените значения переменных на соответствующие вашей системе. В файле содержатся комментарии, описывающие смысл этих переменных и способ их задания. Файл /etc/rc.local можно использовать для запуска дополнительных локальных служб или для настройки дополнительных параметров. Файл /etc/rc.serial предназначен для инициализации коммуникационных адаптеров (например, установки характеристик работы последовательных портов). http://www.freebsd.bip.ru/sysstart.shtml (7 of 8)10.04.2004 17:23:38

Daemon News Russia

Файл /etc/rc.i386 предназначен для настройки специфичных для архитектуры Intel параметров, таких, как эмуляция iBCS2 или характеристик системной консоли ПК. В каталоге, указанном в файле /etc/rc.conf, вы можете создавать свои файлы автозапуска: # Location of local startup files. local_startup=/usr/local/etc/rc.d Каждый файл, оканчивающийся на .sh, будет запущен на выполнение в алфавитном порядке. Это простой и понятный метод для добавления дополнительных служб без редактирования файла /etc/rc.local. Многие порты/пакаджи предполагают, что каталог /usr/local/etc/rc.d предназначен для размещения запускаемых при загрузке системы скриптов. Вопрос: Как запретить перезагрузку по клавишам Control-Alt-Delete? Ответ: Если вы используете драйвер консоли syscons (который является стандартным) во FreeBSD 2.2.7-RELEASE и выше, перегенерируйте и установите новое ядро со строчкой options SC_DISABLE_REBOOT в конфигурационном файле. Если же вы используете драйвер консоли PCVT во FreeBSD 2.2.5RELEASE и выше, то укажите следующую строку в конфигурационном файле: options PCVT_CTRL_ALT_DEL Вопрос: Как перечитать содержимое /etc/rc.conf и перестартовать /etc/rc без перезагрузки системы? Ответ: Перейдите в однопользовательский режим, а затем возвратитесь обратно в многопользовательский. На консоли выполните следующее: # shutdown now (Замечание: без -r или -h) # return # exit

http://www.freebsd.bip.ru/sysstart.shtml (8 of 8)10.04.2004 17:23:38

(c) 2001-2002 Daemon News Russia

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Краткое описание некоторых полезных команд новости

adduser - добавить пользователя в систему addgroup - добавить группу в систему cat - вывод файлов в стандартный вывод chgrp - смена группы, владеющей файлами chmod - изменяет права доступа к файлу chown - изменение принадлежности файла пользователю и группе cp - копирование файлов cron - демон для запуска команд по расписанию dd - преобразование файла во время его копирования df - свободное суммарное пространство на диске echo - выводит строки текста expr - вычислить значение выражения group - файл группы пользователя rmgroup - Удалить группу kill - завершить процесс killall - завершить процессы по имени ln - создает связи между файлами login - начинает сессию в системе ls - выдает содержимое каталогов mkdir - создать директории mv - переместить/переименовать файлы named - сервер доменных имен Internet named.reload - заставляет сервер доменных имен синхронизировать свою базу данных named.restart - остановить и перезапустить сервер имен nice - запустить программу с измененным приоритетом passwd - изменяет пароль пользователя rm - удаляет файлы su - сменить ID пользователя или стать суперпользователем root sudo - выполняет команду как суперпользователь root test - проверяет типы файла и сравнивает значения uname - вывести информацию о системе vipw - редактировать файл паролей w - показывает пользователей в системе, и что они делают who - показывает пользователей, вошедших в систему Некоторые важные файлы... /etc/crontab - таблицы для управления демоном cron /etc/motd - файл, содержащий "сообщение дня" /etc/passwd - файл паролей /etc/services - список Internet сетевых служб /etc/shells - файл, содержащий список доступных shells

http://www.freebsd.bip.ru/com.shtml (1 of 2)10.04.2004 17:23:39

(c) 2001-2002 Daemon News Russia

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Инсталляция FreeBSD в качестве Internet-сервера новости

Много чего написано про инсталляцию Windows от 3.* до NT; немного меньше - про инсталляцию OS/2, а вот детальное описание инсталляции Unix я не встречал. Попробую рассказать, как установить и настроить FreeBSD. Это - мой личный опыт, так что возможны расхождения во мнениях с гуру, а также пробелы, тем более что многие вещи я пишу прямо по горячим следам: сделал, понял - и сразу на всеобщее обозрение. :-) Я работаю в условиях, когда я - единственый администратор на машине, на которой нет никакой особо секретной информации. Вокруг меня нет серьезных хакеров (по крайней мере они себя никак не проявляют). Основная задача - обеспечить почту, в основном по UUCP. Это накладывает некоторый отпечаток на мои воззрения по поводу администрирования. А почему именно FreeBSD? Я наконец проникся уверениями Micro$oft, BSA и прочих серебролюбивых организаций, что нехорошо использовать ворованное ПО - это аморально, преступно, а также невыгодно. Из бесплатных OS мне известны три Unix'а - FreeBSD, Linux и SCO (последний - только для некоммерческого использования), а также Acorn'овская RiscOS. Но RiscOS идет только на RISCпроцессорах ARM, а из Unix'ов я лучше всего знаю FreeBSD. Какую машину мне приготовить для FreeBSD? В отличие от WindowsNT, которая требует Pentium и 16 MB RAM, для работы Internet-сервером вполне достаточно 486SX-33 и 8 MB RAM. Операции с плавающей точкой серверу не нужны, быстродействие определяется не процессором, а пропускной способностью сети, а графическая карта сойдет самая слабая, какая только есть - все равно он будет работать в текстовом режиме. Мышь, кстати, тоже не нужна. Так что, как видите, использовать легальное ПО действительно дешевле, чем цельнотянутое. Обьем диска: ● ● ● ●

Минимальная конфигурация - 50 MB. Дополнительное ПО - около 30 MB. Swap (область подкачки) - в два..пять раз больше оперативной памяти. Данные - неограниченно.

С каких носителей его можно инсталлировать? FreeBSD можно инсталлировать с дискет (классический способ), с FAT-раздела, с FreeBSDраздела, с CD-ROM (ну, это нынче все могут), со стримера (у меня его никогда не было), а также по сети: по NFS и по FTP (обычному и сквозь FireWall). Как правило, на CD-ROM не самая свежая версия, с дискет довольно мучительно, для инсталляции с FreeBSD-раздела нужно http://www.freebsd.bip.ru/bsdserver.shtml (1 of 11)10.04.2004 17:23:42

Daemon News Russia

иметь дистрибутив, записанный на этот раздел (а значит, иметь установленный FreeBSD). NFS вообще используется довольно редко, по крайней мере для NFS, как и для FreeBSD-раздела надо иметь уже установленный Unix, Так что остаются FAT-раздел и FTP. Для FTP нужно иметь быструю, а главное - стабильную связь с FTP-сервером, поэтому для первой инсталляции рекомендую закачать FreeBSD на FAT-раздел локального диска. Это отрежет часть места на диске, но потом можно будет снести FAT-раздел и сделать на его месте что-нибудь полезное или же держать его для загрузки в DOS. На каких именно серверах можно взять FreeBSD? Для получения списка серверов обратитесь на http://www.freebsd.org/; в России - ftp://ftp.ru/, ftp:// ftp.kiae.su/ и ftp://ftp.gamma.ru/. К сожалению, ftp.gamma.ru не позволяет анонимный вход, если ваша машина не известна ReverseDNS-серверу, отвечающему за вашу зону IP-номеров; так что если вы только собираетесь строить свою Internet-сеть на базе FreeBSD, то это место не самое удачное. Что именно закачивать? Сначала надо подготовить директории: mkdir /FreeBSD cd /FreeBSD mkdir bin mkdir floppies Вот мы и создали основные директории. Если думаете брать еще что-нибудь, выясняйте, где оно лежит и действуйте аналогично. Запускаем FTP-клиента: ftp ftp[номер][.страна].freebsd.org Я не оговорился - все FTP-серверы, содержащие FreeBSD, прописаны в домене freebsd.org. Узнать, какой ближе, можно командой ping ftp[номер][.страна].freebsd.org по принципу наименьшего времени отклика и наибольшего процента возвращенных пакетов. Сервер спросит login: и Password: login: ftp Password: имя@ - обычный анонимный вход на FTP-сервер. Дальше cd pub/FreeBSD/версия-RELEASE Вопрос о версии требует отдельного рассмотрения. К сожалению, 2.2.1 и 2.2.2 мне не понравились - похоже, там что-то намудрили и они работают нестабильно. Пришлось вернуться к 2.1.7.1, а ее удалось найти только на ftp.freebsd.org - на ftp.kiae.su и ftp.gamma.ru ее уже не было, там держат только последние версии. Включаем режим перекачки двоичных (нетектовых) файлов

http://www.freebsd.bip.ru/bsdserver.shtml (2 of 11)10.04.2004 17:23:42

Daemon News Russia

bin и визуального отображения закачанных килобайтов hash отключим вопросы про каждый файл "это брать?" prompt Далее: cd bin lcd bin mget *.* lcd .. cd .. Для минимальной инсталляции надо взять все в директории bin. Там находятся файлы bin.?? (от bin.aa до bin.cq - последний зависит от версии), bin.mtree, checksum.md5 и install.sh - всего 17 MB. Если процесс оборвался, допустим, на файле bin.ai, не надо качать все заново, можно продолжить командой mget bin.a[i-z] bin.[bc]? bin.mtree checksum.md5 install.sh Впрочем, это все относится к командной строке FTP, к тому же операционные системы Micro$oft в командах "lcd" вместо "/" используют "\". Если у вас FTP-программа работает по другому делайте сами. cd floppies lcd floppies get boot.flp lcd ../tools cd ../tools get rawrite.exe quit boot.flp - образ загрузочной инсталляционной 1.44 MB дискеты (естественно, надо иметь такой дисковод). Прежние версии обходились дискетой 1.2 MB. Впрочем, возможно, удастся впихнуть ядро на 5.24"-дискету, отформатировав ее на 1.44 rawrite.exe - программа под DOS, способная сделать из форматированной дискеты и файла boot.flp загрузочную дискету. Теперь минимальная инсталляция (впрочем, это не так мало) находится на нашем диске. Там же в tools есть еще много иногда полезного, описанного в 00_index.txt, берите, если хочется. Изготовим загрузочную дискету: rawrite.exe boot.flp a: Теперь загрузимся с нее. Будет много непонятных сообщений - не пугайтесь "not found" или "conflict with" - ядро содержит множество драйверов для самых разных устройств, большая часть которых у вас отсутствует (ну действительно, откуда взяться на машине десятку сетевых карт разных производителей?). Основная проблема может быть с NE1000/NE2000-совместимыим и 3Com 3C503 картами - устройство ed0 расчитывает на Port 280 и IRQ 5, ed1 - Port 300 и IRQ 5. Впрочем, перед стартом ядро предлагает научить его работать с другими портами и прерываниями, но я предпочел переставить параметры карты (перемычками на карте или программой-настройщиком), так как считаю, что аппаратуру конфигурировать проще, чем программу. Надеюсь, вы заранее подготовили свободное место на диске для FreeBSD-раздела? Если нет, и к тому же у вас только одна партиция, придется вернуться в DOS, стереть лишнее, http://www.freebsd.bip.ru/bsdserver.shtml (3 of 11)10.04.2004 17:23:42

Daemon News Russia

дефрагментировать диск и воспользоваться программой fips.exe (лежит рядом с rawrite.exe), чтобы освободить место. (При этом размер кластера на FAT-разделе останется прежним.) Первое, что надо сделать - создать раздел на диске. Создадим FreeBSD-партицию (в терминах Unix она называется slice, а partition - подраздел внутри slice) на все свободное место либо, если свободное место не непрерывно, на самый большой непрерывный кусок. Затем надо создать подразделы. Я рекомендую такую схему: / (корень) - от 16 до 32 MB /usr (системные программы и данные для них) - от 50 MB swap (область подкачки) - см.ниже /var (рабочие файлы) - порядка 30 MB /home (домашнии директории пользователей) - остальное Конкретные значения сильно зависят от размера диска. Рекомендуемое значение для / составляет 20 MB, если меньше - sysinstall будет возмущаться; ну и пусть, ничего страшного. / usr должна соответствовать обьему инсталлируемого, при выборе distribution можно уточнить, сколько именно понадобится и отвести раза в полтора больше. swap зависит не столько от обьема диска, сколько от количества оперативной памяти и должен превышать ее в два..пять раз (в пять раз - с учетом возможного наращивания памяти). Если хотите, чтобы FAT-раздел был доступен из Unix, надо указать точку монтирования для него, обычно - /dos. После того, как вы дали приказ начать инсталляцию и отказались от последнего шанса спасти информацию на том месте, которое отвели под FreeBSD, будет долгое извлечение из архива и размещение на диске. Можно пока нажать Alt+F2 - посмотреть как идет извлечение, Alt+F4 подать какую-нибудь команду (ой, лучше не делайте этого) и Alt+F1 - вернуться обратно. Теперь, если все закончилось удачно, зайдем в пост-конфигурирование. Если вы проводили инсталляцию по сети, то сетевой интерфейс должен быть уже сконфигурирован, иначе лучше честно ответить на вопросы о конфигурации сетевого интерфейса. Если у вас есть подключение к Internet, адреса должен дать провайдер или местный сетевой администратор, если же это чисто внутренняя сеть - воспользуйтесь адресом из множества, отведенного под внутрикорпоративные сети, например 192.168.0.1 и маской 255.255.255.0. Если есть подключение, желательно сконфигурировать анонимный FTP-доступ, если есть внутренняя сеть - неплохо покажет себя Samba (файл-сервер для Micro$oft Network по протоколу TCP/IP). И наконец, весьма здорово сделать WWW-сервер на базе Apache! Я даже не ожидал, что это будет так легко. И как мне пользоваться этой системой дальше? После выхода из программы инсталляции система должна загрузиться с жесткого диска. Снова будут те же самые сообщения "not found" и "conflict with". Как-то раз у меня не пошла загрузка сразу после инсталляции (система висла), но вместо того, чтобы устанавливать все заново, я на приглашение загрузчика ввел Boot: kernel.GENERIC и вместо того, чтобы грузиться с основного ядра /kernel, загрузился с его копии /kernel. GENERIC. Затем вошел без пароля: login: root

http://www.freebsd.bip.ru/bsdserver.shtml (4 of 11)10.04.2004 17:23:42

Daemon News Russia

и скопировал хорошее ядро на место плохого: cp /kernel.GENERIC /kernel Дальнейшие действия проходят под китайским лозунгом "три дня труда - десять лет счастья". :-) Бороться придется по большей части врукопашную. Для начала возьмем на ftp://ftp.kiae.su/pub/ FreeBSD/local deco*bin.tgz. Закинуть его можно в любую директорию, я предпочитаю в /dos (на случай переустановки) или /var (не засорять же / и /usr); желательно недалеко от корня, иначе долго будет добираться. Инсталлируем pkg_add deco*bin.tgz Если deco*bin.tgz не в текущей директории, придется указывать полный путь. Почему-то авторы решили, что запускаемый файл лучше поместить в /usr/local/bin/, но я предпочел переместить его mv /usr/local/bin/deco /usr/bin/deco Хотя директория /usr/bin/ по умолчанию прописана в переменной окружения PATH, мне пришлось выйти из системы (Ctrl+D) и войти снова, чтобы можно было запускать deco без указания полного пути. Теперь deco запускается, но - вот ужас! - он черно-белый, вместо псевдографики - "|", "-" и "+", не работают клавиши с F5 до F10. Надо править файлы /etc/ttys и /etc/termcap. С /etc/ttys довольно просто: ttyv? "/usr/libexec/getty Pc" pc3r on secure Где вместо "?" надо подставить номера консолей (мне хватает с 0 по 7). С /etc/termcap несколько сложнее. Во первых, он хранится не в /etc/, а в /usr/share/misc/; /etc/termcap символьный линк к реальному файлу (обозначается /etc/termcap -> /usr/share/misc/). А мы сотрем его и сделаем другой, на тот termcap, который пришел с deco: rm /etc/termcap ln -s /usr/lib/deco/termcap /etc/termcap Но этого мало, надо его поправить: # Standard Xenix console. # It is not true ansi, but has been hacked for dumb users. ansi|xenix|pc3r| cons25r:\ :g1=\240\241\253\273\256\261\276\265\245\270\250:\ :C2:Nf#16:Nb#8: Mf=042615378CAE9DBF:Mb=04261537:\ :Cf=\E[%p1%{8}%/%d;3%p1%{8}%m%d;4%p2%dm:fs=\E[m: \ :kI=\E[L:kH=\E[F:kd=\E[B:kN=\E[G:kl=\E[D:\ :kr=\E[C:kh=\E[H:ku=\E[A:kP=\E[I:kD=\177:\ :f1=\E[M:f2= \E[N:f3=\E[O:f4=\E[P:f5=\E[Q:\ :f6=\E[R:f7=\E[S:f8=\E[T:f9=\E[U:f0=\E[V:tc=ansi: vt100:gs=\E(0:ge=\E (B:g1=-|+\136+}+{+++:\ :f0=\EOp:f1=\EOq:f2=\EOr:f3=\EOs:f4=\EOt:f5=\EOu:f6=\EOv:\ :f7=\EOw:f8= \EOx:f9=\EOy:kh=\EOP:kD=\177:kb=\008:\ :md=\E[1m:mr=\E[7m:mb=\E[5m:me=\E[m:tc=vt100: Некоторые пояснения: ● ●

pc3r используется для локального входа, vt100 - для telnet. g1 - список символов для вывода рамки окна (здесь - KOI-8)

http://www.freebsd.bip.ru/bsdserver.shtml (5 of 11)10.04.2004 17:23:42

Daemon News Russia ●



k* - определение клавиши, в т.ч. ❍ kI - Insert ❍ kD - Delete f* - определение функциональной клавиши

Вообще, читайте руководство - команда man termcap 5 (если вы установили manual pages) содержит по этому поводу все, что я знаю, и все остальное. "5" означает, что manual page будет браться из каталога man5; иначе будет взята первая попавшаеся, а именно 3-я, в которой описаны вызовы библиотеки termcap. Но псевдографика же соответствует Alt-кодировке, а не KOI-8? В Internet принята кодировка KOI-8 - кодировка Unix и Acorn, кодировка E-mail, FTP и Usenet (News). (WWW/HTTP, как правило, в многокодовой форме). Поэтому обратимся к /etc/sysconfig для версий до 2.1.* или /etc/rc.conf для версий, начиная с 2.2.*. Этот файл - всего лишь запускаемый (исполняемый), да и не делает ничего, кроме определения переменных, которые будут использоваться в /etc/rc и запускаемых из него /etc/rc.* и /etc/netstart. Если интерсно, как именно: grep имя_переменной /etc/sysconfig /etc/rc.* /etc/netstart Ну да ладно, вернемся к проблеме русификации. В комментариях к переменным написано много интересного, позволяющего разобраться, что с этой переменной делать и какие значения она может принимать. Вот так я настраиваю клавиатуру: keymap="ru.koi8-r" keyrate="fast" keychange="NO" cursor="blink" Русификацию экрана можно провести двумя путями: загрузить шрифты KOI-8 или загрузить шрифты Alt и карту перекодировки. Разница в том, что символы Alt-псевдографики отображаются видеоконтроллером с расширением на один столбец вправо, из-за чего горизонтальные линии в KOI-8 получаются разрывными (как будто использовались знаки равенства "="). Но а предпочел KOI-8: scrnmap="NO" font8x16="koi8-r-8x16" font8x14="NO" font8x8="NO" blanktime="NO" saver="NO" Для того, чтобы эти изменения возымели действие, надо перезагрузить систему. Опытный администратор часто может произвести настройку без этого, но надо убедиться, что при последующих включениях машины все будет нормально. reboot Дальнейшие действия? Советую слинковать некоторые директории. Некоторые программы почему-то считают, что spool/ должен находиться в /usr/, а mail/ - в spool/ ln -s /var/spool /usr/spool ln -s /var/mail /var/spool/mail

http://www.freebsd.bip.ru/bsdserver.shtml (6 of 11)10.04.2004 17:23:42

Daemon News Russia

Почему-то стартовые скрипты должны находиться в /usr/local/etc/rc.d, в то время как я считаю, что /usr вообще должна быть read-only mkdir /etc/rc.d mv /usr/local/etc/rc.d/* /etc/rc.d rmdir /usr/local/etc/rc.d ln -s /etc/rc.d /usr/local/etc/rc.d А где брать серверы DNS, FTP, Samba и Apache? Серверы DNS и FTP присутствует в минимальной поставке. Кстати, анонимный FTP доступ надо конфигурить (создать пользователя FTP, в поле пароля прописать "*" и назначить ему домашнюю директорию), а вот парольный действует автоматически, используя ту же базу данных, что и терминальный доступ. А для Samba и Apache достаточно просто сменить Media указать в качестве источника FTP-сервер. Packages (в это понятие входят множество программ) редко превышают 1.5 MB, так что их можно инсталлировать даже по сети из США, что я и делал. Впрочем, Apache лучше взять русский (об этом далее). Как администрировать юзеров и регулировать доступ к файлам? Для этого есть специальные утилиты, например, adduser. Но эти утилиты слишком умные: например, копируют стандартные инициализационные файлы в домашнюю директорию пользователя, а я считаю, что сам могу решить, что надо копировать, а что - нет. Базовый файл - /etc/master.passwd, из него получаются /etc/passwd (общедоступный список пользователей), /etc/spwd.db (база пользователей) и /etc/pwd.db (база паролей). Для добавления и удаления юзеров, а также для изменения некоторых параметров можно использовать команду vipw (как следует из ее названия, она запускает редактор vi или другой, если установлена переменная окружения EDITOR). Но я предпочитаю deco, а затем даю команду pwd_mkdb master.passwd. (Внимание - это можно делать только если гарантируется, что никто другой не будет редактировать файл в это время! vipw блокирует запуск другого экземпляра этой (но не другой) программы администрирования юзеров.) В файле master.passwd на каждого юзера отведено по одной строке. Каждая строка состоит из полей, разделенных двоеточием: ● ●

● ● ● ● ● ● ● ●

имя пользователя (вводится на приглашение login:) закодированный пароль (пустая строка соответствует отсутствию пароля, звездочка "*" не соответствует никакому паролю и войти под этим именем будет невозможно). UID (User IDenteficator), число GID (Group IDenteficator), число User's general classification (в 2.0 не использовалось, в 2.2.2 вроде уже задействовано). Password change time (у меня в этом поле всегда ноль) Account expiration time комментарий; обычно - полное имя пользователя home (домашняя директория) shell (программа, запускаемая при входе с терминала)

Имя пользователя задействовано во множестве мест, в т.ч. в терминальном входе (при работе на машине с Unix как на рабочей станции), в почтовом обмене (как имя отправителя и получателя), а также в доступе по FTP и Samba. Во всех случаях используется один и тот же пароль. http://www.freebsd.bip.ru/bsdserver.shtml (7 of 11)10.04.2004 17:23:42

Daemon News Russia

Пароль шифруется алгоритмом, который не позволяет расшифровать обратно, а при входе в систему сравниваются зашифрованный пароль из базы паролей и свежезашифрованный введенный пользователем пароль. Сменить пароль можно командой passwd имя_юзера; если дать просто команду passwd, это относится к тому имени, под которым сейчас работаем; обычный юзер (не супервизор) должен сначала ввести старый пароль, и если система сочтет его пароль недостаточно секретным (слишком короткий, содержит только строчные буквы), то не примет его. Пароль надо вводить дважды, причем вслепую - обычные меры безопасности, принятые нынче во всех системах. Пустой пароль при шифрации превращается в пустую строку, так что если надо убрать пароль, нужно стереть его ручками (ввод пустого пароля рассматривается как отказ от изменений). Никакой пароль не превращается в звездочку "*", это используется как запрет входить под таким именем. Отсутствие пароля (пустой пароль) приводит к отказу некоторых особо осторожных сервисов работать с этим пользователем. UID идентифицирует права пользователя на файлы и процессы (а не имя!). Таким образом, второй account с тем же UID будет лишь alias для первого (т.е. оба account'а будут иметь идентичные права). /* Переводите с английского сами, я не могу. */ Этот UID будет присвоен всем файлам и директориям, созданным юзером. Изменить UID файла может только супервизор (пользователь с UID=0). GID также будет присвоен всем файлам и директориям, созданным юзером. Юзер может входить в несколько групп, если это прописано в /etc/group. Со следующими тремя полями я не разбирался. Комментарий используется в строке "From:" в письмах, отправляемых командой mail, сообщается командой finger. Домашняя директория становится текущей и записывается в переменную HOME при терминальном входе, в ней лежат настроечные файлы ко многим программам. Также является корневой при подключении по Samba ресурса homes. Shell - для терминальных пользователей как правило /bin/sh, /bin/csh или /bin/bash. Для почтового обмена по UUCP - /usr/libexec/uucp/uucico. Для тех, кому надо предоставить только специфический доступ (например, POP3 и Samba) ставится /usr/bin/passwd и единственной возможностью при входе терминалом или по Telnet для них будет смена пароля. Для пользователей, которые никогда не будут работать (т.н. псевдопользователей) ставится несуществующий /none или безобидный /bin/false. Если shell, указанный пользователю, не прописан в файле /etc/shells, то многие сервисы (например, ftpd и pcnfsd) будут рассматривать такого пользователя как нежелательного. Что можно порекомендовать в плане администрирования? Прежде всего не надо использовать имя root. К сожалению, его нельзя удалить, слишком во многих местах оно задействовано. Поэтому я делаю root:*:0:0::0:0:SysMaster:/none:/none т.е. у него нет ни пароля, ни домашней директории, ни shell'а. Изначально во FreeBSD создается еще пользователь toor, который может заменить собой root, но я предпочитаю использовать какое-нибудь третье имя. Если же вы решили сохранить имя root, то по крайне мере надо http://www.freebsd.bip.ru/bsdserver.shtml (8 of 11)10.04.2004 17:23:42

Daemon News Russia

установить ему пароль (при установке этот пользователь создается без пароля). Если на машине несколько администраторов, то им лучше каждому иметь свой супервизорский account на случай если один вдруг решит сменить пароль. Вообще надо время от времени менять свой пароль, но я не буду вдаваться в подробности. Главное, на мой взгляд - не дать мерам безопасности мешать нормальной работе. Супервизору запрещен удаленный вход (по Telnet и FTP). Если надо удаленно администрировать систему, входите под обычным именем и давайте команду su имя_супервизора. Однако делать это могут только те, кто явно включен в нулевую группу (wheel). Вообще лучше поменьше времени проводить под правами супервизора - меньше вероятность повредить систему. Администрирование групп сильно зависит от задач, возлагаемых на систему. Этот аспект тоже администрирования подробно описан в литературе, а у меня на данный момент не так уж много пользователей, чтобы я успел накопить опыт. Какие особенности настройки Samba? Настройка Samba заключена в файле /usr/local/samba/lib/smb.conf или в /usr/local/etc/smb. conf, на всякий случай я залинковал их и у меня это как бы один файл. Вот он: [global] comment = FreeBSD - Samba %v log file = /var/log/samba.log dont descend = /dev,/proc,/root,/ stand printing = bsd map archive = no status = yes public = yes read only = no PREserve case = yes strip dot = yes security = share workgroup = Unix [homes] browseable = Yes comment = %U's Home Directory create mode = 0664 public = no mangled map = (*.html *.htm) (*;1 *) [pub] browseable = Yes path = /var/ftp/pub comment = Public domain public = yes read only = yes Комментарии к этому файлу даст команда man smb.conf, а я пока лишь замечу, что к этой машине не подключен принтер (соответственно нет секции [printers]), а в качестве публично доступной директории используется та же самая, что и по FTP. Какие особенности настройки Apache? При изучении Apache я использовал два источника: сервер поддержки русского Apache apache. lexa.ru Алекса Тутубалина и книгу Бена и Петера Лори "Apache: установка и использование" (издво Питер-Пресс). Начать лучше с сервера, там по русски изложена процедура начальной инсталляции. Замечу только, что в файле Configuration закомментарена строка, отвечающая за присоединение модуля Proxy, так что из-за этого когда я решил все-таки установить Proxy, мне пришлось перекомпилировать Apache еще раз. Дальнейшие сложности настройки связаны как с большими возможностями протокола HTTP, так и с большими возможностями самогО Apache. Собственно использование русского Apache связано с поддержкой нескольких русских кодировок. Приведу куски файла httpd.conf, отвечающие за это:

http://www.freebsd.bip.ru/bsdserver.shtml (9 of 11)10.04.2004 17:23:42

Daemon News Russia

Port 80 CharsetDecl koi8-r ru CharsetDecl windows-1251 ru #Перекодировка KOIKOI не нужна CharsetRecodeTable koi8-r windows-1251 conf/koi-win.tab CharsetAlias windows-1251 win1251 win xcp1251 cp1251 cp-1251 CharsetAlias koi8-r koi8r koi-8-r koi8 koi-8 koi CharsetPriority koi8-r windows1251 ISO-8859-5 ibm866 x-mac-cyrillic CharsetDefault koi8-r CharsetSourceEnc koi8-r CharsetSelectionOrder Portnumber Hostname Dirprefix Useragent CharsetMatchLanguage off CharsetRecodeFilenames Off Listen 80 Listen 8000 Listen 8001 CharsetByPort koi8-r 8100 CharsetByPort windows-1251 8101 Я избрал перекодировку по номеру порта; кодировка на сервере - KOI-8; при заходе по порту :80 выдается кодировка, запрошенная браузером. На сАмом деле у меня поддерживаются все пять кодировок, но здесь приведен пример для двух - KOI-8 и Windows1251. А почему она так долго загружается? Нельзя ли быстрее? Основное время тратится на неудачные попытки лишних драйверов найти несуществующие устройства. Все драйверы жестко вшиваются в ядро (хотя есть loadable kernel modules, это мало меняет суть дела). FreeBSD начиная с 2.1.6 имеет модуль предзагрузочной конфигурации: можно указать Port и IRQ устройства или вообще отключить его. Измененные значения фиксируются и это сильно ускоряет загрузку, но драйверы все равно занимают место в файле и на диске, поэтому если хочется, чтобы машина работала более эффективно, придется перекомпилировать ядро. Это не требует писать программы, надо только указать компилятору, какие именно части надо включить в ядро. Со страхом и трепетом я приступил в первый раз к перекомпиляции ядра. На всякий случай позвал на помощь товарища. Тот, правда, видел Unix второй раз в жизни, но "кто умеет - делает, а кто не умеет - советует". :-) Еще говорят, что "кто совсем не умеет - учит", но я, как видите, делал, а теперь учу. :-) Кстати, его советы оказались неплохими, по крайней мере в части перевода с английского и в понимании логики конфигурирования. Для начала надо получить ftp.freebsd.org/pub/FreeBSD/версия-RELEASE/src/ssys.*, обычно я кладу их на DOS-раздел в \FreeBSD\src\, рядом с bin. Теперь их надо извлечь. Маленькая тонкость - по умолчанию /sys -> /usr/src/sys, а я не хочу кидать исходники ядра в /usr. Поэтому mkdir /var/src /var/src/sys ln -s /var/src /usr/src cat .../src/ssys.?? | tar --unlink -xvpzf - -C / Последнюю строчку я почти не раздумывая взял из .../bin/install.sh. При этом извлекается исходник ядра с кучей драйверов, часть из которых прописана в GENERIC. Идем дальше: cd /sys/i386/conf cp GENERIC MYCONF редактировать файл MYCONF config MYCONF cd /sys/ compile/MYCONF make depend make make install reboot Если компиляция заткнется на каком-либо этапе, вам сообщат. Внимательно читайте диагностику и, чтобы не сбросить ее с экрана, производите правку с другой виртуальной консоли или из другой сесии telnet. Что значит "редактировать файл MYCONF"? Изначально файл GENERIC содержит строки команда драйвер параметры #комментарий http://www.freebsd.bip.ru/bsdserver.shtml (10 of 11)10.04.2004 17:23:42

Daemon News Russia

например cpu "I386_CPU" cpu "I486_CPU" cpu "I586_CPU" Естественно, надо оставить тот, который соответствует вашей машине. Возможен также вариант, когда это ядро должно работать в нескольких конфигурациях, тогда надо оставить строки, соответствующие хоть одной (т.е. если ядро делается для 486-й машине, которая вскоре должна быть усилена до 586-й, то надо оставить две последние строки). В этом очень поможет файл LINT. Он содержит все драйверы, которые есть в ssys.?? и по слухам не может быть скомпилирован - некоторые строки противоречат друг другу. Зато от неплохо прокомментирован. Моя первая компиляция закончилась неудачно - я выкинул шину PCI (ее на машине действительно не было), но оставил какое-то PCI-устройство и компилятор на нем запнулся. Ничего страшного не произошло, машина не повисла, система не грохнулась просто пришлось запустить компиляцию заново. Был вечер, ждать конца было неохота и я ушел домой, оставив компилятор работать, а утром получил готовое ядро. Компиляция сократила размер ядра (файла - ядро скомпрессировано, самораспаковывается при загрузке и в памяти занимает больше) с 1224 KB до 840 KB на одной машине и до 790 KB на другой (разница - в наличии CD-ROM и в сетевых картах). Это немаловажно, особенно если у вас не очень много памяти. FreeBSD способен работать и даже эффективно выполнять многие функции даже при 4 MB оперативной памяти, но для компиляции неплохо будет добавить; впрочем, компиляция при 8 MB, мне показалась, шла вполне приемлимо. Приложение 1 IP-адреса внутрикорпоративных сетей Для внутрикорпоративного использования ОргКомитет Internet выделил: одну сеть класса A с номерами 10.*.*.* 16 сетей класа B с номерами 172.[16..31].*.* 256 сетей класа C с номерами 192.168.*.*

(c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/bsdserver.shtml (11 of 11)10.04.2004 17:23:42

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Интерактивные интерфейсы пользователей новости

Командные интерпретаторы Базовые возможности командных интерпретаторов Перенаправление ввода/вывода и организация конвейера Управление ходом выполнения. Циклы Передача аргументов. Команда shift Упражнение Командные интерпретаторы Командный интерпретатор (по-другому - оболочка, shell) в операционных системах семейства UNIX предназначен для выполнения в основном следующих функций: предоставление пользователю интерактивного интерфейса для общения с системой (другими словами: обработка и выполнение пользовательских команд) выполнение файлов, содержащих команды интерпретатора (командные файлы); В системах UNIX (и во FreeBSD естественно) имеются несколько различных командных интерпретаторов. Наиболее популярные из них: sh - Bourne shell. csh - С-shell. ksh - Korn-shell. bash - Bourne Again shell. Как правило, все shell находятся в каталоге /bin. Но это не обязательно. Вы помните, что когда мы рассматривали вопросы установки packages, то установили интерпретатор bash в каталог / usr/local/bin. Все установленные в системе оболочки перечислены в файле /etc/shells. Наберите команду cat /etc/shells, и вы увидите примерно следующее: /bin/sh /bin/csh /usr/local/bin/bash Если строка в файле, в котором записаны команды интерпретатора, начинается на # , то эта строка - комментарий. Это не относится к самой первой строке файла. Она должна содержать запись, типа #!/bin/sh. Это указывает, что для выполнения команд будет вызван интерпретатор / bin/sh.

http://www.freebsd.bip.ru/shells.shtml (1 of 10)10.04.2004 17:23:45

Daemon News Russia

Далее рассмотрим возможности и языки командных интерпретаторов. Базовые возможности командных интерпретаторов Для определенности, в данной главе будем рассматривать интерпретатор bash. Если вам больше нравится работать и программировать в другой оболочке, можете в принципе пропустить изучение этой главы курса. Но замечу, что базовые возможности разных оболочек примерно одинаковые. Переменные и подстановка значений Все переменные в языке shell - текстовые. Их имена должны начинаться с буквы и могут состоять из латинских букв, цифр и знака подчеркивания (_). Bash поддерживает как простые переменные, так и массивы. Для установки переменной используется оператор =: Для простых переменных = Для массивов [индекс]=, либо =( ... ), либо =([индекс1]= [индекс2]= ... [индексN]=) Чтобы воспользоваться значением переменной, надо перед ней поставить символ $. Можно также заключить переменную в фигурные скобки {}. Например: # hour=14 # echo $hour 14 # hourth=24 # echo $hourth 24 # echo ${hour}th 14th Двойные кавычки ( " ), одиночные кавычки ( ' ), обратные кавычки ( ` ) Кавычки могут использоваться для создания строк. Например: "Hello, world!" 'Good bye' Кроме того, кавычки могут отменять действие следующих специальных символов:

http://www.freebsd.bip.ru/shells.shtml (2 of 10)10.04.2004 17:23:45

Daemon News Russia

` ~ ! # $ % ^ & * ( ) - + = \ | ; '" , . < > ? Значения этих специальных символов в строках, заключенных в одиночные кавычки '' отменяются. В строках, заключенных в двойные кавычки "" также отменяются значения специальных символов, за исключением ! $ ` \ {. Обратная наклонная черта \ также отменяет действие специальных символов. Не путайте одиночные и обратные кавычки. Пример: # dat='date' (здесь стоят обратные кавычки) # echo $dat Mon Jun 05 14:17:20 2000

# dat='date' (здесь стоят одиночные кавычки) # echo $dat date Конвейеры и списки Несколько команд могут быть объединены с помощью символов канала |. В этом случае они образуют конвейер. | | ... Символ канала | соединяет стандартный вывод команды со стандартным вводом команды и т.д. Каждая команда выполняется в отдельном процессе, а состояние выхода последней команды будет являться состоянием выхода конвейера. Примеры: # ps -ax | more # ls -l | grep "profile" Кроме конвейеров, команды могут объединяться в списки. Даже сами конвейеры могут быть объединены в списки. Это делается с помощью команд ; && ||. Команда ; просто последовательно выполняет оду команду или конвейер за другой (другим): # make depend ; make ; make install # cat /etc/passwd | grep root ; echo "User root" Для того, чтобы управлять выполнением следующей команды в списке в зависимости от состояния выхода предыдущей, используются команды && (логическое И) и || (логическое ИЛИ). Примеры: # mkdir mydir && cd mydir

http://www.freebsd.bip.ru/shells.shtml (3 of 10)10.04.2004 17:23:45

Daemon News Russia

В этом случае команда cd mydir будет выполнена только в том случае, если успешно (состояние выхода равно 0) завершится команда mkdir mydir. # cat /home/bob/.profile || echo "Нет файла .profile" В этом случае либо на экран будет выведено содержимое файла /home/bob/.profile, либо сообщение о том, что такого файла нет. Перенаправление ввода-вывода Команды и списки могут содержать операторы < и > - перенаправления стандартного ввода и стандартного вывода соответственно. Например: # ps -ax > /etc/proc выводит текущее состояние процессов не на экран, а в файл /etc/proc. Если к этому моменту такого файла не было, то он будет создан. Если он существовал, то его старое содержимое будет уничтожено новой информацией. Для то, чтобы не уничтожать содержимое файла, а добавить новую информацию (в конец файла), нужно использовать оператор >>: # ps -ax >> /etc/proc Кроме того, существует стандартный вывод ошибок. Он имеет дескриптор 2. Т.е. если мы не хотим получать сообщения об ошибках на стандартный вывод, то можно использовать перенаправление таким образом: # cat /etc/proc 2>err.log (ошибки, если возникнут, будут выведены в файл err.log) либо # cat /etc/proc 2>/dev/null (ошибки будут выведены "никуда", их посмотреть будет невозможно). Ввод перенаправляется аналогичным образом. Например, команда # mail [email protected] < /home/mail.txt отправит содержимое файла /home/mail.txt по адресу [email protected]. Оператор $file shift done echo "Всего к файлу $file добавлено `expr $i - 1' файлов" else echo "Недостаточно аргументов" fi (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/shells.shtml (10 of 10)10.04.2004 17:23:45

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Как перевести систему от a.out к ELF (миграция с 2.X на 3.X) новости

1) Что описывает этот документ? 2) Кому и почему следует сделать это? 3) Описание процесса перехода 3.0) Предварительные меры 3.1) Компиляция и установка системы в формате ELF 3.2) Компиляция и установка ядра в формате ELF 1) Что описывает этот документ? Данный документ описывает каким образом можно перевести FreeBSD с формата a.out на формат ELF. 2) Кому и почему следует сделать это? Всем, кто использует FreeBSD и собирается в дальнейшем использовать FreeBSD. Данная операция производится один раз. Этой операцией сдедует воспользоваться потому, что поддержка версий 2.2.X закончена, а вы, скорее всего, захотите пользоваться новым программным обеспечением, поставляемым в виде портов (aka ports). > Документ будет полезен пользователям, у которых возникли проблемы при переводе ядра из формата a.out в формат ELF. > Данную операцию aout-to-elf следует проводить для старых версий FreeBSD (aka 2.2.X и 3.0SNAP до 15.09.1998)), а пункт 3.2 будет полезен пользователям FreeBSD-3.0, желающим перейти на 3.0-STABLE. 3) Описание процесса перехода. 3.0) Предварительные меры Настоятельно рекомендуем осуществить резервное копирование! > Следует рассмотреть содержимое каталога /etc и сравнить его с содержимым каталога /usr/src/etc. Изменения, произошедшие, от версии 3.0-aout к версии 3.0-STABLE-ELF значительны. Например: появились новые системные псевдо-пользователи (bind, tty, kmem). Система при сборке захочет воспользоваться этими пользователями, >а не найдя их - сборка новой версии прекратится с сообщением об ошибке... Для проведения данной операции рекомендуется использование инструмента mergemaster из /usr/ports/sysutils. 3.1) Компиляция и установка системы в формате ELF http://www.freebsd.bip.ru/from3to4.shtml (1 of 3)10.04.2004 17:23:46

Daemon News Russia

> Перейдите в однопользовательский режим с помощью команды: > # shutdown now либо загрузите систему с опцией >-s и выполните в командной строке: > # fsck -p # mount -u / # mount -a -t ufs # swapon -a Очистите >/usr/obj: > # cd /usr/obj # chflags -R noschg * # rm -rf * Проверьте количество свободного пространства : > # df -k ........ >БУДЬТЕ ОСТОРОЖНЫ! Обратите внимание на количество свободного места тома /usr!!! При переходе с формата a.out на ELF понадобится около 400Mb свободного места. (синтаксис csh) > # setenv BINFORMAT aout # make aout-to-elf-build |& tee build.log Можно выпить чашечку кофе и т.д. Данная операция займет несколько часов. После её окончания следует заглянуть в build.log и проверить наличие ошибок. Если ошибок нет - то можно проводить инсталляцию. > # make aout-to-elf-install Процесс инсталляции ELF-версии достаточно интерактивен и интуитивен. В конце концов произойдет следующее: ● ●

> все "бинарники" будут заменены на аналогичными, но в формате ELF; > все библиотеки (aka libs) в формате a.out будут перенесены в соответствующие им директории на уровень ниже ../aout (например: aout-библиотеки из /usr/lib будут перемещены в /usr/lib/aout)

3.2) Компиляция и установка ядра в формате ELF > # cd /sys/i386/conf Следует рассмотреть ядро LINT. Некоторые драйверы поменяли свои название, а некоторые и вовсе были исключены. >Например: драйвер CD-ROM'а был переписан и название устройства изменено с >wcd0 на >acd0. > Итак, после исправлений в вашем ядре: > # config -r MY_KERNEL # cd ../../compile/MY_KERNEL # make depend # make # file kernel kernel: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), dynamically linked, not stripped # После сборки ядра ОС может выдать сообщение, о том, что новое ядро собрано в формате ELF, а загрузчик вашей ОС не поддерживает ядро в этом формате. > Следует сделать следующее: узнать название загрузочного диска (например:wd0s1); > # cat /etc/fstab обязательно убедится (!!!) в существовании каталога >/boot; создать файл >/boot.config следующим образом: > # echo /boot/loader > /boot.config Далее самая опасная операция: > # setenv SLICE wd0s1 # disklabel -B -b /boot/boot1 -s /boot/boot2 $SLICE >Если данная операция завершилась нормально, инсталлируем новое ядро: > # cd /sys/compile/MY_KERNEL # make install После перезагрузки (в момент загрузки FreeBSD) http://www.freebsd.bip.ru/from3to4.shtml (2 of 3)10.04.2004 17:23:46

Daemon News Russia

вы увидите следующее: >> FreeBSD/i386 BOOT

http://www.freebsd.bip.ru/from3to4.shtml (3 of 3)10.04.2004 17:23:46

(c) 2001-2002 Daemon News Russia

Daemon News Russia

новости \\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Конфигурация (Fast) Ethernet

Один из главных файлов конфигурации - /etc/rc.conf В этом файле в секции "Network configuration subsection" находятся описание сети. Сначала описываются возможные интерфейсы для построения сети, а потом команды для выполнения на каждом из интерфейсом. Моя сеть : 192.168.30.0 Моя сетевая маска : 255.255.255.0 Адрес машины с FreeBSD : 192.168.30.2 Моя сеть : transit.org Имя хоста : freeze.tranzit.org Выход во внешнюю сеть : 192.168.30.1 Name-server ( DNS ) : 192.168.30.1 # hostname="freeze.tranzit.org" network_interfaces="lo0 de0" ifconfig_lo0="inet lo0 127.0.0.1" ifconfig_de0="inet de0 192.168.30.2 -netmask 255.255.255.0" ... ... defaultrouter="192.168.30.1" Далее следует описать список name-server'ов и доменов. Это описание мы сделаем в файле / etc/resolv.conf: search tranzit.org nameserver 192.168.30.1 Обязательно посмотрите на содержимое файла /etc/host.conf: строка bind должна стоять выше строки hosts, например так: % cat /etc/host.conf # $Id: ethernet.html,v 1.5 2000/02/24 09:41:11 osa Exp $ # Default is to use the nameserver first bind # If that doesn't work, then try the /etc/hosts file hosts # If you have YP/NIS configured, uncomment the next line # nis С чего начать? Попробуем сконфигурить интерфейс "руками": # ifconfig de0 inet 192.168.30.1 netmask 255.255.255.0 В общем случае это должно работать! Но не всегда... Правильнее указать необходимое количество параметров. Можно написать и так: # ifconfig de0 inet 192.168.30.1 netmask 255.255.255.0 media 10baseT/UTP или так: # ifconfig de0 inet 192.168.30.1 netmask 255.255.255.0 media 10baseT/UTP broadcast 192.168.30.255 В общем случае драйвер выбирает подходящие параметры соединения. Конфигурируем один физический интерфейс на 2 сети: # ifconfig de0 inet 192.168.30.1 netmask 255.255.255.0 media 10baseT/UTP broadcast 192.168.30.255 # ifconfig de0 inet 192.168.31.1 netmask 255.255.255.0 Для чтения: man 8 ifconfig (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/ethernet.shtml (1 of 2)10.04.2004 17:23:48

Daemon News Russia

новости \\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Типы файлов и права доступа

Поскольку любая Unix, и в частности FreeBSD - система многопользовательская, в ней предусмотрен механизм, ограничивающий доступ юзеров к файлам и директориям. Естественно, "доступ" означает не только возможность читать или изменять содержимое отдельных файлов, но и возможность создавать файлы (директории), удалять их, запускать файлы (если они являются исполняемыми), менять им названия, а также менять все те атрибуты, которые и определяют "право доступа", то есть - "кто и что" может проделывать с данным файлом или директорией. Прежде всего, надо отметить, что правильнее говорить не о "правах юзера" по отношению к какому-нибудь файлу, а о "правах процесса" (выполняемой программы). Во-первых, если юзер и вносит какие-то изменения в файлы или директории, он это делает с помощью каких-то программ (редакторов, "коммандеров", системных утилит для копирования, удаления файлов и т.п.), которые в момент выполнения являются процессами. Во-вторых (что более важно), не все программы запускаются юзерами "вручную". Некоторые из них (демоны) запускаются при старте системы. Другие могут запускаться в определенные моменты времени (с помощью программы cron), или вызываться по мере необходимости для обслуживания запросов приходящих по сети (обычно их запускает программа-"диспетчер" inetd). Кроме того, существует ряд программ, которые для выполнения каких-то вспомогательных действий сами запускают другие программы (в этом случае говорят, что процесс-"родитель" запустил процесс-"потомок"). Понятно, что хотелось бы и этим программам (процессам) ограничить доступ к файлам. И наконец, в-третьих, в некоторых случаях очень полезно, чтобы программа, запущенная юзером, имела больше прав, чем обычно имеет этот юзер. Например, обычный юзер не может даже читать файл, в котором "спрятаны" пароли всех юзеров. В то же время, любой юзер должен иметь возможность поменять свой личный пароль, не обращаясь для этого к администратору. Но для этого ему надо иметь возможность записать что-то в файл паролей. Значит программа, которая это делает (passwd) в момент выполнения должна иметь права намного большие, чем юзер, который ее запускает. Не вдаваясь в подробности, можно сказать, что каждый процесс имеет идентификатор юзера (userID). Обычно он совпадает с userID'ом того юзера, который запустил этот процесс. процессы, которые запустились автоматически, тоже имеют userID, как будто их запустил реальный юзер. Чей именно userID получают эти программы обычно определяется теми программами, которые их стартуют (программа-загрузчик, cron, inetd и т.д.). В простейших случаях программы-"потомки" просто "наследуют" userID от программы-"родителя", но http://www.freebsd.bip.ru/typeoffiles.shtml (1 of 10)10.04.2004 17:23:52

Daemon News Russia

некоторые "родители" могут запускать программы с другим userID (не совпадающим с собственным). некоторые программы в процессе выполнения могут поменять свой userID и, соответственно, получить права, которые сам юзер не имел. Естественно, для того, чтобы программа могла это сделать, администратор должен "разрешить" ей такое поведение (подробнее об этом будет сказано ниже). Кстати, изменение userID'а делается не только, когда нужно "расширить" права программы, но и наоборот - "сузить" до прав какого-нибудь конкретного юзера. если процесс может изменять свой userID, то различают "реальный userID" и "эффективный userID" (есть еще "сохраненный userID"). Реальный userID - это идентификатор юзера, который запустил процесс (или userID процесса-"родителя"). А эффективный - это новый userID, который задача получила во время выполнения. права на файл (или директорию) определяются по "эффективному userID" процесса. В простейшем случае, когда userID не меняется, "реальный" и "эффективный" userID'ы совпадают и можно говорить просто об userID'е процесса. Или даже просто о правах юзера (а не процесса) на файл. Какие атрибуты файла определяют "праводоступа". Все юзеры для каждого файла (или директории) делятся на три категории 1. владелец (или хозяин) этого файла 2. группа "особо допущенных" к этому файлу 3. все остальные. Это означает, что можно установить три различных "допуска" (набора прав доступа) для каждого файла или директории. Один такой набор будет определять права юзера, который является владельцем файла, другой набор будет определять права для юзеров, которые входят в некую группу, но не являются владельцами и, наконец, третий набор устанавливает права для всех остальных юзеров, которые не входят в эту группу "особо допущенных" и не являются владельцем файла. Следовательно, у каждого файла (директории) есть три атрибута, которые хранятся где-то в заголовке файла и регулируют доступ к нему. Конечно, атрибутов у файла не три, а больше. К атрибутам можно отнести имя файла, его размер, время создания и т.п. Но в данном случае нас интересуют только эти три. Итак. В заголовок файла записывается идентификатор юзера (userID), который считается его владельцем. Заметьте, что "хозяином" может быть только один определенный юзер. Кроме того, в атрибуты записывается идентификатор группы (groupID), который и определяет ту группу "особо допущенных" о которой говорилось выше. Каждая такая группа (ее название, числовой идентификатор - groupID и состав) определяется администратором системы. То есть "рядовой" юзер, даже если он и является хозяином файла, не может произвольно составить список "близких друзей", которым он доверяет особые права в отношении к своему файлу. Он может только выбрать подходящую группу из имеющихся (и то, только если он сам входит в эту группу).

http://www.freebsd.bip.ru/typeoffiles.shtml (2 of 10)10.04.2004 17:23:52

Daemon News Russia

И, наконец, в атрибутах файла есть некий набор битов или "флажков", который и указывает - кто и что может проделать с этим файлом. Этот набор называется permissions, что можно перевести как "допуски" или "права на доступ". Наберите команду ls -l (аналог команда dir в MS DOS) и вы увидите несколько строчек типа -rw-r--r-- 1 bob users 4297 23мар 17:37 list_us -rwxr-xr-x 1 bob users 1502 17мар 12:03 myProg -rw-r--r-- 1 bob users 5354 12мар 23:51 tmp.dat \________/ \_/ \___/ \__/ \__________/ \______/ "права" владелец группа длина дата имяфайла В третьей колонке вы видите имя (login name) юзера - "хозяина" этих файлов (в данном случае это - bob). В четвертой колонке - название группы, приписанной также к этим файлам (в данном случае - users). И, наконец, в самой первой колонке (набор знаков типа "r", "w" и "-") сами permissions для всех трех категорий пользователей. Надо заметить, что в самом заголовке файла хранятся, не имена юзеров и групп, а их числовые номера, а "права", на самом деле, представляют собой не цепочку букв, а набор двоичных битов. Просто команда ls изображает их в более "человеческом" виде. Основные биты доступа (чтение/запись/выполнение) Рассмотрим подробнее - что представляют собой "права доступа". При распечатке содержимого директории (например, командой ls) каждая строчка имеет вид -rw-r--r-- 1 bob users 4297 13мар 21:45 files1 причем нас интересует в данном случае только первая колонка. Она состоит из десяти знаков. Однако, самый первый знак не имеет отношения к permissions, а обозначает "тип этого объекта". Поскольку, в директории кроме файлов могут находиться поддиректории и, кроме того, в Юниксе, кроме обычных файлов существуют другие объекты ("линки", "очереди", "сокеты" и т.п.), которые также находятся в директориях и имеют атрибуты как и у обычных файлов. Так вот, первый символ как раз и показывает - что за объект мы видим, обычный файл (значок "-"), поддиректорию (значок "d") или еще какой-нибудь специфический объект ("l", "s", "p"...). Остальные девять знаков на самом деле представляют собой три группы по три символа. Каждая такая группа определяет права для какой-либо из трех категорий юзеров первая группа - права "хозяина" вторая группа - права "группы особо допущенных" третья группа - права для "всех остальных" Смысл отдельных битов в каждой такой группы "прав" одинаков для всех трех категорий пользователей, поэтому можно подробнее рассматривать любую такую группу, не уточняя - для какой категории юзеров она предназначена.

http://www.freebsd.bip.ru/typeoffiles.shtml (3 of 10)10.04.2004 17:23:52

Daemon News Russia

Однако, для файлов и директорий смысл этих битов немного отличается, поэтому их стоит рассмотреть отдельно. Для файлов. Первый бит, обозначается буквой "r" (read), и означает, что юзеру, подпадающему под соответствующую категорию, разрешается читать содержимое этого файла. То есть он может посмотреть содержимое файла, а также скопировать этот файл. Кстати, это не означает, что юзер сможет запустить его на выполнение (если это программа). Второй бит, обозначается буквой "w" (write) и разрешает писать в файл. То есть юзер сможет изменить содержимое файла (например, каким-нибудь редактором), дописать что-нибудь в конец или стереть все содержимое. Обратите внимание, этот бит еще не дает право удалить сам файл из директории или изменить ему название (это определяется правами на саму директорию), но дает возможность сделать этот файл пустым (нулевой длины) или скопировать в него содержимое другого файла (и тем самым "подменить" его). И, наконец, третий бит, обозначается буквой "x" (eXecute), позволяет запустить на выполнение этот файл, если он представляет собой программу или командный файл. Обратите внимание, что это также основной признак, по которому система догадывается о "запускаемости" этого файла. Часто начинающие пользователи составив какой-нибудь командный файл, забываю установить на него бит "исполнения" хотя бы для себя - владельца этого файла. В результате, при попытке запустить его, система сообщает, что "вы не имеете права" (выполнять этот файл). Естественно, что в данном случае причина не в том, что "злобный" администратор существенно "урезал" права этого юзера, а в том, что он сам забыл "наделить себя правом" (вполне законным). Для директорий. Первый бит ("r") разрешает читать оглавление этой директории, то есть список файлов и поддиректорий, находящихся в ней. Однако, этот бит еще не дает возможность зайти в эту директорию (командой cd) или получить доступ к содержимому, то есть читать/запускать/ изменять файлы, даже если "права доступа" установленные на самих файлах это позволяют. Поэтому, само по себе "право чтения" директории практически бесполезно и этот бит, как правило ставиться только вместе с битом "x". Немного забегая вперед, рассмотрим сразу третий бит - "x". Для директорий он как раз означает, что юзер может получит доступ к "компонентам", то есть отдельным файлам и поддиректориям. Только при наличии это бита, система разрешит войти в эту директорию и выполнить какое-нибудь действие с файлом, если сами файлы ("права доступа" на них) это позволят. Кстати, обратите внимание, что если даже внутренние поддиректории имеют "нормальные" права для какой-то категории юзеров, а вышестоящая директория - нет (отсутствует бит "x"), то этим юзерам не удастся "занырнуть" в поддиректории, минуя вышестоящую. Система проверяет полный "путь" до конечной директории или файла (например, /usr/share/misc/fonts) и, если хотя бы один из компонентов этого пути не имеет соответствующего бита, то юзеру будет отказано в доступе. Наконец, бит "w", установленный на директории, позволяет изменять оглавление директории. То есть, разрешает создавать новые файлы (или копировать другие файлы в эту директорию), менять названия файлов и удалять файлы. Обратите внимание на "разделение полномочий" между теми permissions, которые стоят на файле и теми, которые на директории. Как уже говорилось, если права на директорию не позволяют юзеру удалить файл, находящийся в ней (нет бита "w") это не означает, что юзер не сможет "удалить содержимое" файла (например, текстовым редактором).

http://www.freebsd.bip.ru/typeoffiles.shtml (4 of 10)10.04.2004 17:23:52

Daemon News Russia

С другой стороны, если юзер имеет право менять содержимое директории, он сможет удалить или переименовать любой, находящийся в ней файл, даже если права на самом файле не позволяют ему не то что писать в файл, но и читать его. (Правда, тут есть некоторые нюансы, смотри "Флаги") И еще на что следует обратить внимание. Никакие из перечисленных здесь прав не имеют отношения к изменениям самих "атрибутов доступа", то есть - владельца файла, группы и permissions. Их изменение подчиняется другим законам, о которых будет сказанониже. И последнее замечание. Все эти биты не имеют никакого эффекта для юзера root (и программ, которые во время выполнения поменяли свой "эффективный userID" на "рутовый"). То есть, он может делать с файлом или директорией все что хочет. Правда, и здесь есть одно исключение. Поскольку бит "x" на файле является основным признаком "исполняемости" этого файла, даже root не сможет убедить систему, что файл является программой и его можно выполнять, пока не поставит в атрибутах этот бит. Дополнительные биты доступа Кроме рассмотренных выше битов (чтение, запись и "исполняемость"), которые устанавливаются раздельно по трем категориям юзеров, есть еще три бита доступа, которые можно отнести к файлу в целом, поскольку их действие не зависит от того какой юзер (в смысле из какой категории) пытается обратиться к файлу. Да и смысл этих битов состоит не в ограничении доступа к файлу (директории). Они изменяют некоторые свойства файлов или директорий. Бит suid. Бит suid. Расшифровывается как Set user ID, переводится как "установить идентификатор юзера". Поскольку подходящего русскоязычного термина не существует, его обычно называют "суидный" бит, а файлы, на которых он установлен - "суидными". Смысл его состоит в том, что если он установлен на файле, который является программой, то при выполнении эта программа автоматически меняет "эффективный userID" на идентификатор того юзера, который является владельцем этого файла. То есть, не зависимо от того - кто запускает эту программу, она при выполнении имеет права хозяина этого файла. Обычно это делается для того, чтобы юзер мог выполнить действия, которые требуют привилегий root'а (например, поменять свой пароль). Естественно, что для этого владельцем такой программы должен быть юзер root. Понятно, что такая программа является "потенциально опасной". В "нормальном" случае она не позволит обычному юзеру сделать то, что выходит за пределы его полномочий (например, программа passwd разрешит юзеру изменить только собственный пароль, но не пароли других юзеров). Но, даже незначительная ошибка в такой программе может привести к тому, что "злоумышленник" сможет заставит ее выполнить еще какие-нибудь действия, не предусмотренные автором программы. Кстати, большинство известных способов "взлома" системы заключаются не в том, чтобы узнать пароль root'а, а как раз в том, чтобы заставить какую-нибудь из "суидных" программ выполнять действия необходимые "взломщику".

http://www.freebsd.bip.ru/typeoffiles.shtml (5 of 10)10.04.2004 17:23:52

Daemon News Russia

Вообще говоря, использование "суидных" программ (когда они нужны и для чего) - достаточно обширная тема выходящая за рамки разговора о permissions. Замечу только, что это не единственный путь сменить "эффективный userID". Это можно сделать из самой программы, вызвав специальную системную функцию, но для этого программы должна уже иметь права root'а. То есть, ее должен запустить юзер root, или она должна быть "суидной", как сказано выше. Возвращаясь к разговору о "правах доступа", надо сказать, что у такого файла permissions выглядят как **s****** (если еще и установлен бит x для владельца файла) или как **S****** (если бит x не установлен). Однако, ставить suid бит на неисполняемые файлы обычно не имеет смысла (по крайней мере в FreeBSD). Хотя, существуют программы, которые проверяли этот бит даже для текстовых файлов. Также, это бит не несет никакого смысла, если его поставить на директорию, хотя никто не запрещает это сделать. Бит sgid Бит sgid. Расшифровывается как Set group ID, переводится как "установить идентификатор группы". Эго смысл аналогичен смыслу предыдущего бита. Только меняется не идентификатор юзера, а идентификатор группы. То есть, при выполнении этого файла он имеет такие права, как будто его запустил кто-то из группы, которая приписана к этому файлу. Permissions такого файла выглядят как *****s*** (если установлен бит x для группы) или *****S** (если соответствующего бита x нет). Также как и в предыдущем случае, бит sgid для неисполняемых файлов никакого смысла не имеет. Что касается бита sgid на директории... Для FreeBSD (и других BSD-систем) этот бит, опять же, не оказывает никакого действия. Но в некоторых других Unix-системах он означает, что, когда файлы создаются в такой директории, в их атрибутах проставляется группа та же, что и у директории. Другими словами, файлы, создаваемые в такой директории "наследуют" группу от директории. Бит sticky Бит sticky. Никак не расшифровывается, переводится как "липкий". Выглядит в permissions, как ********t (если вместе с битом x для "всех остальных") или ********T (если соответствующего бита x нет). Для директорий его смысл заключается в том, что удалить файл из такой директории (или переименовать) может только владелец файла. Напомню, что в обычном случае (без такого бита) возможность удалять файлы (как и создавать) определяется правом записи (бит w) на директории. То есть, если какой-либо юзер принадлежит к категории, для которой разрешена запись в директорию, он может удалить в ней любой файл, независимо от атрибутов (владельца, группы, permissions) самого файла. Применяют этот бит, обычно, на директориях, которые являются "публичными" (например, /tmp). Такие директории имеют права доступа, позволяющие всем юзерам создавать там свои файлы и удалять их. Однако было бы неправильно, что любой другой юзер мог по ошибке или "из вредности" удалять файлы, к которым он не имеет никакого отношения. Для того чтобы предотвратить возможность удаления файла "посторонним" юзером, как раз и служит sticky бит. http://www.freebsd.bip.ru/typeoffiles.shtml (6 of 10)10.04.2004 17:23:52

Daemon News Russia

Этот бит может ставиться также на исполняемые файлы. В этом случае он означает, что файл, даже после завершения работы, должен оставаться в памяти (конечно, не в ОЗУ, а в swap). Это полезно для часто используемых исполняемых файлов общего пользования. На практике такие файлы встречаются очень редко. Возможно, практически он никем не используется. Сочетания битов доступа. Для файлов Обычно права на файл (например, для "всех остальных") устанавливаются --- никаких прав (нельзя ни читать, ни изменять содержимое) r-- только чтение rw- и чтение и запись (изменение) файла. Если файл является "исполняемым", то права могут выглядеть --- опять же, никаких прав (читать нельзя, запускать нельзя) r-x можно запустить файл-задачу на выполнение rwx можно не только запустить, но и что-нибудь в нем поменять Остальные сочетания (например -w- или --x) кажутся бессмысленными. Однако, это не всегда так. Рассмотрим подробнее. Права -w- означают, что юзер из соответствующей категории не может прочитать этот файл, но может в него писать. Конечно, для "исполняемого" файла это сочетание бессмысленно (запустить как задачу нельзя, но "покорежить" что-нибудь внутри - пожалуйста). Однако, если этот файл представляет собой что-то вроде "лога" или почтового ящика, то такие permissions могут иметь смысл. Например, вы допускаете, что другие юзеры (или какие-нибудь программы-автоматы) будут дописывать сюда свои "донесения", но не хотите, чтобы те же юзеры могли посмотреть - что туда написали другие. Правда, при этом никто не мешает тем же юзерам просто не читая, записать в этот файл чтонибудь, удалив при этом все старое содержимое файла. Или даже скопировать туда файл нулевой длины (или /dev/null), при этом, естественно, вообще никакого "содержимого" у вашего файла не станет. Однако, чтобы предотвратить такую ситуацию можно поставить на тот же файл флаг "только дозапись". Он не помешает вам читать свой файл, а другим юзерам дописывать в него что-нибудь. Правда, не даст даже вам стирать из файла все лишнее или удалить файл, пока вы не "снимите" флаг. Теперь посмотрим на исполняемые файлы. Права --x на самом деле вполне законная комбинация. Она означает, что запустить эту задачу можно (и получить от нее какой-то результат). Нельзя только скопировать этот файл себе или "залезть" в него отладчиком. Поэтому, такие permissions даже полезны, если вы хотите сохранить свою "интеллектуальную собственность". Комбинация -wx, пожалуй, смысла не имеет (как и просто -w- на исполняемом

http://www.freebsd.bip.ru/typeoffiles.shtml (7 of 10)10.04.2004 17:23:52

Daemon News Russia

файле). Вы просто даете возможность изменить содержимое, причем "вслепую" (поскольку посмотреть это содержимое нельзя). Результатом может быть только порча вашего файла. Также можно отнести к бессмысленным и права r-- на исполняемом файле. Если вы хотите таким способом "подразнить" кого-то (вот есть такой файл, можно посмотреть - как он внутри устроен, а выполнить нельзя), то не обольщайтесь. Другой юзер спокойно может скопировать этот файл себе, при этом он становится полноправным владельцем полученной копии. После этого он поставит на свою копию такие права, какие ему захочется и, все-таки, запустит его. Для директорий Для директорий обычно права доступа устанавливаются --- никаких прав r-x нормальные права для "посещения" директории, но без права изменения (создавать/удалять/ переименовывать файлы) rwx полный доступ (делай там что хочешь) Имеет ли смысл устанавливать какие-либо другие сочетания? Ну, во-первых, если отсутствует бит доступа --x (доступ к содержимому), то любая комбинация из двух остальных ничего полезного не даст. Комбинация r-- даст возможность получить список файлов в этой директории, например командой ls, и не более того. Причем посмотреть можно будет только имена файлов, а такие подробности, как владелец/группа/permissions будут недоступны. В такую директорию нельзя "войти" командой cd. И, даже если внутри нее поддиректории имеют вполне нормальные права доступа (например, r-x), попасть в них будет невозможно. Комбинации -w- и rw- имеют еще меньше смысла. Все равно, изменить что-нибудь в директории с такими правами доступа не удастся. А вот сочетания --x и -wx на самом деле вполне осмысленны. Таким способом можно сделать "полусекретную" директорию. "Секретность" ее заключается в том, что никто посторонний не сможет посмотреть - что за файлы и директории в ней находятся. Но, если вы своим друзьям сообщите - как называется файл находящийся там, они смогут без проблем его взять оттуда или посмотреть его прямо на месте. Аналогично и с поддиректориями. Если вы не хотите, чтобы кто-нибудь просто "бродя" по вашим директориям наткнулся на директорию с "секретным" содержанием, но, в тоже время, не против чтобы некоторые близкие друзья могли туда "захаживать" и знакомится с новыми пополнениями, "спрячьте" свои "приватные" директории в директорию (например private) с доступом --x. Тогда ваши друзья смогут попасть в нужную поддиректорию, указав полный путь (cd private/pictures), а случайные посетители ее просто не найдут (если, конечно, этот посетитель не root). Конечно, "секретность" в этом случае будет не полной, поскольку, если посторонний каким-то образом узнает правильное название файла или поддиректории, то получит те же возможности, что и "близкие друзья". Права -wx отличаются от предыдущего тем, что "доверенным лицам" можно писать в эту директорию. Они могут скопировать туда файл, удалить (если, конечно, знают его точное название) и т.п. Опять же, посторонний сможет разве что записать туда файл, который вы не просили. Удалить там что-нибудь или переименовать, не зная названий файлов (и http://www.freebsd.bip.ru/typeoffiles.shtml (8 of 10)10.04.2004 17:23:52

Daemon News Russia

поддиректорий), он не сможет. И, напоследок, еще один нестандартный случай, который касается распределения прав по категориям юзеров. Обычный порядок назначения прав различным категориям на файл или директорию владелец - полные права (rwx) группе доверенных лиц - тоже самое, но без права изменения (r-x) всем остальным - никаких прав (---) Вообще-то, обычно права назначаются даже еще проще. Поскольку, группы составляет root и рядовые юзеры, как правило, не выбирают себе соседей по группе, то их файлы и директории имеют одинаковые "допуски" для группы и "всех остальных". Например, для "несекретных" файлов (директорий) - rwxr-xr-x, а те, которые владелец хочет оградить от посторонних rwx------. Но в данном случае речь не об этом. Что будет, если "всем остальным" дать доступ, пусть и ограниченный, а для группы "особо приближенных" - наоборот убрать (выглядеть это будет примерно так - rwx---r-x)? Тогда группа, приписанная к файлу, превратится из группы "особо допущенных" в группу "особо нелюбимых". То есть некий "черный список", куда можно занести (естественно, сделать это может только root) всех тех, кто не пользуется доверием. Обратите внимание, что система, проверяя права конкретного юзера по отношению к файлу, сначала проверяет - не является ли он владельцем, потом - не входит ли он в группу, а уже после этого относит его ко "всем остальным". Так что, даже если "все остальные" имеют допуск к файлу, но юзер имел несчастье попасть в соответствующую группу, к нему будут применяться права доступа группы. Трудно судить - можно ли извлечь из этого какую-то пользу. Тем более, что составить "черный список" может только root. И, кроме того, не забудьте, что количество групп, в которые может входить юзер, ограничено, поэтому не стоит без особой надобность "плодить" дополнительные списки. Но, во всяком случае, возможность поступить таким образом есть. Флаги. Кроме уже рассмотренных атрибутов (владелец, группа, "права доступа"), существует еще один атрибут, который ограничивает возможные действия с файлом - "набор флагов". Кстати, по умолчанию команда ls флаги не показывает (и большинство "файлменеджеров" тоже). Для того, чтобы она их показала, надо указать ключ -lo. С помощью флагов можно запретить изменять содержимое файла, его название или и то и другое. Флаги являются более "сильнодействующим средством" чем permissions. Они действуют одинаково для всех юзеров, не разделяя их на категории. Более того, их действие не может игнорировать и владелец файла и даже root. Единственное отличие владельца и root'а от прочих пользователей в том, что они могут убрать флаги с файла (и то не всегда) и только потом уже делать то, что им хочется. Рассмотрим их подробнее. Флаги делятся на две группы "юзерские" флаги и "суперюзерские". Разница в том, что "юзерские" может поставить и убрать как root, так и владелец файла, а ставить/убирать "суперюзерские" может только root. На самом деле, "снятие" флагов - вопрос более сложный. Он зависит от того, в каком "режиме

http://www.freebsd.bip.ru/typeoffiles.shtml (9 of 10)10.04.2004 17:23:52

Daemon News Russia

безопасности" находится система. Но об этом немного позднее. По своему назначению флаги делятся на append - разрешается только "дописывать" файл (естественно, файл должен также иметь permssion "w"). Без этого флага, если юзеру из соответствующей категории разрешается писать в файл, он может как добавить что-либо к содержимому файла, так и "убавить", то есть стереть часть содержимого. При установленном флаге append, любой юзер (даже root) сможет только добавить что-нибудь в конец файла, но не сможет ничего изменить в уже имеющемся содержимом. Если этот флаг поставить на директорию, то в ней можно создавать файлы (или копировать туда файлы из других директорий), но нельзя удалять или менять их названия. Естественно, на сами файлы действие флага не распространяется. nounlink - файл (или директорию) нельзя удалить или переименовать, даже если права, установленные на директории (в которой находится файл) это позволяют. В то же время, этот флаг не запрещает менять содержимое файла (если, конечно, permissions это позволяют). immutable или change - "ничего нельзя". То есть, файл (директорию) нельзя ни удалить, ни переименовать, ни изменить содержимое. Опять же, если это флаг стоит на директории, то на файлы (в ней содержащиеся) его действие не распространяется. То есть, вы не сможете ни добавить, ни убрать файл в директории, но менять содержимое самих файлов это флаг не запретит. Как уже говорилось, эти три флага существуют в двух вариантах - "юзерские" и "суперюзерские". То есть, на самом деле их шесть три "юзерских" - uappend, uunlink и uimmutable и три "суперюзерских" - sappend, sunlink и simmutable. Вообще-то, существует еще два "непарных" флага. Это флаги archived (архивный файл) - это файл "суперюзерский", то есть его может поставить только root, а аналогичного "юзерского" не существует; nodump (файл не надо "дампировать") - а это "юзерский" флаг, его может поставить не только root, но и владелец файла. Эти флаги проверяются только некоторыми конкретными программами. Например, флаг nodump сообщает программе dump, что этот файл не надо сохранять в архиве. (Подробнее о программе dump вы можете прочитать в соответствующем man - man dump).

(c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/typeoffiles.shtml (10 of 10)10.04.2004 17:23:52

Daemon News Russia

новости

Управление процессами

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь

Понятие процесса Компоненты процесса Состояние процесса, "заблудшие" процессы Сигналы, посылка сигналов, команда kill Приоритет выполнения процесса, команда nice Текущий контроль процессов, команды ps и top Защита фоновых процессов, команда nohup Понятие процесса Процесс - фундаментальное понятие системы семейства UNIX. С помощью процессов происходит управление ресурсами компьютера, которые используются для выполнения программы. Вам может показаться, что в UNIX все выполняется одновременно, однако на самом деле в единицу времени выполняется только один процесс. Иллюзию параллельного выполнения создает метод "квантования времени", с помощью которого система через определенные промежутки времени (10-20 милисекунд) меняет текущий выполняемый процесс. Системный администратор может контролировать состояние процесса, управлять выделением времени центрального процессора каждому процессу, приостанавливать и принудительно завершать выполнение процесса. Компоненты процесса Каждый процесс состоит из адресного пространства и набора структур данных, содержащихся в ядре системы. К наиболее важным данным в структурах, относятся: таблица распределения памяти процесса текущий статус процесса приоритет выполнения процесса информация о ресурсах системы, используемых процессом владелец процесса Идентификатор процесса Каждому новому процессу присваивается уникальный номер PID. Фактическое значение PID большой роли не играет, оно назначается ядром просто по порядку, начиная с 0 и до 65535. Когда номера заканчиваются, ядро вновь начинает с 0, пропуская еще существующие в системе PID. Идентификатор родительского процесса Новый процесс в UNIX создается путем клонирования одного из существующих процессов, после чего текст (т.е. набор инструкций для процессора) нового процесса заменяется текстом http://www.freebsd.bip.ru/proc.shtml (1 of 5)10.04.2004 17:23:53

Daemon News Russia

программы, которую процесс должен выполнить. В UNIX исходный процесс называют родительским, а его клон - порожденным или дочерним. Помимо собственного идентификатора PID каждый процесс имеет атрибут своего родительского процесса - PPID. Идентификатор пользователя и группы Каждый процесс имеет UID - идентификационный номер пользователя, создавшего данный процесс. Вносить изменения в процесс может только его создатель и привилегированный пользователь (root). У процесса также есть EUID - это так называемый "эффективный" UID. Он используется для того, чтобы определить, к каким ресурсам у процесса есть права доступа. Как правило, EUID и UID совпадают. Различаются они для программ, у которых установлен бит смены идентификатора пользователя (так называемые suid – программы). Аналогично, GID - идентификационный номер группы пользователя, создавшего данный процесс, EGID - "эффективный" GID. Когда процесс запускается, его GID равен GID родительского процесса. Если процесс попытается обратиться к файлу, на который у владельца нет прав доступа, ядро проверит, можно ли разрешить обращение на основании EGID. Состояние процесса, "заблудшие" процессы Сам факт существования процесса не дает ему права на получение времени центрального процессора. Процесс может находиться в различных состояниях: Выполнимый - процесс можно выполнять Ожидающий - процесс ждет выделения какого-либо ресурса Свопированный - процесс находится в swap-разделе на диске Остановленный - процесс приостановлен Выполнимый процесс получил все необходимые ресурсы и ждет только выделения времени центрального процессора для обработки данных. Ожидающий процесс ждет наступления определенного события. Например командный интерпретатор ждет команд пользователя с клавиатуры и проводит в состоянии ожидания большую часть своего времени. Свопированный процесс не существует в оперативной памяти. Он записан в swap-раздел на диске и ждет "своего часа". Время от времени в системе появляются процессы, которые так или иначе требуют вмешательства администратора. Такие процессы получили название "заблудшие". Основные разновидности таких процессов - зависшие и неуправляемые процессы. Зависшие процессы ничего не делают, не отвечают своему управляющему терминалу, а просто "висят", занимая ресурсы системы. Неуправляемые процессы бывают двух типов пользовательские и системные. Неуправляемый пользовательский процесс не обязательно работает неправильно. Просто он может "кушать" много системных ресурсов, и из-за него будут простаивать другие, может быть не менее полезные процессы. Ну а неуправляемый системный процесс может (внезапно впав в буйство) просто "крушить" все http://www.freebsd.bip.ru/proc.shtml (2 of 5)10.04.2004 17:23:54

Daemon News Russia

на своем пути. Сигналы, посылка сигналов, команда kill Для управления процессами в системе предусмотрена команда kill. Формат этой команды kill pid, где - номер или символьное имя посылаемого процессу сигнала. Команду kill чаще всего используют для прекращения выполнения процесса. Наиболее часто используемые сигналы: 9 (KILL) - гарантированное уничтожение процесса 15 (TERM) - программное завершение процесса 1 (HUP) - сигнал отбоя. Многие системные процессы при получении этого сигнала перечитывают свои конфигурационные файлы. Вообще рекомендуется давать сигнал HUP перед посылкой сигнала KILL. Иногда, правда редко, процессы впадают в такие состояния, что их нельзя "убить" даже выдав команду kill -9 pid. В этом случае самый эффективный способ "убить" процесс - команда reboot. Приоритет выполнения процесса, команда nice От приоритета процесса зависит, какую часть времени центрального процессора он получит. Выбирая процесс для выполнения, ядро находит процесс с самым высоким "внутренним приоритетом". Непосредственно изменить значение внутреннего приоритета невозможно, но можно повлиять на него, изменяя так называемое nice-значение. Для этой цели используется команда nice. Формат этой команды: nice . Относительный приоритет в системе FreeBSD находится в пределах от - 20 до +20. Важно запомнить: Чем ниже значение nice - тем выше приоритет процесса. Пример: # nice - 10 /usr/local/mygame Если пользователь не предпримет особых мер, то новый процесс унаследует приоритет своего родителя. Пользователь может увеличить значение nice (т.е. понизить приоритет), но не сможет уменьшить его, даже для возврата процесса к приоритету, полученному при "рождении". Привилегированный пользователь может менять приоритеты процессов как угодно, вплоть до того, что все процессы не смогут работать из-за одного единственного. В системе FreeBSD существует команда renice, с помощью которой можно изменить приоритет уже запущенному процессу. Ее формат: renice [-p pid] [-g ] [-u ] Пример:

http://www.freebsd.bip.ru/proc.shtml (3 of 5)10.04.2004 17:23:54

Daemon News Russia

# renice +1 -p 989 -u daemon root -p 32 В примере понижается на 1 приоритет процессов с номерами PID 989 и 32, а так же у всег процессов, владельцами которых являются daemon и root. Текущий контроль процессов, команды ps и top Для текущего контроля состояния процессов в системе используется команда ps. Если она введена без опций, то покажет только собственные процессы пользователя и процессы обмена с терминалом. Команда имеет опции: -a - выдает информацию о всех пользовательских процессах -е - показывает значения переменных окружения -h - при выводе на PAGER (more или less) выводит заголовок листинга -m - сортирует вывод по используемой памяти -r - сортирует вывод по использованию времени центрального процессора -x - вывод команды не ассоциирован с терминалами (т.е. показываются также например и процессы-демоны) Наберите команду # ps - ax Посмотрим на листинг (здесь показана для краткости только одна строчка помимо заголовка и только часть полей): USER PID STAT START TIME COMMAND bob 1167 R+ 5:57PM 0:00.04 ps -ax USER - имя владельца процесса PID - идентификатор процесса STAT - текущий статус процесса R = выполнимый, T = остановленный I = ожидающий, S = ожидающий (> 20 сек) Z = зомби Дополнительные флаги: W = процесс свопирован + = процесс в приоритетном режиме своего терминала START - время запуска процесса TIME - время центрального процессора, потребленное процессом http://www.freebsd.bip.ru/proc.shtml (4 of 5)10.04.2004 17:23:54

Daemon News Russia

COMMAND - имя и аргументы команды Для самостоятельного изучения вам дается команда top. Вывод этой команды аналогичен выводу команды ps. Замечу только использование команды top - довольно дорогое удовольствие, т.к. она сама "пожирает" довольно много ресурсов системы. Не стоит ею злоупотреблять. Защита фоновых процессов, команда nohup Для того, чтобы запустить процесс в фоновом режиме, нужно просто набрать & после имени команды, например: # cat /var/log/messages | grep fetchmail > fetchmail.log & Но если, к примеру, вы используете в качестве shell интерпретатор sh, и сразу же после этой команды выйдете из системы командой exit (или Ctrl+D), интерпретатор пошлет сигнал отбой (HUP) этому процессу (как впрочем, и всем, им порожденным). Для то, чтобы этого не произошло, нужно запустить эту команду с помощью команды nohup. # nohup cat /var/log/messages | grep fetchmail > fetchmail.log & В этом случае, сигнал отбоя от sh будет проигнорирован. Правда у команды nohup есть побочные эффекты: она увеличивает значение nice на +5 если стандартный файл вывода не переназначен, то весь вывод пойдет в файл nohup.out (в нашем случае этого не произойдет) то же самое относится и к стандартному файлу ошибок Замечание: Если вы пользуетесь csh или другими современными интерпретаторами, то вы вполне можете обходиться без команды nohup. Вопрос: Как прервать процесс по имени? Ответ: Используйте команду killall.

http://www.freebsd.bip.ru/proc.shtml (5 of 5)10.04.2004 17:23:54

(c) 2001-2002 Daemon News Russia

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Регистрация в системе и учет системных ресурсов новости

Регистрация системных соsобщений, система syslog Конфигурационный файл демона syslogd Учет продолжительности соединений Регистрация системных сообщений, система syslog Система syslog в операционных системах семейства UNIX представляет собой полную систему регистрации и управления информацией, которую генерируют ядро системы и системные утилиты. Система syslog очень гибкая. С ее помощью можно сортировать сообщения по их источникам, степени важности, а так же направлять в файлы или на терминалы. Система syslog состоит из трех частей: 1. демон syslogd и его конфигурационный файл /etc/syslog.conf 2. библиотечные программы openlog, syslog, closelog, которые используются программистами для обмена данными с syslogd (в данном курсе они не рассматриваются) 3. программа пользовательского уровня logger для записи сообщений Демон syslogd запускается во время начальной загрузки и работает непрерывно. Если вы изменили конфигурационный файл /etc/syslog.conf, нужно перезапустить syslogd, послав ему сигнал HUP (или 1). Сделать это можно, узнав по команде ps –ax pid процесса syslogd, введя затем команду kill. # ps -ax | grep syslogd # kill -1 Можно поступить проще. В файле /var/run/syslog.pid записан pid процесса syslogd. Поэтому можно дать команду: # kill -1 `cat /var/run/syslog.pid` (здесь используются обратные кавычки). Демон syslogd по этой команде закроет все файлы регистрации, перечитает файл /etc/syslog. conf и запустит регистрацию снова.

Конфигурационный файл демона syslogd Действиями демона syslogd управляет файл конфигурации /etc/syslog.conf. Это простой текстовый файл, в котором пустые строки и строки со знаком # в первой позиции игнорируются. Формат файла следующий: http://www.freebsd.bip.ru/accs.shtml (1 of 5)10.04.2004 17:23:55

Daemon News Russia

. Например, mail.err /var/log/mail.errors Эта строка обеспечит запись всех ошибок, связанных с доставкой почты в файл /var/log/mail. errors. Важно: В качестве разделителя между селектором и действием используйте только клавишу . Использование пробелов будет ошибкой, которую не так-то легко обнаружить. Как вы уже заметили, селектор записывается в составном виде. В общем виде это выглядит, как средство.уровень К тому же в поле может содержаться один или несколько селекторов, разделенных точкой с запятой. Селектор может содержать группу средств, разделенных запятыми. Селектор может содержать символы * и none, которые означают соответственно «все» и «ничего». Примеры селекторов: средство.уровень действие средство1,средство2.уровень действие средство1.уровень1;средство2.уровень2 действие *.уровень действие *.уровень;средство.none действие Ниже в таблицах перечислены основные имена средств и уровней серьезности системы syslog. Средство Программы, использующие его kern Ядро системы user Пользовательские процессы mail Система электронной почты daemon Системные демоны auth Системы защиты и полномочий lpr Система печати news Система телеконференций cron Демон cron local0-7 Восемь уровней локального сообщения syslog Внутренние сообщения системы syslog ftp Демон ftpd

http://www.freebsd.bip.ru/accs.shtml (2 of 5)10.04.2004 17:23:55

Daemon News Russia

* Все вышеперечисленные средства Уровень Значение уровня emerg Экстренные ситуации alert Срочные ситуации crit Критические состояния err Состояния ошибок warning Предупреждения notice Необычные состояния info Информационные сообщения debug Отладочная информация Уровни перечислены в порядке убывания. Это значит, что уровни обозначают минимальную важность, которую должно иметь сообщение, чтобы быть зарегистрированным в системе syslog. Например, сообщению системы электронной почты с уровнем warning будут соответствовать записи mail.warning, mail.notice, mail.info, mail.debug, *.warning, *.notice, *.info, *.debug. Поле указывает, что нужно делать с поступившим сообщением. Действие Описание имя_файла Записать сообщение в файл на локальной машине @имя_машины Переслать сообщение демону syslogd на указанную машину @IP_адрес То же, только указан IP-адрем машины пользователь1, Вывести сообщение на экраны указанных пользователей ... пользовательN * Вывести сообщение на экраны всех пользователей Пример: *.emerg /dev/console *.err;auth.notice /dev/console *.err;auth,mail,user.info /var/log/messages mail.err /var/log/mail.log mail.info @192.168.0.1 Говоря о системе syslog, нужно упомянуть о команде logger, которая позволяет вносить записи http://www.freebsd.bip.ru/accs.shtml (3 of 5)10.04.2004 17:23:55

Daemon News Russia

в системный журнал из shell-сценариев. Эту команду удобно использовать для проверки изменений, внесенных в файл /etc/syslog.conf. Например, если вы добавили в файл /etc/syslog.conf строку local5.warning /var/log/local.log и хотите проверить, работает ли она, то введите команду # logger -p local5.warning "Local test" Посмотрите файл /var/log/local.log. Если строчки "Local test" в нем нет, значит вы скорее всего забыли послать демону syslogd сигнал HUP. Учет продолжительности соединений Для учета количества времени, которое пользователи проводят в системе, используется команда ac. Эта команда обобщает информацию, которая записывается в файл /var/log/wtmp всякий раз, когда пользователь регистрируется в системе. В файл /var/log/wtmp записывается информация об имени пользователя, номере порта (терминала), времени входа в систему и выхода из нее. Команда ac дает разбивку по пользователям (опция -p) и/или по датам (опция -d), показывает время, проведенное в системе, в часах. # ac - p login connect-hrs bob 23.78 mark 14.24 andre 0.65 root 7.89 ... total 675.47 Можно после опции -p задать имена пользователей. # ac - p bob root login connect-hrs bob 23.78 root 7.89 total 31.67

http://www.freebsd.bip.ru/accs.shtml (4 of 5)10.04.2004 17:23:55

Daemon News Russia

Результат выполнения команды ac -d # ac -d date connect-hrs May 1 total 63.81 May 2 total 78.36 May 3 total 523.14 May 4 total 759.78 May 5 total 635.24 Видно, что 1 и 2 Мая - выходные J. Опции можно объединить. # ac -dp bob date connect-hrs May 2 total 2.67 May 4 total 6.72 May 5 total 4.29 С помощью команды last можно определить время входа пользователя в систему и выхода из нее. Информация выводится либо по конкретному пользователю, или же по порту (терминалу). Формат команды: last bob (информация по пользователю bob) last ttyv1 (информация по терминалу ttyv1). Вывод этой команды очень понятен, не буду приводить его здесь, оставлю вам для самостоятельного ознакомления.

(c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/accs.shtml (5 of 5)10.04.2004 17:23:55

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Пользовательские бюджеты и группы (часть 1) новости

Пользователь, пользовательский бюджет Какие данные хранятся в бюджете пользователя? Для чего используется бюджет пользователя? Где хранятся бюджеты? Как добавить пользователя в систему? Как поменять данные в бюджете? Пользователь (user), пользовательский бюджет (user account) Все системы семейства Unix, соответственно и FreeBSD - системы многопользовательские. Для нормальной и стабильной работы системы нужно: Во-первых, разграничить права различных пользователей системы (пользователя часто называют - "юзер", от английского слова user) - какие файлы они могут читать/писать/изменять, какие программы запускать и т.п. Во-вторых, дать возможность каждому юзеру создавать свою "среду обитания" (environment окружение) - иметь свои настройки для любимых программ, свои директории, настройки терминала и т.п. Для этого в системе должна быть база данных, в которой хранятся основные сведения о каждом юзере, имеющем допуск к работе на данной машине. (Естественно, все вышесказанное относится к любой многопользовательской системе, но в данном случае речь о Unix). В Unix такая запись в соответствующей БД, содержащая сведения о юзере называется user account. Для того, чтобы допустить нового пользователя в систему, необходимо создать для него этот account. Словосочетание "user account" в контексте Unix обычно переводится "пользовательский бюджет" или "личная учетная карточка пользователя". Какие данные хранятся в бюджете пользователя? Прежде чем перечислить - какие поля есть в бюджете пользователя, хотелось бы обратить внимание вот на что. Каждому юзеру присваивается уникальный номер (user ID), именно этот цифровой номер и используется внутри операционной системы при проверке прав доступа, сборе и хранении статистики и т.д. Однако оперировать все время номерами юзеров не удобно. Поэтому, каждому юзеру кроме номера присваивается еще уникальное имя (login name). http://www.freebsd.bip.ru/users.shtml (1 of 9)10.04.2004 17:23:58

Daemon News Russia

Если в какой-нибудь системной команде требуется в качестве аргумента указать юзера, обычно используется это "login name". И, наоборот, если какая-либо программа в своем выводе какнибудь упоминает конкретных юзеров, она обычно называете их этим именем, а не просто печатает номер юзера. То есть, между user ID и login name должно быть всегда однозначное соответствие. Просто user ID используется во внутренних данных системы, а login name (или просто login) - при общении человек-компьютер. Итак. В учетной карточке юзера хранится Name Password user ID group ID General information Home dir Shell кроме того есть еще поля, которые часто не используются (кстати, они располагаются между group ID и General Information) Class Password change time Account expiration time Назначение этих полей. Name Это уникальное имя юзера (login name). Его спрашивают при входе в компьютер. Оно используется в командах администрирования. Password Пароль. Для того чтобы никто другой, кроме этого юзера не мог войти в систему, у каждого юзера должен быть его собственный секретный пароль для входа. Вообще-то, пароль может и отсутствовать, но это не рекомендуется (надеюсь понятно почему?). Особенно, если машина доступна по сети. Пароли хранятся в базе данных в зашифрованном виде, поэтому, даже администратор не может его узнать. (Собственно администратору он и не нужен, у него и так права не ограничены. А вот если юзер забудет свой пароль, то проще попросить администратор записать новый пароль, чем пытаться извлечь старый). user ID Уникальный номер юзера. Он однозначно соответствует имени (Name) и используется внутри системы. group ID http://www.freebsd.bip.ru/users.shtml (2 of 9)10.04.2004 17:23:58

Daemon News Russia

Номер группы, к которой принадлежит юзер. Подробнее о группах см. далее. General information Это просто некоторые анкетные данные того реального человека, который скрывается под Name. Это поле можно и не заполнять. Обычно там пишут просто реальное имя/фамилию юзера (например, John Doe). Однако, полностью это поле может состоять из: Full Name - Имя Фамилия, Location - адрес (имеется в виду рабочее место), Office Phone - рабочий телефон, Home Phone - домашний телефон Home dir Домашний каталог юзера. Именно в этом каталоге помещаются настроечные файлы для различных программ с настройками под конкретного юзера. Здесь же юзеру дается полная свобода создавать/удалять свои файлы. Shell Программа, которая запускается для юзера, когда он входит в систему. Обычно это "исполнитель команд", или по другому shell (оболочка) (аналог command.com в системе DOS), который принимает команды с терминала и, в свою очередь, запускает программы, необходимые юзеру. В современных Unix'ах обычно есть несколько таких shell (sh, csh, tcsh, bash ...) из которых можно выбрать наиболее подходящий «по вкусу». Но, вместо shell здесь может быть указана любая другая программа, что нередко используется для решения некоторых задач. Class Это поле пока ничего не означает. По замыслу, юзер может принадлежать к некоему loginклассу. При этом, когда он будет входить в систему, могут быть сделаны какие-нибудь установки (например заданы переменные среды), общие для всех юзеров этого класса. Естественно, должна быть еще некая база данных, в которой указанно - что делать для юзера из конкретного класса (или не делать). Но, сейчас (по крайней мере до версии 3.1) это поле никакими программами не используется. Password change time Здесь администратор может указать дату, когда юзеру следует поменять пароль. Дело в том, что, если требуется повышенная секретность, одной из мер предосторожности является то, что пароли должны периодически меняться (раз в неделю, месяц и т.п.). Для того, чтобы заставить юзера следовать этому правилу, администратор задает дату, после наступления которой компьютер будет предлагать юзеру при входе систему поменять свой пароль. Account expiration time А здесь администратор задает дату, после которой доступ юзеру в систему будет запрещен. То есть, account юзера сохраняется (и все его файлы тоже), но войти в систему он не сможет (пока не договорится с администратором :-). Подробнее обо всем этом можно прочитать на соответствующей man-странице. man 5 passwd. Для чего используется бюджет пользователя?

http://www.freebsd.bip.ru/users.shtml (3 of 9)10.04.2004 17:23:58

Daemon News Russia

А вот это - очень не простой вопрос. Конечно, основное назначение бюджета - зарегистрировать юзера, чтобы он мог войти в систему и поработать на этой машине. Однако, существует некоторые нестандартные применения для этого механизма. Обычные юзеры Псевдо-юзеры Почтовые юзеры Гостевой вход Автоматический запуск коммуникационных программ Обычные юзеры Когда обычный юзер заходит в систему (с физического терминала или по сети), он должен сказать свое имя (Login Name) и пароль (Password). Соответствующая программа сверяет эти данные с теми, что записаны в бюджете пользователя и, если они совпадают, разрешает вход в систему. То есть запускается программа, которая указана как Shell в бюджете пользователя. Юзер с помощью этой программы может запускать другие. При этом ему можно создавать/ удалять/писать/читать файлы, которые находятся в его Home dir (тоже указана в бюджете). Псевдо-юзеры Часто бывает полезно ограничить некоторым программам (которые запускаются автоматически ftp-сервер, www-сервер и т.п.) доступ к файлам и директориям. Например, вы создаете на своей машине WWW-сервер. Естественно, его назначение - выдавать в сеть какие-то документы (файлы *.html), специально предназначенные для публичного обозрения. В то же время, не хотелось бы, чтобы он (из-за возможных ошибок или злонамеренных "закладок" в программе) мог выдавать наружу другие файлы, находящиеся в системе. В Unix предусмотренно, что права на чтение каждого файла можно связать с определенным пользователем. Юзер может читать файлы, для которых он является "хозяином" или "владельцем" (на самом деле разграничение прав несколько более сложное, но в данном объяснении это не важно). Все остальные файлы можно сделать для него недоступными. Таким образом, для решения задачи нужно -зарегистрировать фиктивного пользователя - например, www; -все файлы, к которым должна иметь доступ программа WWW-сервера, объявить "собственностью" юзера www (естественно, что ваши секретные файлы должны быть недоступны этому самому www); -объяснить системе, что когда запускается программа WWW-сервера, все должно выглядеть так, как будто его запустил реальный юзер www. Все остальное сделается автоматически средствами Unix. Разумеется, при таком подходе никакого реального человека, который скрывается под именем www, может не быть. Следовательно, в бюджете такого фиктивного юзера не нужен реальный пароль (вместо пароля ставится какая-нибудь абракадабра, так, чтобы никто не мог даже подобрать его. Лучше поставить знак "*", поскольку в настоящих шифрованных паролях такой знак никогда не встречается), никакой General information, не нужна также Home dir (хотя, иногда имеет смысл

http://www.freebsd.bip.ru/users.shtml (4 of 9)10.04.2004 17:23:58

Daemon News Russia

объявить его домашней директорией ту, где лежат его данные) и Shell. Особым случаем псевдо-юзера является юзер ftp. Дело в том, что у ftp-сервера могут быть две задачи. Первая - дать возможность реальным пользователям этой машины перекачивать свои файлы из этого компьютера (или, наоборот, "закачивать") по сети. Вторая - предоставить некую "свалку" файлов всем желающим (то, что обычно называют "анонимный ftp"). В первом случае каждый реальный юзер говорит серверу свое имя и пароль и получает доступ к файлам такой же, как если бы он вошел в систему. Во втором случае, если вы не зарегистрированы в качестве юзера на этой машине, вы можете сказать, что вы - юзер anonymous или юзер ftp. В этом случае, программа ftp-сервер проверяет - зарегистрирован ли в БД учетных карточек псевдо-юзер ftp (именно ftp, а не anonymous) и, если такой юзер зарегистрирован, то пускает вас в домашнюю директорию (Home dir) этого юзера, там и должна лежать "свалка" файлов для всех желающих. Таким образом, в учетной карточке псевдо-юзера ftp существенным являются в основном поля Name и Home dir. Остальные, обычно, значения не имеют. Таких псевдо-юзеров в любой системе существует несколько. Почтовые юзеры. Если в качестве сервера электронной почты используется Unix-машина, то самым простым способом обеспечить прием почты и поддержание "почтового ящика" для конкретного человека это зарегистрировать его как обычного юзера этой машины. (Точнее, это единственный стандартный способ.) Кроме того, для того, чтобы никто посторонний не мог получить доступ к "почтовому ящику", при соединении с "почтовым сервером" используется процедура аналогичная входу в систему обычного юзера - то есть POP-клиент должен предъявить серверу имя и секретный пароль юзера. Причем, обычно, программа POP-сервер ищет эти имя и пароль в той же базе. Если человек, который пользуется этой Unix-машиной как "почтовым сервером", может больше никакого отношения к ней не иметь. То есть, ему нет необходимости заходить на эту машину как ее пользователю, запускать программы, хранить файлы. Более того, возможно, администратору и не хотелось бы, чтобы такой юзер имел доступ к чему-либо, кроме своего "почтового ящика". Следовательно, в бюджете такого юзера не ставится домашняя директория, или ставится какаянибудь общая для всех таких юзеров директория. А, самое главное, не должно быть реальной программы Shell. Вместо нее лучше всего подставить какую-нибудь программу, которая просто напечатает сообщение типа: "Вам сюда нельзя" и завершит работу. В качестве такой программы можно использовать /bin/date - она напечатает текущую дату и завершится. Кстати, если поле Shell просто оставить пустым, то система все равно впустит юзера и даст ему "исполнителя команд" /bin/sh. "Гостевой вход" Поскольку, вместо Shell (программы, которая автоматически запускается для вошедшего юзера) можно использовать любую программу, можно сделать небольшую информационную систему для публичного просмотра. Для этого регистрируется пользователь, например, guest (гость). В качестве Shell у этого юзера должна быть программа, которая позволяет просмотреть документы, предназначенные для публики (какая-нибудь BBS, www-browser или другая, специально для этого написанная программа). Естественно, надо принять меры предосторожности, чтобы эта программа не могла прочитать другие файлы из вашего компьютера и не могла записать ничего лишнего на диск. Особенностью такого юзера является то, что у него должен быть необычный Shell, домашней директории может и не быть (это зависит от той информационной программы), и, главное, может http://www.freebsd.bip.ru/users.shtml (5 of 9)10.04.2004 17:23:58

Daemon News Russia

не быть пароля (все равно, если он есть, придется сообщить его всем желающим). Автоматический запуск коммуникационных программ Если к компьютеру подключен модем, он может оказывать различные услуги через телефонные линии (BBS, прием/передачу e-mail, IP-доступ и т.п.). Если один и тот же телефонный вход используется для различных услуг, то возникает проблема - как обеспечить запуск различных коммуникационных программ для разных клиентов. Одно из решений заключается в следующем. Для каждой возможной услуги регистрируется пользователь, у которого в качестве Shell указывается соответствующая коммуникационная программа. Например, можно зарегистрировать пользователей: UUCPuser - для которого запускается программа uucico (из пакета uucp), PPPuser - для которого запускается драйвер, для связи по протоколу PPP, SLIPuser - для которого запускается драйвер, для связи по протоколу SLIP. Теперь, если клиент, позвонивший на модем, введет в качестве Login name PPPuser (например), то для него на этом конце модемной линии включится драйвер PPP и он получит IP доступ по этому протоколу. Кроме того, любой Unix, всегда запоминает время, когда юзер вошел в систему и когда закончил работу. Поэтому, если каждому клиенту дать отдельное имя (и, естественно, секретный пароль), то можно легко вести статистику - сколько времени каждый клиент занимал ваш телефон. Особенностью бюджета такого юзера, как и в предыдущем случае, является нестандартный Shell. Может отсутствовать Home dir (это зависит от коммуникационной программы, некоторые из них пытаются извлечь некоторые настроечные данные из домашней директории юзера). Где хранятся бюджеты? В системе FreeBSD существует четыре файла, которые имеют отношение к БД учетных карточек. Все они находятся в директории /etc. В общем-то, все они содержат одну и ту же информацию, и при всех добавлениях (изменениях) в учетных карточках юзеров изменяются одновременно. /etc/spwd.db - основная БД, именно отсюда соответствующие программы берут нужные им данные. Данные хранятся в двоичном виде, то есть простым редактором там ничего не сделаешь. /etc/master.passwd - та же БД, но в текстовом виде. Этот файл можно читать и изменять обычным текстовым редактором. Но, если вы будете его менять, потом нужно будет запустить соответствующую утилиту, которая сделает изменения и в остальных трех файлах. /etc/pwd.db - то же, что и spwd.db, но без паролей (в поле password просто стоит знак *) /etc/passwd - то же, что и master.passwd, но без паролей. Для чего нужны два последних файла? Дело в том, что, хотя пароли хранятся в зашифрованном виде, показывать их всем, все равно, не рекомендуется. Злоумышленник, зная, как выглядит зашифрованный пароль, может, если и не расшифровать его, то подобрать подходящий. С другой стороны, информация из этой базы нужна не только администратору, но и некоторым программам, которыми пользуются рядовые юзеры. http://www.freebsd.bip.ru/users.shtml (6 of 9)10.04.2004 17:23:58

Daemon News Russia

Поэтому, было принято решение - два первых файла, содержащие полную информацию учетных карточек доступны (даже для чтения) только администратору системы (юзер root). А для всех остальных доступны для чтения "урезанные" варианты той же базы - два последних файла. Как добавить пользователя в систему? Ответ на этот вопрос не такой простой, как может показаться. Все зависит от того, какого пользователя вы хотите зарегистрировать. Заметьте, что, для того, чтобы пустить в свою систему реального юзера, надо не только добавить новую учетную карточку для него. Еще надо создать ему домашнюю директорию и, желательно, положить туда некоторые стартовые файлы (типа config.sys и autoexec.bat в системе DOS). При этом надо правильно установить права нового юзера на эти файлы. Для того, чтобы не делать эту работу вручную, существует специальная утилита (см. ниже). Но, если вам нужно зарегистрировать псевдо-юзера или «почтового юзера», она не очень подходит. В этом случае лучше воспользоваться более примитивными средствами. Итак. Программы для регистрации (и не только) нового пользователя. pwd_mkdb vipw adduser pw useradd Еще что-нибудь pwd_mkdb Собственно, эта утилита только преобразует файл master.passwd в три остальных файла (см. "Где хранятся бюджеты"). Вы можете любым текстовым редактором добавить строчку в master.passwd, взяв за образец любую из тех строчек, которые там уже есть (желательно, перед этим внимательно прочитать man 5 passwd). Если, после этого запустить команду pwd_mkdb -p /etc/master.passwd то она сделает соответствующие изменения в spwd.db, pwd.db, passwd. Не забудьте, что пароль в учетной карточке хранится в зашифрованном виде. Поэтому, при составлении записи, это поле учетной карточки лучше оставить пустым, а потом занести пароль утилитой, которая специально для этого предназначена: passwd Конечно, это самый сложный способ, но... Если вы когда-нибудь возьметесь написать свою программу для регистрации, то она должна будет просто сформировать правильную строчку для файла master.passwd, занести ее в этот файл, а потом просто вызвать pwd_mkdb. Кстати, остальные программы, о которых дальше идет речь, именно так и делают. vipw Эта программа слегка автоматизирует процесс описанный выше. Она сама запускает текстовый редактор, а, по выходу из редактора, pwd_mkdb. Облегчение состоит в том, что вам не надо помнить - какой файл вы редактируете и как правильно вызвать pwd_mkdb. Запись в master.passwd вам все равно придется составить самостоятельно. При этом не забудьте, что Name и userID должны быть уникальными для каждого юзера. http://www.freebsd.bip.ru/users.shtml (7 of 9)10.04.2004 17:23:58

Daemon News Russia

Важное замечание по поводу текстового редактора. Программа vipw сама редактором не является. Она запускает текстовый редактор, который задан переменной окружения EDITOR, а если таковой не найдет, то редактор vi. Причем, обычно, при установке FreeBSD в стартовых файлах для root эта переменная устанавливается, но это тот же vi. Дело в том, что работать с этим редактором без подготовки достаточно сложно. Поэтому, установите переменную EDITOR, выбрав свой любимый редактор. adduser Это самая "продвинутая" программа для добавления нового юзера. Она задает вопросы, касающиеся нового юзера, сама проверяет имя и user ID на уникальность (причем, для user ID она сама предложит подходящее значение), создает домашнюю директорию для юзера и копирует туда заготовки настроечных файлов, и даже может послать приветственное письмо вновь зарегистрированному юзеру. Естественно, она же делает запись в БД учетных карточек. Однако, если вам нужно зарегистрировать не обычного юзера, то она вам только помешает. Например, вам нужно зарегистрировать "почтового юзера". Для такого юзера не нужна домашняя директория (а тем более заготовки стартовых файлов) и Shell у этого юзера должен быть нестандартный. Так вот - заставить эту программу не делать домашнюю директорию очень трудно (если вообще возможно). Поэтому, в этой ситуации, вам придется подчищать за ней все лишнее, что она сделает. Как поменять данные в бюджете? Во-первых, для изменения секретного пароля юзера (поле Password) надо использовать специальную команду passwd поскольку, в учетной карточке пароль хранится в зашифрованном виде и правильно изменить его текстовым редактором невозможно. Все остальные поля можно поменять с помощью утилиты vipw или chpass. Программа vipw позволяет редактировать запись непосредственно в файле master.passwd. Естественно, вы должны представлять себе формат этой записи (об этом можно прочитать в man 5 passwd). Несколько более удобной является утилита chpass. Она дает возможность редактировать конкретную учетную карточку юзера, имя которого вы укажете при запуске этой программы. Но, при этом, она выводит каждое поле карточки в отдельной строке с подсказкой - что какое поле означает. Login: NewUser Password: ..... Uid [#]: 1000 Gid [#]: 1000 ... и т.д. Особенно, программа chpass полезна, если вы захотите изменить Password change time (дату, когда система предложит юзеру поменять пароль) или Account expiration time (дату, после которой не пускать юзера в систему). Дело в том, что в самой учетной карточке эти даты хранятся в цифровом формате, понятном только самой системе, а chpass показывает и воспринимает их в "человеческом" виде (месяц, день, год).

http://www.freebsd.bip.ru/users.shtml (8 of 9)10.04.2004 17:23:58

Daemon News Russia

Заметьте, что vipw вообще не проверяет корректность данных, а chpass проверяют только отдельные поля (и то, иногда отделывается предупреждениями). Ни одна из них не проверяет на уникальность Name и user ID. Поэтому, пользуйтесь ими с осторожностью. И, наконец, опять замечание по поводу текстового редактора. Ни одна из описанных "полноэкранных" утилит не имеет своего редактора и вызывает тот редактор, который задан переменной окружения EDITOR (если таковой не обнаружится, используется редактор vi). Не забудьте указать, в качестве значения этой переменной, ваш любимый текстовый редактор.

(c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/users.shtml (9 of 9)10.04.2004 17:23:58

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Пользовательские бюджеты и группы (часть 2) новости

Как удалить пользователя? Что может поменять пользователь в своем бюджете? Как временно убрать пользователя (не удалить, но запретить вход)? Что такое группа? Где хранится информация о группах? Как создать или удалить группу? Как поменять принадлежность юзера к группе (группам)? Привилегированный пользователь Вопросы и ответы Упражнения Как удалить пользователя? С одной стороны, очень просто - удалите его бюджет из базы. Это можно сделать программой vipw - найдите соответствующую строчку и удалите ее. С другой стороны, в системе могут быть файлы, принадлежащие этому юзеру, а, также, имя юзера может встречаться в некоторых других файлах. Что надо удалить? Во-первых, домашнюю директорию юзера. Кстати, если администратор не предпринимал никаких действий, чтобы дать юзеру возможность писать в другие директории, то все файлы, которые мог "наплодить" юзер должны лежать в его Home dir. Если же вы дали юзеру права создавать файлы в других директориях (в публичном ftp архиве или в директории www сервера, например), то, возможно, надо "почистить" и там. Во-вторых, "почтовый ящик" юзера в директории /var/mail (или /var/spool/mail). Сделайте это обязательно, даже если юзер просил пока не удалять почту. Дело в том, что название этого файла совпадает с Name юзера, а права на чтение/запись определяются его user ID, и, естественно, должны соответствовать друг другу. Не вдаваясь в подробности, могу сказать, что если вы вскоре зарегистрируете нового пользователя с тем же user ID (он же освобождается), но с другим именем, или наоборот - с таким же именем, как у старого юзера, но с другим user ID, то у этого нового юзера возникнут серьезные проблемы с получением почты. В-третьих. Могут быть еще где-то раскиданы файлы, владельцем которых был этот юзер. Например, в директории /tmp, /usr/tmp, /var/tmp. Найти все эти файлы можно с помощью программы find. Например, так find / -user (Обратите внимание, первый аргумент - директория, начиная с которой искать. В данном примере это корневая, то есть будут просмотрены все файлы в системе. С одной стороны это http://www.freebsd.bip.ru/users2.shtml (1 of 9)10.04.2004 17:24:05

Daemon News Russia

хорошо - ничего не пропустите, но, с другой стороны, если у вас стоит ньюс-сервер или огоромный ftp-архив, то ждать придется долго). С помощью этой же команды можно и удалить все найденные файлы find / -user -delete однако, поскольку она не спрашивает подтверждения, этот метод очень опасный. Лучше уж заставить ее выполнять команду rm ( с подтверждением) для каждого найденного файла find / -user -exec rm -i {} \; И, наконец, привожу небольшой список (скорее всего, неполный) - где еще могут остаться упоминания об этом юзере. в файлах /etc/group, /etc/login.access, /etc/ftpusers в таблицах программы sendmail: /etc/aliases и т.п. (virtusertable, genericstable и др.) если у вас отдельным юзерам разрешается запускать задачи с помощью cron, то юзер может упоминаться в /etc/crontab или в /var/cron/allow, /var/cron/deny, а, также, может быть его индивидуальная crontab в /var/cron/tabs/ если юзерам разрешается пользоваться пакетным выполнением программ, то юзер может упоминаться в /var/at/at.allow, /var/at/at.deny если у вас ведется квотирование дискового пространства, то должна быть quote для этого юзера если юзер пользуется IP связью через модем, то он может упоминаться в файлах, лежащих в / etc/sliphome или /etc/ppp от имени юзера могут запускаться какие-нибудь демоны (особенно это касается псевдо-юзеров), тогда имя юзера может быть в /etc/inetd.conf или /etc/rc.local. Итак, вы видите, что полное удаление юзера из системы в общем случае очень не простая задача. Однако, в большинстве случаев все гораздо проще. Самый простой способ удалить юзера Большую часть работы по удалению юзера (и всяческих упоминаний о нем) выполняет программа rmuser Во всяком случае, кроме удаления бюджета, она удаляет его домашнюю директорию; его почтовый ящик в /var/mail; упоминания о юзере в /etc/group; персональную crontab юзера; пакетные задания юзера в /var/at/jobs. В большинстве случаев этого вполне достаточно. Что может поменять сам пользователь в своем бюджете? Естественно, любой юзер может поменять свой пароль (и даже желательно, чтобы он это делал время от времени). Делается это командой passwd, той же, которой пользуется администратор. Разница в том, что администратор может поменять пароль любому юзеру, вызвав эту команду с именем юзера в качестве аргумента. А обычный юзер может поменять только свой пароль. Кроме того, юзер, как и администратор, может воспользоваться программой chpass. Естественно, он может редактировать только свою учетную карточку. При этом, он сможет http://www.freebsd.bip.ru/users2.shtml (2 of 9)10.04.2004 17:24:05

Daemon News Russia

поменять в ней только поля Shell и General information (свое реальное имя, адрес, телефон). Как временно убрать пользователя (не удалить, но запретить вход)? Бывают такие ситуации, когда надо запретить юзеру пользоваться вашей машиной временно. Конечно, самый простой способ - удалить его учетную карточку, но не трогать остальные файлы. Однако, этот способ имеет кучу недостатков: - почта на несуществующего юзера будет возвращаться отправителю, - user ID этого юзера может достаться другому (новому юзеру), - при возвращении юзера в систему надо будет воспроизвести в точности ту же учетную карточку, - и т.п. Поэтому, этот способ - самый неудачный и его даже не стоит рассматривать. Лучше рассмотрим другие возможности: Первый способ Этот способ заключается в том, что в бюджет надо вписать "Account expiration time" (с помощью программы chpass), естественно, поставив там уже прошедшую дату. В этом случае, юзер как бы существует в системе - письма к нему идут, файлы сохраняются, во всех диагностиках, где может встретиться его имя, оно отображается правильно. Но, в то же время, если юзер попытается войти в систему, ему просто выдастся сообщение, что «ваш account истек». Однако, это способ тоже не лишен недостатков. Чтобы понять - почему, надо рассмотреть подробнее, что значит "доступ в систему" юзера. Обычный юзер может войти в систему (и пользоваться ее ресурсами) через терминал или по сети, с помощью telnet. При этом должна проработать программа login (которая проверит имя и пароль юзера и, если все правильно, запустит для него Shell). Эта же программа обычно вызывается для тех, кто заходит через модем и устанавливает IP соединение по модемной линии (PPP или SLIP). (Кстати, программе login можно запретить пропускать юзера, если прописать правильную строчку (запрещающую вход конкретному юзеру) в файле /etc/login. access. Как это правильно сделать, можно посмотреть в man login.access). Но, кроме того, юзер может (если, конечно, ваша система предоставляет такой сервис): иметь доступ к своим файлам через FTP, тогда проверкой имени/пароля занимается ftpd (программа-сервер FTP); читать свою почту через POP-сервер, тогда проверкой имени/пароля занимается программа popper (или другой РОР-сервер); иметь доступ к своей домашней директории через сервер samba, тогда проверкой имени/пароля занимается программа smbd; пользоваться удаленным запуском программ (rlogin, rsh и т.п.), тогда проверкой имени/пароля занимаются соответствующие демоны (rlogind, rshd и т.д.); Так вот. Проблема в том, что не все перечисленные демоны (программы-серверы), ответственные за допуск юзера к ресурсам, могут обращать внимание на "Account expiration time". И, следовательно, все равно дадут юзеру возможность воспользоваться своими услугами. Второй способ Другой способ "отсечь" юзера заключается в том, чтобы "испортить" ему пароль. Для этого достаточно добавить к зашифрованному паролю, хранящемуся в учетной карточке, один знак. Обычно, ставят знак " * " в начале пароля, поскольку этот знак не может встретиться в нормальном зашифрованном пароле и, во-первых, пароль в этом случае невозможно подобрать, а во-вторых, такое "искажение" пароля легче потом искать, когда вы будете возвращать юзера обратно. Сделать такую манипуляцию можно программой vipw или chpass. http://www.freebsd.bip.ru/users2.shtml (3 of 9)10.04.2004 17:24:05

Daemon News Russia

Этот способ надежно срабатывает во всех случаях, когда юзер пытается получить доступ в систему, независимо от того, через какую программу он это делает (он просто не знает теперь своего пароля). Недостаток этого способа в том, что он менее "цивилизованный". То есть, юзер просто получит сообщение о том, что он неправильно ввел свое имя или пароль, а не о том, что ему запрещен вход. Кроме того, есть случаи, когда этот способ не работает. Дело в том, что удаленные сервисы могут не проверять пароль, если у юзера в домашней директории в соответствующем файле (. rhosts) записаны адреса машин "пользующихся доверием" и он осуществляет доступ именно с этих машин. В этом случае, проверяется только адрес машины (и имя юзера под которым он зарегистрирован там), а пароль не запрашивается, следовательно, описанный метод не сработает. (Кстати, предыдущий метод «account expiration» в этом случае должен работать.) Так как же все таки надо поступить? Способ с «испорченным» паролем более универсальный, но все-таки неправильный. Самый правильный путь - подбирать всех демонов таких, которые правильно отрабатывают запрет входа (например, через "account expiration"). Кстати, те демоны, которые у Вас из «родного» дистрибутива, должны правильно обрабатывать такой запрет. Проблемы могут возникнуть только с программами от других разработчиков. Кроме того, для юзеров, запускающих "IP по модему", обычно, другой способ входа недоступен. Поэтому можно смело пользоваться "account expiration" или запретом в /etc/login.access. Ну и хочу напомнить, что "не стесняйтесь" читать man- страницы, там все очень хорошо описано. man 5 passwd - описывает структуру учетной карточки (user account) man adding_user - общие слова о добавлении юзера. Кстати, там есть рекомендации - каким должно быть Login name man pwd_mkdb man vipw man adduser man passwd - изменение пароля man chpass - другие изменения в учетной карточке man rmuser man login.access man login.conf А, также, в каждом из них есть раздел See Also (смотри также...). Их тоже можно почитать, хотя, в основном, они все ссылаются друг на друга. Что такое группа? Группа - это группа (из юзеров). Тавтология конечно, но это самое точное определение. В системах Unix все юзеры объединяются в группы. Причем, каждый юзер входит по крайней мере в одну группу, но может быть "членом" нескольких различных групп. Как и индивидуальные юзеры, каждая группа имеет свое имя (group name) и числовой номер (groupID). Естественно, они однозначно соответствуют друг другу. Так же, как и для индивидуальных юзеров, groupID используется внутри системы, а имя (group name) при вводе и http://www.freebsd.bip.ru/users2.shtml (4 of 9)10.04.2004 17:24:05

Daemon News Russia

выводе сообщений для пользователей (хотя, в большинстве команд, можно указывать вместо имени и groupID). В основном, группы (юзеров) используются при определении прав доступа к различным файлам и директориям. Не вдаваясь в подробности, можно сказать, что для каждого файла (директории) в Unix'е существует его владелец (это один из юзеров) и группа «особо допущенных» к этому файлу (директории). При этом владелец файла может задать права доступа к нему (чтение, запись и т.п.) разные для себя, группы "допущенных" и для всех остальных (не входящих в эту группу). Естественно, сам состав групп (список индивидуальных юзеров, входящих в группу) хранится в соответствующей базе данных, а к файлам "привязывается" только номер группы (groupID). Где хранится информация о группах? Здесь есть маленькая тонкость. На самом деле надо рассмотреть два вопроса: Где хранится имя и номер группы? Как определяется список "членов" группы? Где хранится имя и номер группы? В файле /etc/group. Это просто текстовый файл, в котором каждая строчка описывает одну группу. Отдельные поля разделяются двоеточием. Назначение полей: имя группы (group name) пароль группы (group passwd) номер группы (group ID) список (через запятую) юзеров, входящих в группу (group members). Поле "пароль группы" в системе FreeBSD пока никакими программами не используется, и там обычно ставится звездочка " * ". Таким образом, файл /etc/group определяет - какие группы существуют в данной системе и устанавливает соответствие между именем и номером группы. А, что касается принадлежности юзеров определенной группе, то этот вопрос немного сложнее. Как определяется список членов группы? Каждый юзер должен входить, по крайней мере, в одну группу. Эта группа (точнее ее groupID) прописывается в бюджете юзера (user account), в поле groupID (см. Какие данные хранятся в бюджете пользователя?). А, чтобы тот же юзер стал членом еще какой-нибудь группы, его можно записать (его login name) непосредственно в файл /etc/group, в поле "group members" (см. выше), соответствующей группы. Таким образом, членами какой-либо группы являются юзеры, которые перечисленные в файле /etc/group в списке юзеров этой группы юзеры, в учетной карточке которых, стоит groupID этой группы. Как создать или удалить группу? Это достаточно просто сделать "вручную". Файл /etc/group, хранящий информацию о группах имеет простой формат и его можно менять любым текстовым редактором. Просто добавьте строчку, создав ее по образу и подобию тех, которые там уже есть. Только http://www.freebsd.bip.ru/users2.shtml (5 of 9)10.04.2004 17:24:05

Daemon News Russia

подберите groupID такой, который не используется другими группами. Для удаления группы, просто удалите соответствующую строчку. Проблемы могут возникнуть только, если у вас слишком много разных групп и вам будет трудно ориентироваться в тексте. Тогда вам, возможно, помогут специальные программы. Программы addgroup и rmgroup. Назначение этих программ понятно из названия. addgroup добавляет группу в список групп. Достоинство этого способа (в отличии от добавления группы вручную) заключается только в том, что эта программа может сама подобрать для вновь создаваемой группы groupID, который пока не используется другими группами. Ну и, естественно, не сделает никаких ошибок в /etc/group. Хотя формат /etc/group настолько простой, что там трудно ошибиться. Кроме того, эта программа может использоваться для того, чтобы добавить юзера (юзеров) в список членов заданной группы. rmgroup - удаляет заданную группу из /etc/group. Достоинство этого способа в том, что вам не придется искать нужную строчку в файле /etc/group. Кроме того, она не даст вам удалить те группы, которые имеют "жизненно важное значение" для системы. Естественно, более подробно об этих программах можно почитать: man addgroup man rmgroup Программа pw. Программа pw - универсальная утилита для администрирования (создания, удаления, изменения, просмотра) и юзеров и групп. Мы не будем рассматривать ее в данном курсе, а оставим Вам для самостоятельного изучения !!! О безопасности. Файл /etc/group по умолчанию может читаться всеми юзерами, а изменять его может только root (администратор системы). Не надо менять эти условия. Поскольку группы (юзеров) определяют дополнительные права доступа к файлам и директориям других юзеров, у некоторых из них (юзеров) могут возникнуть желания (и реальная необходимость) образовывать новые группы, в которые входили бы только близкие друзья какого-либо юзера, но не входили все остальные. Естественно, при обычных условиях, рядовой юзер не сможет создать новую группу для себя и своих друзей. Для этого ему придется обращаться к root. Так вот, даже если есть реальная необходимость некоторым юзерам (не имеющим прав администратора) время от времени создавать новые группы или менять "список членов" какойлибо группы, не надо давать им право менять содержимое /etc/group. Это сильно ослабит безопасность системы!!! (Если такая необходимость действительно существует, лучше решать эту проблему, написав специальную программу, которая позволит отдельным юзерам изменять некоторые группы.) Как поменять принадлежность юзера к группе (группам)? Это зависит от того, о какой группе идет речь. Если вы хотите поменять ему основную группу (первичную), то надо исправить соответствующее http://www.freebsd.bip.ru/users2.shtml (6 of 9)10.04.2004 17:24:05

Daemon News Russia

поле (group ID) в его бюджете (user account). Кстати, если вы проделаете такую операцию с реальным юзером, не забудьте, что его домашняя директория и файлы, находящиеся в ней принадлежат группе, в которой раньше находился юзер. Так что, очень желательно поменять соответствующий атрибут у всех файлов и директорий этого юзера. Если же вы хотите добавить юзера еще в какую-нибудь группу или, наоборот, исключить его из членов группы (не первичной для этого юзера), то исправления надо делать в файле /etc/group в поле "group members" соответствующей группы. Как и в случае создания группы это можно сделать либо просто отредактировав файл /etc/group вашим любимым редактором, либо воспользоваться специальными утилитами, теми же, что и для создания групп. addgroup Комманда addgroup может использоваться не только для создания новой группы, но и для добавления юзера в существующую группу. Например, команда addgroup games doom добавит юзера doom в группу games. Пожалуй, это тот редкий случай, когда проще воспользоваться специальной командой, чем редактировать файл /etc/group. Но будьте осторожны - если вы случайно ошибетесь в названии группы, эта команда молча создаст новую группу и впишет юзера в нее. pw groupmod Изучите работу этой команды самостоятельно !!! Надо заметить, что описанные команды хорошо добавляют юзеров в группы, но не приспособлены для удаления определенного юзера из определенной группы. Правда, у команды pw groupmod есть ключ -M, который означает полностью заменить список членов группы на тех юзеров, которых вы и укажете (через запятую) после ключа -M. Однако, понятно, что удалять одного конкретного юзера из длинного списка членов таким способом - не очень удачное решение. В общем, для удаления юзера из списка членов какой-либо группы, удобнее всего пользоваться обычным текстовым редактором. Привилегированный пользователь Системным администраторам приходится отменять действие защитных механизмов UNIX в самых разных ситуациях. Для обеспечения такой возможности система выделяет среди всех идентификаторов пользователей один особый, нулевой, который принадлежит привилегированному пользователю. По соглашению UNIX-системы определяют для этого UID пользовательский бюджет под именем "root". Вот примеры операций, которые может выполнить только привилегированный пользователь: монтирование и демонтирование файловых систем; изменение командой chroot корневого каталога процесса; создание файлов устройств; установка системных часов; изменение принадлежности файлов; увеличение лимитов использования ресурсов и назначение приоритетов процессов; задание host-имени системы;

http://www.freebsd.bip.ru/users2.shtml (7 of 9)10.04.2004 17:24:05

Daemon News Russia

конфигурирование сетевых интерфейсов; остановка системы. Примером возможностей привилегированного пользователя может служить способность принадлежащего ему процессора изменять по своему усмотрению параметры принадлежности. Один из таких случаев - программа login; процесс, который приглашает Вас при входе в систему ввести свой пароль. Он изначально выполняется как корневой. Если веденные имя и пароль пользователя правильны, то login заменяет свои UID и GID соответствующими идентификаторами указанного пользователя и запускает интерпретатор команд shell. После того как корневой процесс, изменив свою принадлежность, станет обычным пользовательским процессором, восстановить свое предыдущее привилегированное состояние он не сможет. sСуществует несколько способов доступа к бюджету привилегированного пользователя. Самый простой из них - зарегистрироваться под именем root. К сожалению, выход из собственного бюджета и регистрация в качестве привилегированного пользователя часто очень неудобны. Лучше использовать команду su. Будучи вызванной без аргументов, эта команда пригласит Вас ввести пароль привилегированного пользователя, а затем запустит shell с правами привилегированного пользователя. Привилегии этого интерпретатора команд остаются в силе до завершения его работы. Команда su также может подставлять вместо root имена других пользователей. Зная чей-либо пароль, можно непосредственно войти в его бюджет, выполнив команду su . Как и при входе в бюджет root, система запросит пароль пользователя . Рекомендуется взять за правило при вводе команды использовать полное путевое имя /bin/su, а не просто su. Это в какой-то мере защитит Вас от тех программ с именем su, которые проскользнули в ваш путь поиска, намереваясь собрать хороший урожай паролей. Важное замечание: Использовать команду su могут только члены группы wheel. Вопросы и ответы. Вопрос: Как проще всего добавить пользователя? Ответ: Используйте команду adduser. Для выполнения более сложных операций обратитесь к команде pw. Чтобы удалить пользователя, используйте команду rmuser. Вопрос: Я забыл пароль администратора! Что мне делать? Ответ: Просто перезапустите систему, наберите -s в приглашении Boot: (Boot: -s) для входа в однопользовательский режим. На вопрос об используемой оболочке нажмите ENTER. На приглашение # введите mount -u /, чтобы перемонтировать корневую файловую систему в режиме чтения/записи, после чего выполните команду mount -a для монтирования всех файловых систем. Запустите команду passwd root, чтобы сменить пароль администратора и затем exit для продолжения процесса загрузки Вопрос: Почему на ввод команды su выдаётся сообщение о том, что я не могу ею пользоваться? Ответ: Вы не являетесь членом группы wheel. Отредактируйте файл /etc/group (для этого надо войти в систему как root), добавив в строку wheel:*:0:root через запятую свой login (wheel:*:0: root, mylogin) Упражнения. http://www.freebsd.bip.ru/users2.shtml (8 of 9)10.04.2004 17:24:05

Daemon News Russia

1. Добавьте юзера theUser с помощью команды adduser, установив ему в качестве shell – /bin/ csh. 2. С помощью команды vipw установите ему в качестве shell - /usr/local/bin/bash. 3. Войдите в систему под именем theUser. Какое приглашение от системы Вы видите? (bash-2.02 $). 4. Удалите юзера theUser (сначала командой rmuser, потом создайте снова и удалите с помощью vipw). 5. Изучите работу команды pw (man pw).

http://www.freebsd.bip.ru/users2.shtml (9 of 9)10.04.2004 17:24:05

(c) 2001-2002 Daemon News Russia

Daemon News Russia

новости \\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Настраиваем socks5 для работы с ICQ

Установим sock5: # cd /usr/ports/net/socks5 && make install Напишем конфигурационный файл: --- /usr/local/etc/socks5.conf --# socks5.conf - configuration file for socks version 5 server # http://www.socks.nec.com # ban host entries # ban - # variable entries auth - - n # выключаем авторизацию SET SOCKS5_CONFFILE /usr/local/etc/socks5.conf # указываем в явном виде где находится конфигурационный файл # SET SOCKS5_DEMAND_IDENT # SET SOCKS5_ENCRYPT # SET SOCKS5_FORCE_ENCRYPT # SET SOCKS5_IDENTFILE filename # SET SOCKS5_MAXCHILD val # SET SOCKS5_NOIDENT # SET SOCKS5_NOINTCHK # SET SOCKS5_NONETMASKCHECK SET SOCKS5_NOREVERSEMAP SET SOCKS5_NOSERVICENAME # эти две опции в последних версиях отсутствуют... # SET SOCKS5_PASSWD [password] # SET SOCKS5_PIDFILE filename # SET SOCKS5_PWDFILE /etc/socks5.passwd # SET SOCKS5_TIMEOUT minutes SET SOCKS5_UDPPORTRANGE 1023-5000 # список портов с которых разрешено посылать UDP пакеты SET SOCKS5_V4SUPPORT # включаем поддержку протокола socks4 # SET SOCKS5_USER [userid] # proxy entries noproxy - # access control entries # deny - - - - - #permit n,u - 192.168.0. - - permit - - 192.168.0.1 - - # разрешаем проброс пакетов с адреса 192.168.0.1 http://www.freebsd.bip.ru/soks5toicq.shtml (1 of 2)10.04.2004 17:24:07

Daemon News Russia

# EOF --- /usr/local/etc/socks5.conf --Опция SOCKS5_V4SUPPORT необходима для совместимости с некоторыми IRC-клиентами. ВНИМАНИЕ! Для правильной работы socks5 необходим DNS. Домашняя страница socks5: http://www.socks.nec.com Домашняя страница ICQ: http://www.mirabilis.com

(c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/soks5toicq.shtml (2 of 2)10.04.2004 17:24:07

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Конфигурация IPX под FreeBSD новости

Для начала нам нада включить поддержку IPX в ядре.В принципе это самый лёгкий процес установки.Надеюсь про то как конфигурировать ядро вы уже знаете,если же не, то можно почитать в Handbooke как это делать.Так вот,подержка IPX включается баналбным добавлением одной строки в конфигурационный фаил ядра: options IPX После того как вы добавили эту строку в конфигурационный фаил ядра ,можно компилировать, устанавливать ядро и перезагружать машину...... IPXrouted(только для 2.2.8) Распакуйте архив ipxrt.tgz ,наберите make.После того как всё это дело у вас откомпилилось можно записать фаил IPXrouted в каталог /usr/sbin КОНФИГУРАЦИЯ Ifconfig Для начала отконфигурим IfConfig...Парамтры для команды ifconfig можно указать в файле rc. conf.Например это будет выглядить так: ifconfig_ed0_ipx="ipx 0x102" Ну а если ты хочеш побольше заморочек, то можно и в ручную.(хотя говорят что в ручную надёжнее) Ну в любом случае синтаксис команды будет выглядеть так: ifconfig ifname ipx netnum[.nodenum] netnum - номер IPX сетки про .nodenum будет рассказиваться далее В принципе IPX протокол можно сконфигурировать на любом Ethernet-интерфейсе, либо на lo0.В случае с lo0 создаётся так называемая internalnet.При выборе может быть два случая.Первый , когда в сети есть NetWare-подобные серверы,второй соответственно когда нет.В первым случае нужно использовать тот намер сети , который был установлен в процесе конфигурации фрейма Ethernet_II на сервере NetWare.Кстати надо заметить , что в конфигурационых файлах NetWare номера сети указываются в шестнацатеричном виде.Во втором случае всё гораздо проще,номер может быть произвольным, только стоит избегать номеров 1 и 0. Так вот, внутренюю сетку надо конфигурировать только тогда, когда на данной машине будет работать Mars_nwe сервер.Например если на интерфейсе ED2, HEX номер сетки 101 , нам нужна внутреняя сеть0xBEBE: ifconfig ed2 ipx 0x101 ifconfig lo0 ipx 0xbebe.1 Номер хоста 1 с конце второй строки обязателен, и нежелательно устанавливать его отличным от данного.Проверка:если всё работает нормально то при выполнение команды netstat-fipx-r у вас на мониторе должно появиться примерно следующее:IPX: Destination Gateway Flags Refs Use Netif bebe.* bebe.1 U 2 10 lo0 101.* 101.4095004302 U 9 28069 ed2 Замечу ешё одно,если в колонкке Gateway будет нарисовано 101.*то следует в комаде ifconfig установит параметр nodenum такойже как MACадрес ситевой(Ethernet)карты. IPXrouted IPXrouted - десон , который используется для установки таблиц маршрутизации и отвечает на SAP/RIP запросы.IPXrouted должен быть запущен после того как вы сконфигурировали все http://www.freebsd.bip.ru/ipx.shtml (1 of 2)10.04.2004 17:24:08

Daemon News Russia

интерфейсы и до любого IPX приложеня.На клиентской машине он может быть запуше с ключом -q , для того что избавиться от лишних RIP пакетов.

(c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/ipx.shtml (2 of 2)10.04.2004 17:24:08

Daemon News Russia

новости

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь

Работа с man- страницами Man-страницы в системах семейства UNIX – это аналог Help- систем в Microsoft Windows. Man-страницы (их название говорит о том, что эти страницы предназначены для работы с командой man) содержат полное описание отдельных команд, форматов файлов и библиотечных подпрограмм. Обычно они доступны в диалоговом режиме (on-line). Во всех UNIX-системах man-страницы делятся на разделы. Номера разделов man-страниц и описание их содержимого для ОС FreeBSD приведены ниже: Команды и прикладные программы пользовательского уровня. Системные вызовы и коды ошибок ядра. Библиотечные вызовы. Драйверы устройств и сетевые протоколы. Стандартные форматы файлов. Игры и демонстрационные программы. Различные файлы и документы. Команды системного администрирования. Команда man форматирует конкретную страницу документации и посылает ее на терминал пользователя посредством программы more или другой программы, которая задана в переменной среды PAGER. Аргумент - это, как правило, имя команды, устройство или имя файла, о которых необходимо получить справочную информацию. Поиск по разделам руководства осуществляется в порядке возрастания номеров, но разделы, описывающие команды (1 и 8), обычно просматриваются в первую очередь. Команда man вызывает man-страницу из указанного раздела. Так, команда man tty читает man-страницу для команды tty, а команда man 4 tty – man-страницу для последовательного драйвера. Почти все версии команды man проверяют, определили ли Вы переменную среды MANPATH, которая должна содержать разделенный двоеточиями список каталогов, если такой существует. С помощью переменной MANPATH можно отменить или расширить список каталогов, в которых производит поиск команда man. Например, командой setenv MANPATH /home/user/myman:/usr/share/man в файле .login, .cshrc, .shrc или .profile (эти файлы выполняются при регистрации пользователя в системе в зависимости от shell пользователя) Вашего каталога можно указать команде man провести поиск сначала в иерархии локальных man-страниц, а затем в /usr/share/man. Версия этой команды в sh или bash будет иметь такой вид: MANPATH = /home/user/myman:/usr/share/man

http://www.freebsd.bip.ru/man.shtml (1 of 3)10.04.2004 17:24:10

Daemon News Russia

export MANPATH Команда man –k печатает список man-страниц, в строке пояснений к которым имеется . Пример: man –k mail aliases(5) - aliases file for sendmail biff(1) - be notified if mail arrives and who it is from ctm_smail(1), ctm_rmail(1) - send and receive ctm deltas via mail forward(5) - mail forwarding instructions from(1) - print names of those who have sent mail mail(1) - send and receive mail mail.local(8) - store mail in a mailbox mailaddr(7) - mail addressing description mailq(1) - print the mail queue mailstats(8) - display mail statistics makemap(8) - create database maps for sendmail msgs(1) - system messages and junk mail program newaliases(1) - rebuild the data base for the mail aliases file praliases(8) - display system mail aliases rmail(8) - handle remote mail received via uucp sendmail(8) - an electronic mail transport agent smrsh(8) - restricted shell for sendmail База данных ключевых слов обычно хранится в файле whatis в корневом каталоге иерархии manстраниц (/usr/share/man). Если в систему вводятся дополнительные man-страницы, то, возможно, потребуется модифицировать этот фал с помощью catman –w. Наберите man whatis, и Вы увидите: APROPOS(1) FreeBSD General Commands Manual APROPOS(1) NAME apropos, whatis - search the whatis database SYNOPSIS apropos _k_e_y_w_o_r_d ... whatis _k_e_y_w_o_r_d ... DESCRIPTION

http://www.freebsd.bip.ru/man.shtml (2 of 3)10.04.2004 17:24:10

Daemon News Russia

apropos searches a set of database files containing short descriptions of system commands for keywords and displays the result on the standard output. whatis displays only complete word matches. RETURN VALUES The apropos utility exits 0 on success, and 1 if no keyword matched. SEE ALSO man(1), makewhatis(1) BSD Jan 15, 1991 1 Теперь посмотрим на вывод команды whatis man: catman(1) - preformat man pages man(1) - format and display the on-line manual pages man(7) - quick reference guide for the -man macro package manpath(1) - determine user's search path for man pages pod2man(1) - translate embedded Perl pod directives into man pages Теперь Вы вооружились хорошим средством изучения различной документации в системе. Почаще обращайтесь к man- страницам, и Вы поймете, насколько легче «вгрызаться» в дебри администрирования FreeBSD.

(c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/man.shtml (3 of 3)10.04.2004 17:24:10

Daemon News Russia

новости

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь

UNIX и интернет Давайте обратимся к истории. Как вообще возник Интернет? Оказывается, он возник благодаря Министерству обороны США. Была поставлена на первый взгляд довольно простая задача. Нужно уметь передавать информацию из пункта А в пункт Б, причем люди в этих пунктах не должны об этом заботиться, и до тех пор, пока хоть один провод еще цел (спутников тогда еще не было), информация должна доходить - пусть долго, но доходить, и при этом без ошибок. При этом неважно, к какому типу относятся компьютеры в сети, то есть в ней должна быть соблюдена аппаратная независимость. И сеть такого типа была создана. Она существует и сейчас и называется ARPA-net. Именно тогда была создана та база, на которой сейчас живет Интернет, в частности появился сетевой протокол IP (Internet Protocol). На мой взгляд, очень важным моментом является то, что сразу был создан набор стандартов (RFC), который впоследствии был оформлен в виде довольно большого (около 2000) количества занумерованных документов. Потом стало ясно, что так можно передавать почти все. Замечательным оказалось то, что не нужно ничего менять и ломать, нужно только дополнять. В том числе дополняли и стандарты новыми номерами, например, когда появилось WWW, Proxy и т.д. Но чтобы можно было работать, нужна сетевая операционная система. Для этого была создана система UNIX (сейчас существует много реализаций для разных платформ). Что-же это такое? В общих чертах, это - многопользовательская операционная система, в которой изначально имеется поддержка IP-протокола. На самом деле это слишком общее определение. Почти то же можно сказать и про Windows NT. Чтобы все же понять, что отличает UNIX, скажем, что он по определению реализует то, что описано ниже. Сначала ответим на вопрос, который может возникнуть у человека, впервые увидевшего Интернет после, например, Novell. В Интернете нет какого-либо главного сервера. Тут все равны. Это есть одно из преимуществ Интернета. Но, перейдем к более конкретному рассказу. Любая машина, подсоединенная к сети Интернет, имеет по крайней мере один номер, состоящий из четырех чисел по 8 бит. Этот номер уникален, его повторение не допускается. Информация для передачи формируется в сетевые пакеты, в заголовке которых написано, откуда, куда и что передается, - это тип пакета, которых может быть 65 535. Конечно, там есть еще много служебной информации, но пока нам важна идея. Но послать пакет просто в кабель еще не достаточно - его нужно направить. Чтобы понять, как это происходит, разберем, как устроен тот самый номер. Условно обозначим его как A.B.C.D. Слева направо убывает приоритет подсетей. То есть машины одной подсети, например 102.34.5.x, общаются между собой, а связь с более высоким уровнем происходит через выделенный компьютер – шлюз (Gateway), пусть 102.34.5.7. Еще эти подсети называются доменами первого, второго, третьего и четвертого уровней соответственно. Например, 158. - это домен .su (Soviet Union). Нули в номерах имеют служебный или зарезервированный характер. Если пакет идет в рамках одной подсети, его не надо направлять, но чтобы послать пакет в другую подсеть, необходимо чтобы компьютер, посылающий пакет, знал номер шлюза. Тогда, дойдя до шлюза, пакет будет перенаправлен либо по подсети уровня шлюза, либо на следующий уровень. Потом этот процесс происходит в обратном порядке. Шлюз распознает, что пакет предназначен для его подсети, и запускает его туда. Не очень ясно, где же тут возможность работы до последнего http://www.freebsd.bip.ru/unix_and_internet.shtml (1 of 5)10.04.2004 17:24:12

Daemon News Russia

провода. Ведь, казалось бы, путь один. Но это не так. Ведь номер шлюза – дело администратора, и если есть физическая возможность объявить шлюзом другой компьютер, то это можно сделать, и тогда пакеты пойдут туда. Если этот процесс автоматизировать, то компьютер будет сам искать "выход в мир". Чтобы чуть яснее представить этот процесс, представим такую ситуацию: две машины соединены в сеть. От одной идет кабель в Америку, а другая посылает пакеты на спутник. Пока все работает, пакеты идут и там и там, но если кабель вдруг отключить, то вся передача пойдет через спутник. Конечно, скорость уменьшится, но зато связь останется. Как вы помните, за это и боролись. Такая работа просто необходима при физических неисправностях какого-либо компьютера или кабеля. Пока все, казалось бы, просто. Но есть по крайней мере два вопроса. Как быть с большими пакетами и почему мы можем реально работать с именами, а не с безличными цифрами? Ответ на первый вопрос очевиден. Пакеты нужно нумеровать, а затем склеивать в нужном порядке. Работа с именами несколько хитрее. На любом компьютере можно запустить службу DNS (Domain Name Server). Это просто таблица соответствия номеров и имен. Тогда любой другой компьютер, зная адрес машины, где DNS запущен, будет обращаться туда. Конечно, структура и здесь иерархическая. Ведь никакая машина не сможет, да это и не нужно, хранить примерно 4 миллиарда имен. Теперь, когда принцип передачи информации ясен, можно перейти к вопросу о том, как происходит работа внутри компьютера. Так что же делает UNIX? Сейчас речь пойдет только о работе с сетью. Выше было сказано, что в пакете есть номер, определяющий тип пакета. Для работы с сетевой картой есть так называемый сетевой интерфейс. Это единственный аппаратно зависимый элемент, так как он зависит от платформы и собственно адаптера. Сетевых интерфейсов можно запустить много, присвоив каждому свой номер. В UNIX все они работают с IP-пакетами. Можно сделать и несколько сетевых адаптеров, тогда номеров может быть еще больше. (Попутно мы отвечаем на вопрос, могут ли быть у машины два номера.) Сетевой интерфейс читает номер пакета. Если он совпадает с ее номером, он забирает пакет из сети. Эта же программа засылает пакеты в сеть. Полученный пакет пересылается программе, отвечающей за обработку этого типа пакетов. Этот тип называется портом, и говорят, что программа "висит" на таком-то порте. Как это ни банально, но такие вещи как e-mail, telnet, http, ftp и многое другое просто обозначают некоторые конкретные порты. Конечно, эти номера не "забиты" на века и можно как-то изощряться, меняя их время от времени, но, к счастью, есть стандарт, которого все придерживаются. Дальше мы поговорим о почте и WWW, а сейчас посмотрим, как работают шлюзы. На компьютерах, которые являются шлюзами, должны быть запущены программы управления потоком пакетов (router). Эти программы не обслуживают конкретный порт, а просматривают все проходящие пакеты. Если пакет имеет адрес не из этой подсети, он отправляется наружу, если из этой, то запускается внутрь. В принципе, возможно дальнейшее дробление подсети (сегментация). Например, можно разделить адреса 102.34.5.D, где D меньше 100, и где больше 100. Это бывает нужно, когда хочется разгрузить сеть или в целях безопасности разделить сети с разными операционными системами на машинах. Упоминавшийся DNS тоже имеет свой порт и методично обрабатывает запросы, приходящие от других машин. Может создаться впечатление, что существует куча систем, каждая из которых отвечает за свое, и неясно, что с этим делать…На самом деле все несколько проще. Все описанное и еще очень много другого объединено в системе UNIX в любой ее реализации, кроме, быть может, самых примитивных. На любой UNIX-машине можно запустить сетевые интерфейсы, DNS, роутеры и т.д. Тут важно скорее суметь разобраться, что не нужно, а что нужно на данной конкретной машине. Например, зачем запускать роутер, если это не шлюз, или зачем нужен DNS, если он есть на соседней машине. Кроме того, что это отбирает ресурсы компьютера, это может привести к сбоям в работе сети. Одна из бед начинающих администраторов - это неправильно настроенный роутер. При желании его можно настроить так, что пакеты будут ходить вечно или просто не туда. Есть еще один довольно важный вопрос: а что происходит, если пакет не IP, а, скажем, IPX или вообще от Windows-сети? Скажем прямо, что обработать их UNIX не сможет, но переслать перешлет. Например, можно настроить роутер так, что IPX-пакеты не будут выходить из своего сегмента.

http://www.freebsd.bip.ru/unix_and_internet.shtml (2 of 5)10.04.2004 17:24:12

Daemon News Russia

Отметим еще одну важную особенность организации сетевой работы. В UNIX реализован принцип "клиент-сервер", то есть, когда два компьютера работают друг с другом, то один из них всегда является главным. Поясним на примере. Запустим программу удаленного доступа telnet на машине 1, вызывая при этом машину 2. Тогда при установлении связи машина 2 станет сервером, а машина 1 - клиентом, что в данном случае очень сходно с терминалом. В UNIX это тоже так, но только для данного конкретного порта в данный момент. Например, если в то же время на машине 2 запустить telnet, вызывая машину 1, то ситуация будет зеркальной. Здесь важно, что UNIX - реально многозадачная система. В ней можно легко запустить много копий одной программы, и все они будут работать независимо. И конечно же, параллельно можно запускать много других программ. Но о программных аспектах мы поговорим в следующий раз. Сейчас же для нас важно знать, что имея UNIX, мы можем запустить много всего, и при этом как клиент- так и сервер-части. Расскажем о конкретных программах. Начнем с почты и на ее примере разберем типичную работу программы, обрабатывающей некоторый порт. Как мы уже сказали, почта имеет свой номер порта. На этом порте «висит» почтовая программа, которая принимает и отправляет письма. До сих пор мы говорили о пакетах. Конечно, программа принимает пакеты, но по мере их поступления она собирает их в письма. Тут важен порядок пакетов, но это сделать, как мы говорили, легко. Более важно получить информацию без ошибок. Очевидно, что дать стопроцентную гарантию нельзя, но существуют методы контрольных сумм, проверки четности и т.д., обеспечивающие более или менее высокую вероятность безошибочной передачи данных. Проверка происходит на каждом этапе пересылки на всех шлюзах. Если пакет пришел испорченный, то он возвращается назад. До тех пор пока не придет хороший пакет, он будет отражаться. Когда компьютер-получатель соберет все пакеты, относящиеся к письму, без ошибок, письмо будет получено. Но это еще не все. Обычно письма идут не компьютеру, а пользователю. До сих пор почтовая программа проверяла лишь, что адрес машины правильный. Теперь она будет пытаться положить письмо в почтовый каталог пользователя. Если такого пользователя нет, то чаще всего письмо переадресуется пользователю root, который является администратором UNIX-машины. Если пользователь все же есть, то он сможет потом прочитать это письмо с помощью почтовой программы. О том, как забирать письма с другой машины, мы поговорим в другой раз. Посылка писем происходит аналогично. Почтовая программа посылает письмо программе, которая отвечает за обработку почты. После этого письмо разбивается на пакеты, которые последовательно передаются в сеть. Надо отметить, что при посылке писем не проверяется, есть ли такой компьютер в сети. Это дело шлюзов. Если его нет, то письмо рано или поздно вернется. Такая работа является типичной для большинства программ. Несколько отличаются программы, работающие в реальном времени, например telnet или talk. Передаваемая информация должна сразу выводиться на экран. И если после пакета 2 пришел пакет 4, то надо ждать, пока придет пакет 3. Конечно, можно сказать, что описанный механизм довольно прост. Но никто и не обещал суперсложных вещей. Вообще, чем вещь проще, тем она надежнее. Теперь расскажем про WWW (World Wide Web). Для многих это просто Explorer или Netscape с красивыми картинками... Для UNIX это просто информация, приходящая на 80-й порт или уходящая с него. Но ведь можно все пересылать по почте, большие файлы - по ftp. Конечно, можно, но вопрос теперь уже в другом: насколько это удобно. Сама идея WWW появилась у физиков в CERN. Хотелось более удобно передавать друг другу результаты экспериментов, что не всегда можно сделать в виде текстов. Иногда удобны рисунки, иногда хочется сменить шрифт и т.п. И вся прелесть заключается в том, что в получившейся реализации надо было скорее не посылать, а брать. Информация лежит на компьютере (иногда его называют сайт) в каталоге, куда имеет доступ http-сервер. При запросе он начинает выдавать оттуда информацию, а машина, приславшая запрос, получает и обрабатывает ее. Для написания файлов (их еще называют WWW-страничками) был разработан язык HTML, в котором с помощью нехитрых команд можно было написать довольно удобные вещи типа меню, кнопок, вставить картинки и т. д. Программа, которая называется браузер (browser), должна уметь этот код интерпретировать. http://www.freebsd.bip.ru/unix_and_internet.shtml (3 of 5)10.04.2004 17:24:12

Daemon News Russia

Немаловажно то, что поскольку это текст, нет аппаратной зависимости, поэтому с самого начала этот способ был весьма удобен и неприхотлив. Затем появились скрипты, Microsoft придумала asp, но тут возникла небольшая проблема. Ее легко заметить, заходя сейчас на сайты Microsoft с помощью Netscape Communicator. Не все выглядит так красиво, как было задумано (то, что задумано, можно увидеть, используя Internet Explorer). Конечно, беды в этом нет. Просто произошел отход от принципа стандартизации. Не надо быть очень умным, чтобы понять, что здесь на передовые роли выходят деньги, желание завладеть кругом пользователей. Но ведь Windows отнюдь не везде является стандартом де-факто. Большинство научных институтов, особенно связанных с экспериментальной работой, зачастую имеют UNIX-машины. Еще есть Macintosh, со своей уникальной Mac OS, которая все же ближе к UNIX. Весьма популярны реализации UNIX и для x86-процессоров. Особенно известен Linux, хотя еще есть Free BSD, BSDI, Solaris и некоторые другие. Хоть это и тема другого рассказа, заметим, что Linux и Free BSD являются абсолютно бесплатными. При этом для Linux существует довольно большое число программ. Надо отдать должное Microsoft, что она пошла на некоторые уступки: Internet Explorer стал бесплатным и его сделали для многих платформ. Но вернемся к WWW. Уже всем ясно, что это наиболее удобный способ представления информации, и нужно лишь быстро передавать данные. Если эти данные статические, например картинки, то можно и подождать. Но если данные динамические, например звук радиостанции, то тут необходим хороший канал. Простой подсчет показывает, что если пытаться слушать звук с частотой 11 кГц и, скажем, 8 бит, притом моно, то нужно передавать 11 Кбайт/c. Для сравнения качество записи на CD-диске: 44 кГц, 20 бит, стерео, то есть примерно 220 Кбайт/с. К тому же, скорость 11 Кбайт/с обычный домашний модем, тем более с нашими АТС, не обеспечит. Иногда, как говорится, в хорошую погоду, бывает килобайт пять. Нетрудно сделать вывод, что посмотреть видеофильм по сети тоже дано не всем. Помочь, если канал плохой, почти невозможно, если вы не его владелец. Несомненно, можно советовать искать аналогичную информацию ближе, не лазить в Америку, потому что нужен спутник, но от этого не легче. И выход был найден. Он имеет загадочное название Proxy. Суть проста. Берется компьютер с большим диском и ставится на пути большого потока проходящих WWW документов. Наиболее часто используемые из них записываются на диск. Можно настроить браузер использовать Proxy. Тогда при повторном обращении страничка будет браться с Proxy-сервера, который ближе расположен. Разумеется, что сам Proxy-сервер должен при этом заботиться о свежести информации. Скажем прямо, это не всегда происходит корректно, и вы можете получать устаревший документ или же неполный файл. Еще раз оговорюсь: такие ошибки нетипичны, но они бывают, поэтому я, например, стараюсь Proxy отключать. Теперь, когда описаны принципы работы Интернета, кратко, хотя и подробно описаны почта и WWW, и даже неоднократно упоминалось о желании создать сеть, не зависящую почти ни от чего, может возникнуть вопрос: а почему же UNIX? Почему нельзя сделать все то же самое в Windows? На самом деле, часть этой работы уже сделана. Есть возможность запустить в Windows работу с IP-пакетами. В конце концов, ведь есть же Internet Explorer. Проблема заключается в том, что UNIX изначально делался для сетей, а Windows нет. Изначально спланированная как однозадачная система, DOS создала много трудностей при написании Windows. Желая сохранить совместимость со старыми программами, хотелось добавить многозадачность. В некоторой мере это достигнуто, но реально это не то, что нужно. Запустить много копий одной программы не всегда возможно, к тому большинство возможностей появляется только после загрузки графического интерфейса. Это, конечно, красиво, но иногда просто не нужно. Однако пока нет графического интерфейса, нет и многозадачности, потому что она грузится позже. Поэтому, загружая командную строку, вы будете находиться в обычном однозадачном DOS. Система защиты Windows вообще вне всякой критики. Создается впечатление, что многопользовательские возможности просто для виду. То, что в UNIX есть изначально: права доступа к каждому файлу, домашние каталоги, серьезная шифровка паролей, – в Windows почти полностью отсутствует. Кроме такой примитивной вещи, что в Windows 95/98 http://www.freebsd.bip.ru/unix_and_internet.shtml (4 of 5)10.04.2004 17:24:12

Daemon News Russia

можно нажать Escape вместо ввода имени и пароля, чтобы получить доступ к ресурсам машины, приведу еще один простой пример. Когда вы создаете новое соединение для удаленного доступа в сеть через модем, вы видите возможность сохранить пароль. Тогда в дальнейшем его не придется набирать. При подключении выполняется скрипт-файл, который обычно лежит в каталоге Program Files\Accessories и имеет расширение .scp. Вы можете убедиться, что после просьбы сохранить пароль он там будет записан открытым текстом. Я не хочу сейчас обсуждать, сколько способов залезть в машину, особенно когда она подключена к сети, но даже если этот пароль прочитают ваши знакомые, которых вы по доброте своей посадили за компьютер, то лучше вам от этого не станет. Поэтому на роль машины, участвующей в работе сети, машины с Windows вряд ли могут претендовать. В лучшем случае это клиенты. Именно поэтому в большинстве случаев для выхода в Интернет используют шлюз-машины, где ставят UNIX. Если сеть сложная и большая, то нужен хороший роутер, и тут уже подходит не любая реализация даже UNIX. Обычно почту и WWW тоже держат на UNIX-машинах в основном из соображений безопасности. Примером сложных систем являются сети провайдеров Интернета. И мне, честно говоря, не известно ни одного, где бы не было UNIX-машин.

(c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/unix_and_internet.shtml (5 of 5)10.04.2004 17:24:12

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Администрирование UNIX через Webmin новости

Webmin это интерфейс, основанный на web, для системных администраторов UNIX. Используя любой браузер, который поддерживает таблицы и формы, вы можете произвести настройки пользовательских аккуантов, Apache, интернет службы, DNS и многое другое. Webmin состоит из простого web сервера и нескольких CGI скриптов, которые напрямую изменяют системные файлы подобные /etc/inetd.conf и /etc/passwd. Web сервер и CGI скрипты написаны на Perl 5 и используют только стандартные perl модули. Для установки webmin, просто запустите шелл скрипт setup.sh. [root@r00t webmin-0.83]# ./setup.sh *************************************************************** * Welcome to the Webmin setup script, version 0.83 * *************************************************************** Webmin is a web-based interface that allows Unix-like operating systems and common Unix services to be easily administered. Installing Webmin in /home/ser/archiv/webmin-0.83 ... *************************************************************** Webmin uses separate directories for configuration files and log files. Unless you want to run multiple versions of Webmin at the same time you can just accept the defaults. Config file directory [/etc/webmin]: - файл конфигурации. По дефолту /etc/webmin, далее все что стоит в [] по дефолту Log file directory [/var/webmin]: - лог файл *************************************************************** Webmin is written entirely in Perl. Please enter the full path to the Perl 5 interpreter on your system. Full path to perl (default /usr/bin/perl): - посмотрите где у вас перл (which perl) и измените если надо Testing Perl ... Perl seems to be installed ok **************************************************************** For Webmin to work properly, it needs to know which operating system type and version you are running. Please select your system type by entering the number next to it from the list below --------------------------------------------------------------------------1) Sun Solaris 2) Caldera OpenLinux eServer 3) Caldera OpenLinux 4) Redhat Linux 5) Slackware Linux 6) Debian Linux 7) SuSE Linux 8) Corel Linux http://www.freebsd.bip.ru/webmin.shtml (1 of 3)10.04.2004 17:24:13

Daemon News Russia

9) TurboLinux 10) Cobalt Linux 11) Mandrake Linux 12) Delix DLD Linux 13) Conectiva Linux 14) MkLinux 15) LinuxPPC 16) XLinux 17) LinuxPL 18) Linux From Scratch 19) Trustix 20) FreeBSD 21) OpenBSD 22) BSDI 23) HP/UX 24) SGI Irix 25) DEC/Compaq OSF/1 26) IBM AIX 27) SCO UnixWare 28) SCO OpenServer 29) MacOS Server X --------------------------------------------------------------------------Operating system: 11 - тут вводим свою систему, точнее ее номер из списка выше. Далее идет еще несколько вопросов, которые зависят от типа выбранной ОС **************************************************************** Webmin uses its own password protected web server to provide access to the administration programs. The setup script needs to know : - What port to run the web server on. There must not be another web server already using this port. - The login name required to access the web server. - The password required to access the web server. - The hostname of this system that the web server should use. - If the webserver should use SSL (if your system supports it). - Whether to start webmin at boot time. Вкратце: тут написано, что Webmin использует собственный пароль, который защищает web сервер. Скрипту установки необходимо указать: порт на котором будет висеть сервер, логин, пароль, hostname (свое), будет ли webserver использовать SSL (если система поддерживает), нужно ли запускать webmin каждый раз во время загрузки. **************************************************************** Webmin has been installed and started successfully. Use your web browser to go to http://hostname:port/ Теперь для начала работы необходимо набрать http://hostname:port/ в браузере, где hostname и port - имя хоста и порт указанный при установки. После этого Webmin спросит login/passwd. Webmin позволяет произвести практически ЛЮБЫЕ настройки системы (даже файловый менеджер на яве есть). Это сильно поможет новичку, и облегчит жизнь опытным администраторам. Webmin содержит модуль детальной настройки sendmail. Можно например создать Webmin пользователя, который сможет использовать web интерфейс для отправки/чтения почты. Создать список рассылки, спам фильтры и много другое. Также позволяет установить/удалить нужные/ненужные пакеты. Не советую особо злоупотреблять Webmin'ом, тк хороший админ должен знать как настроить систему вручную. Ну вот и ВСЕ! Можно работать. Хотя нет, не все -) Идем на http://hostname:port/webmin/edit_lang.cgi и выбираем там русский язык. Все, вот теперь можно =)

(c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/webmin.shtml (2 of 3)10.04.2004 17:24:13

Daemon News Russia

новости

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь

Гадости на FreeBSD Предисловие: Я не заставляю вас использовать НИ ОДИН из рассмотренных в этом файле методов. Unix - клевая операционная система, наверное, одна из лучших, когда-либо разработанных систем. Если у вас есть доступ к системе Unix, то мой вам совет - УЧИТЕ UNIX И УЧИТЕ C, потому что за эти знания в компьютерном мире платят хорошие деньги. Тем не менее, Unix - довольно небезопасная операционная система, которую легко трахнуть. В этом файле рассмотрено несколько методов осуществления этого. Разрушение Системы В стандартной поставке Unix нет программного обеспечения, ограничивающего дисковое пространство для каждого пользователя. Таким образом, один пользователь может захватить все дисковое пространство, эффективно препятствуя записи чего-то еще на диск. Простейшим путем захвата дискового пространства является создание поддиректории, в ней еще одной, и еще, и так, пока свободного пространства не останется. Вот несколько путей реализации этого. 1> Создайте файл со следующими строками: mkdir subdir cd subdir source /u1/mydir/crash Назовем его crash. В последней строчке ("source /u1/mydir/crash") нужно изменить путь к директории на правильный. Если путь к вашей директории выглядит так: /u3/students/jeff, то в последней строчке надо написать "source /u3/students/jeff/crash". После того, как вы запишете все вышеуказанное в файл, введите: % source crash и подождите... Буквально через несколько минут программа прекратит работу из-за нехватки свободного места на диске. И больше ничего нету. 2> Вот более изящное исполнение той же задачи. Создайте этот shell-скрипт "бесконечный цикл": while : ; do mkdir subdir cd subdir done а затем "source" файла. Если вы в оболочке "sh" (если так, то вы увидите символ "$" в начале командной строки), то вы можете ввести- "while : ; do" в командной строке. Затем появится http://www.freebsd.bip.ru/gadosti.shtml (1 of 3)10.04.2004 17:24:14

Daemon News Russia

строка со знаком > впереди. Введите следущие три строки и наслаждайтесь. 3> Если вы хотите установить процесс и завесить систему, и у вас есть файл, который вы назвали crash, введите: % nohup source crash & и отлогиньтесь. Это запустит фоновый процесс, позволяющий вам отключиться от системы. Тем не менее, отключаться надо БЫСТРО, поскольку если вы использовали первый пример в своем файле crash, то...то лучше не спрашивайте.. Замедление Системы Есть несколько путей осуществления этого, например, запуск огромного числа бэкграундпроцессов. Вот один специфический пример. Создайте файл с именем "slow1" и впишите в него следующие строки: w& source slow1 теперь создайте файл с именем "slow2", и впишите: source slow1 & source slow2 и запустите slow2: % slow2 или % slow2 & Это создаст 25 бэкграунд-процессов. После каждого запущенного процесса система начнет работать все медленнее и медленнее. Беспорядок в директории Многие команды для действий над файлами используют параметр "-". Создайте файл, имя которого будет начинаться на "-": cat > -имя_файла [теперь введите несколько издевательских строк, типа "ха-ха, вы не сможете удалить этот файл".] Нажмите ^D (control-d) для завершения ввода. Теперь, когда у вас есть файл с именем имя_файла в вашей директории, его будет ОЧЕНЬ тяжело удалить. Если вы введете rm (удаление) -имя_файла или mv (переименование) -имя_файла, то программа rm или mv воспримет это как параметр, а не как имя файла, и должна выдать вам сообщение об ошибке, http://www.freebsd.bip.ru/gadosti.shtml (2 of 3)10.04.2004 17:24:14

Daemon News Russia

что -имя_файла является неправильным именем параметра... Таким образом, противный файл останется неудаленным. Создайте пару сотен файлов, начинающихся на "-"...это будет сильной головной болью для человека, в чью директорию вы закинете эти файлы, скорее всего, ему просто придется получить новый логин. Вывод Использование любого приема, из описанных выше - дело совсем безответственное, и если ктонибудь будет делать это на моей системе, то я сильно обижусь. Вот почему я настоятельно рекомендую никогда не пользоваться этими хитростями.

(c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/gadosti.shtml (3 of 3)10.04.2004 17:24:14

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Меняем баннеры некоторых демонов новости

[ser@r00t ser]# telnet some.server 21 Trying xxx.xx.xx.xx ... Connected to some.server. Escape character is '^]'. 220 some.server FTP server (Version wu-2.6.0(1) ) ready. [ser@r00t ser]# ./wuftpd -s0 -t some.server Target: some.server (ftp/): RedHat 6.2 (?) with wuftpd 2.6.0(1) from rpm Return Address: 0x08075844, AddrRetAddr: 0xbfffb028, Shellcode: 152 loggin into system.. USER ftp 331 Guest login ok, send your complete e-mail address as password. PASS 230-Next time please use your e-mail address as your password 230- for example: [email protected] 230 Guest login ok, access restrictions apply. STEP 2 : Skipping, magic number already exists: [87,01:03,02:01,01:02,04] STEP 3 : Checking if we can reach our return address by format string STEP 4 : Ptr address test: 0xbfffb028 (if it is not 0xbfffb028 ^C me now) STEP 5 : Sending code.. this will take about 10 seconds. Press ^\ to leave shell Linux some.server 2.2.15 #1 SMP Tue Mar 7 5:07:30 EST 1998 i586 unknown uid=0(root) gid=0(root) egid=50(ftp) groups=50(ftp) =) гы гы гы А ведь можно было этого избежать ... Для этого было несколько способов. Например сменить ftp демон на другой. Но вдруг если по каким либо непонятным причинам вы этого сделать не можете есть другой способ, не такой надежный как первый конечно, но ... В данном примере взлом сервера был совершен через дырявый ftp демон. Как видно из примера о нем я узнал просто зателнетившись на его порт. Демон сам сказал что он дырявый и все! А ведь можно сделать так чтобы он этого не говорил или еще лучше говорил что нибудь другое -) Например выдавал себя за тотже ftp демон, но другой версии. Как это сделать будет написано ниже. Если даже вы хороший админ, то все равно это непомешает сделать. 1) wu-ftpd Рапаковываем архив, ползем в src. Там есть скрипт newvers.sh. Если в него заглянуть то можно увидеть итересную строку: printf "char version[] = \"Version wu-2.6.1(%d) ", edit > "vers.c";\ Как видно она создает файл vers.c которого нет до компиляции и записывает туда версию демона. Теперь осталось только отредактировать его и собрать демон как обычно.

http://www.freebsd.bip.ru/changebaners.shtml (1 of 3)10.04.2004 17:24:16

Daemon News Russia

[ser@r00t ser]# telnet 127.0.0.1 21 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. 220 localhost FTP server (Version wu-6.6.6(1) Mon Feb 5 02:43:44 MSK 2001) ready. Все описанное проделовалось мною с wuftpd-2.6.1 2) sendmail После распаковки архива лезем в директорию sendmail, где находяться основные файлы с исходными текстами, среди которых есть version.c Думаю как и что в нем менять рассказывать не надо. Но это еще не все. После компиляции необходимо отредактировать также ваш sendmail. cf Для этого нужно найти в нем строку с его настроящей версией (поиском) и заменить на свою. Было сделанно на sendmail-8.11.0 [root@r00t ser]# telnet 127.0.0.1 25 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. 220 localhost ESMTP Sendmail 6.6.6/6.6.6; Mon, 5 Feb 2001 02:57:17 +0300 3) sshd Тут все просто. Меняем файл version.h и все. [root@r00t ser]# telnet 127.0.0.1 22 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. SSH-1.5-6.6.6 4) qpopper Информация о версии этого демона находиться в файле popper/version.h Меняем, собираем ... [root@r00t ser]# telnet 127.0.0.1 110 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. +OK QPOP (version 6.6.6) at r00t.net starting. ...нехорошо, всетаки извесно что это именно QPOP. Чтобы поменять и это придеться лезть в сам popper/popper.c. Ищем там строку: "QPOP%.*s%s (version %s) at %s starting. %s" Меняем ее на "best pop3 server%.*s%s (version %s) at %s starting. %s" [root@r00t ser]# telnet 127.0.0.1 110 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. +OK bestpop3 server (version 6.6.6) at r00t.net starting. http://www.freebsd.bip.ru/changebaners.shtml (2 of 3)10.04.2004 17:24:16

Daemon News Russia

Ну вот и все.

http://www.freebsd.bip.ru/changebaners.shtml (3 of 3)10.04.2004 17:24:16

(c) 2001-2002 Daemon News Russia

Daemon News Russia

новости

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь

Русификация В файле /etc/rc.conf (для FreeBSD 2.2.*) или /etc/sysconfig (для FreeBSD 2.1.*) Надо найти раздел ###################### ### System console options #####################

#

и установить (поправить) в нем значения следующих переменных: keymap="ru.koi8-r" keychange="61 Esc[K"

# keymap in /usr/share/syscons/keymaps/*

для клавиатуры; "Esc" означает, что на этом месте действительно должен стоять символ Escape с кодом 27 или 0x1B (см.раздел # General Russian setup for example:); а также scrnmap="koi8-r2cp866" font8x16="cp866b-8x16" font8x14="cp866-8x14" font8x8="cp866-8x8"

# # # #

screen map in /usr/share/syscons/scrnmaps/* font 8x16 from /usr/share/syscons/fonts/* font 8x14 from /usr/share/syscons/fonts/* font 8x8 from /usr/share/syscons/fonts/*

для консоли (ряд строк раздела опущен, как не имеющих отношения к русскому); для разных текстовых режимов нужны разные фонты - 8x16, 8x14 или 8x8; NB. В этих манипуляциях с фонтами вы можете заметить применение кодовой страницы 866. На самом деле это нужно лишь для того, чтобы символы псевдографики выглядели нормально (это связано с аппаратными особенностями видеосистемы PC). В целом, если вы не используете программ наподобии Midnight или Demos Commander'ов, можно смело опустить mapping koi8-r -> cp866, и, соответственно, использовать родные фонты koi-8r: keymap="ru.koi8-r" font8x16="koi8-r-8x16" font8x14="NO" font8x8="NO" (Здесь загружаются только фонты 8x16 - VGA, 80 колонок * 25 строк.) Переключатель русской/ английской клавиатуры определяется в ru.koi8-r, по умолчанию - CapsLock (переключение заглавных/строчных при этом - Shift+CapsLock). Отказ от переопределения 61 -> Esc[K можно компенсировать изменением /etc/termcap и, для FreeBSD 2.2.*, перекомпиляцией его базы данных.

http://www.freebsd.bip.ru/rus.shtml (1 of 2)10.04.2004 17:24:17

Daemon News Russia

Все эти переменные, установленные в /etc/rc.conf (/etc/sysconfig), суть установки для команд vidcontrol и kbdcontrol. Если интересно, как они обрабатываются, смотрите /etc/rc. i386 В файле /etc/ttys в третьей колонке заменяем cons25 на cons25r или pc3r. Все произведенные изменения в /etc/rc.conf и /etc/sysconfig будут действовать только после перезагрузки; в /etc/ttys - после перезагрузки или после посылки сигнала SIGHIP процессу /sbin/init (насколько я помню, он всегда идет под номером 1) kill -SIGHIP 1 В зависимости от используемого shell'а (командного интерпретатора) надо установить значения переменных LANG=ru_RU.KOI8-R MM_CHARSET=KOI8-R и, в некоторых shell'ах надо будет экспортировать их. Это делается в стартовых скриптах каждого пользователя или в общих скриптах, запускаемых при входе в систему. Внесенные изменения возымеют действие после входа в систему. Некоторые приложения могут некорректно работать с 8-битным тектом/вводом. К сожалению, невозможно дать один рецепт для всех приложений. Как правило, это несложно либо невозможно. :-) Смотрите manual pages соответствующего приложения.

(c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/rus.shtml (2 of 2)10.04.2004 17:24:17

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь BASTION ROUTER на базе FreeBSD новости

В данной статье мы расскажем о настройке роутера на базе FreeBSD, выполняющего роль шлюза в инернет с установкой firewall-a, поддерживающем статическую arp-таблицу macадресов машин в локальной сети. Речь пойдет о встроенном файрволе FreeBSD - IPFW, который не подводит ползователей уже не первый год. В последней версии, поставляемой в составе c FreeBSD 4.0, исправленны ошибки и добавленна корректная возможность ограничивать полосу пропускания по интерфейсу (использование pipe с опцией bw). Предположим что мы имеем роутер с тремя сетевыми платами, одна из которых (назовем ее vx0, IP 200.200.200.1) смотрит в сторону Internet-a, а вторая (назовем ее vx1, IP 200.200.200.2) смотрит в сторону локальной сети с реальными 18 IP адресами (subnet 200.200.200.0/28 netmask 255.255.255.240). К третьей сетевой карточке (vx2 IP 192.168.1.1 и сеть 192.168.1.0/28) подключена 10-мегабитная сеть соседнего оффиса.) Задачи перед нами поставленны следующие : - Закрыть доступ во внутренюю сеть извне по портам 135,137,139 - Дать возможность пользователям локальной сети работать с почтой и работать с в броузере с WWW,FTP серверами других компаний. - Закрыть на роутере возможность атаки типа SYN Flood, ICMP Flood. - Закрыть доступ к корпоративному WWW/FTP серверу (200.200.200.5), который используется для работы с отчетами выставленными на этот WWW server только в пределах локальной сети и доступа из филиала, который имеет IP 199.199.199.10 - Открыть доступ для конфигурирования этого роутера с определеного хоста системного администратора. - Обеспечить подсчет трафика по IP адресам в локальной сети, чтобы впоследствии доказать, что Вася весь месяц только и занимался скачиванием c www.playboy.com картинок сомнительного содержания. - Ограничить трафик 64Kb на третьей сетевой карточке для дружественного клиента компании, находящейся в том же здании и подключенной по каналу 10Mb к нашему роутеру и закрыть доступ с их стороны в локальную сеть нашей компании. Итак приступим. 1. Конфигурирование ядра и опций запукаемых скриптов. В конфигурационный файл ядра необходимо внести следующие опции : options IPFIREWALL (включает в ядро код для фильтрации пакетов) options IPFIREWALL_VERBOSE (включает возможность вести логи по правилам фильтрации и проходящих пакетов) options IPFIREEWALL_VERBOSE_LIMIT=10 (ограничение списка числа пакетов записываемых в лог, для того чтобы не зафлудили syslog) options TCP_DROP_SYNFIN (отбрасывает TCP пакеты с SYN и FIN) В итоге после пересборки ядра и перезагрузке системы мы получим firewall, который по умолчанию закрывает прохождение любого IP трафика по всем интерфейсам (осторожнее, если вы проделывате пересборку ядра удалённо - у вас есть все шансы получить машину, на которую запрещены вообще все входящие соединения - посему рекомендуется производить пересборку ядра с ttyvX, а не с ttypX =). http://www.freebsd.bip.ru/bronfbsd.shtml (1 of 4)10.04.2004 17:24:19

Daemon News Russia

Далее мы определим правила, которые откроют только те порты TCP или UDP, которые нужны для работы пользователей. Если Вы придерживаетесь другого подхода - "сначала все откроем а потом будем закрывать" то вам необходимо указать следующую опцию в ядре : options IPFIREWALL_DEFAULT_TO_ACCEPT В /etc/defaults/rc.conf указываем следующее : tcp_extensions="NO" (отключаем "опасные" из RFC1323 расширения TCP) tcp_drop_synfin="YES" (отбрасывем SYN + FIN) icmp_drop_redirect="YES" (игнорируем перенаправленные ICMP пакеты) icmp_log_redirect="YES" (включаем logging ICMP REDIRECT) firewall_enable="YES" (включаем использование firewall) firewall_type="Company" (указываем что наши настройки firewalla находятся в rc.firewall в разделе "Company") defaultrouter="199.199.199.1" (шлюз до нашего ISP) 2. Конфигурирование IPFW. Теперь приступаем к написанию правил IPFW. Более побдробное описание синтактиса можно прочитать в handbook или man ipfw. Поскольку мы создаем свою конфигурацию ("Company") то делаем ее описание в rc.firewall : [Cc][Oo][Mm][Pp][Aa][Nn][Yy] # Описываем сеть и интерфейсы fw="200.200.200.1" local="200.200.200.2" client="192.168.1.1" net="200.200.200.0/28" mask="255.255.255.255.240" # Разрешаем трафик по local интерфейсу ${fwcmd} add pass all from any to any via lo0 # Разрешаем трафик #только в пределах локальной сети ${fwcmd} add pass all from any to any via vx1 # Запрещаем прохождение фрагментированных пакетов ${fwcmd} add deny icmp from any to any frag # Разрешаем прохождение ICMP пакетов ${fwcmd} add pass ICMP from any to any # Разрешаем # работу с SMTP протоколом ${fwcmd} add pass tcp from any to any 25 out ${fwcmd} add pass tcp from any 25 to any out # Разрешаем работу # с HTTPS протоколом ${fwcmd} add pass tcp from any to any 443 out ${fwcmd} add pass tcp from any 443 to any out # Разрешаем работу снаружи с внутреним сервером компании филиалу ${fwcmd} add pass tcp from 199.199.199.10 to 200.200.200.5 80 via vx0 ${fwcmd} add pass tcp from 200.200.200.5 80 to 199.199.199.10 via vx0 # Запрещаем #остальным работу снаружи с внутреним сервером компании ${fwcmd} add deny tcp from any to 200.200.200.5 80 in via vx0 # Разрешаем #работу с HTTP протоколом ${fwcmd} add pass tcp from any to any 80 out via vx1 ${fwcmd} add pass tcp from any 80 to any out via vx1 # Разрешаем работу по всем протоколам в пределах # только локальной #сети нашей компании ${fwcmd} add allow all from any to any via vx1 # Разрешаем работу с DNS серверами ${fwcmd} add pass udp from any to any 53 ${fwcmd} add pass udp from any 53 to any # Разрешаем работу #с NEWS Серверами ${fwcmd} add pass tcp from any to any 119 ${fwcmd} add pass tcp from any 119 to any # Разрешаем забор почты по POP3 #протоколу ${fwcmd} add pass tcp from any to any 110 ${fwcmd} add pass tcp from any 110 to any # Разрешаем работу с FTP серверами # Обратите внимание что 20 порт протокола # TCP так же используется #для передачи данных ${fwcmd} add pass tcp form any 21 to any ${fwcmd} http://www.freebsd.bip.ru/bronfbsd.shtml (2 of 4)10.04.2004 17:24:19

Daemon News Russia

add pass tcp from any to any 21 ${fwcmd} add pass tcp from any 20 to any ${fwcmd} add pass tcp from any to any 20 # Разрешаем доступ #по ssh с домашней машины # администратора имеющей IP 200.200.200.15 ${fwcmd} add pass tcp from 200.200.200.15 22 to {isp} ${fwcmd} add pass tcp from {isp} to 200.200.200.15 22 # Ограничиваем трафик с #сетевой карточки vx2 в локальную сеть # нашей компании ${fwcmd} add deny all from 192.168.1.0/24 to ${net}:${mask} via vx1 ${fwcmd} add deny all from ${net}:${mask} to 192.168.1.0/24 via vx1 # Разрешаем #работу по базовым портам TCP на интерфейсе vx2 ${fwcmd} add pass tcp from 192.168.1.0/24 to any 25 via vx2 ${fwcmd} add pass tcp from any 25 to 192.168.1.0/24 via vx2 ${fwcmd} add pass tcp from 192.168.1.0/24 to any 110 via vx2 ${fwcmd} add pass tcp from any 110 to 192.168.1.0/24 via vx2 ${fwcmd} add pass udp from 192.168.1.0/24 to any 53 via vx2 ${fwcmd} add pass udp from any 53 to 192.168.1.0/24 via vx2 ${fwcmd} add pass tcp from 192.168.1.0/24 to any 80 via vx2 ${fwcmd} add pass tcp from any 80 to 192.168.1.0/24 via vx2 # Ограничиваем полосу пропускания на интерфейсе vx2 в 64 Kb. # для #входящего трафика ${fwcmd} add pipe 1 ip from any to any in via vx0 ${fwcmd} add pipe 1 config bw 64Kbit/s # Ограничиваем полосу #пропускания на интерфейсе vx2 в 64 Kb. # для исходящего трафика ${fwcmd} add pipe 2 ip from any to any out via vx0 ${fwcmd} add pipe 2 config bw 64Kbit/s Для проверки работы правил вы можете воспользоваться популярным сканером TCP/IP NMAP (входит в состав FreeBSD или скачивается с INSECURE.ORG), дав команду : ./nmap 200.200.200.1 или ./nmap 200.200.200.2 , находясь за пределами диапазона адресов вашей сети, или попросив об этом вашего ISP. 3. Предотвращение подделки MAC-адреса Нам необходимо обезопасить наш роутер от возможности принятия пакетов с IP адресами которые могут попасть в локальную сеть извне под видом "легальных" пакетов TCP/IP с обратными адресами, входящими в диапазон 200.200.200.0/28. Даже если это произойдет, то на этот случай у нас есть жестко привязанная таблица IP адресов к MAC адресам сетевых карт и роутера нашего ISP. Иногда это бывает необходимо, как мера защиты от нечистоплотных сотрудников, которые меняют IP адресс своего хоста на адрес другого ПК, владелец которого находится в отпуске и все шишки соотв. посыплятся на него ;) Для начала вам нужно построить MAC таблицу адресов , где формат ее будет таким: petya 00:20:af:4a:3e:e3 vasya 00:20:fg:3a:3e:21 sasha 00:20:fg:3a:3e:21 markins 00:20:fg:3a:3e:21 ,и сохранить ее в файле /etc/ethers. Для того чтобы узнать Ethernet адрес хоста, достаточно в консоли на нем набрать arp -a. При запуске на роутере arp -f /etc/ethers вся информация о соответствии IP адресов и MAC адресов сетевых карточек при работе протокола ARP будет браться из файла /etc/ether и "замораживаться". Это процесс можно автоматизировать запустив на роутере arpwatch (он есть в портах FreeBSD), и сделав на каждом хосте файл /etc/hosts с описанием пар name_hosts IP_adress и /etc/ethers с вышеприведенным форматом. Когда появляется факт подмены IP адреса, то arpwatch посылает http://www.freebsd.bip.ru/bronfbsd.shtml (3 of 4)10.04.2004 17:24:19

Daemon News Russia

письмо root'у роутера с описанием проишедшего и таблица arp замораживается. 4. Настраиваем статистику. Для создания стратистики мы будем использовать ipfm, входящий в состав портов FreeBSD. При инсталяции в /usr/local/etc/создается файл ipfm.conf. Его то как раз нам и нужно отредактировать: ##### FIRST LOGGING CONFIGURATION ##### # Описывем внутреннюю сеть с которой #снимаем статистику # LOG 200.200.200.0/255.255.255.240 NOT WITH 200.200.0.0/255.255.0.0 # Присваиваем название файлу для сбора #статистики FILENAME /var/log/ipfm/local_net-%d.%m-%H.%M.%S # Устанавливаем период записи в лог в нашем случае лог будет обновляться # еженедельно TIME 7 day SORT IN RESOLVE ##### SECOND LOGGING CONFIGURATION ##### NEWLOG # Описывем внутреннюю сеть нашего клиента 192.168.1.0/24 subnet 192.168.1.0/255.255.255.0 NOT WITH 192.168.0.0/255.255.0.0 # Задаем период записи в лог в данном случае #1 день FILENAME /var/log/ipfm/ipfm-%d.%m-%H.%M.%S # Log on a period of one week TIME 1 day SORT IN RESOLVE Если же требуется более детальная информация по протоколам и количеству передаваемых пакетов то можно воспользоваться опцией count в ipfw : # Подсчитываем входящий и исходящий трафик по HTTP протоколу ipfw add count tcp from any to any 80 in via vx0 ipfw add count tcp from any to any 80 out via vx0 # Подсчитываем входящий и исходящий трафик по HTTP протоколу для клиентов ipfw add count tcp from any to any 80 in via vx2 ipfw add count tcp from any to any 80 out via vx2 ipfw add count tcp from any to any 21 in via vx2 ipfw add count tcp from any to any 21 out via vx2 Еcли же вас интересует статистика с конкретного IP адреса то вы просто указываете так : ipfw add count tcp from any to 200.200.200.3 in via vx1 где 200.200.200.3 - IP адрес пользователя Васи, который ежемесячно скачивает с www.playboy. com графические файлы объёмом по сто мегабайт. Вы можете также закрыть доступ к этому сайту например таким способом : ipfw add log deny all from any to www.playboy.com с записью в лог попыток обращения к нему. А графическая статистика строится с применением пакеты MRTG (Multi Router Transfeer Grapheer) при использовании агента snmp, запущенного на роутере. Также необходимо установить на роутере средства обнаружения атак. Автор: Michael Vlasov (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/bronfbsd.shtml (4 of 4)10.04.2004 17:24:19

Daemon News Russia

новости

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь

Fido станция под Unix ● ● ● ●

● ● ●

Какие пpогpаммы необходимы для оpганизации fido под Unix ? Как установить ifmail ? Как настpоить News Server (INN) ? Настрока mta для pаботы с fido mail 1. Как настpоить sendmail ? 2. Как настpоить smail ? 3. Как настpоить exim ? Какие есть популяpные читалки ? Где можно взять AreaFix ? Где можно взять FileFix ?

Q1: Какие пpогpаммы необходимы для оpганизации fido под Unix ? A: Mailer для коммутируемых линий: ifcico из пакета ifmail. Последняя версия ifmail лежит здесь или здесь. Автор Eugene G. Crosser (2:5020/230). Mailer для работы по IP: binkd. Автор Dmitry Maloff (2:5047/13). В качестве тоссера и редактора можно использовать QEcho. Оригинальный вариант QEcho лежит здесь. Автоp Nikolay Shadrin (2:5020/609). Доработанный вариант Qecho by Vad Adamluk (2:478/13) выложен сюда. В нем пофиксены некоторые баги, присутствующие в оригинальной версии. Более сложный ваpиант: News Server + MTA + ifmail. News Server -- сервер новостей, управляющий базой статей. Это INN или cnews. MTA -- Mail Transport Agent, выполняет доставку/роутинг почты (netmail'a). Наиболее широко используемые: sendmail, smail, exim. Ifmail выполняет гейтование fidointernet. Для ответов на входящие звонки рекомендуется mgetty. При сборке добавить в CFLAGS в Makefile -DFIDO. Q2: Как установить ifmail ? A: Взять последний ifmail, пpочитать README, поправить CONFIG, собpать, заинсталиpовать. Пойти в ~ifmail/misc, отредактировать config ifmail'a, положить на свое

http://www.freebsd.bip.ru/fidost.shtml (1 of 7)10.04.2004 17:24:21

Daemon News Russia

место (см. CONFIG). to Linux users:

Если при сборке не найден ndbm.h -- пойти на любой linux ftp site (ex: ftp://ftp.redhat.com/pub/contrib/SRPMS/), скачать gdbm-*-1.7.3.* Из него вытащить ndbm.h и положить в /usr/include/.

Если в качестве news server'a будет использоваться INN, rnews должен быть бинарь, а не скрипт. Обычно он находится в /usr/lib/news/. Рекомендуется наложить на ifmail патчи by Serg Oskin. У вас пропадут многие проблемы c гейтованием. Они оформлены как один patch, который можно взять здесь. Имя файла ifm???os.dgz, где ??? версия ifmail. Патч применим для любой версии ifmail с соответствующими доработками. Обратите внимание, что в fido адреса добавлена зона (и это правильно). Поэтому в newsfeeds, в файле паролей areafix'а & ... нужно указывать и зону. Добавте в send-ifmail в строке с egrep зону: LIST=`ls ... |egrep "f[0-6]*.n[0-9]*.z[1-7]"` Можно наложить на ifmail патч by Stanislav V. Voronyi. Основные изменения в iftoss - он теперь кроме того что гейтует пришедшие пакеты, он их еще раскладывает на даунлинков. Список даунлинков хранится в файле Areas. Своей msgbase нет, ведется только собственная дупобаза. Патч расчитан на применения на гейтующих узлах, у которых кроме news-овых есть еще и чисто фидошные даунлинки. Роутинг нетмыла не сделан, т.е. даже из фидо в фидо оно продолжает ходить через гейт. Хотя заготовка под него в исходниках имеется. Патч можно взять здесь. Имя -- ifmail-toss*.patch.gz. У кого возникнут какие вопросы - пишите на [email protected]. Если кто сделает какие изменеия - шлите патч. Поскольку желающих тестировать оказалось много они будут собираться и выкладываться на ftp. Прочитать FAQ, закомпилировать nodelist. ifpack/ifunpack запускать по крону и/или из звонилки. Q3: Как настpоить News Server (INN) ? A: Вам достаточно пpочитать и выполнить pекомендации из Install.ms (читать "nroff -mgs Install.ms | less"). Отредактировать ~inn/config/config.data под свою OS и свои настройки (пути, etc), собрать (make world), заинсталировать. На INN неплохо бы наложить msgid-inn патч (входит в состав патча к ifmail by Serg Oskin), чтобы msgid генерился в соответствии с fido стандартами. После этого идете в ~ifmail/misc/inn/: ❍

send-ifmail кладете в /var/lib/news/, вызов в news crontab'a чеpез каждые 15 минут.

http://www.freebsd.bip.ru/fidost.shtml (2 of 7)10.04.2004 17:24:21

Daemon News Russia ❍

по пpимеpу newsfeeds пишете свой (/var/lib/news/newsfeeds). Хоpошо помогает man newsfeeds.

Как создавать, удалять, etc. newsgroup? man ctlinnd, ctlinnd -h. Можно поставить autocreate by Serg Oskin. Входит в состав патча к ifmail. INN обязательно запускать с ключом -u, который нужно добавить в переменную FLAGS в скpипте запуска INN (rc.news). Еще рекомендуется добавить ключ -с0, чтобы inn не откидывал в /var/spool/news/in.coming/bad/ статьи, написанные более N дней назад. Или написать скрипт на sh+awk, правящий дату на текущую и перекладывающий статьи в /var/ spool/news/in.coming/ на с'едение rnews -U. По поводу удаления статей неплохо прочитать man expire, man expire.ctl, man news.daily. Пример news crontab'a: ==== 35 04 * * * 10,40 * * * * 0,15,30,45 * * * * ====

/usr/lib/news/bin/news.daily delayrm /usr/bin/rnews -U /usr/lib/news/send-ifmail

Q4.1: Как настpоить sendmail ? A: Это самый гадкий пpогpамм... Перед настройкой рекомендуется прочитать документацию ( ~sendmail/doc/* ). Пример рабочей конфигуpации. Kir Marushkin: Есть, по-моемy, более yдобный и гибкий ваpиант. Попpавить нижеследyющее конечно пpидется (пyти, адpеса, OSTYPE и VERSIONID). 1. $SENDMAIL_HOME/cf/mailer/ifmail.m4: ======== PUSHDIVERT(-1) # # Copyright skipped # ifdef(`IFMAIL_MAILER_PATH',, `define(`IFMAIL_MAILER_PATH', /usr/local/ifmail/ifmail)') ifdef(`IFMAIL_MAILER_ARGS',, `define(`IFMAIL_MAILER_ARGS', `ifmail -r $h $u')') POPDIVERT ####################################### ### ifmail Mailer specification ### ####################################### VERSIONID(`@(#)ifmail.m4 0.1 (Waxwork) 10/25/95') http://www.freebsd.bip.ru/fidost.shtml (3 of 7)10.04.2004 17:24:21

Daemon News Russia

Mifmail, P=IFMAIL_MAILER_PATH, F=msDFMuC, S=11, R=21, A=IFMAIL_MAILER_ARGS ======== 2. $SENDMAIL_HOME/cf/cf/waxwork.mc: ======== divert(-1) # # Copyright skipped # include(`../m4/cf.m4') VERSIONID(`@(#)waxwork.mc 0.1 (Waxwork) 10/25/95') OSTYPE(bsd4.4) FEATURE(mailertable) FEATURE(nocanonify) MAILER(local) MAILER(procmail) MAILER(smtp) MAILER(ifmail) MAILER(uucp) define(`confCOPY_ERRORS_TO',`postmaster') define(`USE_CW_FILE') define(`confCW_FILE',`/etc/sendmail.cw') LOCAL_RULE_3 R$+ < @ $+ . fidonet . org > $* R$+ < @ $+ . fidonet > $* R$+ < @ $+ . fido > $* R$+ < @ $+ . ftn > $* # между столбцами табуляция!!! ========

$@ $1 < @ $2 . fidonet . org . > $3 $@ $1 < @ $2 . fidonet . org . > $3 $@ $1 < @ $2 . fidonet . org . > $3 $@ $1 < @ $2 . fidonet . org . > $3

3. В /etc/sendmail.cw yказываем наши алиасы на котоpые сендмайл может пpинимать почтy (без фидошных aka). Hапpимеp y меня: saver.msk.su fidogate.saver.msk.su 4. Pyтинг пpописывается в mailertable, что гоpаздо yдобнее, чем пpямо в конфиге сендмайла. /etc/mailertable: .fidonet.org f361.n5020.z2.fidonet.org .f361.n5020.z2.fidonet.org f297.n5020.z2.fidonet.org .f297.n5020.z2.fidonet.org f688.n5020.z2.fidonet.org .f688.n5020.z2.fidonet.org

http://www.freebsd.bip.ru/fidost.shtml (4 of 7)10.04.2004 17:24:21

ifmail:f322.n5020.z2.fidonet.org ifmail:f361.n5020.z2.fidonet.org ifmail:f361.n5020.z2.fidonet.org ifmail:f297.n5020.z2.fidonet.org ifmail:f297.n5020.z2.fidonet.org ifmail:f688.n5020.z2.fidonet.org ifmail:f688.n5020.z2.fidonet.org

Daemon News Russia

Hy и для yдобства, /usr/local/bin/vimt: #!/bin/sh vi /etc/mailertable makemap hash /etc/mailertable.db < /etc/mailertable Если makemap не поддерживает hash, использовать dbm (ndbm) c соответсвующими исправлениями в описании mailertable (см. выше и документацию на sendmail) 5. % m4 $SENDMAIL_HOME/cf/cf/waxwork.mc > /etc/sendmail.cf Так же рекомендуется посмотреть ~ifmail/misc/sendmail/ifmail.m4-* Q4.2: Как настpоить smail ? A: Boris Tobotras: Это моя конфигуpация, ни из чего не следует, что пpавильная. В самое начало routers добавить: ifmail: driver=pathalias,transport=ifmail; file=ftnpaths,proto=lsearch В transports добавить такой: ifmail: -from,-received,max_addrs=5,max_chars=200, driver=pipe; pipe_as_sender, cmd="/usr/local/lib/ifmail/ifmail -r$host $((${strip:user})$)" Завести файл ftnpaths, куда пpописать всех пpямых линков и всю инфоpмацию о pоутинге в таком виде: # ... my direct links ... .f20.n5020.z2.fidonet.org .f0.n5020.z2.fidonet.org p8.f510.n5020.z2.fidonet.org # This is default routing: .fidonet.org Должно pаботать. Q4.3: Как настpоить exim ? A: Boris Tobotras: В секции transports:

http://www.freebsd.bip.ru/fidost.shtml (5 of 7)10.04.2004 17:24:21

f20.n5020.z2.fidonet.org!%s f0.n5020.z2.fidonet.org!%s p8.f510.n5020.z2.fidonet.org!%s f188.n5020.z2.fidonet.org!%s

Daemon News Russia

ifmail: driver = pipe user = ifmail command = "/usr/lib/ifmail/ifmail -r$host ${pipe_addresses}" #command = "/usr/lib/ifmail/ifmail -r$host ${local_part}@${domain}" В секции routers: fidonet: transport = ifmail driver = domainlist route_file = /etc/exim/ftnpaths search_type = partial-lsearch* ftnpaths имеет вид: # My direct links (points included) *.f20.n5020.z2.fidonet.org: *.f2025.n5020.z2.fidonet.org: *.f0.n5020.z2.fidonet.org: *.f79.n5020.z2.fidonet.org: *.p8.f510.n5020.z2.fidonet.org: *.p666.f510.n5020.z2.fidonet.org: *.f510.n5020.z2.fidonet.org: # This is default routing: *.fidonet.org:

f20.n5020.z2.fidonet.org f2025.n5020.z2.fidonet.org f0.n5020.z2.fidonet.org f79.n5020.z2.fidonet.org p8.f510.n5020.z2.fidonet.org p666.f510.n5020.z2.fidonet.org f510.n5020.z2.fidonet.org f400.n5020.z2.fidonet.org

Q5: Какие есть популяpные читалки? A: для netmail: mail, elm, exmh & mh, ml, mutt. для news (терминал): tin, pine, rn, nn, slrn. xrn, xvnews, nn-tk, knews, XEmacs (монстp :), Netscape. (под X'ы): Q6: Где можно взять AreaFix ? A: ftp://ftp.lexa.ru/pub/domestic/lexa/ areafix*.tar.gz Один из автоpов Alex Tutubalin (2:5020/96). Q7: Где можно взять FileFix ? A: Есть два filefix'a (первый написан на perl, второй на C): 1. FileFix by Serg Oskin (2:5020/20.10). ftp://ftp.relcom.ru/pub/unix/fido/ filefix*.tar.gz

http://www.freebsd.bip.ru/fidost.shtml (6 of 7)10.04.2004 17:24:21

Daemon News Russia

2. gtic (GNU tic processor) by Yuri Kuzmenko (2:463/169). ftp://ftp.cracksoft.kiev.ua/pub/linux/gtic/ gtic*.tar.gz (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/fidost.shtml (7 of 7)10.04.2004 17:24:21

Daemon News Russia

новости

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь

FreeBSD и безопасность Введение FreeBSD - достаточно безопасная операционная система. Поскольку исходные тексты распространяются бесплатно, операционная система постоянно проходит проверку. Но систему можно настроить так, что она будет еще более безопасной ("параноидально" безопасной). Данный документ написан для того, чтобы рассказать о некоторых шагах, которые помогут Вам увеличить общую безопасность вашей машины. Кто должен читать этот документ? Каждый, кто хочет узнать больше о мерах, как сделать систему более безопасной.

Организация сети inetd (Inet Демон) Организация сети играет очень важную роль в общей системной безопасности. FreeBSD базируется на 4.4BSD, в которой встроена поддержка сети и действительно имеет один из наиболее мощных и быстрых TCP/IP стеков. Стек обеспечивает поддержку многих протоколов таких как telnet, ftp, talk, rsh, и т.п.. Основной файл конфигурации находится в /etc и называется inetd.conf. Я буду использовать редактор vi в этих примерах. Когда Вы откроете файл в редакторе, Вы увидите простой текст ASCII, который сообщает inetd как запускать тот или иной сервис, от имени какого пользователя запускается данный сервис и т. п. (смотрите man 5 inetd.conf). Поскольку этот файл - основной файл, который запускает все сетевые сервисы, очень важно правильно его сконфигурировать. Чтобы выключить сервис, Вы должны установить "#" в начале строки. Вообще, размещение "#" в начале строки в любом из конфигурационных файлов UNIXсистем, исключает эту строку. Основной практический метод: выключить сервисы, с которыми Вы незнакомы. В идеале, в inetd. conf может и не быть ни одной записи. Небольшой пример: Вы делаете web-сервер, т.е. Вам достаточно выполнять на этой машине 2 сервиса: ssh и httpd, и НИЧЕГО БОЛЕЕ. Информация о ssh следует ниже. Если Вы решите не использовать демонов в файле inetd.conf, то, Вы можете просто выключить http://www.freebsd.bip.ru/fbsdandsec.shtml (1 of 12)10.04.2004 17:24:24

Daemon News Russia

inetd. Для того, чтобы cделать это, отредактируйте /etc/rc.conf файл и измените: inetd_enable="YES" на inetd_enable="NO" В этом случае никто несможет использовать telnet, rlogin или ftp для доступа к вашему компьютеру. Если Вы хотите использовать inetd, рассмотрите возможность использования tcp wrappers. Более подробную информацию Вы можете найти на ftp://ftp.win.tue.nl/pub/security/index. html#software Если Вы решили оставить inetd, регистрируйте и по мере надобности увеличивайте количество соединений в одну минуту (по-умолчанию - 256, я рекомендую 1024 - установите это значение как посчитаете нужным). Небольшое дополнение: если у Вас "медленное" соединение (например, модем), это неважно, но если у вас быстрое соединение (64k), этим параметром могут воспользоваться для создания атаки DoS (Denied of Service). Злоумышленник может создать простой shell-сценарий, чтобы спровоцировать более 256 соединений с вашим компьютером, которые заставят inetd отключить этот сервис. С другой стороны, если Вы хотите поддержать одновременно 1024 соединений - Вы должны правильно сконфигурировать inetd, в противном случае кто-нибудь может также вызвать DoS (Denied of Service) и повредить ваш компьютер. Следовательно, конфигурационный файл / etc/rc.conf должен содержать следующее: inetd_enable="YES" inetd_flags="-l -R 1024" это включит регистрацию (ключ -l) и максимальное количество будет увеличено до 1024. Вам также следует изменить ваш файл /etc/syslog.conf в директории /etc, но об этом мы поговорим позже, при рассмотрении syslogd.

SSH (Secure SHell) Я упомянул выше, что в некоторых случаях Вы, возможно, не будете выполнять inetd. Например, если Вы поддерживаете Web, News или NFS, нет необходимости включать другие сервисы на машине. "Как же мне управлять моей машиной?" - спросите Вы. Ответ: SSH. Вы можете войти в систему, используя SSH (Secure Shell). Secure Shell был разработан как альтернатива rsh, rlogin и других Berkeley r* команд, но SSH можно использовать и вместо таких приложений как telnet и ftp. У SSH много характеристик, но его по большей части используют для шифрования соединения, чтобы предохранить явные http://www.freebsd.bip.ru/fbsdandsec.shtml (2 of 12)10.04.2004 17:24:24

Daemon News Russia

текстовые пароли и остальную часть данных, путешествующие в "чистом виде". Если Вы используете telnet, ваше соединение может было подсмотрено. (Если Вы думаете, что S/Key является решением, то должен Вас огорчить: в этой реализации все еще существуют проблемы вставки данных и захвата соединения.) Я надеюсь, что теперь Вы созрели, для того, чтобы выключить inetd полностью и установить SSH. Если Вы думаете, что не сможете жить без услуг предусмотренных inetd, тогда, по крайней мере, включите регистрацию (логирование) и увеличте до максимума количество соединений в минуту. Загрузить SSH можно с ftp://ftp.funet.fi/pub/unix/security/login/ssh или (что проще):

# cd /usr/порты/security/ssh # make install Если у Вас есть не-Unix клиенты, то для Windows SSH можно получить здесь: http://fox.doc.ic.ac.uk/~ci2/ssh/ http://www.zip.com.au/~roca/ttssh.html SecureCRT от http://www.vandyke.com

Inetd (часть II) telnetd Итак, Вы все еще хотите использовать inetd. Давайте посмотрим на опции в inetd.conf, которые помогут сделать услуги более безопасными. Нападающий сначала соберет информацию о сети или системе, которую он собирается атаковать. Первое, что Вы можете сделать, чтобы предохранить себя от взлома, добавить ключ "-h" для telnet демона: telnet stream tcp nowait root /usr/libexec/telnetd telnetd -h Что написано в манах ??? #man telnetd ...... -h Не выводить специфической информации о машине прежде, чем вход в систему будет завершен. ...... Пока есть много других путей для того, чтобы собрать системную информацию. Если Вы не хотите запускать telnet демон совсем, просто добавьте "#" в начале строки: http://www.freebsd.bip.ru/fbsdandsec.shtml (3 of 12)10.04.2004 17:24:24

Daemon News Russia

#telnet stream tcp nowait root /usr/libexec/telnetd telnetd Дополнительно можно добавить ключ "-U" для telnet демон, которые устанавливает соединение, только в случае если об этом хосте есть запись в DNS: telnet stream tcp nowait root /usr/libexec/telnetd telnetd -h -U Это немного поможет увеличить общую безопасность вашей системы. ftpd Теперь давайте посмотрим на ftpd. У FreeBSD есть демон ftp сконфигурированный таким образом, чтобы делать некоторую регистрацию (логирование). Вы увидите, что ftpd запускается с ключом "-l" из inetd.conf. Вам также следует сконфигурировать ваш syslogd (syslog демон), чтобы обеспечить поддержку для протокола сгенерированного демоном ftp. Что написано в манах? # man ftpd ..... -l Каждый сеанс ftp(1) зарегистрирован используя syslog со средством LOG_FTP. Если эта опция определена дважды, то: retrieve (get), send (put), append, delete, make directory, remove directory, а также операции переименовывания и их аргументы будут зарегистрированы !!!. Примечание: по умолчанию, сообщения LOG_FTP не отображаются syslogd(8)... ..... Разрешим ftpd протоколировать свои действия. В файл /etc/syslog.conf (также `man 5 syslog. conf`) добавьте следующую строку: ftp.* /var/log/ftpd Запустите команду # touch /var/log/ftpd т.к. syslogd не может создавать файлы. Не забывайте добавлять имя нового log-файла в другой конфигурационный файл /etc/newsyslog. http://www.freebsd.bip.ru/fbsdandsec.shtml (4 of 12)10.04.2004 17:24:24

Daemon News Russia

conf, чтобы заставить демон периодически менять файлы. Если Вы хотите увидеть более подробную информацию о вашем демоне ftp, просто добавьте еще один символ "-l" в строку ftp в /etc/inetd.conf: ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l -l Вместо стандартного UNIX-протокола ftp следует использовать команду scp (Secure Copy, которая является частью пакета SSH), но если Вы все еще хотите оставить анонимный доступ ftp, запустите ваш демон ftp с ключем "-A": ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l -A Вы можете также отредактировать /etc/ftpwelcome, чтобы предупредить о том, что ftpd допускает только анонимные соединения и, что зарегистрированиные пользователи должны использовать scp вместо ftp. Если Вы разрешите анонимный доступ по ftp, то, следует использовать ключ -S, для того, чтобы регистрировать анонимные соединения по ftp: ftp stream tcp nowait root /usr/libexec/ftpd ftpd -A -S fingerd Сервис finger поставляется сконфигурированным по умолчанию: он не допускает запросы без имени пользователя. И это правильно. Если вы хотите отказатся от выполнения услуги finger, установите комментарий (символ "#" в начале строки). Если Вы хотите выполнять сервис finger, разрешите регистрацию добавив ключ "-l": finger stream tcp nowait nobody /usr/libexec/fingerd fingerd -s -l Протоколы от fingerd по умолчанию поступают в /var/log/messages. Если Вы хотите иметь протокол демона finger в другом файле, добавьте следующую строку к вашему /etc/syslog.conf файлу: daemon.notice /var/log/fingerd Что в манах???

$ man 5 syslog.conf

Я обычно запрещаю выполнение talk и comsat, а также другие сервисы которые мне лично не нужны. Как я говорил ранее, если вы не знаете что делает тот или иной сервис, или он Вам не http://www.freebsd.bip.ru/fbsdandsec.shtml (5 of 12)10.04.2004 17:24:24

Daemon News Russia

нужен - отключайте его выполнение. Некоторые маны, в которых Вы могли найти полезную и имеющую отношение к сетевой конфигурации: inetd, ftpd, telnetd, fingerd, syslogd, comsat, talkd, rshd, rlogind, и inetd.conf. Смотрите также на ссылки ("SEE ALSO") указанные на этих страницах. ipfw (IP FireWall) IP Firewall фильтрует пакеты: ни больше, ни меньше. Тем не менее, Вы должны рассмотреть поддержку ipfw в ядре. Я обычно компилирую поддержку для ipfw в большинстве своих машинах, и в большинстве моих ядер config выглядит приблизительно так: options IPFIREWALL #finger options IPFIREWALL_VERBOSE #log options IPFIREWALL_DEFAULT_TO_ACCEPT Первая строка включает в ядро основную IP Firewall поддержку. Вторая строка конфигурирует ipfw, чтобы зарегистрировать принятые или отвергнутые пакеты. Третья строка делает точно что сказано: принять любые соединения и пакеты от всех по умолчанию. Если не будет этой строки, ifpw отвергнет все пакеты по умолчанию. Примечание. ИСКЛЮЧИТЕ ОПЦИЮ ЕСЛИ ВЫ НЕ ЗНАЕТЕ ЧТО ИЛИ НЕ ПОНИМАЕТЕ ЧТО ДЕЛАЕТЕ!!! Это неправильный метод в конфигурирования firewall'а. Все пакеты должны быть отвергнуты по умолчанию. НЕ добавляйте опцию IPFIREWALL_DEFAULT_TO_ACCEPT если Вы строите безопасную систему или firewall. Убедитесь, что сначала все пакеты отвергнуты по умолчанию, а только после используйте правила дополнения, чтобы допустить соединения/пакеты. Смотрите / etc/rc.firewall для более подробной информации. Небольшое обозрение по /etc/rc.firewall и примерные файлы конфигурации, а также схему установки firewall'а - смотрите URL внизу страницы. log_in_vain Вы можете также изменить некоторые полезные переменные ядра через команду sysctl: # sysctl -w net.inet.tcp.log_in_vain=1 # sysctl -w net.inet.udp.log_in_vain=1 Это обеспечит Ваc регистрацией предпринимаемых соединений, которые сервер не умееет выполнять. Например, если Вы не имеете сервер DNS на вашем компьютере и кто-то пытается http://www.freebsd.bip.ru/fbsdandsec.shtml (6 of 12)10.04.2004 17:24:24

Daemon News Russia

использовать ваш компьютер как DNS, Вы увидите нижеследующее сообщение: Connection attempt UDP yourIP:53 from otherIP:X (где X - некоторый порт >1023) Это сообщение можно увидеть с помощью команды # dmesg dmesg показывает системный буфер сообщений ядра. Но в буфере содержится небольшое количество сообщений. Эти же сообщения регистрируются в /var/log/messages # tail -1 /var/log/messages Jun 12 19:36:03 machi /kernel: Connection attempt UDP yourIP:53 from otherIP:X Заключение Итак, Вы узнали кое-что о теории безопасности, и, соответственно, можете сделать вашу машину более безопасной чем, ранее. Теперь вы можете можете сделать некоторые манипуляции, для того, чтобы проверить, что все вышесделанное работает: $ netstat -na | grep LISTEN эта команда сообщит Вам какие порты имеют сервисы, ждущие соединение. Чем меньше - тем лучше :) Тот, кто будет выполнять сканирование портов, чтобы обнаружить какие порты у вас открыты - увидит тоже самое. Также убедитесь, что syslog действительно регистрирует сообщения: # cd /var/протокол # tail -10 fingerd ftpd messages Если Вы не видите что-либо в ваших протоколах, убедитесь, что, Вы перезапустили inetd и syslogd процессы: # kill -HUP `cat /var/run/syslog.pig` `cat /var/run/inetd.pid` Файловые системы Поскольку в UNIX все считается файлом, очень важно правильно защищать ваши файловые системы. Этот процесс начинается прежде, чем установка самой OS: Вам нужно вычислить и разбить жесткий диск на разделы. О чем стоит задуматься и что Вы должны знать? Первое. Вы можете монтировать разные файловые системы разными параметрами. (некоторые примеры ниже). http://www.freebsd.bip.ru/fbsdandsec.shtml (7 of 12)10.04.2004 17:24:24

Daemon News Russia

Второе. Возможно Вы захотите экспортировать файловые системы, тогда Вы будете иметь более прозрачное управление. Если Вы пришли из Linux-мира, обратите внимание, что пока Linux устанавливает всю ОС на один корневой раздел "/", FreeBSD по умолчанию делает установку в три файловых системы "/", "/usr" и "/var". Это облегчает использование некоторых программ (например, команда dump). Есть некоторые преимущества и в безопасности. Одна из таких вещей, которые я обычно делаю - разделение разделов на области, где пользователи имеют право писать и области, где пользователи не имеют право писать. Области, где пользователи имеют право писать, следует смонтировать с опцией "nosuid". Итак, Вы должны иметь один раздел для директорий пользователей: /home или /usr/home. Также Вы можете создать отдельный раздел для /var/tmp, а после указать ваш /tmp на этот раздел: # rm -rf /tmp # ln -s /var/tmp /tmp Например, Вы можете сделать следующее: # cat /etc/fstab # Device Mountpoint FStype Options Dump Pass # /dev/sd0s1b none

swap sw 0 0

/dev/sd0s1a / ufs rw 1 1 /dev/sd0s1g /usr ufs rw 2 2 /dev/sd0s1h /usr/home ufs rw,nosuid 2 2 /dev/sd0s1f /var ufs rw 2 2 /dev/sd0s1e /var/tmp ufs rw,nosuid 2 2 proc /proc procfs rw 0 0 Вам следует убедиться, что все директории где пользователи могут писать, или установлены в "nosuid" или с помощью chmod в такое положение, что пользователи ничего не смогут написать. По умолчанию во FreeBSD это можно сделать с /var/spool/uucppublic или Вы можете установить вашу файловую систему "/var" в положение "-nosuid". # chmod o-w /var/spool/uucppublic Если Вы хотите найти все ваши директории исполнительного листа, выпустите:

http://www.freebsd.bip.ru/fbsdandsec.shtml (8 of 12)10.04.2004 17:24:24

Daemon News Russia

# find / -perm -0777 -type d -ls Как обнаружить какие файлы устанавливаются в вашей системе как suid или guid? Поищем с помощью find(1): # find / -perm -2000 -ls # find / -perm -4000 -ls Вы можете не использовать ключ "-ls" для более компактного вывода. Один из самых простых способов - сделать "chmod 000" на тех бинарных файлах, которые никогда не будете использовать. Обычно это касается uustat, uucico (если Вы никогда не будете пользоваться uucp). Это касается и ppp, и pppd в том случае, если Вы не собираетесь использовать на этой машине PPP. Если Вы не собираетесь печатать с этой машины или на эту машину, Вы можете установить "chmod 000" на lpr, lprq, lprm. Здесь Вы можете спросить: что может остановить хакера от простого демонтирования и последуюшего монтирования без флага "-nosuid"? Да, ничто, пока Вы не измените securelevel. Securelevel Ядро BSD имеет такое понятие, как securelevel. Пока некоторые спорят о том, правильно это или нет, следует применять это или нет, попробуем разобраться в чем тут дело. Securelevel - это уровень защиты, с которым выполняется ядро. Разные уровни подразумевают под собой разные методы проверки защиты системы. Очень туманно...

# man 8 init

Ядро работает с четырьмя другими уровнями безопасности. Любой процесс суперпользователя может поднять уровень безопасности, но только init может уменьшить его. Уровни безопасности:

-1 Всегда небезопасный режим. Запускайте систему на уровне 0.

0 Небезопасный режим. Флаги неизменения и добавления могут быть выключены. Со всеми устройствами можно производить операции записи и чтения в подлежащим их разрешениям.

1 Безопасный режим. Система неизменная и системное добавление-только флаги не может быть выключено; диски для монтирования файловых систем, устройства /dev/mem, http://www.freebsd.bip.ru/fbsdandsec.shtml (9 of 12)10.04.2004 17:24:24

Daemon News Russia

и /dev/kmem не могут быть открыты для записи.

2 Очень безопасный режим. Тоже, что и безопасный режим. Дополнение: диски не могут открываться для записи (исключая команду mount(2)) внезависимости от от того смонтированы они или нет. Этот уровень предотвращает подделку файловых систем демонтируя их, но также томозить прогон newfs(8) пока система многопользовательская.

Если уровень безопасности первоначально -1, то init оставит это неизменным. В противном случае, init размещает, чтобы выполнять систему на уровне 0 в однопользовательском режиме и уровне 1 для многопользовательского режима. Если Вам нужен уровень 2 - то его можно устанавить в однопользовательском режиме, например, в сценарии запуска /etc/rc, используя sysctl(8). Например, если ваша система - Web-сервер, Вы можете благополучно установить ваш securelevel равный 2. Но, если Вы запускаете X-сервер, установка securelevel на 1 или выше могут вызвать проблемы, поскольку X-серверу требуется открывать /dev/mem и /dev/kmem для записи, а securelevel 1 запрещает выполнять эти операции. Правда можно сделать и так: установить ваш securelevel после того, как Вы запустили X-сервер, но если Вы запустили Xсервер, у вас уже есть другие серьезные вопросы по безопасности, нежели беспокойство о securelevel. Узнаем об установленном securelevel: # sysctl kern.securelevel, чтобы поднять ваш securelevel: # sysctl -w kern.securelevel=X где X - 0, 1 или 2. У Вас могут возникать проблемы, если Вы модернизируете вашу систему с помощью "make world" или если Вы пересобираете ядро, при работе с securelevel 1 или выше. Дело в том, что по умолчанию "make install" установит ваше ядро с системным неизменным флагом: # ls -lo /kernel -r-xr-xr-x 1 root wheel schg 1061679 Июня 30 01:27 /kernel http://www.freebsd.bip.ru/fbsdandsec.shtml (10 of 12)10.04.2004 17:24:24

Daemon News Russia

Это "schg" предохраняет Ваше ядро: # id uid=0(root) gid=0(wheel) groups=0(wheel), 2(kmem) # sysctl kern.securelevel kern.securelevel: 2 # rm -rf /kernel rm: /kernel: Operation not permitted # mv /kernel /tmp/ mv: rename /kernel в /tmp/kernel: Operation not permitted Если Вы работаете в securelevel 1 или 2, этот флаг не может быть выключен: # chflags noschg /kernel chflags: /kernel: Operation not permitted Должен также отметить, что файл /boot.config может использоваться, чтобы изменить ядро, используемое при загрузке. Для того, чтобы это было невозможно сделать, следует следует сделать следующее: # touch /boot.config # chflags schg /boot.config По умолчанию Вы будете также иметь некоторые двоичные включенные с schg флагом установленным в вашей системе: # ls -lo /sbin | grep schg -r-x------ 1 bin bin schg 204800 Июля 19 20:38 init # ls -lo /bin | grep schg -r-sr-xr-x 1 root bin schg 192512 Июля 19 20:36 rcp Поскольку мы поговорили о системных неизменных флагах, можно рассматреть случай выполнения chflags schg на поддеревьях /sbin и /bin. Это сделает более трудным доступ к "черным ходам" в вашей системе (особенно при использовании securelevel). # chflags schg /bin/*

http://www.freebsd.bip.ru/fbsdandsec.shtml (11 of 12)10.04.2004 17:24:24

Daemon News Russia

# chflags schg /sbin/* Поскольку /sbin может быть перемещен и после этого создан новый /sbin, следует провести туже самую операцию над каталогами: # chflags schg /bin; chflags schg /sbin Помните! Если вы сделали достаточно много изменений на файловых флагах - это обязательно, в свою очередь, повлечет за собой проблемы при "make world". В этом случае можно предложить сделать "make world" в однопользовательском режиме. Дополнительную информацию о "make world" можно прочитать здесь: http://www.nothing-going-on.demon.co.uk/FreeBSD/make-world/make-world.html Маны, связанные с вышеуказанными темами: init(8), chflags(1), sysctl(8)

(c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/fbsdandsec.shtml (12 of 12)10.04.2004 17:24:24

Daemon News Russia

новости

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь

ProFTPD в FreeBSD В данной статье речь пойдет о настройке популярного FTP-демона ProFTPD под FreeBSD. Сейчас речь пойдет о конфигурировании ProFTPD /www.proftpd.org/ под крупный сервер, обслуживающего несколько сотен виртуальных FTP-хостов. Перед нами стоят четыре задачи : ● ●

● ●

Сделать безопасный доступ на FTP сервер администраторам Сделать безопасный доступ на FTP сервер для пользователей держащих домашние странички на сервере www.matrix.ru. Сделать виртуальный FTP сервер для клиентов www.client.com Сделать безопасный анонимный FTP cервер www.guest.com.

Выбор операционной по мнению автора лежит на FreeBSD в силу ее надежности и корректной реализации chroot-ed. Итак приступим. Если Вы счастливый обладатель какого нибудь доступа в интернет то заходим в /usr/ports/ftp/ProFTPD набираем make , идем пить кофе, выпив кофе подходим к клавиатуре набираем make install и через 10 секунд ftp сервер готов. Сравните как просто ;). В портах FreeBSD находятся ссылки на сервер разработчиков и на свежие патчи к ProFTPD что намного предпочтительнее именно так ставить FTP демон чем через /stand/sysinstall - но если у вас нет и-нета то тогда именно так и придется поступать. Теперь займемся конфигурированием. По умолчанию конфигурационный файл находится в /usr/ local/etc/proftpd.conf а скрипт запуска в standalone режиме /usr/local/etc/rc.d/proftpd.sh. По поводу запуска ProFTPD есть два нюанса - можно запустить его в standalone режиме (как запускают обычную программу) а можно и через демон inetd. При запуске proftpd через inetd вы получаете экономию памяти, при запуске как standalone вы получаете большую гибкость но в любом случае не запускайте его под root-om. Первым делом создайте группу и пользователя ftp, под этим аккаунтом Вы будете запускать ProFTPD. Этот аккаунт не должен иметь shell-a и home directores. Предположим, что файлы вашего www сервера уже уже находятся на диске в отдельном разделе /clients/sites и /clients/ pages. Первый каталог нужен для виртуальных серверов а второй для хранения виртуальных страничек клиентов. Начинаем заполнять файл /usr/local/etc/proftpd.conf. Сразу оговоримся что реальный сервер мы не выставляем на всеобщее обозрение как ftp.server.com (ограничивая доступ только локальным администраторам), сервер нашего сайта имеет имя ftp.company.com (или www.company.com) , а виртуальный сервер нашего клиента ftp.client.com (или www.client. com). Заносим данные о нашем боевом сервере в /usr/local/etc/proftpd.conf: # Имя хоста на котором работает данный сервер, его # администратор и тип запуска ServerName ftp.server.ru ServerAdmin [email protected] # Выключаем строчку, информирующую о типе FTP сервера ServerIdent Off ServerType inetd # Порт сервера Port 21 # Ограничиваем время работы на ftp сессии и # период бездействия TimeoutIdle 600 TimeoutNoTransfer 900 # Устанавливаем маску для вновь создаваемых # файлов и каталогов Umask 022 MaxClients 50 MaxLoginAttempts 30 # Пользователь под которым работает FTP-демон User ftp Group ftp # Лог передаваемых файлов и # дополнительный для параноиков ;) TransferLog /var/log/ftp/server.log ExtendedLog /var/log/ftp/ server.log # Нижеописанные директивы нужны # на случай прорыва chroot. # Запишем их для всего сервера в директиве Global # Если администраторам необходимо работать с этими http://www.freebsd.bip.ru/proftpd.shtml (1 of 2)10.04.2004 17:24:25

Daemon News Russia

каталогами, то # Достаточно просто указать вместо "DenyAll" - "DenyUser !admin" DenyAll # Ограничиваем доступ к /var DenyAll # Ограничиваем доступ к /usr DenyAll # Домашний каталог по умолчанию берется от home # пользователя из /etc/passwd, но здесь мы ограничиваем # доступ только администраторам # на уровень выше, чем обычным пользователям # и запрещаем его всем кроме # нижеуказанных логинов администраторов DefaultRoot /clients/~ DenyUser !admin1, admin2 # Ограничиваем доступ к нашему серверу только по IP # хостов администраторов Order Allow,Deny Deny from all Allow from 192.168.1.1,192.168.1.2 Как Вы видите, синтактис конфигурационного файла очень подож на директивы, используемые в WEB сервере Apache. # На этом конфигурирование базовго хоста ftp.server.com # закончено. # Теперь начинаем конфигурирование нашего виртуального # ftp сервера ftp.client.com (дающий доступ к файлам на # www.company.com) . Этот сервер служит основным для # задания путей в домашних страничках пользователей, # например, предполагая что файлы и их расположение # ftp. company.com полностью совпадает с www.company.com # что дает указывать например в броузере http://www.company.com/~petya # и попадать на homepage пользователя petya. # Включаем информационную строку о типе сервер, # здесь может быть что # угодно вплоть до ftp Microsoft FTP Server 4.0 ;) ServerIdent On "The FTP Server our Company" ServerAdmin [email protected] ServerName www.company.com MaxClients 50 MaxLoginAttempts 10 TimeoutIdle 600 TimeoutNoTransfer 900 TransferLog /var/log/ftp/company.log ExtendedLog /var/log/ftp/ company_extended.log DefaultRoot ~ User ftp Group ftp # Разрешаем доступ к каталогам, # где хранятся homepage пользователей AllowAll Теперь конфигурируем виртуальные сервера наших клиентов. Предполагам что владелец виртуального сервера имеет login name - "client". ServerIdent On "The Client Virtual Site" ServerAdmin [email protected] ServerName "FTP Server" MaxClients 5 MaxLoginAttempts 3 DefaultRoot /clients/sites/www.client.com/ TransferLog /var/ log/ftp/www.client.com.log ExtendedLog /var/log/ftp/www.client.com_all.log TimeoutLogin 200 TimeoutIdle 600 TimeoutNoTransfer 900 User client Group client # Разрешаем доступ к каталогу, где находятся html # сервера и ограничивая доступ всем кроме # учетной владельца данного сайта. DenyAll ! client Теперь приступим к созданию конфигурации анонимного сервера. Предполагаем что он будет размещать файлы в /clients/public в подкаталогах "uploads" и "pub" : ServerIdent On "The Anonymous Virtual Site" ServerAdmin [email protected] ServerName "FTP Server" # Здесь число клиентов можно и побольше MaxClients 20 MaxLoginAttempts 3 TransferLog /var/log/ ftp/www.client.com.log ExtendedLog /var/log/ftp/www.client.com_all.log TimeoutLogin 200 TimeoutIdle 600 TimeoutNoTransfer 900 User ftp Group ftp DefaultRoot /clients/public # Записываем файлы сообщений которые появляются при входе в систему DisplayLogin welcome.msg DisplayFirstChdir . message # Заполняем директивы для uploads каталога # Разрешаем всем доступ Allow ALL # Запрещаем запись Deny All IgnoreHidden on DenyAll IgnoreHidden on Allow All IgnoreHidden on Deny All IgnoreHidden on AllowALL IgnoreHidden on Вот и готов файл конфигурации FTP сервера. После внесения изменений в конфигурационный файл не забывайте давал команду kill -HUP pid_proftpd или /usr/local/etc/rc.d/proftpd.sh stop , proftpd.start. Если у Вас включён ipfw, то в его правилах вы должны указать следующее : ipfw add pass tcp from any to any 20 ipfw add pass tcp from any 21 to any ipfw add pass tcp from any to any 21 ipfw add pass tcp from any 21 to any При этом мы предполагаем что мы запретили прохождение всех пакетов во всем протоколам, разрешив только явно указанные нами, что в принципе является хорошим тоном. Автор: Michael Vlasov (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/proftpd.shtml (2 of 2)10.04.2004 17:24:25

Daemon News Russia

новости

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь

UUCP - Unix to Unix Copy Система пересылки файлов по телефону. Если uucp правильно сконфигурировано, то его использование выглядит примерно так: uucp -r moj_fajl 'pulsar!fajl_tam' перешлет moj_fajl на удаленную машину pulsar. Хотя, скорее всего не сделает, из-за ограничений на права доступа. А, впрочем, такая команда скорее всего сработает: uucp -r moj_fajl 'pulsar!~' через некоторое время этот файл вы сможете обнаружить на машине pulsar в каталоге /usr/spool/uucppublic в этот каталог разрешено копирование с удаленных машин, для него используется специальное обозначение: "~" Пусть вас не удивляет, что в команде uucp использовались одинарные кавычки. Они нужны, чтобы заэкранировать "!" и "~" от вашего командного интерпретатора ksh или bash. Ключ -r в команде uucp нужен, чтобы НЕ ЗАСТАВЛЯТЬ нашу машину немедленно начинать звонить на pulsar. Она сама позвонит, в предусмотренное для этого время.

http://www.freebsd.bip.ru/uucp.shtml (1 of 14)10.04.2004 17:24:27

Daemon News Russia

uucp поддерживается на двух уровнях: 1. Пользовательский. Это команды uucp - постановка файла в очередь на удаленную пересылку, и uux - постановка в очередь на пересылку удаленной команды. 2. Системный. Периодически, автоматически запускается демон uucico - (UUCP Copy in Copy out). Он созванивается с удаленными машинами по телефону. На удаленной машине также запускается "встречный" демон uucico. Наш демон "проталкивает" на удаленную машину все файлы, которые к этому времени накопились в очереди на отправку туда. После этого он "принимает" файлы, которые приготовила для нас удаленная машина (их к нам проталкивает "встречный" демон uucico, а наш принимает). После этого сеанс uucico заканчивается. А пользователи обнаруживают, что у них возникли новые файлы. Предполагается, что системные администраторы на нашей и на удаленной машине не забыли правильно описать и проконфигурировать систему UUCP. Конфигурация нашей машины как UUCP клиента. После этого наша машина сможет звонить на удаленные машины и посылать/забирать оттуда файлы. Для этого мы должны задать: 1. Наше собственное UUCP имя. 2. Имя(имена) удаленной(ых) UUCP системы. 3. Телефонный номер(а), по которому нужно туда звонить.

http://www.freebsd.bip.ru/uucp.shtml (2 of 14)10.04.2004 17:24:27

Daemon News Russia

4. Login и пароль, которые выделены там для нашего uucp-account'а. 5. Порт, к которому подключен наш модем. 6. Наборщик - описание "AT" команд для управления нашим модемом. Эти данные задаются в нескольких конфигурационных файлах, которые должны лежать в каталоге /etc/uucp (или /usr/lib/uucp , или /usr/lib/uucp/taylor_config ) (или в каком нибудь другом, см. man uucp для более точной информации). Это файлы: Config # задает имя нашей машины (и многое другое) ; Systems # описывает удаленные uucp-системы: имя, но# мер телефона, uucp-logname, uucp-passwd ; Devices # порты, к которым подключены модемы. Dialers # описывает модемы-наборщики (систему AT-ко# манд). (А в Linux они называются: config, sys, port, dial) Итак, представим классический случай. У вас один Hayes-совместимый модем V32/V42bis на 14400 baud (GVC, ZyXEL, USRobotics...), подключенный к последовательному порту /dev/modem (если у вас порт называется /dev/contty03, вам никто не мешает сделать символический линк ln -s /dev/contty03 /dev/modem не так ли ?). Имя вашего узла fedf-uru. ВНИМАНИЕ. На большинстве Unix-ов выделены раздельные специальные файлы для одного и того-же порта: терминальная линия (для подключения терминала или модема, НА который будут звонить -

http://www.freebsd.bip.ru/uucp.shtml (3 of 14)10.04.2004 17:24:27

Daemon News Russia

используется для getty или ttymon), и линия с модемным управлением, на выход - например, чтоб звонить НАРУЖУ модемом. Эти специальные файлы и называются по разному, например: SunOS: /dev/ttyy01 IN, /dev/ttyz01 OUT Linux: /dev/ttyS1 IN, /dev/cua1 OUT ISC: /dev/ttyFD01 IN, /dev/ttyFM01 OUT SVR4/88: /dev/contty00 IN, /dev/??????? OUT На самом деле все не совсем так. Цитирую Linux-Serial-HOWTO: > There has been some discussion on the merits of /dev/mouse > and /dev/modem. I strongly discourage the use of these links. > In particular, if you are planning on using your modem for > dialin you will run into problems because the lock files will > not work correctly if you use /dev/modem. Also, Taylor UUCP does not support symlinks either. Однако uugetty позволяет корректно отрабатывать эту ситуацию. См. параметр ALTLOCK в /etc/defaults/getty файле. Вам надо подключиться к двум uucp-узлам: 1: Узел Релком, имя узла kiae, телефоны: 9469984, 9469994. Вы зарегистрированы там под именем/паролем uufedurp/ABCd8 2: Ваше московское отделение, имя узла fedfond, телефон 095125-7623. Вы зарегистрированы там под именем/паролем uufedurp/KLmn10 В каталоге /etc/uucp редактируем файлы Systems, Devices, Dialers

http://www.freebsd.bip.ru/uucp.shtml (4 of 14)10.04.2004 17:24:27

Daemon News Russia

Systems: kiae Any modem1 19200 946-9984 "" \n\r\d\r\d\r ogin:-BREAK-ogin: uufedurp ssword: ABCd8 fedfond Any modem1 19200 8w095-125-7623 "" \n\r ogin:-BREAK-ogin: uufedurp ssword: KLmn10 Devices: modem1 contty03 - 19200 gvc1440 Dialers: gvc1440 =,-, "" \M\dATZ\r\c OK\r \EATDP\T\r\c CONNECT \m\c А дальше идет описание Taylor-uucp. Проблема в том, что в стандартной поставке SVR4/88 _нет_ Taylor-uucp, а есть только т.н. HoneyDanBer-uucp, он же BNU (Basic Networking Utilities). Taylor новее и гибче, к тому же поддерживает два формата конфигурационных файлов - традиционный (Config, Systems, Devices, Dialers, ...) и свой (config, sys, port, dial, ...). Есть конвертер туда-обратно. В Linuxе Taylor-uucp скомпилирован так, чтобы сначала искать Taylor-конфигурацию в /usr/lib/uucp/taylor_config/, если там ничего нет - искать HDB-конфигурацию в /usr/lib/uucp/hdb_config/. IMHO главный изъян HDB - невозможность указывать альтернативные номера телефонов. Если вы используете не устаревший BNU-uucp, а Taylor-uucp 1.05: В каталоге /usr/lib/uucp/taylor_config создаем файлы config,

http://www.freebsd.bip.ru/uucp.shtml (5 of 14)10.04.2004 17:24:27

Daemon News Russia

sys, port, dial следующего содержания: config: hostname fedf-uru # Наше собственное имя sys: system kiae # Узел Релком time Any port modem1 # Имя описания порта в файле port speed 38400 chat "" \r\d ogin:-BREAK-ogin: uufedurp ssword: ABCd8 phone 946-9984 alternate # Второй телефонный номер. phone 946-9994 system fedfond # Московское отделение time Any port modem1 # Имя описания порта в файле port speed 38400 chat "" \n\r ogin:-BREAK-ogin: uufedurp ssword: KLmn10 phone 8=095-125-7623 port: port modem1 # Обозначение порта из файла sys type modem device /dev/modem speed 38400

http://www.freebsd.bip.ru/uucp.shtml (6 of 14)10.04.2004 17:24:27

Daemon News Russia

dialer gvc1440 # Имя наборщика-модема в файле dial dial: dialer gvc1440 # Обозначение наборщика из файла port # Строка инициализации модема. # Вместо \T будет подставлен телефонный номер chat "" ATZ OK ATH0E0Q0 OK ATDP\T CONNECT # ATZ - загрузить profile 0 # ATH0 - повесить трубку # ATE0 - no echo # ATQ0 - выводить код возврата chat-fail BUSY # Воспринимать как ошибку набора chat-fail ERROR chat-fail NO\sCARRIER chat-fail NO\sDIALTONE ---------------------------------------------------------------------------Все. Клиентская часть UUCP сконфигурирована. Теперь, чтобы "протолкнуть" посланные файлы, достаточно периодически выполнять команды: uucico -s kiae uucico -s fedfond А еще лучше, добавить эти команды в crontab, чтобы они выполнялись автоматически, по несколько раз в сутки. Конфигурирование UUCP с использованием sysadm.

http://www.freebsd.bip.ru/uucp.shtml (7 of 14)10.04.2004 17:24:27

Daemon News Russia

Все вышеперечисленные настройки можно сделать, используя утилиту системного администратора sysadm. Надо войти в меню network_services / basic_network Конфигурирование серверной части UUCP. Итак, мы уже можем звонить на чужие машины, и пересылать на них файлы. Теперь нужно сделать, чтобы чужие машины (клиенты) могли звонить нам. Для этого нужно: 1: Иметь описание звонящей нам uucp-системы в файле Systems для клиента такое же, как и для сервера. 2: Проверить права доступа для клиента в файле Permitions 2: Завести для него специальный uucp-login 3: Убедиться, что модем стоит в "Auto-answer" режиме, и на порт /dev/modem запущена программа getty (или ttymon), позволяющая логиниться по телефону на порт /dev/modem 1. Описание добавляется в файл Systems, (номер телефона и название порта не обязательны), если мы сами не собираемся туда звонить, но я бы посоветовал их вписать, для единообразия. 2. В файле /etc/passwd завести строчку вида: uupetrov:x:1002:14:UU Petrov:/var/spool/uucp:/usr/lib/uucp/uucico выполнить команды: pwconv passwd uupetrov

http://www.freebsd.bip.ru/uucp.shtml (8 of 14)10.04.2004 17:24:27

Daemon News Russia

3. Любой терминальной программой "войти" в модемный порт и выполнить команды atz0 # Загрузить пользовательский profile 0 ats0=1 # Регистр0=1 - снимать трубку после 1-го звонка at&w0 # Сохранить текущий setup в profile 0 at&y0 # Чтобы при включении питания загружался профайл 0 # at&f # загрузить заводские установки, если вы запутались # с профайлами, можно сделать модему "reset" Ввиду отсутствия коммуникационных программ в SVR4 (за исключением сумасшедшего "cu"), используйте "echo". echo atz0 > /dev/modem echo ats0=0 > /dev/modem echo at&w0 > /dev/modem # и так далее А еще лучше gold, там есть режим прямой связи с любым портом. 4. В файле /etc/inittab иметь строчку вида: c3:234:respawn:/usr/lib/saf/ttymon -g -d /dev/modem -l contty Что где лежит в системе UUCP. /usr/bin/uucp - переслать файлы с/на удаленную uucp-систему /usr/bin/uux - выполнить команду на удаленной uucp-системе /usr/bin/uustat - статистика по выполненным пересылкам /usr/lib/uucp/uu* - системные утилиты UUCP /etc/uucp - каталог конфигурационных файлов UUCP /usr/lib/uucp/taylor_config - конфигурация UUCP в Linux

http://www.freebsd.bip.ru/uucp.shtml (9 of 14)10.04.2004 17:24:27

Daemon News Russia

/usr/lib/uucp/ - конфигурация UUCP в других системах /var/spool/uucppublic - каталог в который можно пересылать файлы с удаленных машин /usr/spool/mqueue - очереди отправляемой электронной почты /usr/ucblib/mqueue - или здесь эта очередь ? /var/spool/uucp/"машина" - очередь файлов на отправку на "машину" /var/spool/uucp/.Log - статистика о работе uucp Осталось настроить нашу электронную почту. Если у вас самый простейший случай: вся ваша почта проходит через один "знающий" host, с которым вы соединены по uucp, то надо в файле /etc/sendmail.cf иметь такую строку: ... # "Smart" relay host (may be null) DSuucp-dom:kiae ... В этом случае вся ваша внешняя почта (т.е. отправляемая за пределы вашей локальной сети) будет переправляться по uucp на uucp-узел "kiae" и дальнейшей ее доставкой будет озабочен именно kiae. Предполагается, что он успешно справится с этой задачей. А еще чтобы было описание uucp-dom (ниже в том же файле). Кстати, чтобы всех окончательно запутать, sendmail.cf лежит вовсе

http://www.freebsd.bip.ru/uucp.shtml (10 of 14)10.04.2004 17:24:27

Daemon News Russia

не в /etc/, а в /usr/ucblib/. Если у вас какой-либо другой случай - то это - тяжелый случай. Дерзайте, успехов вам! # И надо сделать, чтоб сендмаил не отрезал 8-й бит у посылаемой почты # Если sendmail8.x.x, то в sendmail.cf: # strip message body to 7 bits on input? O7False # А еще бывает, что sendmail не знает, как правильно называется # наша машина. Тогда мы пишем что-то в таком стиле: Cwsystud.ras.ru Cwserver.systud.ras.ru Cwlocalhost Проверка работоспособности и отладка конфигурации. Для начала проверим, правильно ли подсоединен модем. Запускаем программу cu - эмулятор терминала. cu -l /dev/modem # Или как там у вас этот порт называется После этого вы переключитесь на работу со своим модемным портом. Все, что вы будете набирать с клавиатуры, будет перенаправляться в порт /dev/modem , все, что "приходит" с этого порта, будет рисоваться на вашем терминале. Попробуйте модемом набрать телефонный номер atdp100 Проверьте, правильно ли сконфигурирован "порт" модема и описа-

http://www.freebsd.bip.ru/uucp.shtml (11 of 14)10.04.2004 17:24:27

Daemon News Russia

ние системы в файле Systems. cu pulsar Проверьте права доступа к файлам /dev/modem, /dev/contty*. Должно быть (???): crw-rw---- 1 root uucp ... /dev/contty0 crw-rw---- 1 root uucp ... /dev/modem Запустите uucico с максимальным уровнем выдачи отладочной информации. Запускать надо из под пользователя uucp /usr/lib/uucp/uucico -r1 -x9 -f -s pulsar /usr/lib/uucp/uucico -x all -f -s kiae А затем посмотрите на содержание файлов со статистикой uucp в каталоге /var/spool/uucp : .Admin/audit.local .Log/ .Status/ ERRLOG LOGFILE SYSLOG Например, такой командой tail -f /var/uucp/.Admin/audit.local & tail -f /var/uucp/.Log/uucico/kiae По результатам переписки. Dmitry Mayorov Compulsory Health Insurance Fund

http://www.freebsd.bip.ru/uucp.shtml (12 of 14)10.04.2004 17:24:27

Daemon News Russia

Phone: +7 (812) 112-3517 St. Petersburg, Russia > Навешал фильтров на sendmail, rmail, > а вот это непонятно. Или они научились все из кои8 в исо пере> ворачивать на лету ? Нет, конечно, потребовалось лечить. Дело сильно упростило то обстоятельство, что внутри сети везде ISO. Перекодировать поэтому мне надо только то, что идет через UUCP, то бишь наружу. Для этого пришлось: 1. Поправить sendmail.cf: # RelCom UUCP - with ISO 8859-5 to KOI-8 translation Muucp-koi, P=/usr/local/bin/_uux, F=mDFMhu, S=52/31, R=21, M=100000, ^^^^^^^^^^^^^^^^^^^ мой, см. ниже A=_uux - -r -a$f -gC $h!rmail ($u) 2. Сделать /usr/local/bin/_uux из трех строк: #!/bin/sh PATH=:/usr/bin:/usr/local/bin:/usr/ucb:/bin: /usr/local/bin/iso-koi | /usr/bin/uux $* (iso-koi - понятно какой фильтр) Это все, на самом деле, весьма грязный hack - вряд ли стоит его включать в учебник. Оно, конечно, работает, но вот надо по крайней мере еще и правильный код возврата как-то обеспечить с проверкой ошибок и прочими фенечками. Чтобы принимаемая почта из KOI превращалась в ISO, достаточно:

http://www.freebsd.bip.ru/uucp.shtml (13 of 14)10.04.2004 17:24:27

Daemon News Russia

1. Переименовать rmail в /usr/local/bin/__rmail; 2. Сделать свой rmail, тоже из трех строчек: #!/bin/sh PATH=:/usr/bin:/usr/local/bin:/usr/ucb:/bin: /usr/local/bin/koi-iso | /usr/local/bin/__rmail $* Вышеуказанную экзекуцию надо производить именно над rmail, потому что rbmail проверяет контрольные суммы. А вот rbmail в SVR4/88 совсем нет. Надо искать исходники, собирать... А RelCom (по крайней мере мой провайдер) именно его пользует. Это третья причина (после отсутствия Taylor-uucp и удобного Mail-user агентa), по которой я не стал поднимать uucp/e-mail на Motorolе.

http://www.freebsd.bip.ru/uucp.shtml (14 of 14)10.04.2004 17:24:27

(c) 2001-2002 Daemon News Russia

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Использование VINUM под FreeBSD новости

Часто возникает необходимость создания надежной дисковой системы на файловом сервере. Такую задачу приходилось часто реализовывать при отсутствии особого финансового потока и как выход пришлось делать зеркалирование двух SCSI дисков на FreeBSD 3.4 с применением vinum При наличии финансов конечно желательно покупать аппаратную реализацию RAID 5 (По отзывам моих коллег очень неплохо работает MegaRAID 1500). На данный момент FreeBSD поддерживает следующие типы дисковых массивов: CompaqSmartRAID AMI MegaRaid Mylex DAC960 Family В составе FreeBSD есть k-модуль для организации отказоустойчивых дисковых массивов RAID1 (зеркальный набор) и RAID5 (чередующий набор с проверкой четности). Естественно что для таких задач стоит покупать Wide SCSI Controller и как минимум 2 диска. Хотя и диски и контроллер поддерживали заявленную скорость transfeer-a в 60Mb но удалось выжать всего лишь 40Mb, хотя и это неплохо. VINUM, как технология заркалирования стала стабильно работающей начиная с версии FreeBSD 3.4. Что же касается samba ver. 2.0.7 то она на 10Mb карточке давала результат 1.1Mb чтения, 900Kb записи при следующей конфигурации ПК : Pentium II 350Мгц, 128Mb ОЗУ, 2xHDD IBM Wide SCSI-3 обьемом на 8Gb, 3Com590 Etherlink III PCI 10Mb, материнская плата ASYS (Intel82443LX). Вкратце организация зеркальных или чередующих разделов заключается в созданиии разделов (slice) одинакового размера на разных дисках монтирование их в каком либо каталоге основной файловой системы через заранее заданное в конфигурации имени устройства, например : /dev/vinum/имя_раздела_vinumdevice Тип файловой системы на этих разделах должен быть установлен как "vinum", монтирование их проводится обычной командой mount при включенной опции VINUM в startup scripts. Есть два способа запуска VINIM в FreeBSD : через ядро и как загружаемый модуль. По умолчанию используется второй способ. Для этого необходимо включить в /etc/defaults/rc.conf строчку : start_vinum="YES" И указать какие slice отдаются под организацию mirror-a : vinum_drives="/dev/da0s1g /dev/da0s1a

http://www.freebsd.bip.ru/vinum.shtml (1 of 4)10.04.2004 17:24:29

Daemon News Russia

Предположим что у нас есть два SCSI диска da0 и da1 обьемом 8Gb. Геометрия диска da0 будет выглядеть так : da0s1a ufs / 50Mb da0s1b swap swap 250Mb da0s1e ufs /var 100Mb da0s1f ufs /usr 600Mb da0s1f unused none 7000Mb Как вы видите мы не задаем точку монтирования для свободного пространства в 7Gb оставляя его для раздела vinum который и будет содержать данные. Затем инсталируем FreeBSD на данный диск в составе всех пакетов кроме games, ports, XFree86 и docs а из пакетов: sysutils, arhives, samba, less, network utilites. После инсталяции необходимо на втором диске содать такую же геометрию разделов как на da0 и вручную создать UFS командой newfs /dev/da1xx где xx - это названия разделов (учтите что swap вам создать не удастся, поэтому нужно загрузиться со вторым диском отдельно от первого с помошью cdrom-a и указать это диск как активным и создать swap раздел. Это необходимо для того чтобы в случае аварии первого диска контроллер нашел загрузочную запись на втором и передал ему управление . Далее вы по cron-y еженочно делаете копирование разделов /, /usr, /var с da0 на da1 с применением команды cpio. После нормальной перезагрузки с двумя дисками мы создаем разделы под vinum командой disklabel -e da0 которая р редакторе vi (установленном по умолчанию) позволяет нам дойти до последней строчки снизу и внести изменения: # /dev/rda0c: type: SCSI disk: da0s1 label: flags: --- skip --8 partitions: # size offset fstype a: 102400 0 4.2BSD # (Cyl. 0 - 6*) b: 272624 102400 swap # (Cyl. 6*- 23*) c: 17912412 0 unused # (Cyl. 0 - 1114*) e: 204800 375024 4.2BSD # (Cyl. 23*- 36*) f: 1843200 579824 4.2BSD # (Cyl. 36*- 150*) g: 15360000 2423024 vinum # (Cyl. 150*- 1106*) ^^^^^^^^^^^ где вместо слова vinum было "unused" Далее редактируем таблицу на втором диске da1 "disklabel -e da1" # /dev/rda1c: type: SCSI disk: da1s1 http://www.freebsd.bip.ru/vinum.shtml (2 of 4)10.04.2004 17:24:29

Daemon News Russia

--- skip --8 partitions: # size offset fstype a: 15360000 2422784 vinum # (Cyl. 150*- 1106*) ^^^^^^^^ c: 17912412 0 unused # (Cyl. 0 - 1114*) e: 102400 0 4.2BSD # (Cyl. 0 - 6*) f: 272384 102400 4.2BSD # (Cyl. 6*- 23*) g: 204800 374784 4.2BSD # (Cyl. 23*- 36*) h: 1843200 579584 4.2BSD # (Cyl. 36*- 150*) Теперь напишем файл конфигурации /etc/vinum.conf : # Описываем наши разделы на двух дисках которые будут зеркальными : drive d1 drive d2

device /dev/da0s1g device /dev/da1s1a

# Называем зеркальный раздел "mirror" , название произвольное - volume mirror. # Описываем тип (RAID1) и размер зеркального раздела : plex org concat sd length 7g drive d1 plex org concat sd length 7g drive d2 Точку монтирования для зеркального каталога определим как /data, сам же скрипт поместим в /usr/local/etc/rc.r/data_mount.sh : #!/bin/sh /sbin/fsck -f /dev/vinum/mirror /sbin/mount /dev/vinum/mirror /data Создание раздела vinum делается командами : /sbin/vinum create -f /etc/vinum.conf /sbin/newfs -v /dev/vinum/mirror Ошибки которые могут возникать при создании vinum раздела в 90% случаев зависят от правильности задания раземера vinum. раздела. Например я не смог создать зеркальный раздел до тех пор пока не исправил размер slice в /etc/vinum.conf с 7000Mb на 7Gb. Изменения которые були внесенны в конфигурационный файл vinum.conf должны быть ппрочитанны заново k-модулем vinum, с помошью команды vinum resetconfig Манипулирование с конфигом равносильно экспериментам со сменой типа http://www.freebsd.bip.ru/vinum.shtml (3 of 4)10.04.2004 17:24:29

Daemon News Russia

FS командой newfs - то есть прежде чем что то менять, сделайте backup ваших данных. После перезагрузки мы получим смонтированный зеркальный раздел /data. Есть еще другой путь повышения уровня надежности хранения данных с помошью организации RAID5 с помощью vinum. Для этого вам необходимо иметь три одинакового размера разделы на трех дисках и описать данную конйигурацию в /etc/vinum.conf. Предположим, мы имеем три раздела: /dev/da0s1g /dev/da1s1h /dev/da2s1f Конфигурационный файл /etc/vinum.conf должен содержать следуюшие строчки : drive d1 device /dev/da0s1g drive d2 device /dev/da1s1h drive d3 device /dev/da2s1f volume mirror ## Указываем что мы организуем чередование дисков с четностью plex org raid5 32K sd length 7g drive d1 sd length 7g drive d2 sd length 7g drive d3 Более полная информация vinum находится на сайте разработчика по адресу http://www.lemis.com/vinum.html. Надо сказать что механизм VINUM включен в коммерческий продукт под названием NetMax для FreeBSD который является средством организации файлового сервера но уже за немалые деньги. Так что Вы получаете в данном случае качество коммерческого продукта, и надо cказать что автор использует vinum уже с момента появления стабильной версии в 3.4 на многих FileServers пока без нареканий. Автор: Michael Vlasov (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/vinum.shtml (4 of 4)10.04.2004 17:24:29

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Краткое руководство по настройке uucp почты в FreeBSD новости

UUCP (Unix to Unix copy) предназначен для копирования файлов между машинами и для выполнения команд на удаленной машине. Его использование для передачи почты - только одно из возможных применений. Hастоящее руководство ориентировано на FreeBSD и Taylor UUCP, в других системах все может быть совсем по-другому :-) Представим себе, что вы являетесь узлом, который обменивается почтой с внешним миром через хост mail.provider.ru и раздает почту еще трем хостам: host1.your.domain.org, host2.your.domain.org, host3. your.domain.org. Весь обмен почтой происходит по uucp. При этом host1.your.domain.org, host2.your. domain.org, host3.your.domain.org звонят вам, а вы звоните mail.provider.ru. Будем считать, что четыре машины, с которыми вам предстоит наладить обмен почтой по uucp, имеют следующие uucp-имена: provider, host1, host2 и host3 соответственно. Вообще-то доменное имя системы (hostname) и uucp-имя этой же самой системы совершенно не обязаны совпадать. Hапример, host2.your.domain.org вполне мог бы иметь uucp-имя foo или bar. Если мы здесь и выбрали совпадающие имена, это было сделано только для удобства изложения. Пусть ваше собственное доменное имя будет yourhost.your.domain.org, а ваше uucp-имя будет yourhost. Hастройка uucp почты в Unix подразумевает следующие шаги: ● ● ●

настройка собственно uucp; настройка sendmail; разное. 1. Hастройка собственно uucp Чтобы настроить uucp, надо настроить его конфиги. Вот они: total 12 drwxrwx--- 3 uucp uucp 512 15 ноя 16:23 ./ drwxr-xr-x 10 root wheel 2048 30 дек 21:44 ../ -r--r----- 1 uucp uucp 61 23 янв 1997 call -r--r----- 1 uucp uucp 260 8 апр 1997 config -rw-r----- 1 uucp uucp 250 3 сен 20:51 dial -r--r----- 1 uucp uucp 1 25 авг 1996 dialcode -r--r----- 1 uucp uucp 14 21 апр 1997 passwd -r--r----- 1 uucp uucp 96 29 май 1997 port drwxr-xr-x 2 root uucp 512 15 ноя 12:08 samples/ -r--r----- 1 uucp uucp 160 28 май 1997 sysin -r--r----- 1 uucp uucp 366 16 ноя 16:06 sysout 1.1 call В этом файле описывается ваш логин и пароль для прозвонки на другие uucp-машины. Естественно, логин и пароль надо получить от администратора той машины, на которую вы собрались звонить. В нашем случае он будет выглядеть примерно так: ======= call

======

http://www.freebsd.bip.ru/uucpmail.shtml (1 of 8)10.04.2004 17:24:31

Daemon News Russia

# system login password provider uuyourhost Your_Secret_Password ======= call

======

1.2 config В этом файле описываются различные параметры uucp, в основном пути и имена файлов, тут почти ничего не надо менять. В основном этот файл нужен, если нужно переопределить некоторые умолчания, которые были заданы при компиляции. ======= config

======

nodename yourhost # здесь надо указать ваше собственное uucp-имя spool /var/spool/uucp pubdir /var/spool/uucppublic logfile /var/spool/uucp/Log statfile /var/spool/uucp/Stats debugfile /var/spool/uucp/Debug sysfile sysin sysout # имена файлов с описаниями систем - ваших линков portfile port dialfile dial dialcodefile dialcode callfile call passwdfile passwd # количество одновременно выполняемых процессов раскладки почты max-uuxqts 1 ======= config

======

Последний параметр подсказал мне Igor Nikolaev (2:5030/266@fidonet). Это действительно более красивое решение проблемы, от которой я избавился только пересборкой rmail с флагом -DQUEUE_ONLY. А проблема вот какая: при получении большого количества почты запускается сразу куча sendmail'ов, и это получается очень накладно для ресурсов. 1.3 dial Это файл с описаниями модемов. Беру его без изменений со своей системы, imho тут и так все понятно. Полезно также посмотреть man chat и руководство к своему собственному модему. ======= dial

======

dialer idc # произвольное имя модема, под которым он будет известен uucp dialtone w pause , #chat "" ATZ\r\d\c OK ATM0DPW\T CONNECT \p\c chat "" ATZ\r\d\c OK ATM0DT\T CONNECT \p\c chat-fail BUSY chat-fail ERROR chat-fail NO\sDIALTONE chat-fail NO\sCARRIER #complete \d\d+++\d\dATH\r\c #abort \d\d+++\d\dATH\r\c http://www.freebsd.bip.ru/uucpmail.shtml (2 of 8)10.04.2004 17:24:31

Daemon News Russia

======= dial

======

Обратите внимание, что последние две строчки закомментарены. Если модем умеет сам класть трубку по окончании соединения или по опусканию DTR, они не нужны. Если их оставить, вреда они не принесут, просто uucp будет в логах ругаться. Еще хочу заметить - описаний модемов может быть сколько угодно, естественно, под разными именами. 1.4 dialcodeСлужит для хитрого набора номера и imho вообще не нужен. У меня имеет нулевую длину. 1.5 passwd В этом файле содержатся логин и соответствующий ему пароль для тех систем, которые будут звонить вам. 'uucico -l' само умеет авторизовать позвонивших пользователей, предлагая им при этом ввести логин и пароль, и проверяет верность пароля по этому файлу. Какие логины и пароли вы дадите своим даунлинкам - дело ваше. Учтите только, что удобнее и правильнее дать им логины, которые начинаются одинаково, например, с двух букв uu. Почему это так объяснится позже. Пример: ======= passwd uuhost1 uuhost2 uuhost3

======

Top_Secret_Password Smart_Password Stupid_Password

======= passwd

======

1.6 port В этом файле содержится описание портов. Портов может быть много. Каждый порт имеет свое имя, которое и используется в дальнейшем в файлах с описаниями систем - ваших линков. Imho тут все понятно. Hабор параметров не ограничивается нижеприведенным примером, если надо сделать что-нибудь особенно хитрое - читайте описание к Taylor UUCP. ======= port

======

port port1 # имя порта type modem device /dev/cuaa1 dialer idc speed 38400 port port2 # тоже имя порта type tcp service 540 ======= port

======

1.7 sysin Это файл с описаниями систем, которые будут звонить вам. http://www.freebsd.bip.ru/uucpmail.shtml (3 of 8)10.04.2004 17:24:31

Daemon News Russia

======= sysin

======

call-login * call-password * local-send / local-receive / port port1 # это, как вы помните, у нас модемный порт chat-timeout 90 protocol g # возможно, вы захотите использовать какой-нибудь другой протокол time never # звонят только они, вы им никогда не звоните debug 1 system host1 myname yourhost # как вы представитесь системе host1, когда она позвонит called-login uuhost1 system host2 myname yourhost called-login uuhost2 system host3 myname yourhost called-login uuhost3 ======= sysin

======

Зачем нужны первые четыре строчки и строчка called-login - не спрашивайте. Hе помню, но так надо. В документации описано, кому сильно интересно - вперед. 1.8 sysout В этом файле удобно прописать те системы, на которые вы сами собираетесь звонить. В данном случае у нас только одна такая система - ваш провайдер. ======= sysout

======

call-login * call-password * local-send / local-receive / port port1 chat-timeout 90 protocol g time any # звонить в любое время. А вообще время можно задавать очень гибко. debug 1 system provider chat ogin: \L word: \P # берется из файла call phone 111111 alternate # так делается перебор номеров phone 222222 alternate http://www.freebsd.bip.ru/uucpmail.shtml (4 of 8)10.04.2004 17:24:31

Daemon News Russia

phone 333333 ======= sysout

======

Корректность настройки всех конфигов можно проверить, запустив uuchk. Осталась еще самая малость. Чтобы периодически звонить своему провайдеру за почтой, вставьте строчку в ваш / etc/crontab, типа: 0 * * * * uucp /usr/libexec/uucp/uucico -S provider Как принимать входящие звонки по uucp, описано в пункте 3.1 2. Hастройка sendmail 2.1 Hастройка sendmail.cf Hеобходимо создать новый sendmail.cf, который будет знать про uucp. Для его создания можно взять примерно вот такой файл-прототип: ====== uucp.mc ========= divert(-1) include(`../m4/cf.m4') VERSIONID(`@(#)uucp.mc 1.01') OSTYPE(bsd4.4)dnl MAILER(local)dnl MAILER(smtp)dnl MAILER(uucp)dnl FEATURE(nodns)dnl FEATURE(nocanonify)dnl FEATURE(mailertable)dnl FEATURE(uucpdomain)dnl define(`SMART_HOST', `uucp-dom:provider')dnl define(`confCOPY_ERRORS_TO', `postmaster')dnl ====== uucp.mc ========= После чего m4 uucp.mc > /etc/sendmail.cf Обратите внимание, что MAILER(smtp) убирать нельзя, даже если никакого smtp не предвидится. Он все равно нужен для того, чтобы работал мейлер uucp-dom. Это мейлер, который знает про доменную форму имен - вам же не хочется, чтобы адреса в письмах были в формате uucp (через восклицательные знаки). 2.2 Hастройка mailertable Маршрутизация uucp почты происходит согласно правилам, описанным в mailertable. Иначе и нельзя - ведь uucp ничего не знает про DNS (хотя мейлер uucp-dom и знает про имена машин в доменной форме). В простейшем случае, чтобы просто заливать почту своему провайдеру, достаточно будет mailertable в таком формате:

http://www.freebsd.bip.ru/uucpmail.shtml (5 of 8)10.04.2004 17:24:31

Daemon News Russia

======= /etc/mailertable ====== .

uucp-dom:provider

======= /etc/mailertable ====== Где provider - это uucp-имя системы провайдера (система должна быть описана в /etc/uucp/ sysout) Точка здесь выступает в роли символа подстановки и означает то же самое, что у нормальных людей означает звездочка, то есть любое количество любых символов. Если вы не являетесь оконечной системой, то есть раздаете почту кому-то еще по uucp, то ваш mailertable может выглядеть так: ======= /etc/mailertable ====== .host1.your.domain.org uucp-dom:host1 host1.your.domain.org uucp-dom:host1 .host2.your.domain.org uucp-dom:host2 host2.your.domain.org uucp-dom:host2 .host3.your.domain.org uucp-dom:host3 host3.your.domain.org uucp-dom:host3 . uucp-dom:provider ======= /etc/mailertable ====== Одиночная точка в конце означает - все остальное сваливать на провайдера, он сам разберется. Разумеется, речь в mailertable идет только об именах машин. Про пользователей он ничего не знает. То есть, записи host1.your.domain.org uucp-dom:host1 .host1.your.domain.org uucp-dom:host1 означают только то, что почта для машин host1.your.domain.org foo.host1.your.domain.org bar.host1.your.domain.org foo.bar.host1.your.domain.org и т.п. будет направляться через uucp-систему host1. Осталось только добавить, что sendmail использует mailertable в виде database map, поэтому осталось проделать следующее: makemap hash /etc/mailertable.db < mailertable 2.3 Hастройка uudomain Как уже указывалось ранее, доменное имя системы (hostname) и uucp-имя этой же самой системы совершенно не обязаны совпадать. Поэтому в файле uudomain настраивается соответствие доменного имени хоста и его uucp-имени. В этом файле должны быть описаны все системы, с которыми у вас есть прямые линки по uucp. Пользуясь нашим примером, ваш uudomain будет выглядеть примерно так: ======= /etc/uudomain ======

http://www.freebsd.bip.ru/uucpmail.shtml (6 of 8)10.04.2004 17:24:31

Daemon News Russia

host1 host2 host3 provider

host1.your.domain.org host2.your.domain.org host3.your.domain.org mail.provider.ru

======= /etc/uudomain ====== uudomain, так же как и mailertable, должен быть в виде database map, поэтому makemap hash /etc/uudomain.db < uudomain Теперь осталось только kill -1 `cat /var/run/sendmail.pid` 3. Разное 3.1 Hастройка uucp-сервера. Предполагается, что ваша машина является почтовым сервером, на который ваши клиенты (host1.your.domain.org, host2.your.domain.org, host3.your.domain.org) будут ходить за почтой. Ходить за почтой они могут по телефону или по IP. Быть сервером uucp очень просто - когда клиент позвонит модемом или зайдет на 540 порт, ему надо подсунуть uucico в качестве shell. Лучше подсовывать uucico с ключом -l, тогда оно будет само спрашивать пароль, а брать пароли будет из собственного файла с паролями (/etc/uucp/passwd). Как это сделать существует ряд способов. 3.1.1 UUCP over IP Если ваша машина будет отдавать почту по uucp over IP, то надо закомментарить в /etc/inetd. conf стандартную строчку, относящуюся к uucpd, и добавить свою: uucpd stream tcp nowait root /usr/libexec/uucp/uucico uucico -l Hе знаю, почему по умолчанию там стоит неработающая строчка, но поговаривают, что стоит она там в расчете на то, что будет использоваться не Taylor, а какая-то другая реализация UUCP. 3.1.2 mgetty Если клиенты будут звонить по телефону, проще всего поставить mgetty, которая умеет по стандартным именам пользователей запускать им в качестве shell различные программки. Hапример, вот такая строчка в /usr/local/etc/mgetty+sendfax/login.config uu* uucp @ /usr/lib/uucp/uucico -l -u @ означает, что для всех пользователей с именами, начинающимися на uu, mgetty будет запускать uucico вместо /usr/bin/login. Чем хорош такой вариант - в частности тем, что не надо прописывать uucp-клиентов в /etc/passwd. То есть uucico с ключом -l будет брать пароль из своего файла /etc/uucp/passwd 3.1.3 /etc/passwd Этот вариант я лично не пробовал, но должен работать. Каждого uucp-клиента надо будет прописать в /etc/passwd, при этом его строчка будет выглядеть примерно так: uuhost1:*:66:66::0:0:host1 uucp http://www.freebsd.bip.ru/uucpmail.shtml (7 of 8)10.04.2004 17:24:31

Daemon News Russia

system:/var/spool/uucppublic:/usr/libexec/uucp/uucico В этом случае для авторизации позвонившего будет использоваться не /etc/uucp/passwd, а стандартный механизм авторизации пользователей через /etc/passwd. Как подсказывает Sergey Zimin: "У всех пользователей uid и gid должен быть одинаковым и совпадать с uid/gid псевдопользователя "uucp", который также должен быть обязательно в системе! Это нужно и для правильной работы и для секьюрности - (забыл конкретно где, но один нерадивый админ давал всем разные uid, как стандартным пользователям и его сломали по ftp) а например в случае uucp-пользователя его uid прописан в /etc/ftpusers как тот, кому нельзя ломиться по ftp"

(c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/uucpmail.shtml (8 of 8)10.04.2004 17:24:31

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Некоторые аспекты безопасности Веб-серверов на Unix платформах новости

Предисловие Защищенность компьютера, на котором работает Веб-сервер, и данных, находящихся на этом компьютере, зависит от многих аспектов. Основными из них являются: 1. 2. 3. 4.

Корректность настройки Веб-сервера. Корректность построения дерева файловой системы. Корректность установки прав доступа к файлам Веб-сервера. Правильное написание CGI сценариев и программ.

Рассмотрим их по очереди. Корректность настройки Веб-сервера На безопасность работы Веб-сервера влияют некоторые настройки, устанавливаемые вами в файлах конфигурации. Я буду говорить в основном о сервере Apache, хотя все замечания в равной степени применимы и к другим серверам. Прежде всего вам необходимо правильно выбрать пользователя, под которым будет работать Веб-сервер. Дело в том, что в Unix для того, чтобы подсоединиться к 80 порту, по умолчанию используемому в HTTP протоколе, Веб-серверу необходимо иметь права пользователя root. Но отвечать на запросы пользователей с такими правами очень не безопасно. Поэтому Веб-сервер порождает детей с правами другого пользователя, которые и обрабатывают запросы пользователей. В файле конфигурации (http.conf) необходимо указать имя пользователя, под которым будут запускаться дочерние процессы, и группу, к которой он принадлежит. В сервере Apache за это отвечают директивы User и Group. Необходимо создать отдельного пользователя и группу, например apache и webstuff. Нельзя использовать предлагаемые по умолчанию nobody:nogroup - на некоторых системах это открывает "дыры" в защите. Ни в коем случае также нельзя запускать Веб-сервер из под пользователя webadmin, который обычно занимается всем этим хозяйством, т.к. он имеет права записи во все файлы (см. установку прав доступа к файлам). Обязательно запретите login для созданного вами пользователя. Очень важным моментом в настройке Веб-сервера является настройка файла прав доступа (access.conf). Необходимо начать с корня дерева документов сервера и при необходимости конкретизировать установки ниже по дереву для отдельных подкаталогов. На мой взгляд более надежно использовать директиву < directory>, а не < location>, т.к. она защищает конкретные наборы файлов, независимо от того, как вы к ним попали (ведь в серверах под Unix можно очень эффективно пользоваться линками к файлам и директориям, делая логическую структуру дерева документов более удобной). Если вы используете Alias, очень внимательно http://www.freebsd.bip.ru/secaspects.shtml (1 of 4)10.04.2004 17:24:32

Daemon News Russia

проанализируйте все возможные варианты построения логического дерева (пути к файлу). С самого начала отмените директиву построения индексов (Option Indexes). Если вдруг пропадет файл index.html в каком-либо каталоге, сервер не построит список всех файлов в каталоге. Такой список в некоторых случаях может содержать нежелательные служебные файлы, которые пользователь не должен видеть. Обладание им открывает еще одну потенциальную "дыру". Несмотря на запрет индексирования помещайте в каждый каталог файл index.html хотя бы с пустым (это уже паранойя, но все же...). Разрешайте серверу следовать символьным ссылкам только если вы действительно ими пользуетесь. Для каталога /cgi-bin запретите все кроме ExecCGI. Проверьте, что скажет ваш сервер, если вы запросите http://www.server.dom/cgi-bin/. Он должен послать вас очень далеко, а не выдать список всех ваших сценариев! Все служебные URL, такие как /server-status, /server-conf, должны быть открыты только для вашего доступа. При этом указывайте ваш IP адрес, а не hostname, т.к. hostname можно подделать, а IP адрес намного сложнее. Корректность построения дерева файловой системы Важно заранее очень хорошо продумать структуру каталогов. Ведь они отражают структуру вашего узла и менять потом все очень сложно. Учитывайте, что количество документов по одной теме будет все время расти. В каталоге не должно быть слишком много файлов. Это затрудняет их поиск, вы можете по ошибке что-то удалить, да и просто усложняет вам работу. Очень важно, чтобы каталог с настройками, каталог с файлами регистрации (logs) и каталог со сценариями находились выше дерева документов. Доступ к каталогу сценариев должен осуществляться директивой ScriptAlias. Рекомендуется такая структура: site_____conf |__logs |__cgi-bin |__htdocs Очень аккуратно пользуйтесь связями, ведущими вне дерева документов. Старайтесь ссылаться только на отдельные файлы, а не на целые каталоги. Но если это нужно, то можно. Корректность установки прав доступа к файлам Веб-сервера Все файлы ниже каталога site не должны принадлежать пользователю, под которым работает сервер (apache), но должны принадлежать группе, в которую входит это пользователь (webstuff). Обычно файлами владеет webadmin, также принадлежащий группе webstuff. Все каталоги и файлы должны создаваться с umask = 027, т.е. группа (читай - Веб-сервер) должна иметь только права на чтение и исполнение, а все остальные (не webadmin) не должны иметь никаких прав. Таким образом вам останется охранять только login root'а и webadmin'а. http://www.freebsd.bip.ru/secaspects.shtml (2 of 4)10.04.2004 17:24:32

Daemon News Russia

Правильное написание CGI сценариев и программ Одним из основных способов попасть в Ваш сервер, это воспользоваться неправильно написанным сценарием. Существует большое количество книг по безопасным сценариям. Я опишу только основные моменты. Первым способом нарушить работу сценария является переполнение буфера ввода. Никогда не указывайте размер буфера исходя из разумных соображений. Определяйте его динамически: read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); Неплохо также перед этим проверить $ENV{'CONTENT_LENGTH'} и уменьшить ее до некоего разумного предела. Вторым важным моментом является внедрение команд ОС в возвращаемые сценарию переменные. Возьмем пример: Пусть у на в сценарии будет строка (@usernames - массив имен) system "finger @usernames 2>&1"; Если мы вызовем такой сценарий строкой http://www.yoursite.ru/cgi-bin/bad_finger.pl?andy+bob то все будет замечательно. Но, если его вызвать строкой http://www.yoursite.ru/cgi-bin/bad_finger.pl?`[email protected]+br> то ваш файл паролей улетит к "нехорошим парням". В связи с этим только в крайних случаях используйте такие команды, как system(), exec() и eval(). Всегда проверяйте значения переменных на наличие метасимволов и удаляйте их. Например так: $value =~ tr/'"\t\n\r\/|;//d; $value =~ s///g; Ну а самым надежным способом является проверка каждого поля на точный шаблон данных, которые вы ожидаете получить. Например, если вы запросили почтовый индекс, проверьте его строкой: $zip =~ /^\d{6}$/ а если запросили адрес электронной почты, строкой: $email=~s#(\w+(-|\.|))+@(\w+(-|\.|))+(ru|su|be|ca|cz|ee|fi)##io; Заключение

http://www.freebsd.bip.ru/secaspects.shtml (3 of 4)10.04.2004 17:24:32

Daemon News Russia

Следуя этим нехитрым правилам вы значительно обезопасите ваш сервер от поползновений "нехороших парней", как их мило называют в зарубежной литературе. Главное, это помнить основной принцип обеспечения безопасности - запретите ВСЕ, а потом разрешайте только то, что Вам ДЕЙСТВИТЕЛЬНО необходимо.

(c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/secaspects.shtml (4 of 4)10.04.2004 17:24:32

Daemon News Russia

новости \\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь

Форматирование дисков в FreeBSD Содержание 1.Введение и определения 2.Форматирование дисков выделенном режиме. 3.Создание дисков в режиме совместимости. 4. Другие дисковые операции 1. Введение и определения 1.1 Обзор 1.2 Определения 1.3 Предупреждения 1.4 Zip, Jaz и другие съемные диски. 1.1 Обзор Добавление дисков в существующую систему - задача для опытного системного администратора. Для разбиения диска на разделы и добавления новых дисков требуется четкая, аккуратная система команд и согласованный синтаксис имен. Одна небольшая ошибка может привести к тому, что в считанные секунды диск исчезнет и его содержимое будет невозможно восстановить. Этот документ написан для того, чтобы упростить эту задачу и избежать непоправимых ошибок. К счастью, в последних релизах FreeBSD, имеются улучшенные версии инструментов, позволяющих облегчить этот процесс. Существует два возможных режима форматирования диска: ●



режим совместимости (compatibility mode) - диск имеет таблицу разделов для использования с другими операционными системами. выделеный (dedicated) режим - форматирование диска без таблицы разделов. Это облегчает процесс добавления дисков, хотя операционная система отличная от FreeBSD, может не распознать этот диск.

В большинстве случаев использование выделенного режима - это наиболее простой способ установки и использования нового диска в существующей системе, так как, обычно, новый диск целиком предназначен для использования под FreeBSD. Однако, режим совместимости обеспечивает лучшую интероперабельность для будущих инсталляций, что достигается за счет усложнения процесса. В добавление к выбранному режиму, стоит отметить, что существуют два способа разбиения диска на разделы. Первый использует системный инструмент инсталляции /stand/sysinstall. 2.1.7-RELEASE и более поздние версии sysinstall могут облегчить процесс установки дисков во время нормального функционирования системы, предоставляя доступ к редакторам Label и Partittion. Также вы можете использовать Write - программа, позволяющая обновить выбранный диск и разбить его на разделы, не трогая при этом остальные диски. Второй способ - запустить инструменты вручную из корневой командной строки. Для выделенного режима требуется только 3-4 команды, в то время как sysinstall требует некоторых манипуляций. 1.2 Определения Для управления дисками в операционной системе UNIX было изобретено много новых определений для старых

http://www.freebsd.bip.ru/format.shtml (1 of 5)10.04.2004 17:24:34

Daemon News Russia

слов. Далее приводится список определений для терминов, которые будут встречаться в этом документе. ●











режим совместимости: в этом режиме диск имеет таблицу разделов для использования с другими. операционными системами. Противоположен выделенному режиму. выделенный режим: форматирование диска без таблицы разделов. Это облегчает процесс добавления дисков, хотя операционная система отличная от FreeBSD, может не распознать этот диск. Противоположен режиму совместимости. диск: круглый диск, покрытый магнетиком или другим похожим материалом. Данные хранятся на диске, посредством изменения ориентации магнетиков на диске, которая позже может быть расшифрована. Примерами дисков являются жесткие диски, CD, магнито-оптические диски и Zip. раздел: это часть диска. Согласно стандартам PC, на диске можно иметь до четырех разделов. Разделы состоят из секторов. Разделы записываются в таблицу разделов, которую использует BIOS для обнаружения загрузочных партиций. В DOS таблицу разделов обычно называют таблицей партиций (Partition table). Эта таблица обрабатывается утилитой fdisk. партиция: это часть раздела. Обычно этот термин используется для ссылки на часть раздела FreeBSD. Каждая файловая система и пространство для свопинга принадлежит определенной партиции. Партиции обрабатываются при помощи утилиты disklabel. сектор: это наименьшая часть диска. Обычно один сектор содержит 512 байт.

1.3 Предупреждения Не стоит относится к обработке дисков слишком легко. Если не принять специальные меры предосторожности, можно разрушить содержимое других дисков вашей системы. Тщательно проверяйте вашу работу. Работая с этими командами очень просто испортить содержимое диска.В случае сомнения обратитесь к "загрузочным" сообщениям ядра для соответствующего устройства. Нужно отметить, что мы не отвечаем за повреждение данных или оборудования. Вы действуете на свой собственный страх и риск. 1.4 Zip, Jaz и другие съемные диски Съемные диски могут быть отформатированы так же, как и обычные жеские диски. Важно, чтобы при загрузке дисковод был подключен к системе, так как ядро должно определить геометрию диска. Проверьте сообщения dmesg и убедитесь, что ваше устройство и размер диска находятся в списке. Если ядро выдает сообщение Can't get the size это означает, что в дисководе нет диска. В этом случае вам нужно перезагрузить машину, прежде чем приступать к форматированию диска. 2.Форматирование диска в выделенном режиме 2.1 Введение 2.2 Создание дисков в выделенном режиме, используя sysinstall

2.3 Создание дисков в выделенном режиме, используя командную строку

2.1 Введение

http://www.freebsd.bip.ru/format.shtml (2 of 5)10.04.2004 17:24:34

Daemon News Russia

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

2.2 Создание дисков в выделенном режиме, используя программу sysinstal /stand/sysinstall - системная инсталляционная утилита, которая была усовершенствована в последних версиях.с целью облегчить процесс разбиения диска на разделы. В sysinstall встроены редакторы fdisk и disklabel. Для FreeBSD начиная с версии 2.1.7, это самый простой способ разбить диск на разделы.



● ● ● ● ●

Запустите sysinstall с правами root, и наберите в командной строке /stand/sysinstall Выберите Index Выберите Partition Выберите диск для того чтобы отредатировать его при помощи клавиш со стрелками и пробела Если вы используете весь диск для FreeBSD, выберите A Когда появится сообщение: Do you want to do this with a true partition entry so as to remain cooperative with any future possible operating system on the drive(s)?

● ● ● ● ● ●



ответьте "NO" . Когда появится вопрос, хотите ли вы все еще это сделать - ответьте "YES". Выберите Write Когда вас предупредят о записи на инсталлированную систему ответьте "YES". Выйдете из редактора FDISK и вернитесь в меню Index. В меню Index выберите Label Для единственной партиции введите С для создания партиции, согласитесь с размером, установленным о умолчанию, типом Filesystem и точкой монтирования (которая не используется). Когда все будет сделано, введите W и подтвердите продолжение. Для создания файловой системы будет запущена программа newfs, если вы не укажете обратное ( для новых партиций это следует сделать). Вы получите следующую ошибку: Error mounting /mnt/dev/wd2s1e on /mnt/blah : No such file or directory

Эту ошибку нужно проигнорировать. ●

Выйдете из редактора, нажав ESCAPE два раза.

2.3 Создание дисков в выделенном режиме, используя командную строку. Выполните следующую команду, заменяя wd2 на имя диска. Комментарии начинаются с символа # dd if=/dev/zero of=/dev/rwd2 count=2 disklabel /dev/rwd2/ | disklabel -B -R -r wd2 /dev/stdin # мы хотми только одну партицию, поэтому использование раздела 'c' идеально newfs /dev/rwd2 Если вам необходимо редактировать disklabel для создания нескольких партиций( таких как swap), используйте следующие строки: dd if=/dev/zero of=/dev/rwd2 count=2 disklabel /dev/r$d | > /tmp/label #редактирование disklabel http://www.freebsd.bip.ru/format.shtml (3 of 5)10.04.2004 17:24:34

Daemon News Russia

для добавления партиций vi /tmp//label disklabel -B -R -r wd2 /tmp/label Теперь ваш диск готов к использованию. 3. Создание дисков в режиме совместимости 3.1 Введение 3.2 Создание дисков в режиме совместимости, используя программу sysinstall.

3.1 Введение Командная строка - это самый простой способ, чтобы сделать выделенный диск и самый сложный, чтобы сделать совместимый диск. Работа в командной строке с fdisk требует знания высшей математики и глубокого понимания таблицы разделов. Неудивительно, что большинство людей не хотят связываться с этим. Используйте sysnstall для создания совместимых дисков, как это описано ниже. 3.2 Создание дисков в совместимом режиме, используя sysinstall 1. Запустите sysinstall с правами root, набрав в командной строке /stand/sysinstall 2. 3. 4. 5. 6.

Выберите Index Выберите Partition Выберите диск для редактирования клавишами со стрелками и пробелом. Если вы исопльзуете весь диск для FreeBSD, выберите А. Когда появится сообщение Do you want to do this with a true partition entry so as to remain cooperative with any future possible operating system on the drive(s)? ответьте "YES"

7. Выберите Write 8. Когда система спросит об инсталляции менеджера загрузки, с помощью пробела выберите NONE, затем нажмтие ENTER. 9. Выйдете из редактора fdisk. 10. Вас спросят о менеджере загрузки, выберите NONE. 11. В меню Index выберите Label. 12. Для единственной партиции введите С для создания партиции, согласитесь с размером, установленным по умолчанию, типом Filesystem и точкой монтирования (которая не используется). 13. Когда все будет сделано, введите W и подтвердите продолжение. Для файловой системы будет запушена программа newfs, если вы не укажете обратное (для новых партиций это следует сделать ). Вы получите следующую ошибку: Error mounting /mnt/dev/wd2s1e on /mnt/blah : No such file or directory Эту ошибку нужно проигнорировать. 14. Выйдете из редактора, нажав ESCAPE два раза. Теперь ваш диск готов к использованию. http://www.freebsd.bip.ru/format.shtml (4 of 5)10.04.2004 17:24:34

Daemon News Russia

4. Другие дисковые операции. 4.1 Добавление пространства для свопинга. 4.2 Копирование содержимого дисков 4.1 Добавление пространства для свопинга. По мере увеличения системы в размере, пространство для свопинга тоже должно увеличиваться.Хотя добавление пространства для свопинга - очень сложный процесс, новый диск можно разбить на партиции с учетом дополнительного пространства для свопинга. Как добавить пространство для свопинга при добавлении диска к существующей системе. 1. Разбивая диск на разделы, расположите добавочное пространство для свопинга в паритции 'b', 2. а остаток в какой-нибудь другой партиции, например 'a' или 'e'. Размер задается в блоках по 512 байт. 3. Создавая на диске файловую систему, не создавайте ее в партиции 'c'. Вместо этого, запустите newfs для партицию, где лежит несвопинговое пространство. 4. Добавьте новую запись в /etc/fstab/: /dev/wd0b

none

swap

sw

0 0

Замените /dev/wd0b на устройство с новым добавочным пространством. 5. Чтобы сделать новое пространство доступным немедленно, используйте команду swapon. $ swapon /dev/sd0b swapon: added /dev/sd0b as swap space 4.2 Копирование содержимого дисков. Чтобы переместить файл с основного диска на новый сделайте следующее: mount /dev/wd2 /mnt pax -r -w -p e /usr/home /mnt umount /mnt rm -rf /usr/home/* mount /dev/wd2 /usr/home (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/format.shtml (5 of 5)10.04.2004 17:24:34

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь PortSentry - узнай своих врагов в лицо новости

Основная задача этой программы - отслеживание попыток сканирования системы. Ведь сканирование системы является прелюдией к более серьезным действиям со стороны сканирующего. Она определяет факт сканирования и (по выбору) реагируюетна него следующими действиями: 1. Регистрирует событие при помощи syslog() 2. Автоматически прописывает адрес сканирующего в файл/etc/hosts.deny 3. Перенастраивает систему так, что весь трафик с вражеского адреса перекидывается на т. н. "мертвый" хост, что создает эффект "исчезновения" твоего компьютера из сети. 4. Все IP пакеты, поступающие с "опасного" хоста, начинаются прогонятся через локальный фильтр IP пакетов. От других утилит, выполняющих подобные действия, portsentry отличается более гибкой системой реакции на "ощупывание" системы и улучшенным мезанизмом распознавания stealthсканирования. Программа распологает несколькими методами stealth-распознавания, но основными являются следующие два. Первый метод заключается в том, что portsentry "пасет" определенные порты и начинает действовать при попытке "воткнуться" в них. Второй метод называется "инверсивным". В этом случае программа прослушивает все порты определенного диапазона. Последний метод, конечно, более эффективен в плане защиты, но также чреват большим количеством ложных тревог. Теперь приступим к скачиванию, установке и запуску portsentry. Итак, первым делом идем на http://www.psionic.com. Это официальнай страница проекта, который занимался разработкой нужной нам утилиты. Там мы хватаем файл под название portsentry-***.tar.gz, скачиваем его, помещаем в папку, которую мы отвели для архивов, и разжимаем с помощью команды tar zxvf portsentry-***.tar.gz. Затем переходим в новообразовавшуюся папку и начинаем колдовать:) . Прежде всего открываем файл Makefile и меняем строку CC=cc на CC=egcs и строку INSTALLDIR=/usr/local/psionic INSTALLDIR=/usr/psionic. После этого открываем файл portsentry_config.h и там производим замену #defile CONFIG_FILE "/usr/local/psionic/portsentry/ portsentry.conf" на #defile CONFIG_FILE "/usr/ psionic/portsentry/ portsentry.conf". Основная подготовка исходников к компиляции готова. Тепрь компилируем и устанавливаем. Программа установленна, но теперь ее надо отконфигурировать и запустить. Конфигурирование portsentry производится с помощью файла /usr/psionic/portsentry/portsentry.conf. Ниже я приведу пример готового конфигурационного файла. ################### # Port Configurations # ###################

http://www.freebsd.bip.ru/portsentry.shtml (1 of 3)10.04.2004 17:24:36

Daemon News Russia

TCP_PORTS="1, 11, 15, 79, 111, 119, 143, 540, 635, 1080, 1524, 2000, 5742, 6667, 123456, 20034, 31337, 32771, 32772, 32773, 32774, 40421, 49724, 54320" UDP_PORTS="1, 7, 9, 69, 161, 162, 513, 635, 640, 641, 700, 32770, 32771, 32772, 32773, 32774, 31337, 54321" ##################################### # Advanced Dtealth Scan Detection Options # ##################################### ADVANCED_PORTS_TCP="1023" ADVANCED_PORTS_UDP="1023" ADVANCED_EXCLUDE_TCP="113, 139" ADVANCED_EXCLUDE_UDP="520, 138, 137, 67" ################### # Configuration Files # ################### IGNORE_FILE="/usr/psionic/portsentry/portsentry.ignore" HISTORY_FILES="/usr/psionic/portsentry/portsentry.history" BLOCED_FILE="/usr/psionic/portsentry/portsentry.bloced" ############### # Ignore Options # ############### BLOCK_UDP="1" BLOCK_TCP="1" ############### # TCP Wrappers # ###############

http://www.freebsd.bip.ru/portsentry.shtml (2 of 3)10.04.2004 17:24:36

Daemon News Russia

KILL_HOSTS_DENY="ALL: $TARGET$" ################## # Scan trigger value # ################## SCAN_TRIGGER="0" ##################### # Port Banner Selection # ##################### PORT_BANNER="** UNAUTHORIZED ACCESS PROHIBITED *** YOUR CONNECTION ATTEMPT HAS BEEN LOGGED. GO AWAY." Хочется отметить, что приведенный файл является ПРИМЕРОМ, и для того, чтобы portsentry заработал по-настоящем, нужно написать конфиг самостоятельно и под себя. Теперь нам нужно отредактировать usr/psionic/portsentry.ignore файл. Это просто. Надо всего лишь добавить тyда 127.0.0.1 и 0.0.0.0. Львиная доля работы закончена! Но это еще не все. Теперь нам надо этот самый portsentry запустить. Все дело в том, что программа может быть запущенна в ШЕСТИ режимах. Режимы работы задаются аргументами коммандной строки при запуске программы, и для каждого из них необходимо запустить отдельный процесс. "-tcp", "-udp", "-stcp", "-sudp", "-atcp", "-audp".

(c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/portsentry.shtml (3 of 3)10.04.2004 17:24:36

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь История UNICS (aka UNIX) и семейства новости

Считается, что в появлении Юниксойдов и Юникса в частности виновата... компьютерная игра. Дело в том, что Кен Томпсон непонятно чего ради создал игрушку "Space Travel". Он написал ее в 1969 году на компьютере Honeywekk 635, который использовался для разработки ОС Multics. Но все загвоздка была в том, что ни вышеупомянутый Honeywell, ни имевшийся в лаборатории General Electric 645 не подходили для игрушки. И Кену пришлось найти другую ЭВМку - 18разрядный компьютер PDP- 7. По ходу дела Кен с ребятами разрабатывал новую файловую систему, дабы облегчить себе жизнь и работу. Ну и решил опробовать свое новое изобретение на новенькой машине. Опробовал. Просто на ура. Весь отдел патентов Bell Labs дружно радовался. Томпсону этого паказалась мало и он начал ее усовершенствовать, включив такие функции: понятие inodes, подсистему управления процессами и памятью, обеспечивающую использование системы двумя пользователями в режиме TimeSharing'a (разделение времени) и просто командный интерпретатор. Кен даже разработал несколько утилит под систему. Собственно, сотрудники Кена еще помнили, как они мучались над ОС Multics, поэтому в честь старых заслуг один из них - Брайн Керниган - решил назвать ее похожим именем - UNICS (Uniplexed Information and Computing Systems). Через некоторое время название сократили до UNIX (читается так же, просто писать лишнюю букву Настоящим Программистам во все времена было лень). Но, к сожалению, изобретение, как это часто бывает, уперлось в трудности материального плана. Во-первых, PDP- 7 было арендовано отделом, а не куплено, и рано или поздно пришлось бы его отдавать, а во-вторых, операционка разросталась настолько быстро, что системных ресурсов ужу старенького по тем временам комьютера ей не хватало. Поэтому в 1971 году Кен с ребятами скинулись и купили более совершенный Digital Equipment PDP -11/20, на который и перенесли свою последнюю модифекацию UNIX. Если учесть, что ОС была написана на асемблере, а физически взять и перенести весь этод код было невозможно, можно представить сколько времени Томпсон с друзьями писал эту чертову систему. Зато PDP- 11/20 без проблем поддерживала большое количество залогинившихся пользователей, да к тому же позволила, наконец, написать простенький интерпритатор текстового процессора. Вот мы и добрались к тому, что известно в мире как "Первая редакция UNIX". В ноябре 1971 года был опублекован первый выпуск полноценной доки по Юниксу. В соответствии с этим и ОСь была названа "Первая редакция UNIX". Вторая редакция вышла довольно быстро меньше, чем через год.Система была полностью переписана на язык В, созданный Томпсоном под влиянием существовавшего тогда BCPL. Также появились программные каналы ("pipes"). Третья редакция ничем особенным не отличалась. Разве что заставила Дениса Ритчи "засесть за словари на за страх, а за совесть", вследствии чего тот написал собственный язык, известный сейчас как С. Он позволял расширить функции своего предшествиника - В, и именно на нем была написана четвертая редакция UNIX в 1973 году. "Шестая редакция UNIX", выпущенная в 1975 году, стала первым коммерчески распространяемым Юниксом. Параллельно с улучшением Юникса шла разработка системы, известной нам как (Free)BSD. Когда в 1976 году в Университет Беркли попала "шестерка", там возникли местные юникс-гуру. Одним из них был Билл Джой. Собрав своих друзей-программистов, Билли начал разработку собственной системы на ядре http://www.freebsd.bip.ru/history.shtml (1 of 2)10.04.2004 17:24:37

Daemon News Russia

UNIX. Запихнув помимо основных функций кучу своих (включая компилятор япаскаля), он назвал эту сборную солянку Berkley Software Distribution (BSD 1.0). Вторая версия BSD носила в себе попытки изнасилования (то есть частичной перезаписи яядра системы). Третья версия BSD основывалась на переносе UBIX Version 7 на компьютеры семейства VAX, что дало систему 32/ V, легшую в основу BSD 3.x. Ну и самое главное - при этом был разработан стек протоколов TCP/ IP. Начиная с версии 4.1 (1980 год) BSD распространялась практически бесплатно - сначала среди пользователей, обладавших лицензией Bell Labs, а позже, переименововшись в FreeBSD, и вовсе для всех на халяву. (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/history.shtml (2 of 2)10.04.2004 17:24:37

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Пример подсчета трафика через ipfw новости

У меня по крону раз в 5 мин. отрабатывает следующий скрипт: #!/bin/sh P=/var/count ipfw show | grep "^00001" | awk '{ print $3; }' > \\ $P/xmit.`date "+%Y-%m-%d"` ipfw show | grep "^00002" | awk '{ print $3; }' > \\ $P/recv.`date "+%Y-%m- %d"` ( Комм: где "\\" след строка идет продолжением текущей. Roman Y.B. ) Правила подсчета следующие: #ipfw show 00001 640480 68380249 count ip from any to any out xmit ppp0 00002 624905 381169687 count ip from any to any in recv ppp0 результат: #ls /var/count recv.2000-02-29 recv.2000-03-01 recv.2000-03-02 recv.2000-03-03 recv.2000-03-06 recv.2000-03-07 recv.2000-03-09 recv.2000-03-10 recv.2000-03-11 recv.2000-03-12 recv.2000-03-13 recv.2000-03-14

recv.2000-08-11 recv.2000-08-14 recv.2000-08-15 recv.2000-08-16 recv.2000-08-17 recv.2000-08-18 recv.2000-08-21 recv.2000-08-22 recv.2000-08-23 recv.2000-08-24 recv.2000-08-25 recv.2000-08-28

xmit.2000-05-19 xmit.2000-05-20 xmit.2000-05-22 xmit.2000-05-23 xmit.2000-05-24 xmit.2000-05-25 xmit.2000-05-26 xmit.2000-05-29 xmit.2000-05-30 xmit.2000-05-31 xmit.2000-06-01 xmit.2000-06-02 (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/traf.shtml10.04.2004 17:24:38

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Пример построения пакетного фильтра на ipfw новости

Поправте меня если я неправ. Пакет проверяется списком правил дважды -- на входе и на выходе. Если на входном интерфейсе пакет прошел, то, если пакет должен уйти дальше, он будет проверяться еще раз на исходящем интерфейсе. Иными словами если пакету надо попасть на нашу машину, то он должен пройти наши правила -- а можно ли впустить этот пакет, после чего наша машина чего-то с ним делает и, если решает отправить этот пакет дальше -- то проверяет его списком правил еще раз -- а можно ли этот пакет выпускать. Соответственно нами генерируемые пакеты будут проверяться один раз -- на выходе, а предназначенные нам -- один раз -- на входе. Пример правил и для входящих и для исходящих пакетов # глушатся все пакеты и на входе и на выходе ipfw add deny icmp from any to any # пропускаются все пакеты через ed0 ipfw add pass icmp from any to any via ed0 Пример однонапрвленных правил # разрешены все входящие пакеты через ed0 # вместо in recv можно написать in via :))) ipfw add deny ip from any to any in recv ed0 # разрешены все исходящие пакеты через ed0 # вместо out xmit можно написать out via ipfw add deny ip from any to any out xmit ed0 Очень важно что путь пройденный пакетом по нашей машине запоминается и соответственно мы можем использовать такие параметры как входящий и исходящий интерфейс. Это еще один интересный пример однонаправленных правил # запрещаются все ИСХОДЯЩИЕ через ed1 пакеты, которые # были получены через ed0 ipfw add deny ip fron any to any out recv ed0 xmit ed1 divert Правила заворачивают все пакеты на сокет, который слушает natd. natd переписывает содержимое заголовка пакета. далее переходим к следующему правилу (!!! а пакет то уже другой). Например # заворачивается весь трафик через внешний интерфейс ipfw add divert 8668 ip from any to any via sl0 Пример Считаем что внутри только друзья -- которые используют прокси :))) ipfw add pass ip from any to any via lo0 ipfw add pass tcp from any to any established ipfw add pass icmp from any to any ipfw add pass ip from any to any frag ipfw add pass ip from any to any via ed0 ipfw add pass ip from ${ip_sl0} to any out xmit sl0 ipfw add pass tcp from any to ${ip_sl0} smtp in recv

http://www.freebsd.bip.ru/pfil.shtml (1 of 2)10.04.2004 17:24:39

Daemon News Russia

sl0 setup ipfw add pass tcp from any to ${ip_sl0} http in recv sl0 setup ipfw add pass tcp from any to ${ip_sl0} 53 in recv sl0 setup ipfw add pass udp from any to ${ip_sl0} 53 in recv sl0 ipfw add pass udp from any 53 to ${ip_sl0} in recv sl0 # это чтобы посмотреть чего мы запрещаем, может мы не правы? ipfw add count log ip from any to any # последнее правило 65535 deny ip from any to any

(c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/pfil.shtml (2 of 2)10.04.2004 17:24:39

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Настройка IOMEGA ZIP 100 LTP в операционной системе FreeBSD новости

Я думаю, вряд ли кто-нибудь будет оспаривать тот факт, что дисководы Iomega ZIP - вещь удобная и полезная. Мой дисковод ZIP с интерфейсом LPT - самый медленный в семействе, однако, имеет преимущество мобильности, т.е. возможности простого подключения к любому компьютеру типа PC, что делает его удобным средством транспортировки данных. Приводимые здесь советы являться результатами двухчасового употребления чая за чтением man'уалов и how-to по операционной системе FreeBSD и настройке в ней ZIP дисководов. FreeBSD поддерживает устройства Zip, работающие через параллельный порт, начиная с версии 3.0. Устройству ZIP может быть назначен SCSI ID только 5 или 6. Я не знаю, насколько хорошо FreeBSD поддерживает смену носителя во время работы, но компания Iomega предупреждает, что не стоит вытаскивать носитель или отключать устройство во время передачи данных (довольно естественное требование, не правда ли?). Конечно, чтобы сменить диск, вам сначала нужно его размонтировать, и обратите внимание на то, что при загрузке все внешние устройства должны быть включены, чтобы FreeBSD могла их распознать. Так что распаковываем устройство, подключаем входящий в комплект кабель к параллельному порту и к разъему на устройстве, втыкаем сетевой шнур, после чего включаем компьютер. Загружаемся в FreeBSD и начинаем править ядро. Проверьте, содержит ли ваше ядро драйверы для scbus0, da0, ppbus0 и vp0 (ядро GENERIC содержит всё это, кроме vp0). Если эти драйверы имеются, то устройство должно быть доступно как /dev/da0s4. Диски могут быть смонтированы командами mount /dev/ da0s4 /mnt или (для дисков DOS) mount_msdos /dev/da0s4 /mnt соответственно. На всякий случай заглянем в LINT и посмотрим, что есть на эту тему там: # Parallel-Port Bus # # Parallel port bus support is provided by the `ppbus' device. # Multiple devices may be attached to the parallel port, devices # are automatically probed and attached when found. # # Supported devices: # vpo Iomega Zip Drive # Requires SCSI disk support ('scbus' and 'da'), best # performance is achieved with ports in EPP 1.9 mode. device ppc0 at isa? irq 7 device vpo Вписываем эти строки, собираем новое ядро и у нас появился ZIP. Он работает, но очень медленно и грузит систему. Дело в том, что ZIP может вести обмен через параллельный порт на одной из трех скоростей. По умолчанию из соображений совместимости устанавливается минимальная скорость. Драйвер, если его научить, смотрит, какой тип параллельного порта стоит на компьютере (bidirectional, EPP) и соответствующим способом устанавливает скорость обмена. Смотрим, как это сделать в нашем любимом man ppc: During the probe phase, ppppcc detects parallel port chipsets and initializes private data according to their operating mode: COMPATIBLE, NIBBLE, PS/2, EPP, ECP and other mixed modes. If a mode is provided at startup through the flags variable of the boot interface, the operating mode of the chipset is forced according to flags and the hardware supported modes. Supported flags And any mixed values. bit 4: EPP protocol (0 EPP 1.9, 1 EPP 1.7) bit 5: activate IRQ (1 IRQ disabled, 0 IRQ enabled) bit 6: disable chipset specific detection bit 7: disable FIFO detection Теперь, если мы поставим флаг 0x40 на наш pppc0 то у нас должна появиться поддержка http://www.freebsd.bip.ru/iomega.shtml (1 of 2)10.04.2004 17:24:40

Daemon News Russia

стандарта EPP. Добавляем ее в ядро. Например, вот так, выглядит описания параллельного порта моей рабочей станции, в виду отсутствия принтера. # Parallel port (my Iomega Zip 100Mb LPT drive) device ppc0 at isa? flags 0x40 irq 7 device ppbus # Parallel port bus (required) device vpo # Requires scbus and da Ещё одна важная деталь. Я забыл, что подключение ZIP дисковода происходит через SCSI эмуляцию. В ядре есть опция, которая отвечает за задержку в секундах перед началом инициализации SCSI периферии. А так, как SCSI винтов в моей системе нет, строчка "before probing SCSI" у меня не появлялась, и я думал, почему ядро зависает на 15 секунд, при инициализации ZIP дисковода. Вы можете смело поставить в ядро нижеследующую опцию и жить спокойно: options SCSI_DELAY=1000 #Delay (in ms) before probing SCSI Ну что же, можно сказать, что настройка завершилась, новое ядро собрано, теперь смотрим на результат нашей работы: ppc0: at port 0x378-0x37f irq 7 flags 0x40 on isa0 ppc0: SMC-like chipset (ECP/EPP/PS2/NIBBLE) in COMPATIBLE mode ppc0: FIFO with 16/16/9 bytes threshold vpo0: on ppbus0 vpo0: EPP 1.9 mode da0 at vpo0 bus 0 target 6 lun 0 da0: Removable Direct Access SCSI-2 device da0: 96MB (196608 512 byte sectors: 64H 32S/T 96C) Ссылки, по которым написан FAQ: Iomega company site. Информация о параллельных портах Информация о LTP ZIP Информация о USB ZIP FreeBSD hardware FAQ FreeBSD ZIP hardware FAQ Дравер ZIP для версий ядра 2.x.x (c) roman y. bogdanov (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/iomega.shtml (2 of 2)10.04.2004 17:24:40

Daemon News Russia

новости

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь

Какие бывают юниксойды Потенциальный юниксоид: Слышал о том, что Юникс - круто, но ни разу не видел, надо бы попробовать. Вот только говорят - там все текстовое? Хотя вроде бы Х-Виндовс есть... - надо попробовать! Пробующий юниксоид: Установил себе Юникс (какой-то), вот что-то кнопки "Пуск" никак не найду. В Досе я или уже в ХВиндовс? Если буквы белые на черном, и отдельных окон не видно - значит в ДОСе. Если различаются отдельные окна, которые можно таскать мышкой - значит уже в Х-Виндовс. В ДОСе!!!! - щаз попробуем: Вот вроде аналог Hортон Коммандер - Midnight Commander Диска А: нет. И С: нет. И вообще - один большой каталог. А сидиром где же? А, их монтировать вроде както надо. Так, а запуститься ли GoldEd? А MultiEdit? Hе работает :( Куча каких-то программ - а для чего столько? Опять придется маны читать :( Попробуем Х-Виндовс. Вот только никак не запускается - ругается опять на что-то... и что тебе надо? откуда я знаю с какой частотой? блин... Во!!! Заработало!!! :)))) Вот только никак не могу понять - почему у экрана какая-то противная сеточка, а заголовки окон болотно-зеленого цвета? Гадость. Hе нравиться мне оно. Hеприятное. Здесь они либо придется настроить что-то, либо вернусь к любимой Виндовс98. Hачинающий юниксоид : Блин, как можно было shell и ДОС перепутать? Да еще ДОСовые программы запускать! Установил "Иксы", установил windowmanager и сейчас у на экране красота - почти как на Винде. Вот только работает не все так, как бы этого хотелось - нетакие красивые иконки у программ, не такие шрифты, и программ мало - ни тебе Эксплорера (только Hетшкаф глючный), ни тебе Аутлука, ни Ворда, ни Екселя. Работать просто невозможно. Зато почти не глючит - так, изредка вылетает графика, но это не страшно. Попробуем еще что-то настроить. Опытный юниксоид: На экране что-то яркое, необычных очертаний, все такое в полутонах и тенях, по всему экрану моргают лампочками MP3 & CD-players, в соседнем полупрозрачном терминальном окне разноцветье кода программы, анализаторы траффика показывают, что тянущийся файл опять где-то застрял - скорость почти до нуля упала, в чате опять разборки, по почте какой-то ламер прислал гребаный ворд-документ, да еще в мастдайной кодировке! Система в таком виде стоит сутками, выключается только при крайней необходимости, а все остальное время что-то компилируется/тянется с Инета/пишется на компакты. И не падает! Полон сил и творческих стремлений - что бы еще такое написать? Возможностей-море! Вот ведь эти глупые ламеры - не лень сидеть в глюкавом масдае с его угребищным интерфейсом и ручками (о ужас!) делать то, для чего у меня есть полный диск скриптов. Очень Опытный юниксоид: Kуча работы, памяти как обычно не хватает, прога требует библиотек - а они еще не скомпилировались, канал лежит - опять юзера файло качают, Веб-сервер всю память пожрал, почты нечитанной накопилось уже сверх меры... Иксы жутко тормозят, пришлось обрезать до минимума. Все знакомые удивляются: на экране противная сеточка, а окна болотно-зеленого цвета. Цвет бы хоть поменять - да времени нет. Надо бы полазить по настройкам системы - да не до того, да и перегружать машину неохота - за последние пол-года еще вроде ни разу не глючила - и так сойдет.. загружен работой, нет дела до того - как что выглядит, не интересуют больше иконки и кнопочки. Чтоб ничто не загромождало экран - все убрано, а лучше - запущено http://www.freebsd.bip.ru/unixoid.shtml (1 of 2)10.04.2004 17:24:41

Daemon News Russia

в фоне. Гуру: По телевизору опять ничего интересного - муть одна. Книги надоели. На экране терминала сообщение: "за последнюю неделю интересующей вас почты не было, остальное помещено в архив" Писать программы нет смысла - все уже давно есть, нужно только поискать На экране терминала сообщение: "босс не может забрать свою почту". Ламер. Придется опять на дискету ему записывать. На экране терминала сообщение.... А, опять какая-то ерунда небось. Блин пора купить себе нормальный комп - хоть в игрушку поиграть смогу... Вот только теперь все игры под масдай - это теперь придется опять на это пялиться? ну уж нет... По телевизору опять ничего интересного.... (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/unixoid.shtml (2 of 2)10.04.2004 17:24:41

Daemon News Russia

новости

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь

Как добавить юзера Ответ на этот вопрос не такой простой, как может показаться. Все зависит от того - какого юзера вы хотите зарегистрировать. Заметьте, что, для того, чтобы пустить в свою систему реального юзера, надо не только добавить новую учетную карточку для него. Еще надо создать ему домашнюю директорию и, желательно, положить туда некоторые стартовые файлы (типа config.sys и autoexec.bat в DOS'е). При этом надо правильно установить права нового юзера на эти файлы. Для того, чтобы не делать эту работу вручную, существует специальная утилита (см. ниже). Но, если вам нужно зарегистрировать псевдо-юзера или "почтового юзера", она не очень подходит. В этом случае лучше воспользоваться более примитивными средствами. Итак. Программы для регистрации (и не только) нового пользователя. ● ● ● ● ●

pwd_mkdb vipw adduser pw useradd Еще что-нибудь

pwd_mkdb Собственно, эта утилита только преобразует файл master.passwd в три остальных файла. Вы можете любым текстовым редактором добавить строчку в master.passwd, взяв за образец любую из тех строчек, которые там уже есть (желательно, перед этим внимательно прочитать man 5 passwd). Если, после этого запустить команду pwd_mkdb -p /etc/master.passwd то она сделает соответствующие изменения в spwd.db, pwd.db, passwd. Не забудьте, что пароль в учетной карточке хранится в зашифрованном виде. Поэтому, при составлении записи, это поле учетной карточки лучше оставить пустым, а потом занести пароль утилитой, которая специально для этого предназначена: passwd Конечно, это самый сложный способ, но... Если вы когда-нибудь возьметесь написать свою программу для регистрации, то она должна будет просто сформировать правильную строчку для файла master.passwd, занести ее в этот файл, а потом просто вызвать pwd_mkdb. Кстати, остальные программы, о которых дальше идет речь, именно так и делают. vipw Эта программа слегка :-) автоматизирует процесс описанный выше. Она сама запускает текстовый редактор, а, по выходу из редактора, pwd_mkdb. Облегчение состоит в том, что вам не надо помнить - какой файл вы редактируете и как правильно вызвать http://www.freebsd.bip.ru/adduser.shtml (1 of 5)10.04.2004 17:24:43

Daemon News Russia

pwd_mkdb. Запись в master.passwd вам все равно придется составить самостоятельно. При этом не забудьте, что Name и userID должны быть уникальными для каждого юзера. Важное замечание по поводу текстового редактора. Программа vipw сама редактором не является. Она запускает текстовый редактор, который задан переменной окружения EDITOR, а если таковой не найдет, то редактор vi. Причем, обычно, при установке FreeBSD в стартовых файлах для root эта переменная устанавливается, но это тот же vi. Дело в том, что работать с этим редактором без подготовки достаточно сложно. Поэтому, установите переменную EDITOR, выбрав свой любимый редактор. Если любимого редактора у вас пока нет, можно воспользоваться редактором /bin/ee. adduser Это самая "продвинутая" программа для добавления нового юзера. Она задает вопросы касающиеся нового юзера, сама проверяет имя и user ID на уникальность (причем, для user ID она сама предложит подходящее значение), создает домашнюю директорию для юзера и копирует туда заготовки настроечных файлов, и даже может послать приветственное письмо вновь зарегистрированному юзеру. Естественно, она же делает запись в БД учетных карточек. Однако, если вам нужно зарегистрировать не обычного юзера, то она вам только помешает. Например, вам нужно зарегистрировать "почтового юзера". Для такого юзера не нужна домашняя директория (а тем более заготовки стартовых файлов) и Shell у этого юзера должен быть нестандартный. Так вот - заставить эту программу не делать домашнюю директорию очень трудно (если вообще возможно). Кроме того, она не даст вам указать в качестве Shell произвольную программу. Поэтому, в этой ситуации, вам придется либо подчищать за ней все лишнее, что она сделает, либо обратиться к другим способам создания учетной карточки. pw useradd Возможно, вам покажется более удобной утилита pw. Эта программа, по замыслу авторов, должна быть универсальной утилитой для администратора в вопросах создания/изменения/удаления юзеров и групп. Поэтому, для данной задачи (регистрации нового юзера) ее надо запускать в виде: pw useradd ..... В отличии от adduser эта утилита очень не разговорчивая, то есть, она не задает никаких вопросов и все нужные сведения о новом юзере ей нужно сказать в командной строке с помощью соответствующих ключей. Но, с другой стороны она имеет и ряд достоинств: ●





обычно, достаточно ей указать только имя нового юзера, все остальное она "сочинит" сама. Например: pw useradd vasia (программа сама подберет подходящий userID, и заполнит поля group, Home dir, Shell и т.п., взяв их из своего конфигурационного файла) все данные, подставляемые "по умолчанию", можно легко поменять, запустив эту же программу в виде pw useradd -D ... или отредактировав напрямую конфигурационный файл /etc/pw.conf (если у вас в /etc такого файла нет, то просто наберите команду pw useradd -D и он сам создастся). при этом можно иметь несколько различных конфигурационных файлов, для разных типов юзеров, и явно указывать в команде - какие "умолчания" использовать для создания данного юзера. Например, у вас есть юзеры трех различных типов (отличающися своими group, Home dir, Shell и т.

http://www.freebsd.bip.ru/adduser.shtml (2 of 5)10.04.2004 17:24:43

Daemon News Russia

п.). Сделайте три разных конфигурационных файла (просто "растиражируйте" /etc/pw.conf и подправьте в каждом то, что нужно.) Теперь, чтобы создать юзера с "умолчаниями" из файла /etc/ pw1.conf, наберите команду pw useradd vasia -C/etc/pw1.conf Подробнее о всех параметрах (ключах) этой программы можно посмотреть в соответствующем man'уале (man pw), краткий список ключей можно "спросить" у самой программы, командой pw useradd help (но man pw все равно лучше прочитать, хотя бы раз :-) Здесь я хочу только обратить внимание на ключь -m. Дело в том, что pw useradd "по умолчанию" делает только запись в учетной карточке. А с этим ключем pw useradd vasia -m она, также, создаст домашнюю директорию для юзера и скопирует туда соответствующие стартовые и настроечные файлы. Еще что-нибудь Если вам приходится часто выполнять какую-нибудь нестандартную операцию регистрации нового пользователя (например, "почтового юзера" или фиктивного юзера для запуска коммуникационной программы), можно написать свою программу, которая будет выполнять только поставленную задачу, но, зато, не сделает ничего лишнего и не будет приставать с лишними вопросами как adduser. Написание такой программы - не такая уж сложная задача, как может показаться на первый взгляд. Ниже приводится пример программы, написанной на языке "интерпретатора комманд" sh, для регистрации "почтового юзера". Естественно, это не столько рабочая программа, сколько пример, который должен вдохновить вас на самостоятельное творчество. :-) Некоторые пояснения. Программа использует системную утилиту id, которая выводит некоторую информацию о заданном юзере (причем, в качестве аргумента этой утилиты может использоваться как name юзера, так и его user ID). В данном случае она используется только для проверки - зарегистрирован ли уже такой юзер в системе. Форма - id ... >/dev/null 2>&1 используется для того, чтобы подавить весь вывод этой утилиты, который, при использовании ее внутри программы, будет совершенно лишним.

#!/bin/sh

# Эти переменные вынесены в начало, чтобы их можно было легко поменять # при необходимости shell=/bin/date

# имя Shell для регистртруемого юзера

group=2000

# group ID для регистрируемого юзера

http://www.freebsd.bip.ru/adduser.shtml (3 of 5)10.04.2004 17:24:43

Daemon News Russia

uid=2000

# user ID, начиная с которого программа ищет # ближайший свободный

# найти ближайший не занятый user ID while (true) ; do if (id $uid >/dev/null 2>&1) then uid=$(($uid+1)) else break fi done

# Запросить Name для нового юзера и проверить его на уникальность, # если юзер с таким Name уже зарегистрирован в системе, сообщить # об этом и повторить вопрос while (true) ; do read -p 'User Name: ' name if (id $name >/dev/null 2>&1) then echo 'user "'$name'" already exists' else break fi done

# Запросить "реальное имя" юзера (чтобы записать его в General information) read -p 'Real name of "'$name'" : ' rname

# Сформировать учетную карточку и вписать ее в master.passwd echo $name'::'$uid':'$group'::0:0:Postbox for '$rname'::'$shell >> /etc/master.passwd

# Запустить pwd_mkdb, чтобы сделать изменения во всех файлах http://www.freebsd.bip.ru/adduser.shtml (4 of 5)10.04.2004 17:24:43

Daemon News Russia

# БД учетных карточек pwd_mkdb -p /etc/master.passwd

# Запросить секретный пароль для нового юзера passwd $name

# Если необходимы еще какие-то действия - создать директорию или внести # изменения в другие файлы, то это можно сделать далее в той же программе. # Но, в данном случае, больше ничего делать не нужно. (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/adduser.shtml (5 of 5)10.04.2004 17:24:43

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Как создать или удалить группу новости

Это достаточно просто сделать "вручную". Файл /etc/group, хранящий информацию о группах имеет простой формат и его можно менять любым текстовым редактором. Просто добавьте строчку, создав ее "по образу и подобию" тех, которые там уже есть. Только подберите groupID такой, который не используется другими группами. Для удаления группы, просто удалите соответствующую строчку. Проблемы могут возникнуть только, если у вас слишком много разных групп и вам будет трудно ориентироваться в тексте. Тогда вам, возможно, помогут специальные программы. ● ● ●

Программы addgroup и rmgroup. Программа pw. Важное замечание о безопасности.

Программы addgroup и rmgroup. Назначение этих программ понятно из названия. addgroup добавляет группу в список групп. Достоинство этого способа (в отличии от добавления группы "вручную") заключается только в том, что эта программа может сама подобрать для вновь создаваемой группы groupID, который пока не используется другими группами. Ну и, естественно, не сделает никаких ошибок в /etc/group. Хотя формат /etc/group настолько простой, что там трудно ошибиться :-) Кроме того, эта программа может использоваться для того, чтобы добавить юзера (юзеров) в "список членов" заданной группы. rmgroup - удаляет заданную группу из /etc/group. Достоинство этого способа (по сравнению с "ручным") в том, что вам не придется искать нужную строчку в файле /etc/group :-). Кроме того, она не даст вам удалить те группы, которые "жизненно важны" для системы. Естественно, более подробно об этих программах можно почитать в соответствующих man'уалах man addgroup, man rmgroup Программа pw. Программа pw - универсальная утилита для администрирования (создания, удаления, изменения, просмотра) и юзеров и групп.

http://www.freebsd.bip.ru/group.shtml (1 of 3)10.04.2004 17:24:45

Daemon News Russia

Для "ведения" групп ее нужно вызывать с параметрами pw group add группа- добавить группу pw group del группа - удалить группу pw group mod группа - "модифицировать" группу (параметр группа может быть как именем группы, так и номером - groupID). Последняя команда может использоваться для дополнения списка членов группы pw group mod группа -m юзер1,юзер2,... или полной замены этого списка (то есть, "старые" члены группы удаляются, а новые вписываются). pw group mod группа -M юзер1,юзер2,... Подробнее об этой команде (утилите) можно почитать в соответствующем man'уале (man pw). Ну, а чтобы не лазить в man каждый раз, когда захотите воспользоваться этой командой, можно вызвать ее с параметром help, например pw group mod help она выдаст вам список допустимых для данной операции ключей, с кратким пояснением. О "полезности" этой программы могу сказать то же самое, что и о предыдущих. В обычных случаях все изменения в /etc/groups можно сделать и "вручную". Пользоваться этой программой имеет смысл только, если у вас очень много групп или вы уже привыкли ее использовать для администрирования юзеров. Ну, и кроме того, ее удобно вставлять в командные файлы (скрипты). Конечно, создание и удаление групп достаточно редкая операция, а вот добавление юзеров в какую-нибудь группу (или даже в несколько сразу), вам, возможно, захочется "автоматизировать". Важное замечание о безопасности. Файл /etc/group "по умолчанию" может читаться всеми юзерами, а изменять его может только root (администратор системы). Не надо менять эти условия. Поскольку группы (юзеров) определяют дополнительные права доступа к файлам и директориям других юзеров (подробнее об этом смотри в ****), у некторых из них (в смысле - юзеров) могут возникнуть желания (и реальная необходимость) образовывать новые группы, в которые входили бы только "близкие друзья" какого-либо юзера, но не входили все остальные. Естественно, при обычных условиях, "рядовой" юзер не сможет создать новую группу для себя и своих друзей (хотя ничего опасного для безопасности системы в этом нет). Для этого ему придется обращаться к root'у. Так вот, даже если есть реальная необходимость некоторым юзерам (не имеющим прав администратора) время от времени создавать новые группы или менять "список членов" какойлибо группы, не надо давать им право менять содержимое /etc/group. Это сильно ослабит безопасность системы. (Если такая необходимость действительно существует, лучше решать эту проблему, написав http://www.freebsd.bip.ru/group.shtml (2 of 3)10.04.2004 17:24:45

Daemon News Russia

специальную программу, которая позволит отдельным юзерам изменять некоторые группы.)

(c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/group.shtml (3 of 3)10.04.2004 17:24:45

Daemon News Russia

новости

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь

Как удалить юзера С одной стороны, очень просто - удалите его учетную карточку из базы. Это можно сделать программой vipw - найдите соответствующую строчку и удалите ее. С другой стороны, в системе могут быть файлы, принадлежащие этому юзеру, а, также, имя юзера может встречаться в некоторых других файлах. Что надо удалить? Найти все эти файлы можно с помощью... Где еще могут остаться упоминания об этом юзере? Самый простой способ удалить юзера (программы rmuser и pw). Что надо удалить? Во-первых, домашнюю директорию юзера. Кстати, если администратор не предпринимал никаких действий, чтобы дать юзеру возможность писать в другие директории, то все файлы, которые мог "наплодить" юзер должны лежать в его Home dir. Если же вы дали юзеру права создавать файлы в других диркториях (в публичном ftp архиве или в директории www сервера, например), то, возможно, надо "почистить" и там. Во-вторых, "почтовый ящик" юзера в директории /var/mail. Сделайте это обязательно, даже если юзер просил "пока не удалять почту" (или хотя бы уберите этот файл из /var/mail). Дело в том, что название этого файла совпадает с Name юзера, а права на чтение/запись определяются его user ID, и, естественно, должны соответствовать друг-другу. Не вдаваясь в подробности, могу сказать, что если вы вскоре зарегистрируете нового пользователя с тем же user ID (он же освобождается), но с другим именем, или наоборот - с таким же именем, как у старого юзера, но с другим user ID, то у этого нового юзера возникнут серьезные проблемы с получением почты. В-третьих. Могут быть еще где-то раскиданы файлы, владельцем которых был этот юзер. Например, в директории /tmp, /usr/tmp, /var/tmp. Найти все эти файлы можно с помощью программы find. Например, так find / -user vasia (Обратите внимание, первый аргумент - директория, начиная с которой искать. В данном примере это корневая, то есть будут просмотрены все файлы в системе. С одной стороны это хорошо - ничего не пропустите, но, с другой стороны, если у вас стоит ньюс-сервер или огоромный ftp-архив, то ждать придется долго). С помощью этой же команды можно и удалить все найденные файлы find / -user vasia -delete однако, поскольку она не спрашивает подтверждения, этот метод очень опасный. Лучше уж

http://www.freebsd.bip.ru/deluser.shtml (1 of 2)10.04.2004 17:24:46

Daemon News Russia

заставить ее выполнять команду rm ( с подтверждением) для каждого найденного файла find / -user vasia -exec rm -i {} \; И, наконец, привожу небольшой список (скорее всего, неполный) - где еще могут остаться упоминания об этом юзере. ● ● ●









в файлах /etc/group, /etc/login.access, /etc/ftpusers в таблицах программы sendmail: /etc/aliases и т.п. (virtusertable, genericstable и др.) если у вас отдельным юзерам разрешается запускать задачи с помощью cron, то юзер может упоминаться в /etc/crontab или в /var/cron/allow, /var/cron/deny, а, также, может быть его индивидуальная crontab в /var/cron/tabs/ если юзерам разрешается пользоваться "пакетным" выполнением программ, то юзер может упоминаться в /var/at/at.allow, /var/at/at.deny если у вас ведется "квотирование" дискового пространства, то должна быть quote для этого юзера если юзер пользуется IP связью через модем, то он может упоминаться в файлах, лежащих в /etc/sliphome или /etc/ppp от имени юзера могут запускаться какие-нибудь демоны (особенно это касается псевдоюзеров), тогда имя юзера может быть в /etc/inetd.conf или /etc/rc.local.

Итак, вы видите, что полное удаление юзера из системы в общем случае очень не простая задача. Однако, в большинстве случаев все гораздо проще. Самый простой способ удалить юзера (программы rmuser и pw). Большую часть работы по удалению юзера (и всяческих упоминаний о нем) выполняет программа rmuser Во всяком случае, кроме удаления учетной карточки, она удаляет ● ● ● ● ●

его домашнюю директорию; его "почтовый ящик" в /var/mail; упоминания о юзере в /etc/group; персональную crontab юзера; "пакетные" задания юзера в /var/at/jobs.

Как я уже сказал, в большинстве случаев этого вполне достаточно. Те же действия выполняет "универсальная" утилита pw. Для этого ее нужно запустить в виде pw userdel -r (без ключа -r она только удалит учетную карточку из базы)y

(c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/deluser.shtml (2 of 2)10.04.2004 17:24:46

Daemon News Russia

новости

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь

Установка сервера Apache Установка новых (сделанных на базе Apache-1.3.x) версий 1. Распаковка исходных текстов. ●

Если вы перекачали себе полный архив (apache_1.3.NrusPLMM.K.tar.gz), просто распакуйте его программой tar: tar xzvf apache-1.3.0-rusPL25.7.tar.gz



Если вы перекачивали только правки (файл patches_1.3.0...), то распакуйте сначала дистрибутивный Apache-1.3.0 (tar xzvf apache_1.3.0.tar.gz), затем перейдите в директорию apache_1.3.0 и раскройте архив с патчами (tar xzvf /path/to/ patches_1.3.0rusPLNN.M.tar.gz). При этом распакуются все дополнительные файлы, которых нет в оригинальном apache и файл RA-1.3rusPLNN.M.patch в котором содержатся исправления к оригинальному коду. Эти исправления "накладываются" программой patch (patch -p0 111.222.333.444:2139 aliased to 1.2.3.444:2139 => 111.222.333.444:2139

Вот собственно и всё, минимальная работоспособность обеспечена. Точнее работоспособность максимальная без каких-либо ограничений. Теперь перейдём к моей любимой части, закрыванию всего чего можно. Закрыть их всех! Вообще существует много подходов к безопасности. Например - закрыть всё и открывать только нужные порты, если вы точно знаете, что все пользователи вашей фирмы используют интернет только для www, то открывайте 80-й порт и наслаждайтесь жизнью, но такая ситуация крайне редка. Следующий подход заключается в том, что вы закрываете наиболее опасные сервисы и разрешаете всё остальное. Вот список того, что настоятельно рекомендуется закрыть! DNS zone transfers socket 53 (TCP) tftpd socket 69 (UDP) link socket 87 (TCP) (commonly used by intruders) SunRPC & NFS socket 111 and 2049 (UDP and TCP) BSD UNIX "r" cmds sockets 512, 513, and 514 (TCP) lpd socket 515 (TCP) uucpd socket 540 (TCP) openwindows socket 2000 (UDP and TCP) X windows socket 6000+ (UDP and TCP)

Для реализации этого в ваш скрипт перед последним правилом вставьте #Set of reject rules

http://www.freebsd.bip.ru/firewall.shtml (3 of 4)10.04.2004 17:25:01

Daemon News Russia

# #tftp $fwcmd add reject udp from any to any 69 #link $fwcmd add reject tcp from any to any 87 #SunRPC & NFS $fwcmd add reject tcp from any to any 111,2049 $fwcmd add reject udp from any to any 111,2049 #BSD UNIX "r" cmds $fwcmd add reject tcp from any to any 512,513,514 #lpd $fwcmd add reject tcp from any to any 515 #uucpd $fwcmd add reject tcp from any to any 540 #openwindows $fwcmd add reject tcp from any to any 2000 $fwcmd add reject udp from any to any 2000 #X windows $fwcmd add reject tcp from any to any 6000-6010 $fwcmd add reject udp from any to any 6000-6010

Перезапускайте сервер и работайте. Некоторые дополнения ● ●



Правила, действующие в вашей системе можно посмотреть с помощью команды ipfw -a l Если в правило вы добавите опцию log после слов allow/deny/reject то информация о пакетах, подходящих под это правило будет записываться в файл /var/log/security. Но будьте аккуратны, некоторые правила могут генерировать огромное количество логов. Если natd запускать с ключом -log, то nat будет писать некоторую свою статистику в /var/ log/alias.log. При перезапуске natd этот файл обнуляется. (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/firewall.shtml (4 of 4)10.04.2004 17:25:01

Daemon News Russia

новости

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь

Интерпретатор команд При работе с FreeBSD, в большинстве случаях для выполнения повседневных задач используется командный интерфейс (так называемый ``шелл''), который принимает команды, которые ему подаются, и выполняет их. Многие командные интерпретаторы имеют встроенные средства выполнения наиболее часто используемых команд, например, операции над файлами и каталогами, редактирование командной строки, командные макросы и переменные окружения. Вместе с FreeBSD поставляется несколько командных интерпретаторов, например, sh, или Bourne Shell, и csh, иначе C-shell. Многие другие, более мощные, например, tcsh или bash, доступны в коллекции портов. Какой из командных интерпретаторов использовать? Это дело вкуса. Если Вы программируете на C, то Вам, возможно, понравится tcsh, а если Вы работали с Linux, то Вас скорее устроит bash, нежели что-либо другое. Каждый из названных интерпретаторов имеет свои особенные свойства, которые отличат его от других и, возможно, повлияют на Ваш выбор. Одна из наиболее часто используемых функций командного интерпретатора - дополнение частичного имени файла до полного. Вы можете набрать только первые несколько символов имени файла, нажать клавишу табуляции (TAB), и командный интерпретатор автоматически Например, у нас есть два фала, названные foobar и foo.bar. Допустим, мы хотим удалить файл foo.bar. Для этого, наберем на клавиатуре rm fo[TAB].[TAB]. Вы увидите следующее: rm foo[BEEP].bar. Здесь [BEEP] - это так называемый консольный звонок, сигнализирующий о том, что интерпретатор не в состоянии закончить имя файла, так как по введенным Вами символам невозможно однозначно идентифицировать файл. Например, имена файлов foobar и foo.bar оба начинаются с fo, но после нажатия TAB можно однозначно дополнить только до foo. Если же теперь ввести точку (.) и вновь нажать TAB, интерпретатор достроит имя файла целиком. При работе с любым командным интерпретатором, Вы столкнетесь с переменными окружения. Под переменной окружения понимается некоторая строка символов, идентифицируемая некоторым именем. Значение переменных окружения может быть прочитано любо программой, запущенной из командного интерпретатора, и часто содержит конфигурационные настройки для многих приложений и утилит. Ниже приведены некоторые наиболее часто встречающиеся переменные окружения с объяснением их значения: Переменная Описание USER Имя текущего пользователя. PATH Каталоги, разделенные двоеточием, в которых производить поиск исполняемых файлов. DISPLAY Сетевое имя виртуального дисплея X11, если доступен для подключения. http://www.freebsd.bip.ru/shell2.shtml (1 of 3)10.04.2004 17:25:02

Daemon News Russia

SHELL TERM

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

TERMCAP

Список escape-последовательностей для управления различными функциями терминала.

OSTYPE

Название (тип) операционной системы. Например, FreeBSD.

MACHTYPE EDITOR PAGER

MANPATH

Архитектура машины (процессора). Предпочитаемый пользователем текстовый редактор. Предпочитаемая пользователем утилита просмотра файлов. Каталоги, разделенные двоеточием, в которых производить поиск файлов системного справочника.

В зависимости от используемого командного интерпретатора, для просмотра и установки значений переменных окружения служат различные команды. Например, в интерпретаторах csh и tcsh это setenv. В sh и bash это set и export. В частности, чтобы установить или изменить значение переменной EDITOR (в csh или tcsh) равное /usr/local/bin/emacs, выполните команду: setenv EDITOR /usr/local/bin/emacs Если Вы используете bash: export EDITOR="/usr/local/bin/emacs" Чтобы получить значение переменной, например, в командной строке, поместите символ доллара ($) перед именем переменной. Например, команда echo $TERM выведет значение переменной $TERM. Командный интерпретатор воспринимает некоторые символы, называемые метасимволами, в качестве управляющих, несущих специальные функции. Одни из наиболее часто используемых символ *, который заменяет любое количество символов в имени файла, и ?, заменяющий один символ. Эти метасимволы используются для поиска файлов по маске, например, команда echo * выполняет практически тоже самое, что и команда ls, так как под маску * попадают все файлы из текущего каталога (на самом деле, это всегда так и зависит от командного интерпретатора, например, в bash под маску * не попадут файлы, начинающиеся с точки . скрытые файлы). В некоторых ситуациях требуется, чтобы интерпретатор воспринимал метасимволы как обычные, не несущие специальной смысловой нагрузки. Этого можно достичь, поставив перед символом обратную косую черту (\). Например, команда echo $TERM выведет тип Вашего терминала, в то же время команда echo \$TERM выведет именно слово $TERM, а не значение переменной $TERM. Как изменить командый интерпретатор по умолчанию Самым простым, пожалуй, будет воспользоваться командой chsh. Если переменная EDITOR определена, то будет загружен текстовый редактор $EDITOR, иначе vi. Вам нужно будет изменить значение поля ``Shell:'' и выйти из редактора с сохранением результатов. http://www.freebsd.bip.ru/shell2.shtml (2 of 3)10.04.2004 17:25:02

Daemon News Russia

Можно также воспользоваться опцией -s команды chsh. Например: % chsh -s /usr/local/bin/bash Note: Помните, чтобы использовать некоторую программу в качестве командного интерпретатора, она должна быть обязательно упомянута в файле /etc/shells. Обычно, при установке интерпретаторов из дерева портов, это делается автоматически. Если же это не так, Вам нужно будет самим добавить соответствующую строчку в этот файл. Например, допустим, что Вы установили bash вручную, без использования соответствующего порта, и поместили его в каталог /usr/local/bin. В таком случае, можно набрать: # echo "/usr/local/bin/bash" >> /etc/shells Теперь можно смело использовать команду chsh.

http://www.freebsd.bip.ru/shell2.shtml (3 of 3)10.04.2004 17:25:02

(c) 2001-2002 Daemon News Russia

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Причины существования уязвимостей в UNIX-системах новости

Рассмотрев выше достаточно много фактического материала, мы коснемся причин, по которым описанные нарушения безопасности UNIX имели место, и попытаемся их классифицировать. Сразу оговоримся, что эта классификация ни в коей мере не претендует на новизну или полноту - кому интересна эта тема, предлагаем обратиться к более серьезным научным работам [9, 23]. Здесь же мы опишем вполне понятные читателю причины, по которым, тем не менее, происходит до 90% всех случаев вскрытия UNIX-хостов. 1. Наличие демонов. 2. Механизм SUID/SGID-процессов. Эти механизмы, являющиеся неотъемлемой частью идеологии UNIX, были и будут лакомым кусочком для хакеров, т. к. в этом случае пользователь всегда взаимодействует с процессом, имеющим большие привилегии, чем у него самого, и поэтому любая ошибка или недоработка в нем автоматически ведет к возможности использования этих привилегий. 3. Излишнее доверие. Об этом уже достаточно говорилось выше. Повторим, что в UNIX достаточно много служб, использующих доверие, и они могут тем или иным способом быть обмануты. К этим трем причинам нельзя не добавить следующую: 4. Человеческий фактор с весьма разнообразными способами его проявления - от легко вскрываемых паролей у обычных пользователей до ошибок у квалифицированных системных администраторов, многие из которых как раз и открывают путь для использования механизмов доверия.

http://www.freebsd.bip.ru/pbugs.shtml (1 of 4)10.04.2004 17:25:04

Daemon News Russia

Рис. 8.2. Причины уязвимости UNIX при атаках на телекоммуникационные службы. Рассмотрим теперь более подробно причины, по которым оказываются уязвимы демоны и SUID/ SGID-процессы: 1. возможность возникновения непредусмотренных ситуаций, связанных с ошибками или недоработками в программировании; 2. наличие скрытых путей взаимодействия с программой, называемых "люками" ; 3. возможность подмены субъектов и объектов различным образом. К первым можно отнести классическую ситуацию с переполнением буфера или размерности массива (примеры см. п. 8.4.1.2 и 8.6.2), ведущую к затиранию области стека и записи туда специальных команд, которые будут затем исполнены. Заметим сразу, что этот способ, несмотря на http://www.freebsd.bip.ru/pbugs.shtml (2 of 4)10.04.2004 17:25:04

Daemon News Russia

свою популярность, всегда будет системозависимым и ориентирован только на конкретную платформу и версию UNIX. Хорошим примером непредусмотренной ситуации в многозадачной операционной системе является неправильная обработка некоторого специального сигнала или прерывания. Часто хакер имеет возможность смоделировать ситуацию, в которой этот сигнал или прерывание будет послано (в UNIX'е посылка сигнала решается очень просто: командой kill- см. пример 8.6.2). Наконец, одна из самых распространенных программистских ошибок является неправильная обработка входных данных (это является некоторым обобщением случая переполнения буфера.) По свидетельству [24], ими в 1990 и 1995 годах были подвергнуты автоматизированному тестированию около 80 программ на 9 различных платформах UNIX ? специальная программа подавала на вход строки длиной до 100000 символов. Результатом явилось то, что 25- 33% в 1990 г. и 18- 23% в 1995 г. работали некорректно: зависали, сбрасывали аварийный дамп и т. п. (Интересно, что в коммерческих версиях UNIX этот процент доходил до 43, тогда как в свободно распространяемых он был меньше 10.) Впрочем, справедливости ради надо отметить, что только 2 программы-демона вели себя таким образом в 1990 г., а через 5 лет эти ошибки были исправлены. Ну, а если программа неправильно обрабатывает случайные входные данные, то очевидно, что можно подобрать такой набор специфических входных данных, которые приведут к желаемым для хакера последствиям. Примером этого может служить innd (8.6.4). Люком, или "черным входом" (backdoor) часто называют оставленную разработчиком недокументированную возможность взаимодействия (чаще всего входа в систему), например, известный только разработчику универсальный "пароль" . Люки оставляют в конечных программах вследствие ошибки, не убрав отладочный код или вследствие необходимости продолжения отладки уже в реальной системе в связи с ее высокой сложностью или же их корыстных интересов. Люки это любимый путь входа в удаленную систему не только у хакеров, но и у журналистов и режиссеров вкупе с подбором "главного" пароля перебором за минуту до взрыва, но в отличие от последнего способа, люки реально существуют. Классический пример люка - это, конечно, отладочный режим в sendmail. Наконец, вследствие многих особенностей UNIX, таких как асинхронное выполнение процессов, развитый командный язык и файловая система, злоумышленниками могут быть использованы механизмы подмены одного субъекта или объекта другим. Например, в рассмотренных выше примерах часто применялась замена имени файла, имени получателя и т. п. именем программы (см. 8.5.2.3 и 8.5.2.4.3). Аналогично может быть выполнена подмена некоторых специальных переменных. Так, для некоторых версий UNIX существует атака, связанная с подменой символа разделителя команд или опций на символ "/"¦ . Это приводит к тому, что когда программа вызывает /bin/sh, вместо него вызывается файл bin с параметром sh в текущем каталоге. Похожая ситуация возникает при атаке на telnetd (см. 8.6.1). Наконец, очень популярным в UNIX видом подмены является создание ссылки (link) на критичный файл. После этого файл-ссылка некоторым образом получает дополнительные права доступа, и тем самым осуществляется несанкционированный доступ к исходному файлу. Аналогичная ситуация с подменой файла возникает, если путь к файлу определен не как абсолютный (/bin/sh), а относительный (../bin/ sh или $(BIN)/sh). Такая ситуация имела место в рассмотренной уязвимости telnetd. И последнее - нельзя приуменьшать роль человека при обеспечении безопасности любой системы. Возможно, он даже является слабейшим звеном. Про необходимость выбора надежных паролей уже говорилось. Неправильное администрирование - такая же актуальная проблема, а для UNIX она особенно остра, т. к. сложность администрирования UNIX-систем давно уже стала притчей во языцех и часто именно на это упирают конкуренты. Но за все надо платить, и это обратная сторона

http://www.freebsd.bip.ru/pbugs.shtml (3 of 4)10.04.2004 17:25:04

Daemon News Russia

переносимости и гибкости UNIX. Более того, если говорить о слабости человека, защищенные системы обычно отказываются и еще от одной из основных идей UNIX ? наличия суперпользователя, имеющего доступ ко всей информации и никому не подконтрольного. Его права могут быть распределены среди нескольких людей: администратора персонала, администратора безопасности, администратора сети и т. п., а сам он может быть удален из системы после ее инсталляции. В результате вербовка одного из администраторов не приводит к таким катастрофическим последствиям, как вербовка суперпользователя. Настройки некоторых приложений, того же sendmail, настолько сложны, что для поддержания работоспособности системы требуется специальный человек - системный администратор, - но даже он, мы уверены, не всегда знает о всех возможностях того или иного приложения и о том, как правильно их настроить. И если хакеры смогли проникнуть в систему, то это не всегда говорит о халатности администратора, а, зачастую, о его ограниченном знании того или иного продукта. Это параграф из книги "Атака через Интернет"

(c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/pbugs.shtml (4 of 4)10.04.2004 17:25:04

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Новое в мире демонов: FreeBSD 4.4 новости

Судьба FreeBSD (как, впрочем, и остальных открытых представителей *BSD-линии) с самого начала бума Open Sources - быть в тени Linux. Причин к тому можно отыскать много. Здесь и романтическая история создания последней - сродни рождественским сказкам про бедного студента. Хотя, если вдуматься, создание FreeBSD - история столь же драматическая . И то, что в разработке Linux может принять участие любой желающий - но ведь для большинства из нас эта возможность остается чисто теоретической. И постоянные сводки (напоминающие сводки с театра военных действий) об очередной версии (подверсии, пре-версии) ядра Linux, проникающие не только в компьютерную прессу, но и в массовую. Об обновления же FreeBSD можно узнать только на специализированных новостных сайтах. Не стала исключением и последняя версия FreeBSD, имеющая номер 4.4 - выход ее, широко известный в узких кругах, прошел незамеченным для народных околокомпьютерных масс. Однако кое в чем эта версия знаменует собой рубеж в развитии системы. Не возьмусь судить, она стала событием в мировом масштабе. Но в масштабе российском значение ее несомненно: впервые эта система в полном своем объеме стала легко- (и - быстро!) доступной. Каким образом ее можно было получить раньше? Ну, во-первых, разумеется, скачать с официального сайта или его многочисленных зеркал. О достоинствах этого способа умолчу достаточно сказать, что полный дистрибутив FreeBSD тянет гигабайта на два, неплохо для модемного (и даже выделенного) соединения, не так ли? Во-вторых, дистрибутив FreeBSD в фирменном (или близком к таковому) исполнении можно было купить в книжных магазинах. Однако это были или а) урезанные, однодисковые, варианты, или б) комплекты полные, но появлявшиеся обычно в преддверии выхода следующей версии (а то и после такового). Да и изрядно дорогие, к тому же. В третьих, однодисковые дистрибутивы всегда существовали и в "базарном" (не скажу пиратском, это слово тут неуместно) исполнении. Недостаток их (вне зависимости от происхождения) - бедность приложениями. Конечно, благодаря системе портов минимальный комплект FreeBSD легко нарастить до полнофункциональной версии. Однако это требует если и не постоянного подключения, то весьма хорошего канала связи - уж точно. В противном случае приходится вытаскивать отдельные пакеты (т.н. packages), взаимозависимости между которыми не всегда прозрачны. Ныне же полная FreeBSD 4.4 появилась в системе http://www.linux-online.ru/ практически сразу за его объявлением. И - в полном комплекте, ажно о пяти CD. Его можно заказать по Сети, с доставкой по почте (а в Москве - так и на дом, курьером), за очень умеренные деньги (в пересчете на диск - дешевле ворованного с базара). Что не может не радовать если и не пользователей этой системы (большинство из них все же - сетевые администраторы, сидящие на быстрых линиях), то просто интересующихся ею по мере сил и возможностей. Полный дистрибутив FreeBSD включает пять дисков: http://www.freebsd.bip.ru/freebsd44.shtml (1 of 5)10.04.2004 17:25:05

Daemon News Russia



● ●



Mini - минимальный установочный комплект, соответствующий, насколько я понял, однодисковому варианту; Install - собственно установочный (загрузочный) диск для полной версии; Disk 2 - двоякого назначения; во-первых, это спасательная (Fix-it, в терминологии FreeBSD) система на аварийные случаи, содержащая т.н. Live Filesystem; во-вторых, диск этот содержит подборку дополнительных, не вполне открытых и свободных программ; Disk 3 и Disk 4 - подборки дополнительных пакетов (packages).

Инсталляционная программа практически не претерпела изменений с предыдущих версий, включая в себя собственно установку (в стандартном, быстром и заказном вариантах) и серию пост-инсталляционных действ (рис. 1). Мне бросилось в глаза два небольших, но существенных для пользователя усовершенствования в процедуре.

Рис. 1. Главное меню инсталляционной программы FreeBSD Первое - уже на стадии разбиения диска для создаваемых разделов (partitions) можно включить т.н. поддержку Soft Upadate (рис. 2) - этот режим по сути своей близок к кэшированию дисковых операций в Linux. Соответственно, нет необходимости в не вполне очевидных действиях по размонтированию файловых систем и его ручной активизации, что было предметом одной из моих предыдущих заметок. Режим же Soft Upadate кажется абсолютно необходимым любому пользователю - без него копирование сотни мегабайт мелких файлов во FreeBSD способно довести до белого каления.

http://www.freebsd.bip.ru/freebsd44.shtml (2 of 5)10.04.2004 17:25:05

Daemon News Russia

Рис. 2. Создание файловых систем при установке FreeBSD; обратите внимание на опцию S внизу - это и есть включение режима Soft Update Второе усовершенствование относится к стадии пост-инсталляционного конфигурирования (рис. 3). Это - возможность настройки виртуальных консолей FreeBSD. Каковая сводится к ручному редактированию (в редакторе vi) файла /etc/ttys (рис. 4). Казалось бы - мелочь, однако это дает возможность сразу же, еще до первой загрузки, заменить тип терминала cons25 на cons25r. Что очень желательно при установке кириллических шрифтов для консольного режима, так как избавляет от созерцания уродливой псевдографики в программах типа Midnight Commander.

http://www.freebsd.bip.ru/freebsd44.shtml (3 of 5)10.04.2004 17:25:05

Daemon News Russia

Рис. 3. Пост-инсталляционное конфигурирование - новая опция TTYs

Рис. 4. Редактирование файла /etc/ttys

http://www.freebsd.bip.ru/freebsd44.shtml (4 of 5)10.04.2004 17:25:05

Daemon News Russia

Установить потребные пакеты со всех трех дисков можно в один присест, правда, в ручном режиме - то есть диски нужно менять самому и перечитывать источник для установки. Но зато диски содержат практически полный набор приложений на все случаи жизни. Перечислять их было бы скучно - пользователь Linux найдет подавляющее большинство привычных рабочих сред, утилит и приложений. Отмечу лишь, что к XFree86 версии 3.3.6 прибавились X'ы версии 4.1 - правда, не в основном наборе (Distributions), а среди дополнительных пакетов (packages), устанавливаемых в каталог /usr/local. Соответственно, обеспечением их настройки и запуска придется озаботиться самому. Конечно, новая версия FreeBSD не содержит ничего революционно нового по сравнению с предыдущими. Однако мелкие эволюционные новшества делают ее более удобной в использовании - особенно для начинающего знакомство с этой системой. А ознакомиться с ней очень невредно, после этого начинаешь другими глазами смотреть и на Linux... Алексей Федорчук, [email protected] (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/freebsd44.shtml (5 of 5)10.04.2004 17:25:05

Daemon News Russia

новости \\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Установка и конфигурирование fetchmail

Fetchmail - это программа, позволяющая забирать почту по протоколам POP3, APOP, KPOP, IMAP4. Fetchmail может "обслуживать" сразу несколько как удаленных, так и локальных ящиков. Если вы собираетесь использовать fetchmail для доставки электронной почты на несколько локальных ящиков, то лучше написать конфигурационный файл, поставив на нем права пользователя root и группы wheel. Инсталлируем fetchmail: # cd /usr/ports/mail/fetchmail && make install && make clean Приблизительный конфигурационный файл /root/.fetchmailrc set daemon 600 # fetchmail стартует в daemon-режиме defaults poll mail.server1 with protocol POP3: no dns, user account1 password passwd1 is local_user_1 here; poll mail.server2 with protocol POP3: no dns, user account2 password passwd2 is local_user_2 here; В приведенном выше примере fetchmail каждые 10 минут идет на сервер mail.server1 и забирает почту пользователя account1 с паролем passwd1 и выкладывает эту почту пользователю local_user_1 на локальной машине. Напишем маленький скрипт /usr/local/etc/rc.d/fetchmail.sh: #!/bin/sh [ -x /usr/local/bin/fetchmail ] && /usr/local/bin/fetchmail && echo -n ' fetchmail' Говорим (на всякий случай): # chmod 500 /usr/local/etc/rc.d/fetchmail.sh Теперь fetchmail можно использовать. (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/fetchmail.shtml10.04.2004 17:25:06

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Установка и конфигурирование postfix новости

Что такое postfix? Если ответить коротко, то postfix - это MTA (Mail Transfer Agent). Подробнее о postfix можно узнать на http://www.postfix.org Ниже описан процесс инсталляции и конфигурации. Соберем postfix: # cd /usr/ports/mail/postfix # make all install ВНИМАНИЕ! Если вы ХОТИТЕ использовать postfix вместо sendmail сделайте: # make replace ВНИМАНИЕ! Во время инсталляции postfix будет добавлен пользователь postfix. Если вы использовали sendmail, замените строку в /etc/rc.conf с sendmail_enable="YES" на sendmail_enable="NO" и после этого напишите /usr/local/etc/rc.d/postfix.sh (как это сделать описано ниже) Напишем конфигурационные файлы: # /usr/local/etc/postfix/main.cf # Config file for postfix mail system. # queue_directory = /var/spool/postfix command_directory = /usr/local/sbin daemon_directory = /usr/local/libexec/postfix mail_owner = postfix default_privs = nobody myhostname = yourhost.yourdomain.com mydomain = yourdomain.com mynetworks = 192.168.1.0/24, 127.0.0.0/8 myorigin = $mydomain inet_interfaces = $myhostname, localhost mydestination = $myhostname, localhost.$mydomain, $mydomain default_transport = smtp alias_database = hash:/etc/aliases mailbox_command = /usr/local/bin/procmail smtpd_banner = $myhostname ESMTP READY smtpd_client_restrictions = permit_mynetworks, reject_unknown_client smtpd_sender_restrictions = permit_mynetworks, reject_unknown_address, reject_non_fqdn_sender, reject_invalid_hostname smtpd_recipient_restrictions = permit_mynetworks, permit_mx_backup, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unknown_sender_domain, check_relay_domains, reject_unknown_client, reject local_destination_concurrency_limit = 2 default_destination_concurrency_limit = 10 debug_peer_level = 2 debugger_command = http://www.freebsd.bip.ru/postfix.shtml (1 of 3)10.04.2004 17:25:07

Daemon News Russia

PATH=/usr/bin:/usr/X11R6/bin xxgdb $daemon_directory/$process_name $process_id & sleep 5 Сохраним этот файл как /usr/local/etc/postfix/main.cf ВНИМАНИЕ! yourhost.yourdomain.com следует сменить на имя вашего хоста, yourdomain.com на имя вашего домена, если у вас есть доступ на relay вашего провайдера, то вам следует добавить строку в /usr/local/etc/postfix/main.cf: relayhost = relay1.yourprovider.com где relay1.yourprovider.com и есть relay вашего провайдера. ВНИМАНИЕ! В параметре mynetworks следует указать ваши реальные сети. ВНИМАНИЕ! Все конфигурационные файлы postifix находятся в /usr/local/etc/postfix. Напишем /usr/local/etc/postfix/master.cf: # /usr/local/etc/postfix/master.cf # #========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (50) # #========================================================================== smtp inet n - y - - smtpd pickup fifo n n n 60 1 pickup cleanup unix - - n - 0 cleanup qmgr fifo n - n 300 1 qmgr rewrite unix - - n - - trivial-rewrite bounce unix - - n - 0 bounce defer unix - - n - 0 bounce smtp unix - - n - - smtp showq unix n - n - - showq local unix - n n - - local cyrus unix - n n - - pipe flags=R user=cyrus argv=/cyrus/bin/deliver -e -q -m ${extension} ${user} uucp unix - n n - - pipe flags=F user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient) Сохраним этот файл как /usr/local/etc/postfix/master.cf Напишем скрипт для запуска postfix из /usr/local/etc/rc.d: #!/bin/sh [ -x /usr/local/sbin/postfix ] && /usr/local/sbin/postfix start && echo -n ' postfix' Сохраним скрипт в файле /usr/local/etc/rc.d/postfix.sh Сделаем его выполняемым: # chmod 500 /usr/local/etc/rc.d/postfix.sh Установим procmail для локальной доставки почты: # cd /usr/ports/mail/procmail # make all install И, наконец, запускаем postfix: # /usr/local/sbin/postfix start Некоторое время следует последить за работой postfix, периодически заглядывая в /var/log/ maillog: # tail -f /var/log/maillog http://www.freebsd.bip.ru/postfix.shtml (2 of 3)10.04.2004 17:25:07

Daemon News Russia (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/postfix.shtml (3 of 3)10.04.2004 17:25:07

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Мониторинг траффика с использованием trafd новости

Обзор Программа trafd позволяет системному администратору отслеживать все аспекты использования траффика. Она сохраняет все адреса источника и отправителя, использованный порт и протокол и подсчитывает данные за определеный период. Это значит что если у вас есть 128 IP на роутере, то вы можете мониторить использование траффика на каждом IP, что может содействовать выписке клиенту счета. Здесь очень короткий пример вывода информации trafd: # traflog -s -i xl0 (xl0) testbox.BSDpro.com at Apr 29 03:35:03 - May 7 18:45:01 Summary: 517620379 data bytes, 673157543 all bytes, 3267 records From

Port

To

Port

testbox.BSDpro.com http

wc1-int2.nbnet.nb.

client tcp

12399412 13007204

testbox.BSDpro.com http

wc1-int1.nbnet.nb.

client tcp

11766465 12336221

ip142166205174.nbt client testbox.BSDpro.com ssh

All

tcp

3018268

11591208

6667 tcp

3728136

10722060

4397 testbox.BSDpro.com client tcp

5379910

10506474

testbox.BSDpro.com client private.xx.toinkf. private.xx.toinkf. Инсталяция

Proto Data

Надо использовать FreeBSD порты для инсталяции. Если вы не используете порты,или у вас OpenBSD или NetBSD, вы можете скачать архив tar для trafd с ftp://ftp.riss-telecom.ru/pub/dev/trafd/ trafd-3.0.1.tgz. Если вы скачали архив, то отредактируйте скрипты, входящие в комплект trafd, такие как trafstart, trafsave и т.д. Вам надо добавить #!/bin/sh в их первую строчку. Также посмотрите куда проинсталированы программы и скрипты ( в портах FreeBSD по умолчанию /usr/local/). Теперь, если вы используете порты FreeBSD делайте: # cd /usr/ports/net/trafd # make install Будут проинсталированы trafd, trafstart, trafstop, trafsave, trafdump, trafstat, trafstatd и traflog в /usr/local/bin/. A файл README будет положен в /usr/local/share/doc/trafd/. Также будут созданы директории: /usr/local/var/trafd http://www.freebsd.bip.ru/trafd.shtml (1 of 3)10.04.2004 17:25:08

Daemon News Russia

/usr/local/var/log. По умолчанию FreeBSD работает на ядре GENERIC. Для мониторинга пакетов trafd, необходима поддержка ядра. Необходимо добавить: pseudo-device bpf в вашу конфигурацию ядра (впрочем эта функция по умолчанию поддерживается в последних версиях). Чтобы trafd корректно стартовал и останавливался при перезагрузке, необходимо добавить скрипт. Создайте /usr/local/etc/rc.d/trafd.sh и положите туда: #!/bin/sh case "$1" in start) [ -x /usr/local/bin/trafstart ] && /usr/local/bin/trafstart > /dev/null && echo -n 'trafd' ;; stop) [ -x /usr/local/bin/trafstop ] && /usr/local/bin/trafstop xl0 > /dev/null && echo -n 'trafd' ;; *) echo "Usage: `basename $0` {start|stop}" > &2 ;; esac exit 0 В начале скрипта вам надо заменить xl0 на подходящее имя вашей NIC ( если вы не знаете ваш девайс, то используйте команду ifconfig. Она покажет все интерфейсы, найдите один,связанный с интернетом). Окей trafd проинсталирован ! Запуск и получение информации Подредактируйте /usr/local/bin/trafstart. Стартуйте так: ./trafd -p -r -i xl0 Вам надо сделать только одну вещь, ихменить часть -i xl0. Вы должны также изменить путь trafd: ./trafd на /usr/local/sbin/trafd (так лучше). Теперь стартуем демона: # trafstart Теперь убедимся, что данные сохранены, и подредактируем crontab: */15 * * * * root /usr/local/bin/trafsave xl0 Это будет сохранять данные о трафике каждые 15 минут в файле: /usr/local/var/trafd/trafd.xl0 Для просмотра текущей статистики трафика просто используем команду: # traflog -s -i xl0 Это выведет всю инфу о использовании трафика. Если вы не хотите, чтоб выводились доменные имена, то http://www.freebsd.bip.ru/trafd.shtml (2 of 3)10.04.2004 17:25:08

Daemon News Russia

используйте опцию -n. Еще про скрипты trafd, проверьте тут: http://www.bsdpro.com/scripts.php. Daniel Hemmerich

http://www.freebsd.bip.ru/trafd.shtml (3 of 3)10.04.2004 17:25:08

(c) 2001-2002 Daemon News Russia

Daemon News Russia

новости

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь

Эффекты тонкой настройки Введение Обычная инсталляция FreeBSD устанавливает пользователю систему, которая создана для удовлетворения потребностей большинства людей и является попыткой компромисса между безопасностью, надежностью и производительностью в многопользовательском окружении. Таким образом совершенно очевидно, что подобная конфигурация системы не оптимизирована для использования в качестве высокопроизводительного сетевого сервера. В этой статье я рассмотрю получаемый эффект от тонкой настройки системы для работы в качестве выделенного сетевого сервера. Описание системы и методика тестирования Для тестирования использовалась следующая конфигурация аппаратных средств: процессор Pentium III 600 MHz, 512 MB оперативной памяти, материнская плата Super Micro P6SBU. К встроенному Adaptec Ultra2 SCSI-контроллеру был подключен винчестер IBM DNES-309170W SA30 (объем 8GB). В качестве сетевого интерфейса использовалась плата фирмы 3COM 3c905B-TX. В процессе тестирования использовалась стандартная файловая система – UFS. Когда это было необходимо в качестве сетевого клиента использовался компьютер с процессором Celeron 400 MHz имеющий 128 MB оперативной памяти. Сервер был оснащен операционной системой FreeBSD-4.3-RELEASE. На клиенте были установлены несколько различных версий FreeBSD (это было сделано в связи с тем, что меры направленные на повышение безопасности в 4.3-RELEASE непреднамеренно уменьшают скорость взаимодействия двух серверов между собой. В стандартной установке нет способа исправления этой ситуации, хотя "заплатка" для устранения такого поведения была выпущена). Я запускал на сервере три различных бенчмарка по очереди в обоих конфигурациях (стандартная и подвергшаяся настройке). Результаты тестов не следует воспринимать как безусловное мерило производительности – они предназначены лишь для иллюстрации различий производительности стандартной и "подстроенной" конфигурации. Были использованы следующие тесты – http_load, для оценки производительности httpсервера (Apache), postmark, для оценки общей производительности системы и postal, для оценки производительности почтового сервера (на базе postfix). Настройка Техника оптимизации в основном взята со страниц встроенной документации (man tuning). 1. Перекомпиляция ядра. Пожалуй, это первый шаг с которого следует начать при оптимизации FreeBSD. Для этого из файла конфигурации ядра следует удалить все компоненты которые не являются важными для вашей системы и увеличить значения параметров maxusers и NMBCLUSTERS. Я использовал такой файл: # Основано на GENERIC-ядре machine i386 http://www.freebsd.bip.ru/nostroikafreebsd.shtml (1 of 8)10.04.2004 17:25:10

Daemon News Russia

cpu I686_CPU # Оптимизация для процессоров Pentium Pro и выше ident TUNED # Название сборки ядра maxusers 512 options NMBCLUSTERS=65536 # maxusers и NMBCLUSTERS самые важные настройки в оптимизированной конфигурации options INET # Поддержка TCP/IP options FFS # Berkeley Fast Filesystem (файловая система FreeBSD) options FFS_ROOT # FFS может являться корневой файловой системой options SOFTUPDATES # Разрешить мягкие обновления для файловых систем options MFS # Файловая система в оперативной памяти options PROCFS # Файловая система процессов options COMPAT_43 # Совместимость с BSD4.3 options SCSI_DELAY=5000 # Задержка перед пробой SCSI-устройств options UCONSOLE # Позволяет пользователям захватить консоль options USERCONFIG options VISUAL_USERCONFIG options KTRACE options SYSVSHM options SYSVMSG options SYSVSEM options P1003_1B options _KPOSIX_PRIORITY_SCHEDULING #options ICMP_BANDLIM # Включает лимитирование ICMP-трафика options KBD_INSTALL_CDEV # Обратите внимание параметр ICMP_BANDLIM закомментирован, так как ограничение # ICMP трафика может сказаться на других видах трафика (на мой взгляд это излишняя # перестраховка, прим. переводчика) # Удалены ненужные файловые системы ISO9660 (CDROM), NFS (сетевая файловая система) device isa device pci # Поддержка дисководов device fdc0 at isa? port IO_FD1 irq 6 drq 2 device fd0 at fdc0 drive 0 device fd1 at fdc0 drive 1 device ahc # Adaptec SCSI-контроллерAHA2940 и AIC7xxx device scbus # SCSI-шина device da # Прямой доступ (для дисков) # Удалены многочисленные ненужные SCSI/IDE/RAID драйверы device atkbdc0 at isa? port IO_KBD device atkbd0 at atkbdc? irq 1 flags 0x1 device psm0 at atkbdc? irq 12 device vga0 at isa? pseudo-device splash # необходимо для screensaver device sc0 at isa? flags 0x100 # системная консоль device npx0 at nexus? port IO_NPX irq 13 # сопроцессор # COM-порты device sio0 at isa? port IO_COM1 flags 0x10 irq 4 http://www.freebsd.bip.ru/nostroikafreebsd.shtml (2 of 8)10.04.2004 17:25:10

Daemon News Russia

device sio1 at isa? port IO_COM2 irq 3 device sio2 at isa? disable port IO_COM3 irq 5 device sio3 at isa? disable port IO_COM4 irq 9 device ppbus # Шина параллельного порта device miibus # Поддержка шины MII (необходима для сетевой карты) device xl # Драйвер сетевой карты 3COM 3c90x pseudo-device loop # Интерфейс loopback (необходим) pseudo-device ether # Поддержка Ethernet #pseudo-device sl 1 # Kernel SLIP #pseudo-device ppp 1 # Kernel PPP #pseudo-device tun # Пакетный туннель pseudo-device pty # Псевдо-ttys (telnet etc) # Заметьте PPP и SLIP, а также туннель закомментированы. # Не добавляйте эти интерфейсы в ядро, если они вам не нужны 2. Включение soft updates Это, пожалуй, один из важнейших этапов конфигурирования высокопроизводительного FreeBSDсервера (подробнее про soft updates смотрите http://www.ece.cmu.edu/~ganger/papers/CSE-TR-254-95 и http://www.mckusick.com/softdep). Soft updates это метод увеличения производительности обновления метаданных файловой системы (хочется отметить что soft updates не только повышают производительность (особенно при работе с большим количеством мелких файлов), но и существенно повышают надежность файловой системы – прим. переводчика). Следующие команды были введены в однопользовательском режиме (вызывается командой shutdown now – прим. переводчика): tunefs tunefs tunefs tunefs

-n -n -n -n

enable enable enable enable

/ /usr /var /tmp

(К сожалению автор статьи несколько недоговаривает: во-первых перед подачей этих команд следует размонтировать файловые системы командой umount, а во-вторых первая команда (tuneft -n enable /) не выполнится, так как размонтировать корневую файловую систему не удастся – прим. переводчика). 3. Sysctl Несколько sysctl-переменных должны быть изменены для достижения максимальной производительности. Следующие строки необходимо добавить в файл /etc/sysctl.conf: vfs.vmiodirenable=1 kern.ipc.somaxconn=4096 kern.maxfiles=65536 4. Остальное Несколько последних штрихов включая установку параметра "noatime" (см. /etc/fstab – прим. переводчика) на большинстве файловых систем и пристальное внимание к физическому расположению дисковых разделов (очевидно разделы к которым обращаются наиболее часто следует размещать ближе к нулевым дорожкам – прим. переводчика). http://www.freebsd.bip.ru/nostroikafreebsd.shtml (3 of 8)10.04.2004 17:25:10

Daemon News Russia

Результаты теста Http_load Для проведения этого теста я установил Apache 1.3.19 из коллекции портов, изменив параметр HARD_SERVER_LIMIT на 2048. Обычная (не тюнинговая) конфигурация не позволяет создавать 2048 процесса, я задал 128 процессов для начального запуска и максимально может быть запущено 1024 процесса. В оптимизированной конфигурации я установил 2048 постоянно работающих Apacheпроцесса. В ходе теста я запускал http_load несколько раз с количеством одновременных запросов от 10 до 1000. Я сконфигурировал сервер так что бы от отвечал по десяти IP-адресам, переключаясь между ними. Результаты представлены на рисунке:

Оптимизированная конфигурация превосходит обычную более чем на порядок. Неоптимизированная конфигурация максимально обслуживает 17 запросов/сек, как результат нехватки сетевых буферов. В свою очередь оптимизированная конфигурация увеличивает производительность при увеличении количества запросов от 333 запросов/сек до 509 запросов/сек (1800%-2900% увеличение производительности по сравнению с обычной конфигурацией). Оптимизированная конфигурация также показывает заметно меньшее количество ошибок при обработке запросов (см. рисунок).

http://www.freebsd.bip.ru/nostroikafreebsd.shtml (4 of 8)10.04.2004 17:25:10

Daemon News Russia

Результаты теста Postmark Postmark запускался с различными наборами параметров. Сначала он был запущен с конфигурацией описанной на сайте postmark'а. Эти результаты сведены в таблицу (включая результаты FreeBSD MFS -файловой системы в памяти): 1000/50000

Ultra 1 UFS1

Ultra 1 TMPFS1

Ultra 1 NFS F6302

FreeBSD Untuned

FreeBSD MFS

FreeBSD Tuned

Транзакций в секунду

36

2000

253

61

2941

276

Чтение (Кб/сек)

115.67

4880

799.91

190.95

9460

878.59

Запись (Кб/сек)

118.27

7330

817.89

195.24

9670

898.33

http://www.freebsd.bip.ru/nostroikafreebsd.shtml (5 of 8)10.04.2004 17:25:10

Daemon News Russia

20000/50000

Ultra 1 UFS1

Ultra 1 TMPFS1

Ultra 1 NFS F6302

FreeBSD Untuned

FreeBSD MFS

FreeBSD Tuned

Транзакций в секунду

15

438

176

40

256

91

Чтение (Кб/сек)

29.93

663.64

383.41

74.22

560.37

219.75

Запись (Кб/сек)

54.22

1530

694.58

134.46

1020

398

(сравнение производится со станцией Sun Ultra 1). Система была проведена через серию тестов с различными размерами файлов и их количествами:

1000 файлов

http://www.freebsd.bip.ru/nostroikafreebsd.shtml (6 of 8)10.04.2004 17:25:10

Daemon News Russia

20000 файлов Разница в быстродействии вполне очевидна в обоих случаях и составляет от 40% до 860% в данном тесте. Результаты теста Postal Для проведения этого теста в систему был установлен из системы портов Postfix (postfix-20010228-pl01). Тест запускался на полчаса с интервалом количества параллельных сессий. На тестовом сервере было создано порядка 15000 пользовательских бюджетов, Postal пользуясь их списком рассылал им почту. Тесты выполнялись без промежуточной очистки очереди сообщений с небольшими временными промежутками, т.е. не посланные сообщения оставались в очереди до следующего теста создавая дополнительную нагрузку на сервер). Несмотря на надуманность такого теста, его результаты хорошо показывают различия в производительности конфигураций. Результаты теста смотрите на рисунке:

http://www.freebsd.bip.ru/nostroikafreebsd.shtml (7 of 8)10.04.2004 17:25:10

Daemon News Russia

Различия в быстродействии варьируются от 40% до 650%. Заключение В заключении мы видим, что стандартная инсталляция FreeBSD оптимизирована для безопасности и целостности, совершенно не оптимизирована для использования в качестве высокопроизводительного сетевого сервера. В подавляющем большинстве случаев при обслуживании большого количества одновременных соединений, надежной поддержке большого количества процессов и высоким требованиям к производительности файловой системы, необходимо предпринять шаги для увеличения скорости системы по сравнению с конфигурацией "по умолчанию". Плюсы, которые могут быть извлечены из этого поистине огромны – это повышение производительности как минимум в два раза!

(c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/nostroikafreebsd.shtml (8 of 8)10.04.2004 17:25:10

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Инсталяция MRTG (Multi Router Traffic Grapher) новости

Описание Вы получаете MRTG в виде исходников. Это значит, что вы должны скомпилировать программу, до того как начнете её использовать. Эта инструкция поможет вам. ПодготовкаЧтобы скомпилировать и использовать mrtg вам необходим С компилятор и проинсталированный Perl. В большинстве случаев все это устанавливается по умолчанию. Если у вас нет, то вы можете установить используя следующие ссылки. Далее будет следовать детальное описание процесса компиляции. GCC

Perl

GNU компилятор С обычно устанавливается всегда. В экстремальном случае вы можете скачать и установить его, здесь можно найти прекомпилированную версию gcc пригодную для большинства операционных систем. http://gcc.gnu.org/ Большая часть системы mrtg написана на скриптовом языке Perl. Чтобы проверить установлен ли у вас Perl сделайте perl -v. Для нормальной работы необходима последняя версия 5.005. Вы можете скачать ее отсюда: http://www.perl.com/

MRTG рисует трафик в png формате. Для этого вам необходим код 3 крутых прог. Их надо скомпилировать как статические библиотеки, тогда будет меньше проблем в будущем. Имейте в виду, что они могут уже быть у вас, значит вам не надо устанавливать еще раз. Тогда пропускайте все инструкции по компиляции библиотек и приступайте к компиляции mrtg. Если у вас нет их, или у вас не работает mrtg, то попробуйте скомпилировать все библиотеки ещё раз как показано ниже (mrtg очень чувствителен к версиям этих прог). gd

Это базовая графическая библиотека созданная Томасом Ботелом. Все релизы после версии 1.3 создают только png картинки. Потому что: а) Возникли проблемы с gif форматом, т.к. компрессия gif патентована фирмой Unisys. б) Png формат более качественен и к тому же свободен. Mrtg может работать со старыми и новыми версиями библиотек gd. Копию gd вы можете

http://www.freebsd.bip.ru/mrtg.shtml (1 of 4)10.04.2004 17:25:12

Daemon News Russia

скачать отсюда: http://www.boutell.com/gd/ libpng zlib

Необходим gd для перевода в графические файлы. Возьмите здесь: http://www.libpng.org/pub/png/src/ В конце вам необходим libpng для компрессии графических файлов. ftp://sunsite.cnlabswitch.ch/mirror/infozip/zlib/

И последнее, но самое главное - вы должны иметь mrtg. Если у вас его нет, то можете скачать с этого сайта: http://people.ee.ethz.ch/~oetiker/webtools/mrtg/pub/ Компиляция библиотек В этом разделе будет дано последовательное описание инструкций - как скомпилировать различные библиотеки, необходимые для компиляции mrtg. Эти библиотеки могу уже проинсталированы у вас, если вы пользуетесь системами *BSD или Linux, тогда пропускайте эту часть. Можно использовать программу wget, или можно также просто ввести адрес в ваш браузер netscape, если вы не хотите пользовать wget. Для начала создайте директорию для компиляции. Она может быть у вас уже создана, отлично просто используйте ее. mkdir -p /usr/local/src cd /usr/local/src Если у вас не установлен zlib: wget ftp://sunsite.cnlab-switch.ch/mirror/infozip/zlib/zlib.tar.gz gunzip -c zlib.tar.gz | tar xf mv zlib-?.?.? zlib cd zlib ./configure make cd .. Если у вас не установлен libpng: wget http://www.libpng.org/pub/png/src/libpng-1.0.12.tar.gz gunzip -c libpng-*.tar.gz |tar xf rm libpng-*.tar.gz mv libpng-* libpng cd libpng make -f scripts/makefile.std CC=gcc ZLIBLIB=../zlib ZLIBINC=../zlib rm *.so.* *.so cd .. Теперь можно компилировать gd: http://www.freebsd.bip.ru/mrtg.shtml (2 of 4)10.04.2004 17:25:12

Daemon News Russia

wget http://www.boutell.com/gd/http/gd-1.8.3.tar.gz gunzip -c gd-1.8.3.tar.gz |tar xf mv gd-1.8.3 gd cd gd make INCLUDEDIRS="-I. -I../zlib -I../libpng" LIBDIRS="-L../zlib -L. -L../ libpng" LIBS="-lgd -lpng -lz -lm" cd ..

Компиляция MRTG Окей, теперь все готово для компиляции mrtg: cd /usr/local/src gunzip -c mrtg-2.9.17.tar.gz | tar xvf cd mrtg-2.9.17 Если все библиотеки проинсталированы на вашу систему, то вы можете конфигурировать mrtg: ./configure --prefix=/usr/local/mrtg Или вы можете задать несколько подсказок, где искать разные библиотеки, необходимые для компиляции mrtg: ./configure --prefix=/usr/local/mrtg --with-gd=/usr/local/src/gd --with-z=/ usr/local/src/zlib --with-png=/usr/local/src/libpng Если вы имеете доступ к RRDtool, то вы можете сказать mrtg об этом, и использовать совместно rrdtool с mrtg. Почитайте тут the mrtg-rrd manpage Надо сконфигурировать вашу среду, чтобы запустить mrtg. То есть вы должны начтроить ваш Makefile: Теперь делаем: make Это построит ваши бинарные файлы и отредактирует все пути в скриптах. Теперь: make install ( Необходим gnu инсталятор ) Теперь все проинсталировано в поддиректорию /usr/local/mrtg. Вы можете теперь спокойно удалить библиотеки скомпилированные ранее. Но можно сохранить их для будущих версий. Конфигурация Следующий шаг - это конфигурация mrtg для мониторинга вашего роутера. Для этого создается файл mrtg.cfg, который определяет ЧТО вы хотите мониторить. К счастью вам не надо сильно разбираться в написании

http://www.freebsd.bip.ru/mrtg.shtml (3 of 4)10.04.2004 17:25:12

Daemon News Russia

конфигурационного файла. Вместе с mrtg поставляется также cfgmaker. С помощью его вы можете указать роутеру ваш выбор и затем будет создан конфигурационный файл для вас. Вы можете найти скрипт в поддиректории bin: cfgmaker --global 'WorkDir: /usr/local/apache/htdocs/mrtg' --global 'Options [_]: bits,growright' --output /usr/local/mrtg/cfg/mrtg.cfg [email protected] Пример выше создает конфигурационный файл mrtg в /usr/local/mrtg/cfg. Все о cfgmaker'e можно прочитать в manpage cfgmaker. Есть одна вещь, на возможность использования которой стоит взглянуть --ifref=ip, для защиты от проблем перенумерации интерфейса. Если вы хотите перебирать варианты файлов конфигурации сами, то обязательно прочитайте the reference manpage чтобы узнать все о возможных опциях конфигурации. Запуск MRTG Если вы создали конфигурационный файл, то попробуйте запустить: /usr/local/mrtg/bin/mrtg /usr/local/mrtg/cfg/mrtg.cfg Пошлется первый запрос роутеру, а также будет создан выш первый mrtg график и webстраница.Когда вы запустите mrtg в первый раз, скорей всего вы получите несколько сообщений в вашем лог файле. Не волнуйтесь, это нормально для первых двух раз. Вам необходимо автоматизировать процесс запуска mrtg с регулярными интервалами (например каждые 5 минут) - добавьте в ваш /etc/crontab: */5 * * * * root /usr/local/mrtg-2/bin/mrtg /home/mrtg/cfg/mrtg.cfg -logging /var/log/mrtg.log Вы можете также запустить mrtg как демона, добавив строчку: RunAsDaemon: Yes в ваш конфигурационный файл mrtg и создать скрипт автозагрузки в вашей системе. В файл: /etc/rc.local вставьте свой скрипт, который стартует при загрузке системы. Он может выглядеть примерно так: #! /bin/sh cd /usr/local/mrtg/bin ./mrtg --user=mrtg-user /usr/local/mrtg/cfg/mrtg.cfg --logging /var/log/ mrtg.log P.S. Для работы mrtg также необходим SNMP. Перевод: Albert MW (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/mrtg.shtml (4 of 4)10.04.2004 17:25:12

Daemon News Russia

новости

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь

WWW Proxy Введение в проблему В некоторый момент я обнаружил, что большую часть входящего траффика в моей сети составляет WWW. При этом клиенты не пользовались Proxy, хотя это заметно ускорило бы их работу (hit ratio составляет у нас почти 50%), а пройтись по всем клиентам и поправить настройки их броузеров я не имел возможности (да и желания тоже). Думаю, подобные проблемы часто возникают и у ISP, когда поправить настройки клиентов просто нельзя. Почитав Squid'овский FAQ, я нашел там описание того, как заставить клиентов насильно использовать Proxy, проблема заключалась только в том, что предложенный способ не работал. С другой стороны, я знал, что в RadioMSU таки заставили работать всех своих клиентов через Proxy. После консультации с Ярославом Тихим все стало на свои места и окончательное решение было сделано за пару часов. Как это у меня работает Действующие лица и исполнители: ●



Роутер Cisco 2511 производства Cisco Systems. К нему подключены все клиенты (локальная сеть на Ethernet и клиенты по Dialup), внешний канал на Demos тоже включен туда же. Для простоты представим, что LAN имеет адреса/маску 192.168.1/24, а dialupклиенты - 192.168.2/24. Машина на которой установлен кэширующий proxy - Pentium-200, 64M RAM, 8Gb дисков. Работает под управлением FreeBSD 2.2.5. На машине установлен IPFilter 3.2.3 и Squid 1. NOVM.20. Для простоты изложения, представим, что адрес этой машины - 192.168.1.1

Настройки На Cisco Нужно завернуть все транзитные пакетики с destination eq 80 на Proxy. Это делается примерно так: ! Prevent loops access-list 101 deny tcp host 192.168.1.1 any eq 80 ! All other clients: access-list 101 permit tcp 192.168.1.0 0.0.0.255 any eq 80 access-list 101 permit tcp 192.168.2.0 0.0.0.255 any eq 80 ! Route-map route-map forced-proxy permit 10 http://www.freebsd.bip.ru/proxy.shtml (1 of 4)10.04.2004 17:25:13

Daemon News Russia

match ip address 101 set ip next-hop 192.168.1.1 ! ! Интерфейсы: ! LAN interface Ethernet 0 ip policy route-map forced-proxy ! ! Dialup interface Group-Async 1 group-range 1 16 ip policy route-map forced-proxy На машине с proxy Первым делом нужно завернуть приходящие на 80-й порт пакеты на proxy. Предполагая, что proxy работает на порту 3128, это делается как-то так: ipnat -f - 192.168.1.1 port 3128 EOM Первое правило позволяет работать локальному WWW-серверу - он будет продолжать получать свои пакетики. Вторая строчка перенаправит все остальные пакеты с destination port 80 на локальный Squid. В squid.conf пишутся строчки вида httpd_accel www.your.domain 80 httpd_accel_with_proxy on httpd_accel_uses_host_header on В FAQ рекомендовано вместо имени сервера в строчке httpd_accel писать слово virtual. Это - неверно, во всяком случае для Squid-1.NOVM.18..20. Проблема в том, что в этом режиме Squid определяет destination server по вызову getsockname(2), однако этим вызовом он может получить только один из своих адресов, а это явно не подходит к условиям задачи. Получившаяся конструкция работает по такой вот схеме (я рисовал эту картинку минут 10 и хотя она тут почти не нужна, не пропадать же добру):

http://www.freebsd.bip.ru/proxy.shtml (2 of 4)10.04.2004 17:25:13

Daemon News Russia

Улучшения При такой настройке, адрес реального сервера к которому обращается пользователь будет браться из заголовка Host: HTTP-запроса. Для подавляющего большинства клиентов этого достаточно - все сколько-нибудь распространенные броузеры этот заголовок ставят. Однако хочется большего. В-принципе, можно было бы написать отдельную маленькую программу (вместо proxy), которая спрашивала бы у IPFilter реальный destination-address пакета, формировала бы заголовок Host: и отдавала бы все это кэширующему proxy. Однако такой подход имеет свои недостатки - в логах Squid будут только локальные адреса и сопоставить, скажем, Hit Ratio с конкретным клиентом будет непросто. Я пошел по другому пути и встроил необходимую функциональность прямо в Squid. Патч для версии 1.NOVM.20 вы можете взять прямо отсюда ( для версии 1.NOVM.20, для версии 1.NOVM.22). (Необходимые замечания: Патч предполагает, что *.h-файлы от ipfilter лежат у вас в /sys/netinet, а все прочие добавленные includes необходимы на FreeBSD 2.2.x, а про прочие системы я не в курсе). После установки этого патча, Squid начнет понимать директиву httpd_accel_uses_ipfilter_redirect в конфигурационном файле. Использовать ее нужно так: httpd_accel_uses_ipfilter_redirect on И еще одно замечание - для пользователя с правами которого работает squid файл /dev/ipnat должен быть доступен на чтение. В squid 2.x эта функциональность присутствует, если запускать configure --enable-ipftransparent, при этом никаких дополнительных директив не нужно, это включено по умолчанию.

http://www.freebsd.bip.ru/proxy.shtml (3 of 4)10.04.2004 17:25:13

Daemon News Russia

После всех этих изменений все работает и без заголовка Host. Правда требование, чтобы клиент был HTTP-1.x (а не HTTP/0.9) остается, но уж HTTP/0.9 клиентов я вообще очень давно не встречал. Возможные проблемы Возможные проблемы связаны с ICMP-сообщениями 'packet too big'. Дело тут вот в чем. Допустим, между HTTP-Proxy и клиентом есть линк с маленьким MTU, при этом и клиент и proxy живут на media с большим MTU. Представим, что proxy начинает отвечать клиенту с каким-то размером пакета, который не пролезет через этот тонкий линк. Ipnat подменит source-address у этого пакета на IP-address сервера к которому обращался клиент. Если на пути встретится слишком маленький MTU, то ICMP-сообщение об этом уедет на какой- нибудь www.microsoft. com, которому он совершенно ни к чему. Идея лечения понятна - завернуть на той же Cisco все ICMP-пакеты на хост с WWW-proxy, там их проверять на предмет соответствия с какой-то строчкой из таблицы трансляции Ipnat, все которые "неправильные" отдавать прямо местному TCP-стеку, все прочие - отсылать дальше (можно при этом подменять у них source address на какой-то левый). Это теория. До практики у меня руки пока не дошли за полной ненадобностью - у меня все клиенты имеют MTU 1500. Alex Tutubalin (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/proxy.shtml (4 of 4)10.04.2004 17:25:13

Daemon News Russia

новости \\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Построение межсетевого экрана

1. Введение Построение межсетевого экрана на коммутируемом канале связи при помощи FreeBSD Этот документ предназначен для того, чтобы описать действия, требуемые для настройки межсетевого экрана при помощи FreeBSD в случае, когда IP-адрес выделяется динамически вашим провайдером. Хотя прилагались все усилия для того, чтобы сделать этот документ максимально информативным и правильным, все же присылайте свои комментарии и пожелания составителю. 2. Параметры ядра Прежде всего вам нужно перекомпилировать ваше ядро FreeBSD. Если вам нужна более подробная информация о том, как это сделать, то лучше всего начать с раздела Руководства о конфигурации ядра. Вам нужно включить в ядро следующие параметры: options IPFIREWALL Включает межсетевой экран в ядре. options IPFIREWALL_VERBOSE Посылает сообщения о журналируемых пакетах в системный журнал. options IPFIREWALL_VERBOSE_LIMIT=100 Ограничивает количество записываемых в журнал совпадающих сообщений. Это позволяет избавиться от заполнения файлов протокола множеством повторяющихся записей. 100 является подходящим для использования параметром, но вы можете изменить его в зависимости от ваших потребностей. options IPDIVERT Включает использование перенаправляющих сокетов, что будет показано ниже. Имеется также еще несколько НЕОБЯЗАТЕЛЬНЫХ параметров, которые вы можете указать в ядре для достижения дополнительной безопасности. Для работы межсетевого экрана этого не требуется, но некоторые параноидально настроенные пользователи могут все же ими воспользоваться. options TCP_RESTRICT_RST Этот параметр блокирует все пакеты TCP RST. Это лучше использовать в системах, которые http://www.freebsd.bip.ru/setekran.shtml (1 of 5)10.04.2004 17:25:15

Daemon News Russia

могут подвергаться флуд-атакам SYN (хорошим примером являются серверы IRC) или теми, кто не хочет быть легко подвергнутым сканированию портов. options TCP_DROP_SYNFIN При использовании этого параметра TCP-пакеты с полями SYN и FIN игнорируются. Это позволит избежать распознавания используемого на машине типа стека такими утилитами, как nmap, но при этом нельзя будет использовать расширения RFC1644. Если на машине будет работать вебсервер, делать это НЕ рекомендуется. Не перезагружайте машину сразу же после перекомпиляции ядра. Для завершения настройки межсетевого экрана нам, к счастью, достаточно будет выполнить перезагрузку всего один раз . 3. Изменение /etc/rc.conf для загрузки межсетевого экрана Теперь нам нужно внести некоторые изменения в файл /etc/rc.conf для того, чтобы указать о включении межсетевого экрана. Просто добавьте следующие строки: firewall_enable="YES" firewall_script="/etc/firewall/fwrules" natd_enable="YES" natd_interface="tun0" natd_flags="-dynamic"

Для получения более полной информации о том, что делают эти строки, взгляните на содержимое файла /etc/defaults/rc.conf и прочтите rc.conf(5) 4. Выключение механизма преобразования сетевых адресов в PPP Может, вы уже используете встроенный в PPP механизм преобразования сетевых адресов (NAT). Если это ваш случай, то вам нужно это выключить, так как в этих примерах для тех же самых целей используется natd(8). Если у вас уже есть блок директив для автоматического запуска PPP, то он, скорее всего, выглядит примерно так: ppp_enable="YES" ppp_mode="auto" ppp_nat="YES" ppp_profile="profile"

Если это так, то удалите строчку ppp_nat="YES". Вам также потребуется удалить все строчки nat enable yes и alias enable yes в файле /etc/ppp/ppp.conf. 5. Набор правил для межсетевого экрана Теперь мы выполнили практически все. Единственное, что осталось сделать, так это задать правила для межсетевого экрана, после чего мы можем выполнить перезагрузку, и межсетевой экран должен http://www.freebsd.bip.ru/setekran.shtml (2 of 5)10.04.2004 17:25:15

Daemon News Russia

заработать. Я понимаю, что в каждом конкретном случае потребуется набор правил, весьма отличающийся от предлагаемого. Я всего лишь попытался написать набор правил, которые должны подойти большинству пользователей коммутируемого доступа. Вы можете тривиально изменить их под ваши требования, взяв нижеследующие правила в качестве основы. Но сначала рассмотрим основы закрытого межсетевого экрана. Вы хотите запретить по умолчанию все, а затем открывать только то, что вам нужно. Правила должны следовать в порядке, когда сначала идут разрешающие правила, а затем запрещающие. Полагаем, что вы добавите свои разрешающие правила, а затем все остальное будет запрещено. :) Теперь создадим каталог /etc/firewall. Перейдите в этот каталог и отредактируйте файл fwrules, который мы указали в rc.conf. Пожалуйста, отметьте, что вы можете изменить это имя на любое другое. В этом руководстве имя файла дается в качестве примера. Давайте взглянем на пример файла для межсетевого экрана, и подробно опишем его содержимое. # # # #

Firewall rules Written by Marc Silver ([email protected]) http://draenor.org/ipfw Freely distributable

# Define the firewall command (as in /etc/rc.firewall) for easy # reference. Helps to make it easier to read. fwcmd="/sbin/ipfw" # Force a flushing of the current rules before we reload. $fwcmd -f flush # Divert all packets through the tunnel interface. $fwcmd add divert natd all from any to any via tun0 # Allow all data from my network card and localhost. Make sure you # change your network card (mine was fxp0) before you reboot. :) $fwcmd add allow ip from any to any via lo0 $fwcmd add allow ip from any to any via fxp0 # Allow all connections that I initiate. $fwcmd add allow tcp from any to any out xmit tun0 setup # Once connections are made, allow them to stay open. $fwcmd add allow tcp from any to any via tun0 established # Everyone on the internet is allowed to connect to the following # services on the machine. This example shows that people may connect # to ssh and apache. $fwcmd add allow tcp from any to any 80 setup $fwcmd add allow tcp from any to any 22 setup # This sends a RESET to all ident packets. $fwcmd add reset log tcp from any to any 113 in recv tun0 # Allow outgoing DNS queries ONLY to the specified servers. $fwcmd add allow udp from any to x.x.x.x 53 out xmit tun0 http://www.freebsd.bip.ru/setekran.shtml (3 of 5)10.04.2004 17:25:15

Daemon News Russia

# Allow them back in with the answers... :) $fwcmd add allow udp from x.x.x.x 53 to any in recv tun0 # Allow ICMP (for ping and traceroute to work). You may wish to # disallow this, but I feel it suits my needs to keep them in. $fwcmd add 65435 allow icmp from any to any # Deny all the rest. $fwcmd add 65435 deny log ip from any to any

Теперь у вас есть полнофункциональный межсетевой экран, который разрешает соединения к портам 80 и 22, и отображает в журнале все остальные попытки соединения. Теперь у вас должна успешно пройти перезагрузка и ваш межсетевой экран должен нормально заработать. Если вы обнаружите, что это не так, у вас возникнут проблемы или у вас возникнут пожелания, пожалуйста, напишите мне письмо по электронной почте. 6. Вопросы 6.1. Почему вы используете natd и ipfw, когда можно использовать встроенные фильтры ppp? 6.2. Если во внутренней сети я использую такие адреса, как 192.168.0.0, то могу ли я добавить команду типа $fwcmd add deny all from any to 192.168.0.0:255.255.0.0 via tun0 к правилам

межсетевого экрана для предотвращения попыток подключиться извне к машинам во внутренней сети? 6.3. Что-то здесь неправильно. Я следовал вашим указаниям вплоть до буквы, и теперь доступ заблокирован. 6.1. Почему вы используете natd и ipfw, когда можно использовать встроенные фильтры ppp?

Скажу честно, что определенной причины, объясняющей, почему я использую ipfw и natd вместо встроенных в ppp фильтров. В результате обсуждений этого вопроса с другими людьми я пришел к мнению, что, хотя ipfw является гораздо более мощным и гибким инструментом, чем фильтры ppp, но все, что он выигрывает в широте возможностей, проигрывает в легкости настройки. Одной из причин, по которой я его использую, является то, что я предпочитаю функции межсетевого экрана, реализуемые в ядре, а не в пользовательской программе. 6.2. Если во внутренней сети я использую такие адреса, как 192.168.0.0, то могу ли я добавить команду типа $fwcmd add deny all from any to 192.168.0.0:255.255.0.0 via tun0 к правилам межсетевого экрана для предотвращения попыток подключиться извне к машинам во внутренней сети? Простой ответ выглядит как нет. Причиной этого является то, что natd выполняет преобразования для всего трафика, перенаправляемого через устройство tun0. До тех пор, пока это так, входящие пакеты будут направляться только на динамически назначенный IP-адрес, а НЕ во внутреннюю сеть. Однако заметьте, что вы можете добавить, например, правило $fwcmd add deny all from 192.168.0.4:255.255.0.0 to any via tun0, которое будет ограничивать коммуникации хоста в вашей внутренней сети с внешним миром через межсетевой экран. 6.3. Что-то здесь неправильно. Я следовал вашим указаниям вплоть до буквы, и теперь доступ заблокирован. В этом документе предполагается, что вы работаете с программой ppp уровня пользователя, поэтому http://www.freebsd.bip.ru/setekran.shtml (4 of 5)10.04.2004 17:25:15

Daemon News Russia

предлагаемый набор правил работает с интерфейсом tun0, который соответствует первому соединению, делаемому утилитой ppp(8) (известной также как user-ppp). Дополнительные соединения будут использовать устройства tun1, tun2 и так далее. Вы должны также отметить, что программа pppd(8) использует другой интерфейс, ppp0, поэтому, если вы осуществляете соединение с помощью программы pppd(8), то должны заменить tun0 на ppp0. Быстрый способ изменить правила для межсетевого экрана показан ниже. Оригинальный набор правил будет сохранен в файле fwrules_tun0. % cd /etc/firewall /etc/firewall% su Password: /etc/firewall# mv fwrules fwrules_tun0 /etc/firewall# cat fwrules_tun0 | sed s/tun0/ppp0/g > fwrules

Для того, чтобы узнать, используете ли вы ppp(8) или pppd(8), вы можете посмотреть вывод команды ifconfig(8) после установки соединения. Например, для соединения, выполняемого при помощи программы pppd(8), вы увидите нечто, похожее на следующее (показаны только относящиеся к делу строчки): % ifconfig (skipped...) ppp0: flags=8051 mtu 1524 inet xxx.xxx.xxx.xxx --> xxx.xxx.xxx.xxx netmask 0xff000000 (skipped...)

С другой стороны, для соединений, выполняемых посредством ppp(8) (user-ppp), вы должны увидеть нечто вроде следующего: % ifconfig (skipped...) ppp0: flags=8010 mtu 1500 (skipped...) tun0: flags=8051 mtu 1524 (IPv6 stuff skipped...) inet xxx.xxx. xxx.xxx --> xxx.xxx.xxx.xxx netmask 0xffffff00 Opened by PID xxxxx (skipped...) Marc Silver$Date$ (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/setekran.shtml (5 of 5)10.04.2004 17:25:15

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Использование загрузчика Windows NT для загрузки FreeBSD новости

Обзор Установка нескольких операционных систем на один компьютер не является редкостью. Этим пользуются и професииональные программисты, которым необходимо отлаживать свои программы в разных версиях Windows или в разных ОС, и обычные пользователи, чаще всего для запуска старых игрушек, которые не удается запустить под Windows. Для решения проблеммы выбора ОС при загрузке компьютера разработаны специальные программы, например System Commander. Однако эти программы далеко не бесплатные (забудем про пиратские CD), хотя и предоставляют очень удобные и развитые средства для управления загрузкой компьютера, и даже для управления разбиением диска на разделы и преобразованием файловых систем. Пользователи OS/2 и Windows NT могут использовать встроенные в эти системы средства для выбора варианта загрузки. В OS/2 это "Менеджер загрузки (boot mahager)". В Windows NT это "Загрузчик (loader)". Разумеется аналогичные средства есть и в Linux, и во FreeBSD, и в других вариантах Unix подобных систем. Boot manager в OS/2 устанавливается через меню программы fdisk и достаточно прост в понимании и настройке. Пользователи Unix обычно хорошо знают начинку своих систем и обладают достаточно высокой квалификацией, кроме того, они привыкли вручную изменять конфигурационные файлы. Windows же является гораздо более закрытой системой и пользователи привыкли настраивать ее щелкая мышкой по красивым кнопкам, тогда как настройка параметров загрузчика Windows NT производится ручной правкой файла. Именно поэтому мы и рассмотрим вариант настройки NT для загрузки FreeBSD. Да простят меня знатоки за разжевывание подробностей, кажущихся им очевидными. Новички тоже люди, и им многое не понятно. Примечание. При установке FreeBSD необходимо указать, что MBR остается без изменений. Вариант установки менеджера загрузки FreeBSD делает не нужным все, что здесь описано. Вариант установки стандартного MBR просто приведет к невозможности загрузки Windows NT, придется воспользоваться тремя установочными дискетами NT, для восстановления загрузчика. После установки Windows NT, в корневом каталоге, можно найти файлы boot.ini и bootsect.dos. Хотя последний и появляется только при установке на компьютер, на котором уже были установлены MS-DOS или Windows 95, именно он показывает способ, который успользуется в NT для загрузки других ОС. Способ этот состоит в использовании копии загрузочного сектора этих ОС. При загрузке, если выбран вариант загрузки не Windows NT, копия соответсвующего сектора загружается в память и ей передается управление. Следовательно, если мы создадим копию первого (загрузочного) сектора FreeBSD и сумеем добавить его, как вариант, в загрузчик NT, то задача будет решена. Начнем по порядку. Сначала создадим копию загрузочного сектора FreeBSD. Это первый сектор корневого раздела http://www.freebsd.bip.ru/loader.shtml (1 of 3)10.04.2004 17:25:17

Daemon News Russia

этой ОС. Для работы нам потребуется системная дискета с MS-DOS и программой fdisk. Если ваш раздел Windows NT отформатирован под NTFS, то потребуется еще чистая дискета, отформатированная под FAT. Итак, загружаем FreeBSD. Для этого укажем, что активен раздел с FreeBSD. Это можно сделать или загрузившись с системной дискеты MS-DOS и воспользовавшись программой fdisk, или менеджером дисков из Windows NT. Перезагрузимся. Теперь надо смонтировать раздел Windows NT или дискету, если у Вас NTFS. (В последних версиях FreeBSD появилась возможность монтировать и разделы с NTFS). Для примера команда монтирования дискеты: mount_msdos /dev/fd0 /mnt Теперь надо определиться, где искать загрузочный сектор. То, что это первый сектор в "/" понятно, но этого недостаточно. Если Вы не знаете, какой раздел смонтирован как корень, наберите команду "df". В столбце "Mounted on" найдите "/". В соответствующей строке столбца "Filesystem" Вы увидите имя устройства, которое и содержит нужный нам сектор. Правда это немного не то устройство. Например, мы нашли, что как корень смонтирован "/dev/wd0s1e". Но нам нужно "raw" устройство. Все просто, будем использовать "/dev/rwd0s1e". Итак, наконец-то пишем команду копирования: dd if=/dev/rwd0s1e of=/mnt/bootsect.bsd bs=512 count=1 Тут все достаточно понятно. if - откуда, of - куда, bs - размер сектора, count - количество секторов. В результате получаем файл bootsect.bsd содержащий копию нужного нам сектора. Теперь размонтируем дискету или раздел NT командой: umount /mnt Осталость перезагрузить компьютер с системной дискеты и установить активным раздел, содержащий Windows NT (с помощью fdisk). Еще раз перезагружаемся, теперь уже в Windows NT. Теперь нужно отредактировать файл boot.ini и скопировать bootsect.bsd в корень диска С, если у Вас NTFS. С копированием сложностей не возникнет. Файл boot.ini нажодится в корне диска С. Он имеет атрибуты "только чтение" и "системный". Снимаем эти атрибуты. Можно мышкой пощелкать, а можно команду набрать. Команда такая: attrib -s -r c:\boot.ini Теперь редактируем boot.ini. Обычно он выглядит так: [boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(2)\WINNT [operating systems] multi(0)disk(0)rdisk(0)partition(2)\WINNT="Windows NT Workstation Version 4.00" multi(0)disk(0)rdisk(0)partition(2)\WINNT="Windows NT Workstation Version 4.00 [VGA mode]" /basevideo /sos В конец раздела "operating systems" добавляем: http://www.freebsd.bip.ru/loader.shtml (2 of 3)10.04.2004 17:25:17

Daemon News Russia

C:\bootsect.bsd="FreeBSD" Сохраняем файл. Восстанавливаем аттрибуты командой: attrib +r +s c:\boot.ini Все. Если все сделано правильно и файл bootsect.bsd находится в корне диска С, то при перезагрузке Вы увидите в списке вариантов и FreeBSD. При выборе которого вы попадете именно во FreeBSD (а Вы куда подумали?).

(c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/loader.shtml (3 of 3)10.04.2004 17:25:17

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь ОС BSD жила, живет и будет жить новости

1. Все началось с 386BSD 2. NetBSD 3. FreeBSD 4. OpenBSD 5. Возможности Net/Free/OpenBSD 6. Особенности реализаций 7. Примеры использования 8. BSD/OS - коммерческая BSD-система 9. Так что же лучше? Дополнительная информация об операционных системах семейства BSD События в мире свободно-распространяемых операционных систем семейства BSD: FreeBSD, OpenBSD и NetBSD, уже давно привлекают внимание разработчиков ОС. Информация о возможностях, преимуществах и недостатках подобных систем, а также сведения по их коммерческим реализациям (BSD/OS) будут полезны, когда в очередной раз перед пользователем встанет вопрос: приобретать ли коммерческую Unix-систему или сделать шаг в сторону свободно распространяемого программного обеспечения. Кроме того, статья может заинтересовать всех, кто хочет узнать саму историю ОС Unix. История BSD Unix началась с того момента, когда в 1974 году в Университет Беркли (Калифорния, США) попала операционная система Unix. К тому времени эта ОС уже несколько лет за символическую плату распространялась лабораторией Bell Technical Labs (BTL) среди университетов и других учебных заведений, успев завоевать симпатии пользователей, которым пришлась по душе открытость системы: Unix поставлялась в исходных текстах (без поддержки и гарантий BTL), и пользователи имели возможность самостоятельно изучать, исправлять и расширять ее. Все это порождало желание делиться своими наработками с другими энтузиастами Unix и во многом сформировало специфический образ мышления и Unix-культуру. Надо заметить, что сотрудники Bell Technical Labs поступили очень мудро (возможно, даже не осознавая этого), отпустив Unix в свободное плавание. Свобода оказала услугу как самой системе, так и ее пользователям - на Unix выросло немало профессионалов, не говоря уж о количестве дипломов, защищенных по связанным с этой ОС темам. Так что можно считать, что ОС Unix вступила в коммерческий мир с полным университетским образованием. Кстати, совсем недавно на подобный шаг - передачу исходного кода учебным заведениям - решилась фирма BSDI. Интересно, повторится ли история? Но вернемся в Беркли. Именно там родились многие идеи, ставшие теперь общепризнанными поддержка протокола TCP/IP в ОС Unix, система виртуальной памяти, быстрая файловая система (FFS), редакторы ex и vi, BSD sockets (интерфейс программирования сетевых приложений), sendmail, csh и многое другое. Университет также дал миру прекрасных специалистов, которые во многом определили развитие Unix - достаточно вспомнить Эрика Аллмана, Билла Джоя или Чака Хейли. Именно к ним первым попали тексты Unix,

http://www.freebsd.bip.ru/history2.shtml (1 of 10)10.04.2004 17:25:21

Daemon News Russia

"поселившиеся" в Беркли. Разработкой Unix здесь занималась группа Computer System Research Group (CSRG), которая, к сожалению, распалась в 1992 году. Однако лучшие ее традиции были продолжены компанией BSDI (Berkeley Software Development, Inc.) и группами разработчиков FreeBSD и NetBSD. Совсем недавно к ним добавилась команда проекта OpenBSD. 1. Все началось с 386BSD В то время по миру бродило несколько версий BSD Unix, но все они имели нечто общее: для их использования требовалось обладать лицензией на первоначальный исходный код Unix. Большая часть кода BSD была написана в Беркли, и однажды кто-то заметил, что собственно оригинального кода осталось не так уж и много; так родилась идея создать свободнораспространяемый Unix и начать его распространение через Сеть (Net distribution). Вильям и Линна Джолитц решили переписать части системы, недостающие для создания общедоступного варианта BSD Unix. В результате появилась 386BSD версии 0.0. Еще не готовая к использованию, 386BSD обладала одним несомненным достоинством: для того чтобы создать работоспособный вариант системы, больше не требовалось внушающей ужас source license. Вскоре появилась 386BSD 0.1 (к тому времени Linux, другой член семейства бесплатных систем Unix, существовал уже более года). Многие люди, желая повозиться с исходным кодом, с которым они уже были знакомы ранее, решили начать использовать и исправлять 386BSD 0.1. В результате начиная с июня 1992 года в систему было внесено большое количество исправлений и улучшений. На многих серверах FTP существовал даже неофициальный patchkit (набор исправлений), который позволял сделать 386BSD более стабильной и удобной в применении многие затруднения в работе системы решались именно с помощью patchkit. Но сегодня, после возникновения некоторых юридических проблем с частью кода, принадлежащего AT&T/Berkeley, оригинальную систему стало довольно трудно найти - она была удалена с FTP-серверов по всему миру. Следует вспомнить, что, когда некоммерческое семейство BSD только создавалось, Вильям и Линна в качестве основы использовали ленту под названием Berkeley Net Release/2. Выстроив таким образом прочный фундамент, они также заложили, сами не желая того, бомбу замедленного действия. В результате юридических битв часть файлов исходной ленты Net/2 была обозначена как binary only. Следовательно, они должны были быть воссозданы с нуля, чтобы получить истинно свободно-распространяемую систему. В этом и заключается основная причина того, что сейчас найти оригинальную версию 386BSD version 0.1 практически невозможно. Для того чтобы заменить 386BSD, родилось три новых системы под новыми именами. Первой была NetBSD, вскоре за ней последовала FreeBSD, а совсем недавно к этой группе прибавилась OpenBSD. Если взглянуть на файл README, поставляемый с каждой BSD-системой, можно обнаружить, что эти системы базируются на BSD 4.4-Lite. Команда разработчиков FreeBSD использовала BSD 4.4-Lite distribution и создала недостающие части кода; все это после дальнейшего развития и превратилось в FreeBSD. Разработчики NetBSD начали разработку с 386BSD, добавив также доступные части из BSD 4.4. Система OpenBSD в свое время отделилась от NetBSD разработчики решили объединить лучшие черты FreeBSD (удобство работы и функциональность) и NetBSD (переносимость на большое количество платформ). Таким образом, команды разработчиков Open/Free/NetBSD заново создали те файлы, которые отсутствовали в оригинальном комплекте BSD 4.4-Lite или не могли распространяться свободно. Все системы максимально приближены к BSD 4.4, хотя у каждой имеются свои преимущества и недостатки. Рассмотрим эти системы более подробно, однако сразу стоит заметить, что очень часто многое, http://www.freebsd.bip.ru/history2.shtml (2 of 10)10.04.2004 17:25:21

Daemon News Russia

сказанное об одной системе, подходит и к другой: все эти ОС OpenBSD, FreeBSD и NetBSD развиваются раздельно, но не изолированно. 2. NetBSD NetBSD Project - это результат попытки большой группы энтузиастов создать свободнораспространяемый вариант Unix-совместимой операционной системы. NetBSD основана на большом количестве свободно распространяемого программного обеспечения, в первую очередь BSD4.4-Lite Университета Беркли. Система работает на множестве платформ - от DEC Alpha до Apple Macintosh и z80, поставляется с полным исходным кодом и поддерживается самими разработчиками системы и пользователями. Основную ставку разработчики сделали на надежность и поддержку большого количества платформ. Пожалуй, сегодня едва ли найдется аппаратная конфигурация, где нельзя было бы установить NetBSD. Реализация проекта началась в январе 1993 года, и уже к апрелю появился первый официальный выпуск - версия 0.8, которая работала еще только на платформе i386. За ней последовала версия 0.9 в августе того же года. Первоначально NetBSD была унаследована от 386BSD, которая использовала Berkeley Net Release 2 (BNR/2) и, естественно, как и другие операционные системы на базе BNR/2, в какой-то момент столкнулась с трудностями. Только через год после выпуска 0.9, в октябре 1994-го, появляется NetBSD 1.0 - первая версия NetBSD, которая базируется на BSD4.4-Lite. Помимо этого, система была портирована на HP300/9000, Macintosh, PC532, Sun SPARC и Amiga. В сентябре 1995 года создается NetBSD Foundation, некоммерческая организация, призванная стать координирующим органом NetBSD Project. Вскоре (ноябрь, 1995) NetBSD портируется на Atari, DECstation, VAX, Sun3; в нее добавляется двоичная совместимость (в пределах одной платформы) с FreeBSD, iBCS2, SunOS, Ultrix, HPUX, Linux, OSF/1, SVR4. Версия получает номер 1.1. Самой свежей версией NetBSD стала реализация 1.2 (октябрь, 1996), а наряду с множеством усовершенствований и изменений появилась поддержка платформ DEC Alpha, Motorola MVME boards, SPARC/Sun4m. Система NetBSD распространяется в двух вариантах: формальный выпуск и NetBSD-current. FreeBSD и OpenBSD имеют ту же схему. Формальный выпуск имеет номер версии и включает в себя хорошо отлаженные утилиты, ядро, исходных кодов и средства установки. Выпуск представляет собой баланс между возможностями и стабильностью - его легче установить, чем current-версию. Такие версии хорошо отлажены и появляются относительно редко, поэтому они подходят тем, кто желает иметь стабильно работающую систему. Эти версии удобнее в поддержке, поскольку всегда ясно, о чем идет речь. Самая большая проблема с формальными версиями заключается в том, что пользователь не получает доступа к базе исходного кода с последними улучшениями и исправлениями. Формальную версию несложно установить - для каждой платформы имеются детальные инструкции, образы загрузочных дисков или minirootфайловых систем. Как правило, существует процедура, позволяющая легко перейти с предыдущей версии на новую. С NetBSD-current ситуация совершенно иная. Очередная current-версия появляется каждую ночь и представляет собой "слепок" дерева исходного кода NetBSD, который нужно перекомпилировать на вашей платформе. Поскольку работа ведется постоянно, current-версия порой не совсем отлажена, может содержать ошибки, может даже не скомпилироваться. Currentверсия полезна разработчикам драйверов, системного программного обеспечения и тем, кто принимает участие в создании NetBSD. Current-версия позволяет разработчикам "держаться вместе", вылавливает ошибки и оперативно вносит изменения. В какой-то момент current-версия начинает превращаться в formal release, происходит бета-тестирование, а от этой ветви растет новая current-версия и т. д. Таким образом, развитие не останавливается ни на мгновение, и при этом ни одна фаза не скрыта от сообщества - всегда можно предложить свои изменения и http://www.freebsd.bip.ru/history2.shtml (3 of 10)10.04.2004 17:25:21

Daemon News Russia

дополнения, которые (если они имеют смысл) будут включены в current. NetBSD project стремится следовать таким стандартам индустрии, как POSIX и Standard C. Напомним, что POSIX (Portable Operation Systems Interface) - название финансируемой IEEE группы, которая разрабатывает стандартный API для Unix-подобных операционных систем. Существует POSIX.1 (IEEE Std1003.1-1990), который стандартизирует API для Си POSIX.2 (IEEE Std1003.1-1992), стандартизирующий работу оболочки и утилит. Другие POSIX-стандарты описывают языки Ада и Фортран, расширения для работы в реальном времени и т. д. Сейчас NetBSD очень близка к POSIX.1, поэтому перенос программного обеспечения в среду NetBSD несложная задача. Но вряд ли когда-нибудь NetBSD получит статус системы, соответствующий POSIX, поскольку сертификация стоит немалых денег. Тем не менее разработчики считают, что NetBSD ближе к POSIX и Standard C, чем какая-либо другая свободно распространяемая операционная система. 3. FreeBSD Проект FreeBSD родился в начале 1992 года и частично вырос из проекта "Неофициальный набор исправлений для 386BSD" или, точнее, из patchkit, возглавляемого Нейтом Вильямсом, Родом Граймсом и Джорданом Хаббардом. Кроме того, в разработке участвовали Дэвид Гринмэн и Джулиан Элишер, хотя официально они присоединились к проекту только через месяц после начала его реализации. Поскольку организация работы через patchkit уже не могла спасти положение, главной целью проекта было создание промежуточного варианта 386BSD, в котором была бы исправлена большая часть ошибок. Возможно, кто-то сейчас еще может вспомнить рабочие названия проекта типа 386BSD 0.5 или 386BSD Interim, которые отражали текущее положение дел. Примерно в это время Билл Джолитц отказался от дальнейшей поддержки и развития системы, в результате чего проект модернизации 386BSD превратился в то, что мы знаем теперь под названием FreeBSD (имя было придумано Дэвидом Гринмэном). Джордан Хаббард обратился в Walnut Creek CDROM (США) в надежде открыть дополнительные каналы распространения для еще не созданной операционной системы. Компания Walnut Creek CDROM не просто поддержала идею распространения FreeBSD на CD - она еще помогла с компьютерной техникой и скоростным подключением к Internet. Первый CD-диск с FreeBSD появился в декабре 1993-го это был FreeBSD 1.0, версия которого тоже распространялась по Сети. Система была основана на ленте 4.3 BSD Lite (Net/2) из Беркли и дополнена компонентами из 386BSD и от Free Software Foundation. Для первой версии успех был довольно значительным, и вскоре, в мае 1994-го, на свет появилась очень удачная версия 1.1. Однако затем на горизонте стали сгущаться тучи. Компания Novell - наследник AT&T - начала тяжбу за запрещение использования фрагментов кода в ленте Berkeley Net/2, которые вели свое происхождение из AT&T. Университет Беркли был вынужден выпустить "облегченный" вариант, названный BSD4.4-Lite, и порекомендовать всем пользователям Net/2 переключиться на него. Поэтому в конце июля 1994 года FreeBSD project прекращает поставку FreeBSD, но, в соответствии с лицензионным соглашением, имеет право на выпуск еще одной версии до наступления "часа Х". В итоге появляется FreeBSD 1.1.5.1 - результат года работы на Net/2. Эта версия обладала лучшей производительностью, чем все предыдущие, имела более высокую надежность и сама по себе была прекрасным продуктом. Но теперь разработчикам предстояло фактически начать все заново, основываясь на новом и неполном наборе BSD 4.4-Lite. Из-за различных юридических ограничений команда Berkeley CSRG удалила большое количество кода, используемого для создания загружаемой работоспособной системы, и фактически порт на Intel x86 оказался очень неполным. FreeBSD http://www.freebsd.bip.ru/history2.shtml (4 of 10)10.04.2004 17:25:21

Daemon News Russia

Project вновь начал работу в декабре 1994-го, и уже в январе 1995 года FreeBSD версии 2.0 появилась в Сети и на CD. Несмотря на некоторые шероховатости, система имела большой успех, и вскоре за ней последовала более быстрая и удобная в установке FreeBSD 2.0.5, выпущенная в июне 1995 года. В конце этого года на свет появилась версия 2.1, очень стабильная, во многом усовершенствованная, которая по всем параметрам превосходила версию FreeBSD 1.1.5.1. За два года была проделана огромная работа по превращению неполного набора BSD 4.4-Lite в работающую, надежную и удобную операционную систему. Нельзя не восхищаться командой разработчиков, к которой к тому времени присоединились многие прекрасные программистыэнтузиасты. Чуть позже 2.1 превратилась в 2.1.5, затем в 2.1.6. В обоих случаях повышена стабильность, добавлены дополнительные драйверы, исправлены найденные ошибки. В феврале 1997-го в системной библиотеке была обнаружена неточность в обработчике переменной окружения PATH_LOCALE, и тогда команда разработчиков FreeBSD удалила версию 2.1.5/2.1.6 со всех FTP-серверов и выпустила версию 2.1.7 (security-release). Затем вышла версия 2.2 и начались работы над FreeBSD 3.0, где намечается повышение качества работы виртуальной машины (VM), что позволит улучшить эмуляцию DOS и Windowsприложений. Кроме того, совсем недавно был начат грандиозный проект по построчному перебору всего кода FreeBSD (около 120 Мбайт). Цель проекта - избавиться от проблем с security, исправить обнаруженные ошибки и улучшить общий стиль. Дерево исходного кода было разбито на отдельные части, которые просматриваются различными командами программистов; все исправления неоднократно перепроверяются независимыми специалистами. Все это позволяет надеяться, что FreeBSD станет более защищенной системой. Кстати, проанализировав список рассылки BUGTRAQ за последние полгода, можно заметить, что коммерческие ОС типа Solaris, IRIX, не говоря уже о NT, существенно превосходят FreeBSD по количеству ошибок в программах, критичных для безопасности. Дополнительную информацию о FreeBSD Audit Project можно найти по адресу: http://www.freebsd.org/auditors.html. Таким образом, разработка FreeBSD не представляет собой закрытый процесс, а напротив, поддерживает многолетние традиции сотрудничества специалистов из разных стран мира, работающих над одной задачей. Самые активные из разработчиков переходят в команду FreeBSD core team, которая занимается общим направлением и целевой координацией проекта. 4. OpenBSD Проект OpenBSD отделился от NetBSD совсем недавно и также является членом семейства BSD4.4-Lite. Сегодня OpenBSD развивается самостоятельно; кроме собственных разработок в него включаются удачные идеи от других групп (FreeBSD/NetBSD). Разработку OpenBSD начал Тео де Раадт, один из четверых создателей NetBSD. И если раньше про OpenBSD еще можно было сказать: "OpenBSD - это NetBSD плюс дополнительные возможности", то сейчас, после долгой работы, очевидно, что OpenBSD является самостоятельной системой из семейства BSD - очень многое, по сравнению с оригинальной версией, было добавлено и исправлено. По наследству OpenBSD досталась хорошая многоплатформенная поддержка, однако процесс портирования продолжается. Особое внимание группа OpenBSD уделяет защищенности системы: в частности уже давно была предпринята попытка по переработке исходного кода для предотвращения возможных атак, связанных с фиксированным размером буфера [1], а также выполнено исправление множества программ. У OpenBSD великолепная POSIX-совместимость, надежность и защищенность. Команда OpenBSD всегда оперативно реагирует на сообщения о неточностях и возможных неполадках, она открыта для новых разработчиков, и у каждого http://www.freebsd.bip.ru/history2.shtml (5 of 10)10.04.2004 17:25:21

Daemon News Russia

специалиста есть возможность добавить в систему то, чего ей не хватает. OpenBSD совместима со многими расширениями FreeBSD (в частности системой FreeBSD ports); недавно появилась поддержка ATM, ведется работа над включением IPX и ряда других сетевых протоколов. Одно из главных достоинств OpenBSD - это понимание необходимости защищенности системы. Система OpenBSD остается практически самой надежной в этом плане Unix-подобной системой для ПК. Последняя версия OpenBSD - 2.0, а в ближайшее время появится версия 2.1 (на CD и серверах FTP). 5. Возможности Net/Free/OpenBSD Итак, что же сегодня представляет собой семейство свободно распространяемых BSD Unixсистем? FreeBSD - Unix-подобная операционная система для ПК, основанных на архитектуре Intel, включающей в себя 386-е, 486-е и Pentium-процессоры. Кроме того, ОС NetBSD/OpenBSD поддерживают множество других платформ. Все три системы предоставляют много возможностей, которые ранее были доступны только на более мощных и дорогих машинах. Вытесняющая многозадачность с динамическим изменением приоритетов обеспечивает надежное и быстрое разделение ресурсов компьютера между работающими приложениями и пользователями. ● Многопользовательский доступ дает возможность одновременно использовать машину для различных целей. Системная периферия, подобно принтерам или ленточным накопителям, автоматически разделяется между пользователями. ● Поддержка TCP/IP-сетей включает в себя SLIP, PPP, NFS и NIS. Это означает, что машина может с легкостью взаимодействовать с другими системами, например выступать в роли сервера предприятия, обеспечивающего такие жизненно важные функции, как NFS, e-mail, WWW и FTP-сервер, управление маршрутизацией с использованием встроенных брандмауэров. ● Защита памяти обеспечивает безопасность выполнения программ. Ни одна программа или пользователь не могут воздействовать на выполнение других программ, если у них нет на это прав. ● Реализация промышленного стандарта X Window System (X11R6) обеспечивает графический интерфейс пользователя; поддерживается большинство видеокарт и мониторов, доступны полные исходные тексты. ● Двоичная совместимость со многими программами, построенными под SCO, BSD/OS, Net/Free/ OpenBSD, 386BSD и Linux. ● Тысячи дополнительных легко адаптируемых приложений доступны через Internet. BSDсистемы совместимы на уровне исходного кода со многими популярными коммерческими системами Unix, поэтому большинство приложений может потребовать (если вообще потребует) лишь легких изменений. ● Система виртуальной памяти и виртуальных машин позволяет работать приложениям, требующим больших объемов памяти; при этом они не создают трудностей и задержек во взаимодействии с пользователем. ● Разделяемые библиотеки (эквивалент DLL, заимствованных MS Windows из Unix) позволяют эффективно использовать дисковое пространство и оперативную память. ● В комплект BSD Unix включен полный набор средств разработки на Си, C++ и Фортране. Кроме того, через коллекцию FreeBSD ports and packages доступно немало других сред разработки. ● Наличие полного исходного кода операционной системы означает, что пользователь обладает максимальным уровнем контроля над средой. Зачем ограничивать себя частичным решением и находиться в зависимости от поставщика, когда можно иметь поистине открытую систему?



http://www.freebsd.bip.ru/history2.shtml (6 of 10)10.04.2004 17:25:21

Daemon News Russia

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



6. Особенности реализаций В дополнение к основной поставке FreeBSD предлагает большую коллекцию портированных программных продуктов из нескольких сотен наименований. Список включает сетевое программное обеспечение, системы программирования, игры и многое другое. Полная коллекция занимает только 10 Мбайт на диске, поскольку хранятся лишь списки изменений, которые необходимо произвести в исходных текстах перед компиляцией. Для установки достаточно набрать команду "make", после чего система автоматически заберет базовую версию программы с CD или с сервера FTP, произведет необходимые изменения и скомпилирует. Для тех, кто не собирается компилировать программы самостоятельно, подойдет коллекция уже готового программного обеспечения (packages). Для установки программы необходимо набрать единственную команду "pkg_add" с именем архива, который можно найти на CD или на FTP. ОС FreeBSD функционально полна, надежна и быстра в работе. Пожалуй, эта система из всего семейства свободно распространяемых BSD-систем развивается сейчас наиболее динамично. Большое внимание уделяется совместимости с другими системами и удобству работы. Если пользователь работает на x86, то следует обратить внимание именно на FreeBSD - она позволит очень плавно войти в мир BSD-систем. NetBSD больше ориентируется на поддержку различных платформ, а OpenBSD пытается объединить лучшие стороны FreeBSD и NetBSD, уделяя особое внимание защищенности системы. В дополнение к прекрасной работе, проделанной в CSRG, команды разработчиков потратили многие тысячи часов, совершенствуя системы, чтобы те обеспечивали максимальную производительность и надежность. В то время как коммерческие гиганты сражаются за подобные достоинства на поле операционных систем для ПК, FreeBSD, NetBSD и OpenBSD предлагают их уже сейчас. 7. Примеры использования Прикладные области, в которых может быть использована BSD Unix, ограничены только воображением пользователя - от разработки программного обеспечения для автоматизации работы предприятия до автоматического управления спутниковой антенны. Если что-то может быть сделано с помощью коммерческой реализации Unix, то, скорее всего, это может быть сделано и с применением BSD Unix, который совершенно бесплатно предлагает большое количество программного обеспечения высокого качества из исследовательских центров и университетов всего мира. Число доступных коммерческих приложений растет с каждым днем. Поскольку исходный код систем полностью доступен, система может быть настроена и/или адаптирована для решения конкретных проблем, что обеспечивает гибкость, отсутствующую у многих коммерческих закрытых систем. Вот лишь некоторые примеры использования FreeBSD, NetBSD или OpenBSD: Internet-сервер: быстрая и надежная реализация TCP/IP делает BSD Unix идеальной платформой для серверов FTP, World Wide Web, Gopher, электронной почты, BBS и Usenet; ● обучение: BSD Unix поможет будущим администраторам в изучении архитектур операционных систем и сетевых возможностей аппаратных конфигураций; ● исследования: BSD Unix, обладая полным исходным кодом, может служить хорошей платформой для исследований и разработок в области операционных систем. Этому также способствует отсутствие лицензионных ограничений; ● сети: FreeBSD или Open/NetBSD могут с легкостью превратить старый компьютер 386/486 в ●

http://www.freebsd.bip.ru/history2.shtml (7 of 10)10.04.2004 17:25:21

Daemon News Russia

DNS-сервер или мощный маршрутизатор с возможностью фильтрации пакетов; ● рабочая станция для X Window: BSD Unix может неплохо послужить в качестве недорогого Xтерминала. Благодаря свободно-распространяемому XFree86-серверу можно работать и с коммерческими X-серверами. В отличие от обычного X-терминала BSD Unix позволяет Xприложениям работать локально, снимая нагрузку с сервера. BSD Unix поддерживает удаленную загрузку, облегчая администрирование; ● разработка программного обеспечения: базовая система BSD Unix поставляется с полным набором инструментов, которые включают в себя компилятор GNU C/C++ и отладчик. BSD Unix, как правило, не включает код поддержки DES, чтобы не нарушать экспортные ограничения США, где доступен дополнительный компонент, обеспечивающий DES; для жителей Европы и других стран также существует реализация DES, распространяемая через европейские FTP-серверы. Если защита паролей - единственное, что требуется от функции crypt (), и не нужно использовать пароли в других системах (Sun, DEC и т. д.), то FreeBSD предлагает надежную криптографическую защиту, основанную на MD5. Данная модель обеспечивает защиту на уровне DES, а то и превосходит его, поэтому она устраивает большинство пользователей системы. OpenBSD поддерживает MD5, ведутся работы по добавлению модели шифрования blowfish. ОС FreeBSD также двигается к реализации дополнительных схем шифрования, между которыми можно будет переключаться. 8. BSD/OS - коммерческая BSD-система До сих пор основное внимание уделялось свободно распространяемым BSD-системам, однако имеет смысл упомянуть также коммерческую версию BSD/OS компании Berkeley Software DesingBSD/OS. Несколько ведущих специалистов CSRG организовали в 1991 году BSD Inc., чтобы развивать технологию BSD и донести ее до коммерческих заказчиков. BSD/OS - полнофункциональная, POSIX-совместимая Unix-система для процессоров архитектуры 386, 486 и Pentium. Система основана на программном обеспечении Университета Беркли, а также других источниках и компонентах, разработанных в BSDI. Первая версия BSD/ OS была поставлена заказчику в марте 1993 года. Сегодня BSDI Internet Server, основанный на BSD/OS, широко известен в своем классе систем и имеет несколько наград (например, InfoWorld Top Score Award в 1995 г.). Как и другие BSD-системы, данная ОС может служить WWWсервером, маршрутизатором и т. д. BSDI Internet server несет в мир ПК многое из того, что раньше было возможно лишь на более мощных системах: многозадачность, поддержка сети. Так, тесты скорости BSDI показали, что BSD/OS на Intel 486/66 развивает скорость на уровне Sun SPARCStation II, а Pentium-процессор сравним уже с SUN SS10. BSD/OS включает в себя все компоненты полноценной системы: X11R6, TCP/IP (+SLIP/PPP), NFS, средства разработки на C/C++, набор приложений и др. BSD/OS поставляется в двоичном виде, а за отдельную плату - с исходными текстами. Пожалуй, единственное, в чем BSD/OS безусловно обгоняет своих бесплатных конкурентов - это поддержка. BSD/OS - коммерческий продукт, и его пользователям доступны "горячие" телефоBSD/OS включает в себя все компоненты полноценной системы: X11R6, TCP/IP (+SLIP/PPP), NFS, средства разработки на C/C ++, набор приложений и др. BSD/OS поставляется в двоичном виде, а за отдельную плату - с исходными текстами. Пожалуй, единственное, в чем BSD/OS безусловно обгоняет своих бесплатных конкурентов - это поддержка. BSD/OS - коммерческий продукт, и его пользователям доступны "горячие" телефонные линии, к их услугам отделы поддержки и т. д. 9. Так что же лучше? Однозначного ответа на этот вопрос дать нельзя. Любые аргументы в "священной войне" - это http://www.freebsd.bip.ru/history2.shtml (8 of 10)10.04.2004 17:25:21

Daemon News Russia

пустая трата времени. Но можно взглянуть и с другой стороны. Все системы предоставляют давно ожидаемые и уникальные возможности: полностью функциональная операционная система работает на популярном оборудовании и при этом ее исходные тексты полностью доступны. Те, кто давно работает в компьютерной индустрии, вспомнят, что ОС практически всегда создавались поставщиками конкретной аппаратуры и, как правило, альтернативы их системе не существовало. Исходные тексты никогда не публиковались (многие компании и сейчас продолжают эту "добрую" традицию). Стать настоящим профессионалом можно было, лишь самостоятельно разобравшись в структуре системы, в логике ее работы. Но сегодня положение изменилось. Пользователь имеет возможность приобрести ПК, который будет в несколько раз мощнее многопользовательских VAX, и при этом выбрать из нескольких свободно распространяемых операционных систем (BSD, Linux и т. д.) Классический вопрос: если нечто выглядит, как утка, прогуливается, как утка, и крякает, как утка, как это называется? Ответ зависит от того, является ли слово "утка" торговой маркой! Если это так, то самое лучшее, на что вы можете рассчитывать без согласия владельца торговой марки, это "уткоподобное существо". Unix является торговой маркой X/Open Company, поэтому остальные системы, которые не имеют права на ее использование, именуют свои продукты Unix-подобными или даже "UN*X-like". Поэтому ни одна из перечисленных ОС формально не может называться Unix, но разве они стали от этого хуже? Сегодня бесплатные ОС динамично развиваются, ни в чем не уступая, а во многом даже превосходя своих коммерческих конкурентов. Более того, пользователям дается шанс лично повлиять на развитие системы - достаточно иметь в штате хороших программистов, чтобы стать независимым от поставщика операционной системы. Не придется ждать несколько недель, если обнаруживается какая-то неточность или возникает необходимость что-то улучшить или добавить. Вместо закрытого коллектива разработчиков (многие ли знают имена создателей Windows 95?) существует сообщество энтузиастов, открытое для сотрудничества. Вы можете выбрать ту операционную систему, которая больше подходит: FreeBSD, OpenBSD, Linux, NetBSD или что-то иное. Но что бы вы ни выбрали, это удачная сделка. Многие небольшие фирмы, Internet-провайдеры, другие организации и пользователи отказываются тратить деньги на то, что можно получить бесплатно, и все чаще используют свободно распространяемые системы семейства Unix. Вы боитесь, что не сможете найти необходимого программного обеспечения? Во-первых, к вашим услугами Internet, во-вторых, можно приобрести программное обеспечение под BSD/OS и/или Linux и использовать его на своей системе - двоичная совместимость хорошо отлажена. Кроме того, многие коммерческие разработчики поворачиваются сейчас в сторону свободно распространяемых BSD-систем. Автор выражает признательность за содействие в подготовке статьи Полу Краненбургу (NetBSD), Ясону Торпу (NetBSD), Тео де Раадту (OpenBSD) и Джордану Хаббарду (FreeBSD). Дополнительная информация об операционных системах семейства BSD 386BSD - старые версии BSD сегодня ориентируются исключительно на академическое и исследовательское сообщество, распространяются через Dr. Dobb's Journal на CD-дисках. FreeBSD - версия BSD для платформы Intel ориентируется на широкое использование, распространяется на CD (Walnut Creek CD-ROM, http://www.cdrom.com/) и через FTP (http://www. freebsd.org/). NetBSD - версия BSD для множества различных платформ, начиная от Intel и 68000 до DEC http://www.freebsd.bip.ru/history2.shtml (9 of 10)10.04.2004 17:25:21

Daemon News Russia

Alpha. Подробности на http://www.netbsd.org/. OpenBSD - вариант NetBSD. Более подробную информацию можно найти по адресу http://www. openbsd.org/. BSD/ OS (BSDI Internet Server) - коммерческая BSD-система от Berkeley Software Development, Inc. для Intel-платформ (http://www.bsdi.com/). Usenet groups: comp.Unix.bsd.* Fidonet: ru.Unix ru.Unix.bsd IRC: #netbsd, #freebsd, #openbsd etc. Вадим Колонцов (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/history2.shtml (10 of 10)10.04.2004 17:25:21

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Настройка NATD в среде FreeBSD новости

Очень часто возникает задача когда требуется пустить локальную сеть в и-нет через один выделенный провайдером IP адрес (200.200.200.1) и дать доступ пользователям находящимся в приватной сетке (192.168.1.0/24) к любому серверу в и-нете. Причем для настройки natd нам неважно какую топологию будет иметь интерфейс смотрящий в сторону ISP - будь это ethernet или ppp0 (ppp link). Принципп действия NAT (Network Address Translations) основан на преобразовании заголовка пакета приходящего из локальной сети на интефейс смотрящий с сторону интернета таким образом что этот пакет записывается в таблицу соединенией демона NATD и в нем переписыватеся адрес отправителя, например вместо 192.168.1.5 ставится 200.200.200.1 и пакет уходит в и-нет от реального адреса. Прихоящие пакеты сверяются с динамической таблицей демона natd и если они были из локальной сети то адрес источника заменяется и к хосту назначения в приватную сеть офисса. Итак у нас есть два интерфейса : ed0 - смотрит в сторону ISP (200.200.200.1 netmask 255.255.255.252) ed1 смотрит в сторону локальной сети (192.168.1.1 netmask 255.255.255.0 Существует два варианта реализации NAT во FreeBSD : ipnat + ipf и natd + ipfw, мы остановимся на последнем, поскольку ipfw более популярен. Для начала собрем ядро со следующими опциями : # Включаем поддержку firewall-a options IPFIREWALL options IPFIREWALL_VERBOSE options "IPFIREWALL_VERBOSE_LIMIT=100" # Включаем DIVERT пакетов приходящих на интерфейс для NAT options IPDIVERT После команды make depend; make clean; make all; make install перезагрузим систему и займемся настройкой firewall-a. Создадим файл в /usr/local/etc/rc.d/firewall.sh и дадим ему право исполнения chmod +x firewall.sh . Содержимое файла : #!/bin/sh #Очищаем предыдущие правила /sbin/ipfw -f flush # Разрешаем NATD /sbin/ipfw add divert natd ip from 192.168.1.0/24 to any out via ed0 /sbin/ipfw add divert natd ip from any to 200.200.200.1 in via ed0 # Ниже идет строка открывающая работу по всем портам снаружи http://www.freebsd.bip.ru/natd.shtml (1 of 2)10.04.2004 17:25:23

Daemon News Russia

# вы должны сами написать правила фильтрации под вашу сеть /sbin/ipfw add pass all from any to any via ed1 Теперь создадим файл /usr/local/etc/rc.d/natd.sh (дав на него chmod +x) : #!/bin/sh # Запускаем при старте natd и указываем чтобы он работал с ed0 (ключ -n) /sbin/natd -f /etc/natd.conf -n ed0 В файле /etc/natd.conf прописываем same_ports yes use_sockets yes В /etc/rc.conf обязательно должна быть строчка : gateway_enable = "YES" После перезагрузки мы получим работающий роутер с natd и в локальной сети Вам необходимо прописать в TCP/IP setting на рабочих станциях Windows адрес gateway - 192.168.1.1 и дополнительно адрес внешнего DNS сервера - это может быть сервер ISP. Через natd работают любые почтовые клиенты, любые версии ICQ и других socks клиентов - его настройка намного предпочтительнее чем настраивать по отдельности прокси сервер на каждый сервис в отдельности. Иногда возникает необходимость сделать редирект какого либо порта например с адреса 192.168.1.1 555 на 201.201.201.2 25 порт. Такая ситуация бывает когда забыт пароль на маршрутизатор через который поключается роутер на базе FreeBSD и приходится вписываться в те порты которые открыты. Для этого есть программа rined запускаемая из командной строчки и для нее обходим файл конфигурации в /usr/local/etc/rinetd.conf такого формата : 192.168.1.1 555 201.201.201.2 25 , где первый IP адрес - это адрес карточки в роутере а второй IP это адрес хоста назначения. Автор: Michael Vlasov (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/natd.shtml (2 of 2)10.04.2004 17:25:23

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Синхронизация своей FreeBSD машины с мировым временем по протоколу NT новости

Однажды я устал устанавливать часы моей рабочей машины в соответствие с точным временем передаваемым по радио. Тем более что точность получаемого результата всегда могла считаться только удовлетворительной, но никак не отличной - отклонение от точного времени на 1-2 секунды устранить при таком методе практически невозможно. К счастью вопрос точного времени озаботил задолго до меня профессора Делаверского университета (University of Delaware) Дэвида Миллза (David Mills), который подарил миру реализацию сетевого протокола синхронизации времени (Network Time Protocol). На данный момент основной является четвертая версия (NTP v4) этого протокола. Использование NTP позволяет обеспечить синхронизацию ваших часов с эталонными с точностью в несколько миллисекунд (существуют и наносекундные реализации, однако их использование обычно сопряжено с модификацией ядра операционной системы). Рассмотрим использование NTP в системе FreeBSD. Сначала необходимо скачать последнюю версию исходных текстов пакета NTP с официального сайта http://www.ntp.org/. Затем следует обычная процедура распаковки, компиляции и установки: tar xvfz ntp-4.0.xx.tar.gz cd ntp-4.0.xx ./configure make make install (с правами суперпользователя root) Тем кто по тем или иным причинам желает обойтись без процедуры компиляции рекомендую скачать пакет в виде pkg файла с ftp-сервера компании производителя вашей операционной системы. Настоятельно рекомендую всегда пользоваться самой последней версией пакета в целях снижения риска хакерской атаки (впрочем это выполнение этого правила желательно для любого программного обеспечения). Существует два основных пути синхронизации времени: эпизодический (используется утилита ntpdate) и постоянный (используется демон ntpd). Следует заметить, что для успеха процедуры синхронизации времени требуются права суперпользователя root. Так же необходимо учесть использование протоколом NTP для синхронизации времени 123-го порта, который необходимо открыть для входящего и исходящего трафика (справедливости ради необходимо отметить, что использование утилиты ntpdate с ключом -u освобождает от этой необходимости). Первый способ является единственно возможным при отсутствии постоянного подключения к Интернету, а так же не требует какого-либо конфигурирования. Однако недостатком этого метода является невысокая точность получаемого результата из-за нерегулярного запуска процедуры синхронизации. http://www.freebsd.bip.ru/time.shtml (1 of 3)10.04.2004 17:25:24

Daemon News Russia

Итак рассмотрим простой способ синхронизации времени в момент установления PPPсоединения с провайдером. Для этого в файл /etc/ppp/ip-up необходимо добавить единственную строку: ntpdate clepsydra.dec.com Где clepsydra.dec.com - URL сервера времени. Публичных серверов точного времени в Интернете очень много. Большое количество адресов заслуживающих доверия, вместе с правилами их использования, опубликовано по адресам http:// www.eecis.udel.edu/~mills/ntp/clock1.htm и http://www.eecis.udel.edu/~mills/ntp/clock2.htm. Эти списки постоянно дополняются и обновляются. При выборе сервера для синхронизации, следует учесть время затрачиваемое на прохождение пакетов от сервера до вашей машины воспользовавшись утилитой ping. В общем случае чем меньше это время, тем выше будет точность синхронизации часов. Оказывается автоматически получить точное время на часах вашего компьютера - достаточно просто. Однако если вы счастливый обладатель постоянного подключения к Интернету и у вас найдется 2-3 мегабайта свободной памяти, то можно воспользоваться вторым способом синхронизации времени при помощи демона ntpd, получив при этом гарантированную точность хода часов своего компьютера с максимальным отклонением от эталона в пределах десятка миллисекунд. Для реализации этого способа синхронизации времени необходимо создать конфигурационный файл /etc/ntp.conf. Пример файла /etc/ntp.conf: # Список серверов времени с указанием максимального и минимального интервала времени запуска процесса синхронизации server ntp.alaska.edu prefer minpoll 8 maxpoll 16 server clepsydra.dec.com minpoll 8 maxpoll 16 server clock.isc.org minpoll 8 maxpoll 16 # Указание ntpd в крайнем случае обращаться к встроенным часам server 127.127.1.0 fudge 127.127.1.0 stratum 8 # Указание прав доступа к серверу (по умолчанию "все запрещено") restrict default ignore restrict 199.165.76.11 noquery restrict 204.123.2.5 noquery restrict 204.152.184.72 noquery restrict 127.127.1.0 restrict 127.0.0.1 Запуск демона ntpd повлечет синхронизацию часов вашего компьютера с указанными серверами в автоматическом режиме с интервалом из указанного промежутка. Теперь за точность ваших часов можно ручаться. Если к ваш компьютер подключен к локальной сети, то вполне разумным будет сделать из него сервер точного времени вашей локальной сети. Для этого в предыдущий пример необходимо добавить следующее разрешение: # Права доступа для внутренней сети класса B 172.16.0.0/255.255.0.0 http://www.freebsd.bip.ru/time.shtml (2 of 3)10.04.2004 17:25:24

Daemon News Russia

restrict 172.16.0.0 mask 255.255.0.0 noquery Для синхронизации времени на UNIX-машинах локальной сети целесообразно использовать утилиту ntpdate, запуская ее при помощи демона cron несколько раз в сутки. Для Windowsмашин целесообразно использовать командный файл следующего содержания: net time /setsntp:my.ntp.server net time /set Где my.ntp.server - DNS-имя вашего локального NTP сервера (вместо имени вполне подойдет и IP-адрес). Что еще почитать: Информации по протоколу NTP в Интернете как ни странно не так уж и много, зачастую она повторяют оригинальную документацию. Вот список источников послуживших отправной точкой для данной статьи: http://www.ntp.org/ - официальный сайт посвященный протоколу NTP и его реализации Дэвидом Миллзом. Обязательно стоит зайти - на сайте собрана масса сведений о точном времени вообще и о протоколе NTP в частности. Тут можно всегда найти последнюю версию пакета NTP. ● http://bog.pp.ru/work/ntp.html - страница посвященная описанию протокола NTP на сайте Сергей Евгеньевич Богомолов (на русском языке). ● man ntpdate - страница руководства по утилите ntpdate ● man ntpd - страница руководства по демону ntpd (большой объем информации как о конфигурации демона, так и концептуального характера) ● man ntp.conf - страница руководства по конфигурационному файлу ntp.conf ●

Станислав Лапшанский (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/time.shtml (3 of 3)10.04.2004 17:25:24

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Установка защищенного соединения на FreeBSD новости

Сокращение IPSec происходит от "IP security". Это протокол, который предлагает методы прозрачного шифрования и аутентифицирования всего интернет-трафика на пакетном уровне. Таким образом, даже потенциально небезопасные протоколы, такие как SMTP, могут быть надежно защищены. IPSec является неотъемлемой частью IPv6, для IPv4 он является необязательным "прикрученным" дополнением. Однако несмотря на это IPSec работает, и работает очень хорошо! IPSec основан на двух ключевых компонентах: аутентификационном заголовке (Authentication Header (AH) и инкапсуляционном протоколе безопасности (Encapsulating Security Protocol (ESP). AH предоставляет аутентификацию, подтверждая, что присланный отправителем пакет действительно пришел от него, и что этот пакет действительно содержит те данные, которые были посланы. ESP шифрует данные в пакете и может так же предоставлять аутентификационные услуги (подробнее об аутентификации через ESP смотрите на сайте рабочей группы IPSec). ESP и AH могут быть использованы в режиме транспорта и туннеля. Транспортный режим предоставляет защищенное соединение между двумя точками, тогда как туннель дает VPN-подобное соединение (VPN-соединение позволяет пользователям находящимся вне локальной сети иметь к ней защищенный доступ). В транспортном режиме данные (а в случае AH, заголовок, например IP адрес отправителя) пакета подписываются и/или шифруются. Затем пакет передается по назначению, где он проверяется, дешифруется и далее обрабатывается как обычный IP пакет. Транспортный режим чаще используется для передачи данных между двумя узлами. В транспортном режиме происхождение пакета имеет значение, поэтому шифрованный трафик не может проходить через сети, в которых используется NAT. В туннельном режиме AH или ESP (и иногда оба) шифруют весь пакет с данными и помещают результат внутрь нового пакета. Этот пакет отправляется на другую сторону туннеля, где данные расшифровываются и проверяются. После этого восстановленный первоначальный пакет обрабатывается как обычно, и, если необходимо, пересылается к необходимой цели. Туннельный режим лучше всего подходит для обмена трафиком между двумя маршрутизаторами, или узлом и маршрутизатором. Так как исходный пакет находится в неприкосновенности, туннельный режим ESP позволяет пакетам проходить через NAT-сети. Туннельный режим ESP является отличным способом защитить незащищенные участки сети. К примеру благодаря беспроводной сети я пишу эту статью на ноутбуке, сидя в гостиной. Поскольку WEP (Wireless Equivalent Privacy -- протокол шифрования используемый в беспроводных устройствах) крайне незащищен, весь трафик между ноутбуком и Интернетом шифруется и туннелируется к моей базе беспроводного доступа (FreeBSD-сервер). Таким образом никто не может поглядеть мой трафик, когда он путешествует "по воздуху". Это также означает что никто другой не может использовать мое беспроводное соединение - но об этом в следующий раз. Установка IPSec IKE (не Эйзенхауэр) Во-первых вы должны сконфигурировать оба компьютера для использования IKE (Internet Key http://www.freebsd.bip.ru/ipsec.shtml (1 of 4)10.04.2004 17:25:26

Daemon News Russia

Exchange). IKE – это протокол который позволяет IPSec обмениваться шифровальными ключами безопасно и автоматически. В FreeBSD (и NetBSD), IKE поддерживается демоном racoon. Racoon является стандартным для FreeBSD 4.0 и выше. Для гарантии совместимости, однако, неплохой идеей будет убедиться что обе системы оснащены одинаковыми версиями racoon. Проще всего это сделать установив на обеих системах racoon из коллекции портов (/usr/ports/security/racoon). Конфигурационные файлы racoon по умолчанию находятся в /usr/local/etc/racoon/ и называются racoon.conf и pke.txt (их следует создать из файлов .dist, находящихся в этом каталоге). Это то немногое, что необходимо сделать с .conf файлом, тем не менее вы можете "поиграться" с временем жизни ключей (находится в строке lifetime time xxx ). Чем короче время жизни ключа тем выше защищенность соединения, однако задание излишне короткого времени жизни ключа может привести к повышенной загрузке процессора, а так же к паузам в связи, связанными с повторной выдачей ключей. Самым важным файлом в нашей ситуации является pke.txt. Этот файл должен иметь права на доступ 600, владельцем должен выступать root, при несоблюдении этого условия racoon откажется его использовать. Этот файл содержит предварительно разделенный ключ, т.е. секретную информацию, которая должна быть известна обоим сторонам для инициирования соединения. Итак настало время практического примера. Установим защищенный туннель между узлом mason (10.0.0.2), он будет сервером туннеля и gluon (10.0.0.77), который будет туннельным клиентом. Пусть разделенный ключ будет macplusbsdcool. На mason'е pke.txt должен выглядеть так: 10.0.0.77 macplusbsdcool Аналогично на gluon'е: 10.0.0.2 macplusbsdcool Теперь запустим racoon на обеих машинах: /usr/local/sbin/racoon -f /usr/local/etc/racoon.conf -l /var/log/racoon.log Политики Обе системы готовы к обмену ключами… Но они еще не знают что это необходимо сделать. Последний шагом является конфигурирование на каждом узле IPSec-политик - правил, которые описывают как и когда применять IPSec. Для настройки политик используется программа setkey. setkey считывает ввод из файла или из командной строки. Поскольку мы хотим сделать туннель постоянным, нам следует записать политики в файл и читать их на этапе загрузки командой setkey -f / etc/ipsec.rules (организацию запуска racoon и setkey при загрузке оставим читателю). Итак мы хотим что бы все пакеты клиента, шифровались и туннелировались через сервер mason. На сервере все пакеты к gluon'у также должны шифроваться. Таким образом ipsec.rules на gluon'е должна выглядеть следующим образом: spdadd 10.0.0.77 0.0.0.0/0 any -P out ipsec esp/tunnel/10.0.0.77-10.0.0.2/require; spdadd 0.0.0.0/0 10.0.0.77 any -P in ipsec http://www.freebsd.bip.ru/ipsec.shtml (2 of 4)10.04.2004 17:25:26

Daemon News Russia

esp/tunnel/10.0.0.2-10.0.0.77/require; А на mason'е: spdadd 0.0.0.0/0 10.0.0.77 any -P out ipsec esp/tunnel/10.0.0.2-10.0.0.77/require; spdadd 10.0.0.77 0.0.0.0/0 any -P in ipsec esp/tunnel/10.0.0.77-10.0.0.2/require; Эти строки хорошо сами себя объясняют. spdadd указывает, что создается новая IPSec-политика (как противоположность шифрованию ключа при ручной настройке IPSec соединения - не беспокойтесь, вам не придется этого делать). any говорит, что политика применяется к любому протоколу. out и in указывают направление движения пакетов. И наконец esp/.../require; указывают что ядро должно использовать IPSec в туннельном режиме и туннелировать пакеты от одного IP к другому. Все вышеизложенное полностью применимо к IPv6, для этого необходимо просто использовать IPv6адреса. Применим политики выполнив на обеих машинах команду setkey, описанным выше образом. Тестирование С запущенным на обеих машинах racoon'ом и примененными политиками, проверим созданный туннель командой ping. Если все настроено правильно, то после некоторой паузы, вызванной необходимостью инициировать туннель обменявшись ключами, мы увидим успешные ICMP-ответы. Для того что бы увериться в том, что наше соединение действительно использует IPSec, следует запустить утилиту tcpdump на клиенте и воспользовавшись утилитой ping обратиться к каким-нибудь машинам в сети. Вы должны увидеть похожую картину: 13:58:39.045831 gluon > mason: ESP(spi=0x099e806d,seq=0x723) 13:58:39.046566 mason > gluon: ESP(spi=0x0d8d15b6,seq=0x6b2) 13:58:39.187444 gluon > mason: ESP(spi=0x099e806d,seq=0x724) (frag 64877:1480@0+) Если вы видите не только ESP-трафик, значит что-то не так. Убедитесь, что адрес назначения на клиенте 0.0.0.0/0. Если вы не видите вообще никакого ESP-трафика, то это явная ошибка настройки. Проверьте, что политики согласованы на клиенте и сервере. Убедитесь, что ключи в файле pke.txt одинаковы на обоих машинах и IP-адреса корректны. Если все проверено, поглядите лог-файл /var/log/ racoon.log на предмет обнаружения сообщений об ошибках. Одно слово в качестве предупреждения - если вы перезагрузите одну из машин и внезапно ощутите проблему с соединением, сбросьте ключи на обеих машинах запустив команду setkey -F. Вероятно, произошла рассинхронизация ключей. Итоги Сейчас вы должны получить работающий IPSec-туннель между вашим клиентом и сервером.

http://www.freebsd.bip.ru/ipsec.shtml (3 of 4)10.04.2004 17:25:26

Daemon News Russia

Пользуйтесь беспроводным подключением, наслаждаясь тем, что никто не может подсмотреть ваши данные! Станислав Лапшанский (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/ipsec.shtml (4 of 4)10.04.2004 17:25:26

Daemon News Russia

новости \\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь

Надежная SMB Более года назад я обсуждал поддержку FreeBSD файловой системы SMB. В то время она была реализована на экспериментальном уровне и ее часто "заклинивало". С тех пор она была доведена до уровня, когда ее стабильность стала достаточной для использования ее в реальных задачах. Если вы ходите использовать разделяемые ресурсы Windows-машин на рабочих станциях FreeBSD, эта статья для вас. Для начала необходимо собрать некоторую информацию о вашей Windows-сети: ● ● ●

Имя рабочей группы или домена Действующее сетевое имя и пароль IP адрес WINS-сервера или DNS-имена всех узлов к которым предполагается организовать доступ (адрес WINS-сервера можно получить выполнив на Windows-машине команду ipconfig /all).

Первой проблемой при организации доступа FreeBSD в сеть Windows является поддержка Windows большого набора разнообразных кодовых страниц - пользователь Windows легко может использовать символы не встречающиеся в таблице ASCII. Ядро FreeBSD не включает в себя библиотек для поддержки таких символов. Поэтому установите порт libiconv из /usr/ports/converters/libiconv. Заметьте, что libiconv распространяется под лицензией LGPL, так что если вы заинтересованы в использовании SMBFS во встроенных системах, делайте это под руководством вашего юридический отдела. Теперь перекомпилируйте ваше ядро с поддержкой SMB. Просто добавьте следующие опции в ядро: options options options options options

NETSMB NETSMBCRYPTO LIBMCHAIN LIBICONV SMBFS

SMBFS также доступен как модуль. Однако вам в любом случае придется перекомпилировать ядро - для того что бы включить в него поддержку сетей SMB, поэтому SMBFS очевидно будет разумным так же компилировать статически. После компиляции ядра, установите утилиты для работы с SMB из /usr/ports/net/smbfs. SMB-утилиты обязательно должны быть синхронизированы с конфигурацией вашего ядра. Это делает невозможным использование скомпилированных пакетов, если вы конечно не обладаете машинами с одинаковой конфигурацией. Если вы производите обновление вашей инсталляции FreeBSD, вы должны перекомпилировать порт. Для того что бы жизнь не казалась вам медом, основное хранилище исходного кода SMBFS находится в Казахстане на очень медленном канале. Я рекомендую вам сохранить дистрибутив исходного кода где-нибудь в вашей сети, что бы вы всегда легко могли перекомпилировать утилиты без необходимости вытаскивать исходный код с другой стороны планеты. Утилиты SMB используют конфигурационный файл, который находится или в $HOME/.nsmbrc или в /usr/local/ etc/nsmb.conf. Любые настройки сделанные в nsmb.conf переписывают соответствующие настройки в директориях пользователей. Конфигурационный файл поделен на секции текстовыми метками, заключенными в квадратные скобки. Например, настройки применяемые к каждой SMB-сессии хранятся в секции [default]. Вы можете создавать собственные секции задавая серверы, пользователей и разделяемые ресурсы в одном из следующих форматов: http://www.freebsd.bip.ru/smb.shtml (1 of 5)10.04.2004 17:25:30

Daemon News Russia

[servername] [servername:username] [servername:username:sharename] Например информация применяемая ко всему серверу находится в секции [servername], применимая к определенному пользователю в [servername:username] и наконец к определенному ресурсу в [servername: username:sharename]. Однако вы можете заполнить информацию о всех разделенных ресурсах в секции [servername], если вам не нужны разные настройки для каждого отдельного ресурса. Все эти значения являются SMB-параметрами, т.е. например мое регистрационное Windows-имя "mlucas", а в UNIX - "mwlucas", значит в nsmb.conf я должен использовать имя "mlucas". Вам придется использовать ключевые слова для определения конфигурации секции. Некоторые ключевые слова могут быть использованы только в определенных секциях. Например конфигурационная секция сервера может иметь в своем составе определение IP-адреса, а пользователя - нет. Значения параметрам задаются с помощью знака равенства, типа "keyword=value". Теперь расскажем о ключевых словах. workgroup=string Задает имя NT-домена или название рабочей группы, к которой вы собираетесь получить доступ. addr=a.b.c.d Это IP-адрес сервера, имя которого задается в названии секции. Этот параметр может находиться только в секции описания сервера. charsets local:remote При помощи этого параметра обеспечивается поддержка прозрачного конвертирования между кодировками используемыми клиентом FreeBSD и Windows-сервером (в случае русскоязычного окружения таковыми обычно являются koi8-r и cp866 - прим. переводчика). Так как SMBFS была написана в Средней Азии, это было немаловажной задачей! nbns=a.b.c.d Параметр для указания IP-адреса WINS-сервера. Вы можете поместить этот параметр или в секции [default] или в секциях конфигурации конкретных серверов. nbscope=string Этот параметр задает область NetBIOS. Если вы не знаете, что такое область NetBIOS, то вероятнее всего вам не потребуется этот параметр. ●





retry_count - количество попыток, которые будет предпринимать SMB-клиент при обращении к SMBсерверу, перед тем, как связь с сервером будет считаться нарушенной. Значение "по умолчанию" вероятно будет самым подходящим. timeout - максимальное время ожидание ответа от сервера. Скорее всего вам следует оставить значение "по умолчанию". password=string - пароль пользователя или ресурса, заданный открытым текстом. Если вы будете хранить пароли в файле nsmb.conf, убедитесь, что право на чтение имеет только пользователь root. Хранение паролей в файле $HOME/.nsmbrc является плохой мыслью, если системой пользуется несколько пользователей. Вы можете зашифровать ваши пароли используя утилиту smbutil с ключом -

http://www.freebsd.bip.ru/smb.shtml (2 of 5)10.04.2004 17:25:30

Daemon News Russia

crypt. В начале зашифрованного пароля находятся два символа доллара ($$). Использование шифрования паролей может помочь предотвратить подглядывание вашего пароля случайным человеком, однако не может защитить его от взлома – хакер легко вскроет такой шифр. Итак начнем писать основной конфигурационный файл nsmb.conf. Во-первых мы хотим иметь возможность находить узлы Windows-сети. Для этого необходимо задать имя рабочей группы (или домена - прим. переводчика) и WINS-сервера. Я также имею пользовательский аккаунт в домене, я укажу мое пользовательское имя в [default] секции. [default] workgroup=EXAMPLE nbns=192.168.2.80 username=mlucas Теперь вы можете выполнять основные запросы к WINS-серверу. При помощи smbutil можно проводить базовое разрешение NetBIOS-имен в IP-адреса. # smbutil lookup fileserver4 Got response from 192.168.2.80 IP address of fileserv4: 192.168.1.202 # Если ваш запрос был обработан подобным образом, значит все в порядке. Теперь мы хотим получить доступ к общим ресурсам этого сервера. Перед тем, как вы сможете обратиться к ресурсу, вы должны пройти процедуру авторизации. Только пользователь root может использовать функции авторизации утилиты smbutil. # smbutil login //mlucas@fileserv4 Password: Connected to MLUCAS # Итак наш пароль оказался верен. Попробуем посмотреть список доступных ресурсов, которые предоставляет этот сервер. # smbutil view //mlucas@fileserv4 Password: Share Type Comment --------------------------------------------jsmith$ disk gdonner$ disk mlucas$ disk Вы получили список всех ресурсов на этом сервере. Когда вы завершите, закройте сеанс с сервером. # smbutil logout //mlucas@fileserv4 Password: Connection unmarked as permanent and will be closed when possible # Теперь, кода мы закончили расследование, попробуем на самом деле смонтировать ресурс при помощи http://www.freebsd.bip.ru/smb.shtml (3 of 5)10.04.2004 17:25:30

Daemon News Russia

утилиты mount_smbfs. Синтаксис очень простой. mount_smbfs //username@servername/share /mount/point Для монтирования моего персонального ресурса на файловом сервере в каталог /home/mwlucas/smbmount, я пишу: # mount_smbfs //mlucas@fileserver4/mlucas /home/mwlucas/smbmount Проверьте ваши действия утилитой df. # df Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/ad0s1a 99183 49105 42144 54% / /dev/ad0s1f 5186362 3091500 1679954 65% /usr /dev/ad0s1e 198399 22816 159712 12% /var procfs 4 4 0 100% /proc //MLUCAS@FILESERV4/MLUCAS 128000 54320 73680 42% /usr/home/mwlucas/smbmount # Я могу выполнять основные операции с файлами, включая использование emacs и StarOffice-документов в этом каталоге. Жизнь стала немного лучше. mount_smbfs включает несколько опций для тонкой настройки процесса монтирования. Мы можем переделать nsmb.conf для использования различных паролей для доступа к различным ресурсам, или например для игнорирования разрешения NetBIOS-имен для некоторых узлов сети. Вот более сложный пример файла nsmb.conf с комментариями. [default] workgroup=EXAMPLE nbns=192.168.2.80 username=mlucas # У меня есть ресурс на моем рабочем столе с отдельным паролем [desktop:mlucas] password=$$1725a5038393e12ee # Разработчики находятся в другом NT-домене с совместно используемым именем пользователя [development] workgroup=EXAMPLE2 username=support Вопрос владения (ownership) файлами в смонтированном сетевом каталоге может доставить проблемы. Дело в том, что обычно ваши имена в Unix'е отличаются от ваших имен в Windows, к тому же Unix имеет совершенно другую систему контроля доступа к файлам. Поскольку при доступе к ресурсу вы используете Windows-имя пользователя, вы получаете к нему доступ который имеет этот пользователь к данному ресурсу в среде Windows. Поэтому вы должны установить правильные Unix-права для этого ресурса. По умолчанию mount_smbfs устанавливает права на ресурс такими же как у каталога в который он монтируется. Каталог / home/mwlucas/smbmount в нашем примере имеет владельцем пользователя "mwlucas" и группу «mwlucas», с правами 755. Следовательно только я могу редактировать файлы в этом каталоге. Вы можете изменить настройку "по умолчанию" используя для задания режима доступа к файлам mount_smbfs -f, а для режима доступа к каталогам mount_smbfs -d. Например для того что бы только я мог пользоваться файлами этого каталога, я должен использовать mount_smbfs -d 700 (таким образом можно сделать Unix-права на ресурс более жесткими чем Windows-права, однако это не является моей целью в данный момент). Я могу сменить владельца при помощи ключа -u, и поменять группу владельца при помощи ключа -g. http://www.freebsd.bip.ru/smb.shtml (4 of 5)10.04.2004 17:25:30

Daemon News Russia

Для отключения разрешения NetBIOS-имен и возможности использования вместо них DNS-имени узла или IPадреса, необходимо при вызове mount_smbfs использовать ключ -I. Ключ -N значит, что mount_smbfs должна читать пароль из конфигурационного файла, а не спрашивать его на терминале пользователя. Это значит что вы должны будете указать пароль открытым текстом в файле nsmb. conf. Флаг -W позволяет указать новую рабочую группу (или домен). Этот флаг переопределяет любые настройки в файле nsmb.conf. Windows нечувствительна к регистру, Unix, напротив, регистр учитывает. По умолчанию SMBFS оставляет регистр таким какой был введен пользователем, но это не всегда может быть тем что вы хотите. Флаг -c указывает mount_smbfs на необходимость смены регистра. -c l приводит все к нижнему регистру, а -c u – к верхнему. При работе с mount_smbfs я оценил ее гибкость, вполне достаточную для использования ее в почти любой ситуации в Windows-сети. Таким образом SMBFS позволит вам прозрачно использовать вашу FreeBSDрабочую станцию в любом офисе. Перевод: Станислав Лапшанский (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/smb.shtml (5 of 5)10.04.2004 17:25:30

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Трюки BSD - Memory File System новости

Файловая система MFS (Memory File System - файловая система в оперативной памяти) позволяет создавать виртуальный диск используя оперативную память вашего компьютера. Тем самым вы можете использовать память системы так же как жесткий диск. Вы можете записывать файлы на виртуальный диск так же как на любой жесткий диск вашей системы. Поскольку файлы на MFS-диске уже находятся в памяти, к ним возможен доступ память-память. Это намного быстрее чем доступ диск-память. Однако как и в случае с оперативной памятью, вы теряете все данные на таком диске, когда выключаете компьютер. Вы можете использовать MFS для реализации виртуального диска на бездисковых рабочих станциях. Некоторые администраторы используют MFS-диски для хранения history-файлов newsсерверов, добиваясь тем самым существенного прироста их производительности. Использование MFS-диска в качестве хранилища lock-файлов систем управления базами данных также может значительно повысить производительность многих операций. Вы также можете использовать MFS для создания временного виртуального диска для частой компиляции программ, архивации/разархивации или для манипуляций с большими количествами небольших файлов. Однако это не всегда является хорошей мыслью - если на вашей системе не установлено достаточного количества памяти, то MFS-диск легко сможет поставить ее "на колени". Если памяти достаточно, то вы, например, можете смонтировать MFS-диск в каталоге /usr/obj; вы еще не видели как быстро будет выполнена команда "make world". Все BSD-подобные системы поддерживают MFS. Я использую FreeBSD в качестве примера. Однако несмотря на то, что команды для организации MFS-дисков в NetBSD и OpenBSD должны быть похожи, я думаю что вам следует обратиться к man-руководству и документации по компиляции ядра этих систем прежде чем двигаться с нами дальше. После монтирования MFS-диск будет пустым. Вы можете скопировать туда нужные вам файлы или оставить его чистым, как например раздел /tmp. MFS-диск будет эффективен в случае, когда свопинг системы регулярен. Ядро FreeBSD сохраняет часто используемую информацию в памяти, перемещая реже используемые данные в своп. Такое поведение великолепно подходит для разделов типа /tmp, где доступ к маленьким часто используемым файлам будет осуществляться очень быстро, в то время как большие файлы, которые обычно используются реже и поэтому находятся в своп-файле, будут доступны со скоростью похожей на обычную UFS-систему. Можно даже использовать MFS-диск большего размера чем физическая оперативная память вашего компьютера. В этом случае MFS будет использовать своп. Это позволяет вам временно разархивировать крупные файлы на такой диск. FreeBSD позволит вам создать MFS-диск http://www.freebsd.bip.ru/mfs.shtml (1 of 3)10.04.2004 17:25:31

Daemon News Russia

большего размера чем общий объем физической и виртуальной (своп) памяти, при попытке использовать который вы можете столкнуться с серьезными проблемами. MFS как и UFS не может быть загружаемым модулем. Для использования MFS необходимо перекомпилировать ядро с включенными следующими опциями: option MFS #Memory File Sysytem Теперь скомпилируйте и установите ядро. Перезагрузитесь. Вы можете монтировать MFS-диск на этапе загрузки. Во-первых узнайте как называется партиция отведенная под своп: grep swap /etc/fstab /dev/ad0s1b none swap sw 0 0 На моей машине это ad0s1b. Если у вас несколько своп-партиций, выберите какую-нибудь одну. Добавьте похожую строку в /etc/fstab: /dev/ad0s1b /var/db/lockfiles mfs rw 0 0 Вы можете выбрать любые другие стандартные параметры монтирования (см. man 8 mount). Обычно добавляют параметры nosuid, nodev и async. Параметр async не уменьшает надежность системы при использовании его с MFS, в отличии от других файловых систем: в случае краха системы вам так или иначе придется заполнять MFS-диск данными. В можете смонтировать MFS-диск и после загрузки. Просто укажите точку монтирования и выполните команду mount_mfs: mount_mfs -s 655360 /dev/ad0s1b /usr/obj Этой командой мы смонтировали 320МБ файловую систему в каталоге /usr/obj. Вы потеряете содержимое этого каталога при перезагрузке, но если вы всегда выполняете операцию сборки цели world с нуля и у вас уже настроен /etc/fstab, то это не проблема. Флаг -s устанавливает максимальный размер партиции в 512КБ блоках. Если вы хотите создать MFS-диск ограниченный объемом доступной памяти, вы можете пропустить этот флаг. Однако это может создать вам впоследствии определенные проблемы, так что будьте уверены, что это именно то что вам нужно. Следует отметить один нюанс связанный с монтированием MFS-дисков - этот процесс скрывает все файлы в точке монтирования (это замечание относится к монтированию вообще, применительно к любой файловой системе - примечание переводчика). Например если вы монтируете MFS-диск на каталог /tmp, содержащий файлы, то после монтирования эти файлы не будут доступны системе. Если вы запущенная программа рассчитывает иметь доступ к некоторым файлам в /tmp (скажем как X'ы), это может вызвать некоторые проблемы. Когда вы

http://www.freebsd.bip.ru/mfs.shtml (2 of 3)10.04.2004 17:25:31

Daemon News Russia

размонтируете MFS-диск, файлы станут видны вновь. Существует способ видеть одновременно оба набора файлов, если использовать объединенное монтирование, но реализация объединенного монтирования FreeBSD пользуется дурной славой и обладает серьезными проблемами. Правильно использованная MFS может добавить производительности вашей системе. Неаккуратно использованная, она может привести к разнообразным проблемам. Наслаждайтесь. Перевод: Станислав Лапшанский (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/mfs.shtml (3 of 3)10.04.2004 17:25:31

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Пять причин, почему не стоит устанавливать Linux у себя дома новости

1. Linux - это инструмент шпиона Linux использует браузер типа Netscape, названный Mozilla. Mozilla - это кодовое имя бесплатного браузера, разрабатываемого японской Красной Армией. Он собирает всю информацию о ваших паролях и кредитных картах и отсылает ее на сервер в Японии. Это очень опасная программа! 2. В Linux спрятаны вредоносные программы У меня два месяца назад погас монитор и я отвез его на ремонт по гарантии. Дисплей мне ремонтировать отказались, объяснив, что его сломала программа, спрятанная в Linux. Я узнал, что хакер "Линьос Тороволтос", создатель Linux имеет договоренность с производителями мониторов. Они ему платят, чтобы он вставлял опасный код в систему, который уничтожает мониторы для того, чтобы мы покупали новые. Сколько еще таких программ в Linux - одному Богу известно. 3. Linux учит детей врать и дискриминировать женщин Я был шокирован, когда поймал своего сына за работой в программе с названием BitchX. Это была основная причина, почему я отвез компьютер в магазин и вернул уплаченные деньги. Linux учит ваших детей врать и ненавидеть людей. А других программ с обширной дискриминацией женского пола там очень много! 4. Linux - это рай для пиратов Для Linux написано много программ, которые используются для того, чтобы красть музыку с музыкальных центров, магнитофонов и кухонных комбайнов с использованием протоколоа mp3, причем это возможно даже когда нет выхода в интернет! Это преступная деятельность, ваш ребенок за это сядет в тюрьму! кроме того, осторожнее относитесь к программам под названием "рипперы". Эти программы используются для кражи музыки с компакт-дисков и сохраняют ее на винчестере. Музыкальный CD, который вы купили за 15-20 долларов после риппинга форматируется и вся информация стирается. Никогда не одалживайте компакт-диск тем, кто использует Linux! 5. Linux - это вирус! И Linux, и так называемый Lilo - это вирусы. Lilo - это маленький вирус, использующийся для загрузки большого вируса, вируса Linux. Когда я застал моего сына за загрузкой Linux, я немедленно перезагрузился и запустил Windows. Затем я просканировал компьютер программой Norton Antivirus и (ага!) Lilo был пойман практически сразу же. Долго и безуспешно я пытался удалить его с жесткого диска. Даже после его удаления компьютер при загрузке выводил сообщение "LI-". Похоже, что вирус Lilo узнал, что его собираются удалять и разрушил жесткий диск. Консультант в магазине также сказал мне, что Linux расширил поверхность жесткого диска, использовав что-то под названием "вторые расширенные файлы", известое среди хакеров под кодовым именем "ext2". Эти "файлы" уничтожают ваш винчестер, раздувая его в три раза! http://www.freebsd.bip.ru/antilinux.shtml (1 of 2)10.04.2004 17:25:32

Daemon News Russia

Короче, мне пришлось купить новый жесткий диск... (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/antilinux.shtml (2 of 2)10.04.2004 17:25:32

Daemon News Russia

новости

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь

Запуск механизма квот Механизм квотирования запускается в следующем порядке: ●

В файле /etc/fstab в строке, задающей параметры монтирования файловой системы, для которой будет запущен механизм квот, необходимо добавить один или два параметра, которые здесь подчеркнуты (параметр userquota - для квотирования по пользователям, параметр groupquota - для квотирования по группам): /dev/wdc0f

● ●



/usr

...

rw,userquota,groupquota

1

1

В файле /etc/rc.conf изменить параметр CHECK_QUOTAS на "YES". Теперь нужно перекомпилировать ядро системы, добавив в файл конфигурации ядра следующую запись: options



...

QUOTA

Перезагружаем компьютер (sync && reboot). Далее выбираем или создаем пользователя, который будет являться эталонным для остальных пользователей. Например, пользователь test. Даем команду: edquota

-u

test

Команда запускает текстовый редактор, определенный в переменной EDITOR. В редакторе отобразится примерно следующая информация: Quotas for user test: /usr: blocks in use: 65, limits (soft=50, hard=75) inodes in use: 7, limits (soft=50, hard=60) Квоты могут быть заданы по двум типам: hard и soft. 1024 блока по типу hard - это 1 Мбайт любого количества файлов на диске. 500 по типу soft - это 500 файлов любого объема на жестком диске. После редактирования и сохранения квот для пользователя test, можно задать квоты для остальных пользователей командой: edquota

-p

test

10000-19999

Т.о., все пользователи, чьи UID будут находиться в пределах от 10000 до 19999, будут "наследовать" параметры квот пользователя test. Редактируя квоты одного пользователя (test) можно менять размер квот для целой группы пользователей. http://www.freebsd.bip.ru/quotas.shtml (1 of 2)10.04.2004 17:25:33

Daemon News Russia (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/quotas.shtml (2 of 2)10.04.2004 17:25:33

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Конфигурирование SLIP-сервера новости

Доступ по SLIP протоколу конфигурируется достаточно просто. Для начала была создана отдельная подсеть (192.168.5.0) для SLIP пользователей, т.к. нужно быть очень изворотливым, чтобы организовать динамическое распределение адресов при таком способе модемной связи, а если пользователей много, то адресов на всех может не хватить. Извернуться удалось только наполовину (см. файл slip.login), о чем чуть позже. Первый адрес (192.168.5.1) был присвоен сетевому интерфейсу сервера (см. Главу 2), со второго по девятый номера адресов были присвоены SLIP псевдоустройствам сервера (для чего пришлось внести изменения в файл slip. login), а остальные были розданы пользователям в порядке их регистрации в системе. В директории /etc создается директория с именем sliphome, в которую копируются четыре файла шаблона (slip.hosts, slip.login, slip.logout, slip.slparms) из директории /usr/src/share/examples/ sliplogin. Далее эти файлы редактируются в соответствии с рекомендациями, изложенными ниже: ●

slip.hosts – в файл прописываются параметры SLIP пользователей в следующем формате:

# Имя пользователя Abcd123

IP-адрес сервера 192.168.5.1

IP-адрес пользователя

Маска пользователя

Параметр связи

192.168.5.xxx

ffffff00

autocomp

Имя пользователя должно соответствовать его регистрационному имени в файле паролей (файл master.passwd), – при входе в систему пользователь вводит это имя, а затем пароль, заданный в файле паролей. Адрес сервера в файле slip.hosts не играет значительной роли, т.к. программе “ sliplogin” передается другое значение этого параметра, определяемое в файле slip. login. Адрес пользователя должен быть уникальным, его необходимо прописать в настройках сети на машине клиента с маской пользователя, указанной в этом же файле, в качестве шлюза на машине клиента необходимо указать адрес 192.168.5.1. Параметр связи “autocomp” позволяет системе автоматически выбирать режим сжатия заголовков, или отключать его при необходимости. ●

slip.login – этот файл содержит команды, которые производят необходимые действия по настройке сетевых SLIP интерфейсов сервера на основании тех параметров, которые им передает программа “ sliplogin” во время входа пользователя в систему через модем. В начале файла даны комментарии для параметров по их номерам. В том виде, в каком шаблон этого файла был взят, он меня не устраивал, т.к. тогда требовалось бы каждому SLIP пользователю назначать не один, а два IP адреса (один на стороне машины клиента, другой для SLIP интерфейса сервера). Обойти эту проблему удалось с помощью добавления в этот файл небольшого скрипта. Ниже приведен данный файл с внесенными в него изменениями:

http://www.freebsd.bip.ru/slip.shtml (1 of 3)10.04.2004 17:25:35

Daemon News Russia

#!/bin/sh # @(#)slip.login 8.1 (Berkeley) 6/6/93 # generic login file for a slip line. sliplogin invokes this with the parameters: # 1 2 3 4 5 6 7-n # slipunit ttyspeed loginname local-addr remote-addr mask opt-args # Delete any arp table entries for this site, just in case /usr/sbin/arp -d $5 # Bringup the line case $1 in 0) local=192.168.5.2;; 1) local=192.168.5.3;; 2) local=192.168.5.4;; 3) local=192.168.5.5;; 4) local=192.168.5.6;; 5) local=192.168.5.7;; 6) local=192.168.5.8;; 7) local=192.168.5.9;; esac /sbin/ifconfig sl$1 inet $local $5 netmask $6 # Answer ARP request for the SLIP client with our Ethernet addr # XXX - Must be filled in with the ethernet address of the local machine /usr/sbin/arp -s $5 00:40:95:14:fa:80 pub exit Здесь параметр $1 – это номер SLIP интерфейса, который задействуется в данный момент. В зависимости от номера интерфейса, ему присваивается определенный адрес в операторе case. А в параметрах команды “ ifconfig” вместо параметра $4, берущего свое значение из файла slip. hosts, ставится параметр $local, значение которого определяется выше в операторе case. Таким образом, удается избежать ненужного разрастания адресного пространства. Ethernet адрес сетевой карты, установленной на сервере, может быть получен с помощью команды “ ifconfig –au”. Его необходимо прописать в параметрах команды “ arp”, где это требуется. Файл должен быть исполняемым для владельца ( root) и группы ( network). ●



slip.logout – этот файл выполняет функцию, обратную той, которую выполняет файл slip. login. Т.е. при выходе пользователя из системы команды, прописанные в нем, отключают SLIP интерфейс, по которому связь прерывается. В этом файле почти ничего не надо менять, за исключением параметра команды “ ifconfig”, – вместо слова down необходимо написать слово delete. Файл должен быть исполняемым для владельца ( root) и группы ( network). slip.slparms – это самый простой файл. В нем определяется максимум три параметра. Я определял только два. Первый из них задает время в секундах с момента последнего запроса, во время которого SLIP линия будет активна и связь не прервется. Второй параметр определяет интервал времени в секундах, через который посылается сигнал, имитирующий запрос. Т.е. если это значение меньше, чем первое, то линия будет активна постоянно, пока клиент не разорвет связь. Значение первого параметра я задал равным 3600, а второго – 600. Файл должен быть исполняемым для владельца ( root) и

http://www.freebsd.bip.ru/slip.shtml (2 of 3)10.04.2004 17:25:35

Daemon News Russia

группы ( network). Теперь можно перезагрузить ЭВМ и начать заводить SLIP пользователей.

(c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/slip.shtml (3 of 3)10.04.2004 17:25:35

Daemon News Russia

новости \\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь UNIX: достоинства, недостатки и эмоции

Зеленеет один, Осеннему ветру наперекор, Спелый каштан. Мацуо Басе (1644-1694) Начнем с эмоций. Теоретически я согласен, что некорректно говорить "я люблю операционную систему UNIX". Всем известно, что по-настоящему любят родителей, детей, женщин и других Божьих тварей. Тем не менее... Люблю тебя (UNIX), но странною любовью... К сожалению, ее не победит рассудок мой. Вы же знаете, как бывает с любимой женщиной. Мы видим в ней массу недостатков. Мы знаем, какой бы она должна быть. Но она существует (какая она есть), и мы ее любим. Так и с UNIX. Неэмоциональный человек скажет, что это всего лишь программа. Пока она его устраивает, он ей пользуемся. Когда появляется лучшая операционная система (только вот где она?), он начинает пользоваться ей. Наверное, это правильно, но скучно, господа! На мой взгляд, наиболее правильная комбинация человеческих качеств включает жизненный опыт, теоретические знания, практику, эмоциональный комплекс, привычки и способность критического отношения к себе и к миру (и конечно же, чувство юмора). Мой приятель злится, когда мы с коллегами начинаем эмоционально обсуждать достоинства UNIX и недостатки NT (другая точка зрения - выдающиеся достижения Билла Гейтса и застой и прострацию в мире UNIX). А что тут злиться? Главное, чтобы эмоции не перекрывали здравый смысл и смягчались юмором. Могу привести два примера. Год назад на факультете ВМиК Московского университета мы со студентами проводили вечерний абсолютно неформальный семинар под условным названием "Операционная система UNIX". На самом деле, на этом семинаре обсуждались разнообразные вопросы архитектурной организации различных операционных систем, и иногда и систем управления базами данных. Хотя, конечно, основной состав семинара был заражен вирусом "UNIX". Так вот, двое моих студентов внимательно проштудировали одну из немногих хороших книг по архитектуре Windows NT и сделали развернутый доклад часа на четыре. Доклад сопровождался массой шуток и выкриков с места, но в результате все остались очень довольны, получив представление об NT изнутри. Другой пример. На заре NT в завершение семинара, целиком посвященного ОС UNIX, было решено провести диспут (в стиле революционных традиций первых годов Советской власти) на тему "Придет ли NT на смену UNIX?". Мы с коллегой (тоже старым UNIX-истом) договорились, что я буду представлять сторону UNIX, а он - отстаивать преимущества NT. Естественно, мы оба хорошо знали UNIX, а NT (в то время) представляли в лучшем случае на уровне рядовых пользователей. Поэтому весовые категории участников диспута оказались существенно неравными, и несмотря на дружеские отношения и обладание чувством юмора к концу диспута

http://www.freebsd.bip.ru/em.shtml (1 of 5)10.04.2004 17:25:36

Daemon News Russia

мы благополучно переругались. Довольная публика в зале не наблюдалась. Попробую умерить свои эмоции и немного более серьезно поговорить о достоинствах и недостатках ОС UNIX, о прошлом, настоящем и будущем этого явления. Вы знаете, что и до и после появления ОС UNIX существовали гораздо более элегантные операционные системы: например, Miltics, Mach, Chorus и т.д. Красивые, основанные на единой идее, проектировавшиеся и разрабатывавшиеся выдающими специалистами. Мне нравятся эти ОС, я часто о них пишу, рассказываю студентам. Более того, некоторое время назад в Институте проблем кибернетики РАН, а затем в Институте системного программирования РАН в составе группы опытных специалистов в области операционных систем я участвовал в проектировании и разработки отечественной объектно-ориентированной операционной системы КЛОС. Тоже была очень красивая система. Но только UNIX в своих разных ипостасях смог благополучно и с большой пользой прожить более 25 лет. В чем причина такого долголетия? Почему человек, вошедший в мир UNIX, не может, да и не хочет его покинуть? Почему за весь период использования ОС UNIX область применения этой ОС непрерывно расширялась? Чем, в конце концов, объяснить феномен университетов Беркли и Хельсинки, где независимо разработаны популярные некоммерческие варианты ОС UNIX? Краткий перечень ответов на эти вопросы (возможно, неполный): простота мощность базового набора средств развитость интерфейсов демократичность открытость переносимость Прокомментируем этот список более подробно. По моему мнению, исходным побуждение к разработке ОС UNIX было стремление создать простую и понятную операционную среду. Простота начальных версий ОС UNIX во многом явилась следствием удачного выбора основных понятий, которые, с одной стороны, отражали основные потребности пользователей, а с другой - были интуитивно понятными: пользователь, терминал, программа, процесс, файл с примитивной внутренней структурой. На пальцах любой из этих понятий объясняется за считанные минуты. В среде классической ОС UNIX очень легко проектировать, разрабатывать и отлаживать программы. Создателям системы удалось найти удачный компромисс между разумной ограниченностью доступных средств (известно, что чем более ограничен средний программист, тем легче ему жить) и достаточностью этих средств для разработки широкого класса программ. Базовый набор средств, опирающихся на эти понятия, оказался очень мощным. В частности, комбинируя средства, поддерживающие разработку программ, управление пользовательскими http://www.freebsd.bip.ru/em.shtml (2 of 5)10.04.2004 17:25:36

Daemon News Russia

процессами, перенаправление ввода/вывода на основе абстрактной трактовки понятия файла, стало возможным динамически создавать сложные программы со внутренней асинхронностью из простых и небольших по размеру программных компонентов. Достаточно быстро в ядре ОС UNIX появилась поддержка взаимодействия независимо образованных процессов (именованные программные каналы, очереди сообщений, программные гнезда). Это позволило решать в среде ОС UNIX задачи, близкие по своему характеру к задачам "мягкого" реального времени. Разработка в университете Беркли стека сетевых протоколов TCP/IP, реализация этого стека в UNIX BSD.3 и стыковка TCP/IP с механизмом программных гнезд привели к тому, что ОС UNIX стала истинной сетевой операционной системой. Именно тогда Билл Джой произнес свою знаменитую фразу "Сеть - это компьютер". Протоколы TCP/IP положили основу Всемирной сети сетей Internet, а их комбинация с механизмом программных гнезд во многом способствовала становлению архитектурной концепции "клиент-сервер". Удачной находкой явилась идея использования развитого командного языка в качестве базового интерфейса пользователя с операционной системой. Командные языки использовались и в предшествовавших ОС UNIX интерактивных операционных системах, но пользователи этих ОС всегда испытывали по меньшей мере неудобства при написании командных файлов (или, как принято называть их в теперешней молодежной программистской среде, скриптов). Семейство командных языков shell (Bourne-shell, C-shell, Korn-shell и т.д.) предоставляет пользователям мощные средства текстовой обработки, которые в сочетании с принятыми в ОС UNIX стандартными (и не обременительными) правилами написания новых команд позволяют, не выходя из сеанса взаимодействия с командным интерпретатором, создавать команды, комбинировать существующие команды и т.д. Конечно, по мере развития и удешевления аппаратуры графических видеотерминалов, в ОС UNIX не могли не появиться графические пользовательские интерфейсы. На сегодняшний день в основе большинства таких интерфейсов лежит разработанная в Массачусетском технологическом институте оконная система X (X Window System). Конечно, графический интерфейс удобнее строчного. Но тем не менее, значимость командных языков семейства shell от этого не уменьшилась. Каким бы убогим не было терминальное оснащение UNIX-компьютера, пользователь имеет все возможности взаимодействия с системой. Более того, трудно найти программиста, работающего в среде X, у которого хотя бы в одном окне экрана не был вызван традиционный строчный интерпретатор shell. Трудно (а может быть, и не нужно) различать демократичность ОС UNIX и демократичность UNIX-сообщества. (Замечу, что под UNIX-сообществом я понимаю сообщество технических специалистов, связанных с использованием, разработкой, администрированием или сопровождением ОС UNIX. Как правило, я не отношу к этому сообществу продавцов. Обычно им достаточно все равно, чем торговать, лишь бы получить большую прибыль. Хотя я знаком с некоторым числом salesmen, давно уже торгующих ОС UNIX или UNIX-компьютерами, но так и не излечившихся от вируса UNIX.) Наверное, следует сказать так: демократичность UNIXсообщества существует благодаря демократичности UNIX. ОС UNIX демократична, поскольку открывает любому квалифицированному пользователю или разработчику возможности своего совершенствования. UNIX-сообщество демократично, поскольку его члены имеют общую цель (независимую от используемой аппаратуры, используемой версии UNIX, конкретных требований нанимателя и т.д.) - получить более удобную, более надежную, более мощную операционную систему. Как правило, в мире UNIX существует очень небольшой объем скрываемого "know how". Предметом гордости является возможность опубликовать (в печати или в Сети) содержимое своей новой идеи или результаты новой разработки. UNIX-сообщество не могло бы быть демократичным, если бы сама операционная система не была открытой. Под открытостью мы понимаем публичную доступность спецификаций интерфейсов, протоколов и даже внутренних алгоритмов работы системы. Открытость системы нужна пользователям (чтобы не испытывать неприятных потрясений при смене варианта ОС), http://www.freebsd.bip.ru/em.shtml (3 of 5)10.04.2004 17:25:36

Daemon News Russia

разработчикам (чтобы иметь возможность внесения согласованных усовершенствований), продавцам (чтобы иметь возможность четко объяснить покупателю возможности его покупки). Спецификации интерфейсов и протоколов ОС UNIX публикуются в документах SVID, XPG, POSIX и частично приняты в качестве международных стандартов мобильных операционных систем. Открытость UNIX имела по меньшей мере два выдающихся последствия. Во-первых (это мое личное мнение), она способствовала становлению и внедрению в практику общей концепции Открытых Систем (грубо говоря и не вдаваясь в детали, я бы сформулировал ее так: следуй правильно подобранному набору признанных стандартов - и все будет хорошо). Вовторых, именно открытость UNIX позволила одновременно существовать двум ветвям операционной системы: коммерческой ветви, развиваемой такими компаниями, как Santa Cruz Operation, Sun Soft, Digital Equipment, IBM, Hewlett Packard и т.д., и некоммерческой ветви, представленной разными вариантами UNIX BSD (FreeBSD, BSDNet и т.д.) и Linux. Феномен Linux вообще ошеломляет. Начиная с нуля, бывший студент Хельсинского университета Линус Торвальдс смог реализовать свое собственное ядро операционной системы, которое привлекло к коллоборации (как любят говорить физики) громадное число заинтересованных людей в Internet. Сегодня Linux - это качественная, развитая ОС, способная конкурировать с коммерческими вариантами ОС UNIX. Конференции по Linux собирают тысячи людей, а Линус не менее популярен в мире UNIX, чем Деннис Ритчи. Переносимость следует понимать в двух смыслах. Во-первых, правильно написанное ядро ОС UNIX само обладает свойством простоты переноса на другую аппаратную платформу. Это стало возможным благодаря применению двух технологических приемов. (1) Большая часть ядра (и все дополнительное программное обеспечение) написана на машинно-независимом языке Си и сама является машинно-независимой. (2) Та часть ядра, которая не может быть машиннонезависимой (включающая, например, компоненты, связанные с управлением виртуальной памятью на аппаратном уровне) обладает небольшими размерами и спроектирована в весьма модульной манере. Перепись этой части с учетом особенностей аппаратуры целевого компьютера не представляет собой неподъемную задачу. В результате, фактически, стало возможным иметь одну и ту же операционную среду (здесь я несколько идеализирую) на абсолютно разных аппаратных платформах. Во-вторых, даже при наличии на разных аппаратных платформах различающихся реализаций UNIX, которые соответствуют открытым спецификациям, можно сравнительно просто обеспечить переносимость прикладного программного обеспечения. Для этого нужно всего лишь не выходить за пределы специфицированных средств. Причем эти возможности распространяются даже на такие сложные "над ядерные" системы как СУБД. СУБД Oracle, предназначенная для использования на UNIX-платформах, имеет (почти) один и тот же исходный текст для любой конкретной платформы. Тексты СУБД Oracle, работающей в среде NT, существенно отличаются. Как всегда, я готов хвалить UNIX как угодно долго, и обычно у меня не хватает желания, времени, места и сил, чтобы поругать эту операционную систему. Все-таки попробую. Имеется две возможности ругать ОС UNIX. В каждом конкретном варианте можно найти массу дефектов. Например, если говорить о классических реализациях (например, ранних выпусках System V), можно найти недостатки в организации механизма общесистемной буферизации, управлении файлами и т.д. Но дело в том, что в каждом следующем выпуске эти недостатки смягчаются или удаляются вовсе. Так что анализ этих недостатков - это дело скорее историков ОС UNIX, и мы на этом останавливаться не будем. Вторая возможность сказать "гадость" по поводу UNIX относится к некоторым абсолютным новшествам этой системы. Лично для меня соответствующим основанием является внедрение в ОС UNIX механизма "легковесных процессов" (в просторечии "threads"), т.е. процессов, которые совместно выполняются в общей виртуальной памяти. Не люблю я LWP (Light Weight Processes). Программисты среднего и старшего поколения все это проходили. Программирование с использованием LWP порождает многочисленные трудности, хотя и является на сегодняшний день единственным способом http://www.freebsd.bip.ru/em.shtml (4 of 5)10.04.2004 17:25:36

Daemon News Russia

использования возможностей симметричных мультипроцессорных архитектур (SMP - Symmetric Multi Processors). Ну вот, я похвалил и немного поругал UNIX, не сказав ни одного плохого слова про Microsoft. Да и нет в NT ничего плохого, кроме того, что эта система не обладает простотой демократичностью открытостью (Не давайте мне много говорить про NT, я слишком эмоционален!) Каково будущее UNIX? Я оптимист, и надеюсь, что в недалеком будущем мы увидим 64разрядные, высокомобильные, стандартизованные, надежные реализации системы, наличие которых позволит дожить операционной системе (надеюсь, вместе с нами) до 50 лет. Сергей Кузнецов (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/em.shtml (5 of 5)10.04.2004 17:25:36

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Введение в демонологию или сколько BSD-систем может уместиться на PC новости

Когда речь заходит о BSD-системах - ветки Unix, порожденной неуемным воображением исследователей из Университета Беркли, - на память сразу же приходит FreeBSD. Система эта прочно окопалась на изрядной части web-серверов всего мира (да и России тоже). Однако она далеко не единственный представитель этого славного семейства. Если рассматривать вопрос в исторической последовательности, рядом с FreeBSD (а возможно, и впереди нее) следует поставить NetBSD. Оба эти проекта преследовали целью создание истинно открытой и свободной Unix-системы, оба вышли, как из гоголевской шинели, из берклиевских систем линии 4.xBSD, оба стартовали практически одновременно (в начале 90-х годов прошлого столетия), да и первые их релизы с небольшим разрывом (NetBSD – начало 1993 г., FreeBSD - ее конец). Однако это – существенно разные системы. FreeBSD изначально создавалась как порт системы 4.4BSD для самой демократичной и распространенной платформы – iX86 (или IBM PC-совместимых компьютеров, как их тогда задумчиво называли). Версия для Alpha – вторична (и, видимо, скоро прекратит свое существование ввиду грядущей кончины платформы). Соответственно, при разработке этой системы преследовались две основные цели – оптимизация под конкретную архитектуру и простота использования PC-юзерами, каковые, вероятно, молчаливо подразумевались тупой массой погрязших в предрассудках DOS/Windows (версии последней уже начали свое триумфальное шествие по винчестерам пользователей). Надо сказать, что цели своей создатели FreeBSD добились – система получилась быстрой, надежной и, не побоюсь этого слова, простой в использовании (после должного изучения, конечно). И вообще, если в компьютерном мире и можно к чему-нибудь применить известный слоган «сделано с умом», то это – именно FreeBSD. Впрочем, на эту тему сказано вдоволь, в том числе – и на этих страницах. В отличие от FreeBSD, NetBSD создавалась с упором на максимально возможную мультиплатформенность. Ныне трудно поверить, что в начале 90-х это казалось очень актуальной задачей, обреченной на успех. Хотя уже в те годы раздавались апокалиптические пророчества, что не пройдет и десяти лет, как все платформы, кроме IBM PC, канут в небытие. Однако поставленная задача была выполнена, и NetBSD работает на всем, что может быть собрано в виде системного блока. Среди поддерживаемых ею платформ можно обнаружить и DEC Alpha, и HP PA, и Sun Sparc, и Mac'и во всех своих ипостасях (в том числе и Mac-клоны издания Umax с собратьями), и даже не-Mac'и на PowerPC. Не говоря уж о такой экзотике, с какой я только в этом compability list и сталкивался… Справедливости ради следует сказать, что в те же ревущие 90-е на BSD-древе возник и еще один побег – система, известная в разные годы под именами BSD/OS, BSDI, BSDi. Однако она имела статус как бы коммерческой, продавалась (и продается по сию пору, кем – уже сбился со счета) за деньги и о ней невместно говорить на страницах, посвященных свободному софту.

http://www.freebsd.bip.ru/bsd.shtml (1 of 5)10.04.2004 17:25:38

Daemon News Russia

Возвращаясь к теме – не смотря на столь широкий охват платформ (а возможно - именно вследствие этого) NetBSD не снискала ни широкой популярности, ни всенародной любви. Ну а в нашей стране она осталась практически неизвестной – я не знаю ни одного сайта в Рунете, ей посвященного (да и упоминаний в любом поисковике, позволяющем ограничиться русским языком – пальцев одной руки хватит). Причина, в общем, понятна – мультиплатформенность оказалась далеко не столь востребованной, а на PC-платформе NetBSD уступает Free практически по всем показателям. Ну а для нас не последним фактором могла оказаться и эмблема проекта NetBSD – скопище чертей под знаменем, у постсоветского человека способное вызвать только одну ассоциацию – «Смело мы в бой пойдем…» и далее по всем пунктам (рис. 1).

Рис. 1. Эмблема NetBSD Так это или нет, но по прошедствии немногих лет (в 1996 г.) от линии NetBSD ответвился еще один побег – система OpenBSD (впрочем, основоположник проекта объясняет это событие причинами сугубо личными). Каковая, унаследовав мультиплатформенность прародителя, дополнительно прикрылась щитом защищенности. Включив в себя по умолчанию OpenSSH – открытую модификацию S(ecure) SH(ell) для удаленного доступа к компьютерам, призванного заменить традиционные средства telnet, rlogin etc. Как обычно в мире BSD, поставленная цель была достигнута, и OpenBSD очень быстро приобрела славу самой защищенной системы. В частности, утверждается, что за всю историю ее существования не было ни одного случая взлома серверов под управлением этой ОС . Некоторую известность OpenBSD обрела и в нашей стране - даже не смотря на кривость поддержки особенностей национальной работы. Но, думается, всенародная (а возможно, и всемирная) популярность этой системы – впереди. Не исключено, что несравненная защищенность ее будет востребована в свете недавних политических событий. Как, впрочем, и более прозаического фактора – распространения домашних сетей, среди малолетних пользователей которых вырастет новое поколение хакеров и крекеров. Может быть, в предвидении этого первозданный джиннообразный демон проекта (рис. 2) был заменен на бронированную помесь палтуса с батискафом.

http://www.freebsd.bip.ru/bsd.shtml (2 of 5)10.04.2004 17:25:38

Daemon News Russia

Рис. 2. Одна из эмблем проекта OpenBSD Но и на ниве FreeBSD зеленеет кое-какая поросль, а именно – предельно облегченные системы. Из которых хотелось бы упомянуть PicoBSD – дистрибутива FreeBSD (3-й ветки) на одной дискете. Это – без преувеличения (вернее, преуменьшения): она распространяется в виде имиджей объемом ровно 1,44 Мбайт, причем – сразу в нескольких вариантах: рабочей станции в сети и с DialUp-подключением, сетевого роутера, и даже (экспериментально) сервера модемного доступа. Для функционирования PicoBSD довольно любой 386-й машины. Правда, с 8 Мбайт памяти, что для России – редкость: большинство реликтов той эпохи оснащалось лишь 4-мя мегабайтами, и нарастить их нынче можно только в антикварной лавке (и по цене антиквариата). Винчестера – не требуется, записанная с образа дискета включает не только средства запуска, но и корневую файловую систему. К коей, разумеется, можно подмонтировать FS с почти любого накопителя (по умолчанию поддерживаются FFS- и FAT-разделы и CD ROM). Впрочем, к теме микро-BSD я надеюсь еще вернуться… До сих пор речь шла о BSD-системах, так сказать, «в законе». То есть – распространяемых на условиях одноименной BSD-лицензии. Которую, не смотря на некоторые послабления частнособственническим инстинктам, даже самые строгие ревнители чистоты Open Sources признают совместимой с принципами таковых. Однако ныне ряды BSD-семейства пополнились системой, создатели которой желают жить «по понятиям». Я имею в виду MacOS X, ядро и системные сервисы которой (объединяемые в понятие Darwin) являют собой микроядро Mach и FreeBSD, соответственно. И защищаются собственной лицензией, поименованной как Apple Public Source License (APSL). Честно говоря, мне было лень вчитываться в суть изложенного на полутора десятках экранных страниц. Могу только предположить, что суть эта вряд ли может существенно отличаться от BSD-лицензии, на условиях которой (или близких) распространяются прототипы системы.

http://www.freebsd.bip.ru/bsd.shtml (3 of 5)10.04.2004 17:25:38

Daemon News Russia

Тем более что вряд ли Darwin сам по себе (вне ее собственно Mac'овского интерфейсного обрамления) может представлять практический интерес: я с трудом представляю себе пользователя, раскошелившегося на Mac ради работы в командной строке (или даже в среде системы X). Однако на «понятия» Apple достаточно быстро последовал «законный» ответ от сообщества Open Sources, выразившийся в появлении GNU-Darwin – открытого и свободного воспроизведения системы. Причем сразу в двух версиях – для элитарного Mac PPC и для народной Intel-совместимой архитектуры (рис. 3).

Рис. 3. Эмблема проекта GNU-Darwin Впечатлениями от общения с антилопой Дарвина я надеюсь поделиться в самом ближайшем будущем. А пока – воспользовавшись случаем, обращусь к BSD-системам, так сказать, не вполне чистой линии. Если все упомянутые выше системы существуют в законченном и работоспособном виде, то ниже речь пойдет не более чем об экспериментальных образцах – Yamit и xMach. Общее между ними то, что обе системы базируются на микроядре Mach. Вскользь упомянутое парой абзацев выше, ядро это на протяжении ряда лет разрабатывалось в Университете Карнеги-Меллона, первоначально – вне всякой связи с BSD-системами (да, пожалуй, и с Unix вообще). Тем не менее, разработки эти оказали существенное влияние на многие BSD-системы. Достаточно вспомнить NeXT на микроядре Mach 2.5 (не от него ли идут корни MacOS X?) или родной Unix для DEC Alpha. Да и OpenBSD вкупе с NetBSD не избежали влияния этого ядра. К слову сказать, по мнению специалистов в области Computer Sciences, весьма хорошего. Ныне сам по себе проект Mach, насколько я понимаю, мертв – последние обновления на сайте его датируются 1997 г. Однако уже на протяжении пары лет развивается его потомок – проект xMach (рис. 4). В коем задействовано микроядро Mach 4 в обрамлении системных сервисов NetBSD. Система же Yamit, напротив, скорее обрамление вокруг традиционного ядра Mach 3, ориентированное в первую очередь на мультипроцессорные конфигурации. Ни та, ни другая система не имеют программы установки, и вообще пока не предназначены для использования в мирных целях. Тем не менее – они существуют. И кто знает, не суждено ли им со временем вырасти в нечто пригодное к применению…

http://www.freebsd.bip.ru/bsd.shtml (4 of 5)10.04.2004 17:25:38

Daemon News Russia

Рис. 4. Демон проекта xMach «Чему твоя баллада? – иная спросит дева. О жизнь моя, о лада, ей-ей, не для припева» – отвечу я. «Нет, полн иного чувства», я написал эти строки лишь для демонстрации разнообразия, царящего в мире BSD-систем. При этом отнюдь не ручаясь за то, что мне удалось охватить его весь целиком… Алексей Федорчук (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/bsd.shtml (5 of 5)10.04.2004 17:25:38

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь FreeBSD-4.x and multimedia новости

Общая рекомендация для всех карт - выключите в BIOS, "PnP OS Enable". Поддерживаемые карты можно найти в ядре: `cd /sys/dev/sound` По умолчанию подразумевается что вы не забудете для ISA добавить в ядро: device isa а для PCI: device pci а для звуковых карт, в случае использования драйвера newpcm, строку: device pcm Примечание: прежде чем скачивать драйвера со страниц разработчиков, посмотрите версию вашей системы: uname -a и текущие драйвера для звуковых карт, возможно ваша карта уже поддерживается вашим ядром, изучите содержимое: cd /usr/src/sys/dev/sound - здесь находится sound-driver newpcm grep "номер_вашего_чипа" */* или поищите в текстах *.c и *.h /usr/src/sys/dev/sound/isa - поддерживаемые ISA (PNP) /usr/src/sys/dev/sound/pcm - AC'97 /usr/src/sys/dev/sound/pci - PCI cd /usr/src/sys/i386/isa/sound - здесь находится старый VoxWare sound-driver, почитайте имеющиеся там README. Экспериментальный драйвер для звуковых карт интегрированных в материнскую карту: AC'97 интерфейс Intel 443MX, 810 и 820 чипсетов (возможна работа 815E чипов) Примечание: уже в FreeBSD 4.4-RELEASE http://www.katsurajima.seya.yokohama.jp/ich/ Установка: скачать драйвер с указанной выше страницы: ich.c.gz # gunzip ich.c.gz # cp ich.c /usr/src/sys/dev/sound/pci затем добавить строку в файл: /usr/src/sys/conf/files в районе: : dev/sound/pci/csapcm.c optional pcm pci dev/sound/pci/ds1.c optional pcm pci dev/sound/pci/emu10k1.c optional pcm pci dev/sound/pci/es137x.c optional pcm pci dev/sound/pci/ich.c optional pcm pci -----------------------------------dev/sound/pci/neomagic.c optional pcm pci dev/sound/pci/t4dwave.c optional pcm pci : добавить строку "device pcm" и пересобрать ЯДРО: cd /usr/src/sys/i386/conf config ИМЯ_ЯДРА http://www.freebsd.bip.ru/sound.shtml (1 of 8)10.04.2004 17:25:41

Daemon News Russia

cd /usr/src/sys/compile/ИМЯ_ЯДРА make depend;make;make install далее, перегружаемся, смотрим обнаружилась ли карта новым Ядром, затем создаем все необходимые устройства, примеры см.ниже. Aureal/Vortex http://www.cis.ohio-state.edu/~matey/au88x0/ Company Soundcard Chipset Tested with this driver Aureal Inc. SQ1500 Vortex Advantage Yes. Works. Aureal Inc. SQ2500 Vortex2 Yes. Works. Diamond Multimedia Monster Sound MX300 Vortex2 Yes. Works. Diamond Multimedia Sonic Impact S90 Vortex2 Yes. Works. Digital Research DRSOUNDA3V Vortex2 Yes. Works. Technologies Genius Sound Maker 64 Vortex1 Yes. Works. Hi-Val PCI 338 Vortex1 Yes. Works. Hi-Val PCI 576 Vortex2 Yes. Works. I/OMagic MagicWaveV1 Vortex Advantage Yes. Works. I/OMagic MagicWaveV2 Vortex2 Yes. Works. Turtle Beach Montego A3D Vortex1 Yes. Works. Turtle Beach Montego A3D II Vortex2 Yes. Works. TerraTec Promedia XLerate Vortex1 Yes. Works. TerraTec Promedia XLerate Pro Vortex2 Yes. Works. Videologic SonicVortex2 Vortex2 Yes. Works. Xitel Storm 3D Licensed Yes. Works. Xitel Storm VX Vortex1 Yes. Works. Xitel Storm Platinum Vortex2 Yes. Works. драйвер отныне в /usr/ports/audio/aureal-kmod PCI-Drives for Sound уже в KERNEL для следующих моделей карт: Ensoniq1370/71 Neomagic Trident 4Dwave Maestro 1/2 в ядре - см. /sys/dev/sound/pci http://access.cent.saitama-u.ac.jp/~taku/freebsd/maestro/newpcm/readme.html Maestro 3xxx - http://people.freebsd.org/~scottl/maestro3/ SBLive поддержка в ядре или см. http://www.defcon1.org/html/Hardware_Articles/PnP_Sound/PnP_Modem/SB-Live5/sb-live4.html Для PCI звуковых карт (включая SB-Live/PCI) достаточно включить в ядре строку: device pcm - не забыв про поддержку устройств pci, затем пересобрать ядро, перегрузиться и посмотреть распознало ли _новое_ядро_ вашу звуковую карту: `dmesg | grep pcm` или `cat < /dev/sndstat` - если все ok, запустить mixer и посмотреть параметры, или скомпилить mixer на вкус их портов: aumix/xmix/xmixer/xmmix/... - если получили в ответ "no such device" - просто создайте их: cd /dev; ./MAKEDEV snd0 (0,1,... - в зависимости от количества карт) Примечание: к счастью у меня неразрешимых проблем со звуковыми картами не было: PNP16 (ISA), AWE32/64, Ensoniq 1371, Aureal 8820. Тем у кого ЕСТЬ проблемы с картами поддерживаемыми во FreeBSD сооветую изучить уже указанные ссылки и те что ниже: http://www.defcon1.org/html/Hardware_Articles/PnP_Sound/pnp_sound.html http://www.defcon1.org/html/ssh/vpn-howto/pnp-soundcard.html http://www.defcon1.org/html/Hardware_Articles/OpenSSH/Hardware/File-Systems/sb16-40.html http://www.defcon1.org/%7Echrisw/FreeBSD/sb128pci.html Поддержка звуковых карт в ядре посредством двух драйверов: http://www.freebsd.bip.ru/sound.shtml (2 of 8)10.04.2004 17:25:41

Daemon News Russia

- старые карты (ISA) поддерживаются драйвером Voxware: Adlib SoundBlaster SoundBlaster Pro ProAudioSpectrum Gravis UltraSound Roland MPU-401 sound cards. - более современные карты поддерживаются новым драйвером newpcm (включая поддержку старых карт из Voxware): Advance Asound 100, 110 and Logic ALS120 Crystal Semiconductor CS461x/462x/428x ENSONIQ AudioPCI ES1370/1371 ESS ES1868, ES1869, ES1879 and ES1888 ESS Maestro-1, Maestro-2, and Maestro-2E ForteMedia fm801 Gravis UltraSound MAX/PnP MSS/WSS Compatible DSPs NeoMagic 256AV/ZX OPTi 931/82C931 SoundBlaster, Soundblaster Pro, Soundblaster AWE-32, Soundblaster AWE-64 Trident 4DWave DX/NX VIA Technologies VT82C686A Yamaha DS1 and DS1e Ниже список из FreeBSD HandBook Crystal 4237, 4236, 4232, 4231 Yamaha OPL-SAx OPTi931 Ensoniq AudioPCI 1370/1371 ESS Solo-1/1E NeoMagic 256AV/ZX Sound Blaster Pro, 16, 32, AWE64, AWE128, Live Creative ViBRA16 Advanced Asound 100, 110, and Logic ALS120 ES 1868, 1869, 1879, 1888 Gravis UltraSound Aureal Vortex 1 or 2 Примеры конфигурации ядра с поддержкой различных карт в FreeBSD: Из HandBook (непоятно, почему постоянные вопросы КАК МНЕ ЗАСТАВИТЬ РАБОТАТЬ...) 1. Creative, Advance, and ESS Sound Cards Creative SB16, SB32, SB AWE64 (including Gold) and ViBRA16 Advance Asound 100, 110 and Logic ALS120 ESS ES1868, ES1869, ES1879 and ES1888 Вариант 1. Описания KERNEL: PnP-ISA: device pcm device sbc Вариант 2. Non-PnP device pcm device sbc0 at isa? port 0x220 irq 5 drq 1 flags 0x15 с вашими port=0xABC и irq=X о сути и значениях flags читайте: man 4 sbc & man 4 pcm 2. Gravis UltraSound Cards http://www.freebsd.bip.ru/sound.shtml (3 of 8)10.04.2004 17:25:41

Daemon News Russia

Вариант 1. Описания KERNEL: PnP-ISA: device pcm device gusc Вариант 2. gusc - Gravis UltraSound ISA bridge device driver Gravis UltraSound PnP Gravis UltraSound MAX Non-PnP device pcm device gus0 at isa? port 0x220 irq 5 drq 1 flags 0x13 с вашими port=0xABC и irq=X о сути и значениях flags читайте: man 4 gusc & man 4 pcm 3. Crystal Sound Cards csa - Crystal Semiconductor CS461x/462x/428x PCI bridge device driver Описания KERNEL: device pcm device csa man 4 gusc & man 4 pcm 4. PCI Карты поддерживаемые текущим драйвером pcm (newpcm) Trident 4DWave DX/NX (PCI) ENSONIQ AudioPCI ES1370/1371 (PCI) [ряд SB PCI-128 выполнен именно на чипах ES1370/1371] ESS Solo-1/1E (PCI) NeoMagic 256AV/ZX (PCI) Описания KERNEL: device pcm Все! Неправда ли - несложно. Примечание: вполне возможно что ваша карта сделана на чипсете который поддерживается драйвером, но после генерации и установки нового ядра, карта все равно не распознается. Запишите при загрузке Device-ID и Vendor-ID и поищите в драйверах для вашей карты эти значения, попробуйте добавить ваши, возможно это решит вашу проблему. Создали свое ядро в файле /sys/i386/conf/MYKERNEL cd /sys/i386/conf config MYKERNEL cd ../../compile/MYKERNEL make depend make make install - установили новое ядро в систему, после перезагрузки ваша карта должна опознаться, см. dmesg. Если не опозналась - ищите проблему. Итак карта опознана, осталось создать необходимые устройства, скомпилировать например, mpg123 и проверить работоспособность: [alone]~ > cat < /dev/sndstat FreeBSD Audio Driver (newpcm) Feb 27 2001 18:50:32 Installed devices: pcm0: at memory 0xd9000000 irq 12 (4p/1r channels duplex) [alone]~ > или [unix1]~ > cat < /dev/sndstat FreeBSD Audio Driver (newpcm) Mar 13 2001 17:30:27 Installed devices: pcm0: &atAUDIOPCI ES1371> at io 0xc400 irq 9 (1p/1r channels duplex) [unix1]~ > Карта опознана драйвером и на чем живет и в каком режиме - мы видим. http://www.freebsd.bip.ru/sound.shtml (4 of 8)10.04.2004 17:25:41

Daemon News Russia

затем создаем необходимый набор устройств для карты, в зависимости от того как ее опознало ядро - pcm0 или pcm1: для pcm0 cd /dev ./MAKEDE snd0 для pcm1 cd /dev ./MAKEDE snd1 получаем набор следующих устройств, зависимо от карты и драйвера: Device Description /dev/audio SPARC-compatible audio device /dev/dsp Digitized voice device /dev/dspW Like /dev/dsp, but 16 bits per sample /dev/midi Raw midi access device /dev/mixer Control port mixer device /dev/music Level 2 sequencer interface /dev/sequencer Sequencer device /dev/pss Programmable device interface Если для вашей карты драйвер поддерживает несколько каналов, то вам необходимо создать соответствующее количество устройст /dev/dspX в соответствии с описанием в драйвере. Пример: [alone]~/FreeBSD > ls -la /dev/dsp* lrwxrwxrwx 1 root wheel 4 Dec 26 2000 /dev/dsp -> dsp0 crw------- 1 lavr sysct 30, 3 Aug 14 18:57 /dev/dsp0 crw------- 1 lavr sysct 30, 0x00010003 Jun 7 13:48 /dev/dsp0.1 crw------- 1 lavr sysct 30, 0x00020003 May 14 19:02 /dev/dsp0.2 crw------- 1 lavr sysct 30, 0x00030003 Jun 24 21:02 /dev/dsp0.3 crw------- 1 lavr sysct 30, 0x00040003 May 14 19:22 /dev/dsp0.4 lrwxr-xr-x 1 root wheel 6 Mar 20 19:52 /dev/dsp1 -> dsp0.1 lrwxr-xr-x 1 root wheel 6 Mar 20 19:52 /dev/dsp2 -> dsp0.2 lrwxr-xr-x 1 root wheel 6 Mar 20 19:52 /dev/dsp3 -> dsp0.3 lrwxr-xr-x 1 root wheel 6 Mar 20 19:52 /dev/dsp4 -> dsp0.4 [alone]~/FreeBSD > uname -a FreeBSD alone.dubna.ru 4.2-STABLE [email protected]:/usr/src/sys/compile/LAVR i386 [alone]~/FreeBSD > Примечание: Aureal - разнообразие Vortex, драйвера для этих карт ныне в портах и выполнены как подгружаемые модули: kldstat - посмотреть, kldload module_name - загрузить. aureal-driver -> /usr/ports/audio/aureal-kmod Из недорогих и на мой взгляд хороших, удачных карт - Aureal и Maestro, кроме того их драйвера поддерживают больше одного канала dsp, конечно же Ensoiq-1370/71, но с одним каналом. Остальные карты SB AWE/Live - дорогие и посему я их на своих машинах не пробовал, хотя у соседей фунциклируют без особых проблем. Полезную информацию по звуковым картам на шине ISA можно найти в старых драйверах ядра VOXWARE: /usr/src/sys/i386/isa/sound Новые драйвера можно посмотреть в /usr/src/sys/dev/sound Важно одно - необходимо осознавать ЧТО вы хотите сделать и ЧТО вы СОБСТВЕННО ДЕЛАЕТЕ: - шина: ISA или PCI - NonPnP/PnP - карта full-duplex - правильно указаны IO/IRQ/DMA если что-то не так или не понимаете, попробуйте посмотреть конфигурации карты в DOS или http://www.freebsd.bip.ru/sound.shtml (5 of 8)10.04.2004 17:25:41

Daemon News Russia

Windows. Зачастую, по указанным выше ссылкам, вы найдете старую информацию, например конфигурацию SoundBlaster на базе драйвера VoxWare и для версии FreeBSD 2.2.x, 3.x, так что будьте внимательны и осознавайте ЧТО ВЫ ДЕЛАЕТЕ. Всегда полезно посмотреть что и как у вас опозналось, команды: - `dmesg` - `pciconf -l` - `pnpinfo` Если вы разобрали и устранили все проблемы связанные с конфигурированием ваших Soundblaster'ов, можете приступить к сборке различного мултимедиа software(я перечислю свои личные предпочтения, это не значит что они лучшие): Миксеры: - mixer /usr/sbin/mixer - aumix cd /usr/ports/audio/aumix make && make install aumix - xmix cd /usr/ports/audio/xmix make && make install RIFF/U-law/WAV player'ы: - play cd /usr/ports/audio/play make && make install play -f /dev/cdrom -f s/u/U/A/a/g filename [effects] see sox. rec - waveplay cd /usr/ports/audio/waveplay make && make install waveplay [options] - wavplay cd /usr/ports/audio/wavplay make && make install wavplay [options] MP3-player'ы: - mpg123 cd /usr/ports/audio/mpg123 make && make install mpg123 -b 1000 /path/subdir/*.mp3 mpg123 -b 2000 -@ play_list.pls mpg123 -y -b 2000 битый_файл.mp3 mpg123 --aggressive -b 8000 http://live.xradio.ru:11100/ mpg123 -b 8000 http://live.xradio.ru:11200/ mpg123 --aggressive -b 8000 http://live.xradio.ru:11300/ [use proxy] export MP3_HTTP_PROXY=http://proxy.jinr.ru:8080/ [sh/bash] setenv MP3_HTTP_PROXY http://proxy.jinr.ru:8080/ [csh/tcsh] mpg123 --aggressive -b 8000 http://live.xradio.ru:11300/ или mpg123 -b 4000 -p http://proxy.jinr.ru:8080/ http://live.xradio.ru:11300/ - xaudio + mxadb ftp://ftp.xaudio.com/pub/xaudio/players/unix-motif/ x86-unknown-freebsd-elf/xaudio-1.0.5.x86-unknown-freebsd-elf.tar.gz http://www.freebsd.bip.ru/sound.shtml (6 of 8)10.04.2004 17:25:41

Daemon News Russia

ftp://ftp.xaudio.com/pub/xaudio/tools/unix-motif/ x86-unknown-freebsd-elf/mxadb-1.0.x86-unknown-freebsd-elf.tar.gz xaudio filename.mp3 или mxaudio [front-end к xaudio & mxadb] - x11amp [OSS player] cd /usr/ports/audio/x11amp make && make install x11amp - xamp cd /usr/ports/audio/xamp make && make install xamp CD-player'ы: - cdplay [text-based cd-player] cd /usr/ports/audio/cdplay make && make install - cd /usr/ports/audio/xmcd make && make install cd /usr/X11R6/lib/X11/xmcd/config vi common.cfg модифицируем cddbPath cddbPath: rock;jazz;blues;newage;classical;reggae;folk;country;soundtrack;misc;data; cddbp://cddb.sai.msu.su;cddbp://cddb.ton.tut.fi;cddbp://sunsite.unc.edu Russian cddb: zeus.sai.msu.ru /usr/X11R6/bin/xmcd Конвертеры: - sox [Sound Converter: .au,.voc,.wav,.aiff,.riff,.cdr,.raw,mono/stereo...] cd /usr/ports/audio/sox make && make install прошу прощения за примеры, тут их мульон... - см. man sox - bladeenc [mp3-encoder] cd cd /usr/ports/audio/bladeenc make && make install bladeenc -crc -192 *.wav (создать *.mp3 с bitrate 192 и crc) bladeenc -del -256 *.wav (создать *.mp3 с bitrate 256 и удалить *.wav) bladeenc track-01.wav track-02.wav (создать track-01.mp3, track-02.mp3 с bitrate==128) поддерживаемые bitrate's: 32,40,48,56,64,80,96,112,128,160,192,224,256,320 default bitrate=128 - lame [инструментарий на базе ISO-codecs, VBR supported] cd /usr/ports/audio/lame make && make install lame -h Losa-Opyat.wav Losa-Opyat.mp3 (кодировать с постоянным bitrate=128) lame -v file.wav file.mp3 (кодировать с VBR качеством=4 by default) lame -v 0 -b 64 -B 256 file.wav file.mp3 (кодировать с VBR=0 наивысшее качество, нижняя граница bitrate=64 верхняя bitrate=256) Ripper'ы/Grabber'ы: - atapi ripper - dagrab cd /usr/ports/audio/dagrab make && make install cd /dev && ln -s acd0c cdrom (acd0c - заменить на устройство в вашей конфигурации) dagrab -a (по умолчанию используется устройство /dev/cdrom и формат выходных файлов track% 02d.wav) http://www.freebsd.bip.ru/sound.shtml (7 of 8)10.04.2004 17:25:41

Daemon News Russia

dagrab -a -d /dev/acd0c -f Losa_%02d.wav [сграбить весь диск и создать выходные файлы: Losa_01.wav Losa_02.wav ... Losa_0n.wav - scsi ripper - tosha (scsi - the best, сравнений с EIDE[UDMA] БЫТЬ не может) cd /usr/ports/audio/tosha make && make install cd /dev && ln -s rcd0c cdrom (rcd0c - заменить на устройство в вашей конфигурации, man 4 scsi, man 4 cd, man 4 da) Примечание: если драйвер вашей звуковой карты поддерживает несколько каналов, вы можете запускать ваши приложения с указанием различных каналов и наслаждаться кокофонией a-la M$ Windows.

(c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/sound.shtml (8 of 8)10.04.2004 17:25:41

Daemon News Russia

новости

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь

Поиск в unix Программа поиска «find» является одной из самых полезных утилит, всегда находящихся в любой UNIX-системе. В этой статье я расскажу вам о синтаксисе команды find и продемонстрирую ее применение на нескольких практических примерах. Сама по себе команда find имеет очень простой синтаксис: find где_искать ключи Часть команды которую мы назвали «ключи» на первых порах может показаться вам запутанной. К тому же ее конкретная запись может варьироваться в зависимости от той версии UNIX, которой вы пользуйтесь в данный момент. Если вы работаете на новой для вас системе, то вероятно вам придется заглянуть на страницу руководства посвященную команде find (man find – прим. переводчика). Вот список самых основных ключей, которые вы можете использовать во FreeBSD:

Ключ

Назначение

-name

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

-type

тип искомого: f=файл, d=каталог, l=связь (link)

-user

владелец: имя пользователя или UID

-group

владелец: группа пользователя или GID

-perm

указываются права доступа

-size

размер: указывается в 512-байтных блоках или байтах (признак байтов – символ «c» за числом)

-atime

время последнего обращения к файлу

-ctime

время последнего изменения владельца или прав доступа к файлу

-mtime

время последнего изменения файла

-newer

искать файлы созданные позже указанной даты

-delete

удалять найденные файлы

-ls

генерирует вывод как команда ls -dgils

-print

показывает на экране найденные файлы

http://www.freebsd.bip.ru/find.shtml (1 of 6)10.04.2004 17:25:43

Daemon News Russia

-exec command {} \;

выполняет над найденным файлом указанную команду; обратите внимание на синтаксис

-ok

перед выполнением команды указанной в -exec, выдает запрос

-depth

начинать поиск с самых глубоких уровней вложенности, а не с корня каталога

-prune

используется, когда вы хотите исключить из поиска определенные каталоги

Я покажу вам на примерах, как использовать и сочетать эти ключи при поиске. Однако перед этим давайте поглядим для чего может использоваться команда find. Если вы воспользуйтесь для этого командой whatis, то результат ее работы может вас удивить: whatis find find(1) -- walk a file hierarchy (обход иерархии файлов) В двух словах, команда find предназначена для рекурсивного поиска в каталогах различных файлов, отбирая их по указанным вами ключам. На первый взгляд это может показаться небольшим достижением, однако не следует забывать, что большая часть UNIX-утилит не может «прогуляться» по каталогу и всем его подкаталогам. Поэтому эта способность может быть крайне полезна, так как find может не только находить различные файлы, но и проводить над ними разнообразные операции. Давайте начнем с нескольких простых примеров, для того что бы потом перейти к более сложным. Самый простой поиск вы можете провести напечатав следующее: find . -print Поскольку символ точки «.» означает текущий каталог, то эта команда найдет и напечатает (print) на терминале все файлы находящиеся в текущем каталоге, а так же во всех подкаталогах. В FreeBSD ключ «-print» подразумевается по умолчанию, так что даже если вы забудете его написать, вы получите такой же результат: find . Однако будет правильнее, если вы выработаете в себе привычку писать «-print», так как на многих UNIX-системах «-print» не является подразумеваемым выражением. Для того что бы найти все файлы в вашем домашнем каталоге, сначала вы должны увериться в том, что находитесь именно там, а затем повторить команду поиска: cd find . -print Команда cd выполненная без параметров вернет вас в ваш домашний каталог. Поскольку команда find может использоваться для выполнения серьезных действий со значительными последствиями, всегда будет правильным сначала перейти в тот каталог, в котором вы хотите производить эти действия. В этой статье я подразумеваю, что вы находитесь в вашем домашнем каталоге. Итак, что бы выполняемые действия не нанесли необратимых изменений в http://www.freebsd.bip.ru/find.shtml (2 of 6)10.04.2004 17:25:43

Daemon News Russia

вашей системе, не покидайте домашний каталог. Приведенные примеры показали как просто использовать команду find. Однако скорее всего вы хотите найти нечто конкретное, когда обращаетесь к find. С этого места в игру вступают другие ключи команды find. Попробуем найти файл по его имени: touch file1 find . -name file1 -print ./file1 Давайте разберемся, что я сейчас сделал. Я создал пустой файл с именем file1 при помощи команды touch. Затем я приказал find поискать в моем текущем каталоге («.») файл с именем («name») file1 и напечатать («-print») результат поиска на экране. Теперь я могу сказать, что в моем домашнем каталоге и содержащихся в нем подкаталогах, есть лишь один файл с именем file1, так как команда find выдала одну строку с именем найденного файла. Обычно, мы прибегаем к помощи команды find, когда нам необходимо найти более одного файла. Например вам может понадобиться найти все файлы с определенным расширением. Я имею привычку скачивать большое количество pdf-файлов и, при этом, часто забываю сохранять их в каком-то определенном месте. Иногда я складываю эти файлы в каталог с названием pdfs. Когда меня посещает такое желание, я использую команду find для поиска pdfфайлов во всех подкаталогах моего домашнего каталога: find . -name "*.pdf" -print ./pdfs/50130201a.pdf ./pdfs/50130201b.pdf ./pdfs/50130201c.pdf ./pdfs/IWARLab.pdf ./pdfs/DoS_trends.pdf ./pdfs/Firewall-Guide.pdf ./2000_ports.pdf Это значит, что я был аккуратен последнее время, так как только один файл не находится в «правильном» подкаталоге. Заметьте, что для того что бы команда find работала, я заключил образец *.pdf в кавычки, написав "*.pdf", а не просто *.pdf. Существуют еще два способа правильного написания образцов. Эти две команды дадут одинаковый результат: find . -name \*.pdf -print find . -name '*.pdf' -print Давайте добавлять к этой команде другие команды и смотреть, что в результате получится. Что если нас интересуют только те файлы, которые находятся не в каталоге pdfs? Давайте повторим команду find, но в данном случае переправим ее вывод команде grep, в результате чего мы получим только одно имя: find . -name "*.pdf" -print | grep -v "^\./pdfs/" ./2000_ports.pdf

http://www.freebsd.bip.ru/find.shtml (3 of 6)10.04.2004 17:25:43

Daemon News Russia

Отлично, команда работает, однако ее синтаксис выглядит устрашающе. Разберем его по частям. Когда вы используете grep -v, вы создаете инвертированный фильтр. Это значит, что grep будет выбирать из входного потока все строки, в которых НЕ содержится указанный образец. В моем случае, меня не интересуют файлы, которые находятся в каталоге ./pdfs/, я исключаю их используя инверсный фильтр. Обратите внимание, что выражение записано в кавычках. Я так же добавил в фильтр параметр ^\. Символ степени «^» говорит команде grep, что образец надо сравнивать только с началом строки. Обратный слеш «\» нужен для того, что бы команда grep не воспринимала точку «.» как специальный символ. Сложенный вместе, такой образец скажет команде grep, показать мне файлы которые не лежат в каталоге ./pdfs/. Вот таким образом я почил желаемый результат. Давайте наберемся смелости и сделаем что-нибудь более полезное, чем просто просмотр списка файлов. Попробуем использовать find для того что бы не просто найти необходимые файлы, но и переместить их в правильный каталог: find . -name "*.pdf" -print | grep -v "^\./pdfs/" | xargs -J X mv X ./pdfs/ Для того что бы убедиться в том, что это сработало, выполним первоначальную команду find: find . -name "*.pdf" -print ./pdfs/50130201a.pdf ./pdfs/50130201b.pdf ./pdfs/50130201c.pdf ./pdfs/IWARLab.pdf ./pdfs/DoS_trends.pdf ./pdfs/Firewall-Guide.pdf ./pdfs/2000_ports.pdf Посмотрим, каким образом работает эта конструкция. В то время как grep заканчивает фильтрацию вывода команды find, мы передаем результаты его работы команде xargs, для завершения операции. Ключ J говорит xargs взять все полученные строки и подставить их в указанную команду. Например перед вызовом команды find я не знал сколько файлов придется перемещать – такой файл может быть один, или их может быть несколько. Вне зависимости от того, сколько файлов будет найдено, мне необходимо что бы все они были перемещены в каталог pdfs. Это сделать нам поможет маленькая магия ключа J. Для того чтобы ключ J сработал правильно, я определил символ «X» и поместил его по обоим сторонам команды mv. (Я честно перевел это, вы, я думаю, честно прочитали. На самом деле так никто не делает. Во второй части этой статьи вы узнаете как пользоваться ключом «-exec», который как раз и предназначен для подобных действий – прим. переводчика). Помните, что имена файлов в системе UNIX не обязательно имеют расширения. Поэтому вам может понадобиться задать более сложный образец для поиска. Скажем, я захотел найти все файлы, содержащие в своем имени подстроку «bsd». Для этого следует воспользоваться следующей командой: find . -name "*bsd*" -print ./.kde/share/icons/favicons/www.freebsd.org.png ./.kde/share/icons/favicons/www.freebsddiary.org.png ./.kde/share/wallpapers/bsdbg1280x1024.jpg ./mnwclient-1.11/contrib/freebsd

http://www.freebsd.bip.ru/find.shtml (4 of 6)10.04.2004 17:25:43

Daemon News Russia

Мы можем искать файлы не только по имени. Например найдем файлы, которые не читали более чем (условие «более чем» задается знаком «+») 30 дней: find . -atime +30 -print Для поиска файлов, которые вы не модифицировали какое-то время, используйте ключ «mtime», а для файлов у которых определенное время назад не менялись права доступа используйте «-ctime». Число после символа «+» задает количество дней (суток). Для того, что бы узнать какие файлы были модифицированы сегодня, попробуйте: find . -mtime -1 -print Эта команда покажет вам какие файлы были модифицированы за последние сутки. Заметьте, что для указания времени «меньше чем» следует указать знак «-». Ключ «-newer», это еще один ключ, имеющий отношение ко времени. Все три ключа «time» в качестве параметра используют суточные интервалы. Если вы хотите использовать более точные интервалы времени, то вам может помочь ключ «-newer», который позволяет сравнивать время модификации, последнего чтения или смены прав одного файла с другим с точностью до минуты. Например для того что бы поглядеть какие скрытые (файлы с точкой в начале) были изменены с тех пор как вы последний раз изменили файл .cshrc, вы должны выполнить такую команду: find . -type f -name ".*" -newer .cshrc -print Обратите внимание, что мы включили в эту команду еще один незнакомый ключ. «-type» с параметром «-f», который устанавливает тип искомого «файл», так как в данном случае нам не нужны изменившиеся каталоги. Ключ «-name» будет искать файлы с именем начинающимся на точку, а ключ «-newer» отберет файлы, которые модифицировались позже файла .cshrc. По умолчанию подразумевается, что между ключами поиска стоит логический оператор «И», если вы хотите, что бы вместо «И» использовался «ИЛИ», укажите ключ «-o». Поскольку между ключами по умолчанию подразумевается логический оператор «И», то выражение find принимает следующий вид: искать файлы определенного типа «И» с определенным именем «И» более новые чем мой файл .cshrc. Продемонстрируем разницу между логическим «И» и логическим «ИЛИ». Если я хочу найти все файлы в моем домашнем каталоге, которые не использовались последние 7 дней «И» их размер больше чем 10Мб, то я использую следующую команду: find . -atime +7 -size +20480 -print Однако, если я хочу найти файлы которые не использовались последнюю неделю «ИЛИ» их размер больше чем 10Мб, то мне придется выполнить такую команду: find . -atime +7 -o -size +20480 -print Если вы будете использовать ключ «-size», вам придется немного повычислять, так как он использует в качестве параметра число 512-байтных блоков в файле. Я могу воспользоваться командой expr для облегчения этого процесса: http://www.freebsd.bip.ru/find.shtml (5 of 6)10.04.2004 17:25:43

Daemon News Russia

find . -atime +7 -o -size +`expr 10 \* 1024 \* 2` -print Заметьте, что в этой команде в обратных кавычках (это знак ` в левом верхнем углу вашей клавиатуры) заключено то что надо вычислить. Нам остается поставить перед выражением знак плюс, так как мы хотим найти файлы «более чем» 10Мб размера. Для того что бы поглядеть заранее то, что сосчитает команда expr, припишите впереди команды find команду echo: echo find . -atime +7 -o -size +`expr 10 \* 1024 \* 2` -print find . -atime +7 -size +20480 -print Вообще проверка сложного выражения find, для того что бы увидеть его полный вид, перед выполнением, является хорошим тоном. Автор: Dru Lavigne (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/find.shtml (6 of 6)10.04.2004 17:25:43

Daemon News Russia

новости

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь

Скроллер Купил я себе оптический гениусовый нетскролл. Красивая и удобная мышка. Захотел, что бы скроллер в X работал. $ man XF86Config [skipped] ZAxisMapping N M Some mouse devices have a wheel or a roller. Its action is reported as the Z (third) axis movement in the X server. The Z axis movement can be assigned to another axis (X or Y) or a pair of buttons (the button N for negative movement and M for positive movement) with this option. Мой кусок про мышку: === /etc/XF86Config === [skiped] Section "Pointer" Protocol "Вибери сибе (c)GAG" Device "/dev/mouse" BaudRate 1200 Emulate3Timeout 50 Buttons 5 ZAxisMapping 4 5 EndSection [skiped] === /etc/XF86Config === Автор: Roman.Y.Bogdanov (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/scroll.shtml10.04.2004 17:25:44

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Создание моста-фильтра на основе FreeBSD новости

● ● ● ● ● ●

Почему именно мост? Конфигурация ядра. Конфигурационные файлы. Настройка правил для Firewall. Запуск моста с фильтрацией. Производительность и несколько замечаний.

1. Почему именно мост? В некоторых случаях бывает полезно разделить одну физическую сеть на некоторые сегменты без создания подсетей и установки маршрутизаторов. Например для того, чтобы изолировать нагруженные трафиком участки сети. В дальнейшем будем рассматривать сеть на основе технологии Ethernet (Fast Ethernet) Мост работает на канальном уровне, строя адресную таблицу на основе пассивного наблюдения за трафиком, циркулирующем в подключенных к нему сегментах. В эту таблицу заносятся MACадреса устройств и порт моста, к которому подключен сегмент с этими устройствами. Мост передает пакеты только в том случае, если в соответствии с его таблицей адрес источника и адрес назначения подключены к разным портам. В настоящее время повсеместно используются многопортовые мосты-коммутаторы. На основе компьютера с двумя сетевыми картами можно тоже построить мост. Это позволяют сделать ОС FreeBSD и Linux. Однако эти ОС позволяют также создать мосты с фильтрацией - т.е. мост, помимо всего выполняющий и функции фильтра ip пакетов, или, как иногда его называют firewall. Где же может применяться такой фильтрующий мост? Первое и самое очевидное - при подключении к провайдеру. Вот пример - вам выделили диапазон ip-адресов и выдали ethernet подключение к маршрутизатору провайдера, к которому вы доступа не имеете и который не выполняет абсолютно никакой фильтрации, а вам необходимо защитить свои сервера, создать DMZ... Конечно, сразу напрашивается решение - поставить програмный маршрутизатор на основе FreeBSD, выполняющий фильтрацию. Однако тут обычно и бывают сложности. Вопервых, у вас сразу уменьшится число ip-адресов на 2, т.к. маршрутизатору нужен адрес на каждый интерфейс и вам придется перекраивать выделенный блок ip-адресов, чтобы получить сеть с нормальной маской (возможно, даже теряя адреса). Во вторых, для установки маршрутизатора необходимо, чтобы провайдер прописал его на своем маршрутизаторе, чтобы тот был в курсе, куда посылать пакеты для вашего блока ip-адресов. Вот тут и придет на помощь мост с фильтрацией. Данную схему подключения можно изобразить следующим образом:

http://www.freebsd.bip.ru/bridge_filter.shtml (1 of 6)10.04.2004 17:25:46

Daemon News Russia

Или же вы просто хотите отгородить один из участков своей сети с фильтрацией проходящего в него и из него трафика. К тому же мост имеет еще одно достоинство - ему не нужны ip-адреса. Его интерфейсы могут работать без назначения ip-адресов, что делает мост прозрачным. Однако, если вы хотите уметь к нему досуп, скажем, по ssh, а не только с консоли - можно назначить один ip-адрес на один из интерфейсов, что мы и сделаем. Благодаря возможностям ipfw и dummynet вы сможете также ограничивать трафик, проходящий через мост. 2. Конфигурация ядра Допустим, уже имеется машина с двумя сетевыми картами, доведенная до состояния STABLE (мы работали с версией 4 - RELENG_4), ядро которой уже было собрано с поддержкой сетевыйх карт. Для того, чтобы мост заработал, сетевые карты также должны поддерживать работу в "promiscuous" режиме. Для большей произоводительности желательно, чтобы это были PCI http://www.freebsd.bip.ru/bridge_filter.shtml (2 of 6)10.04.2004 17:25:46

Daemon News Russia

карты. Мы использовали две 3COM 3C905B-TX. Добавим необходимые параметры в конфиг ядра: options BRIDGE # Включим поддержку firewall options IPFIREWALL # Для того, чтобы добавить возможность firewall вести логи options IPFIREWALL_VERBOSE # ограничим число пакетов, о которых ядро будет сообщать options IPFIREWALL_VERBOSE_LIMIT=10 # Добавим еще парочку нужных параметров # ICMP_BANDLIM включает ограничение полосы для # ответов icmp error поскольку мы дадим мосту 1 ip-адрес, # этот параметр в некоторых случаях помогает от D.O.S. атак. options ICMP_BANDLIM # Добавим также параметр, который заблокирует # перезагрузку системы при нажатии Ctrl+Alt+Del options SC_DISABLE_REBOOT После того, как необходимые парметры добавлены, пересоберем ядро (о том, как это сделать, можно прочитать тут: http://www.freebsd.bip.ru/kernel.shtml . Пример конфига ядра для нашей конфигурации с картами 3COM 3C905B-TX можно взять тут ). 3. Конфигурационные файлы Для того, чтобы запустить IPFirewall, необходимо добавить несколько параметров в /etc/rc.conf. Для начала опишем необходимые параметры, а затем приведем готовый фрагмент для вставки в rc.conf. Прежде всего необходимо добавить параметр firewall_enable="YES". Параметр firewall_script="/ etc/rc.firewall" укажет, какой скрипт будет запускаться для активизации правил firewall. Следующим параметром будет firewall_type. Этот параметр показывает, какой тип firewall будет использоваться из заранее приготовленных разработчиками (open, client, simple, closed) или же имя файла, из которого будут браться правила для firewall, если не подходит ни один из заранее приготовленных типов. Мы создадим файл ipfw.rules со своими собственными правилами, посему поставим firewall_type="/etc/ipfw.rules". Также необходим параметр firewall_quiet. Если его поставить в YES, то при загрузке будет отключен вывод на экран правил firewall. Однако для начала лучше ему дать значение NO, чтобы видеть активируемые правила при загрузке. Парметр firewall_logging установим в YES для того, чтобы велись логи. Поскольку у нас машина с двумя сетевыми картами и чтобы она вдруг не заработала как маршрутизатор поставим gateway_enable="NO" Итого, у нас получилась следующая вставка в rc.conf: firewall_enable="YES" firewall_script="/etc/rc.firewall" firewall_type="/etc/ipfw.rules" firewall_quiet="NO" http://www.freebsd.bip.ru/bridge_filter.shtml (3 of 6)10.04.2004 17:25:46

Daemon News Russia

firewall_logging="YES" gateway_enable="NO" 4. Настройка правил для Firewall Создадим и отредактируем файл /etc/ipfw.rules, который мы указали в параметрах в rc.conf. Поскольку в конфиг ядра мы не добавляли параметр IPFIREWALL_DEFAULT_TO_ACCEPT, то ipfw по умолчанию не зависимо от наших настроек будет добавлять в конец правило 65535 deny ip from any to any. Поэтому мы должны разрешить все необходимые сервисы в нашем файле. Пусть у нас есть 2 интерфейса - xl0 и xl1. Для мостов приемлимым решением (а иногда и необходимым) является разрешение любого трафика на одном из интерфейсов и фильтрация входящего и исходящего на другом. Так и поступим - разрешим любой трафик на интерфейсе xl1, а фильтровать будем входящий на xl0. При работе моста есть еще одна особенность. Дело в том, что для корректной работы ip протокола необходимо использование протокола ARP. Если пакеты этого протокола не будут проходит через мост, то станции по разные стороны моста не смогут передавать друг другу пакеты, т.к. не будет выполняться преобразование ip-адресов в mac-адреса сетевых карт. ipfw имеет возможность ограничивать ethernet-протоколы. Для этого создается специальное правило для udp пакетов с адресом источника 0.0.0.0, а порт источника будет показывать номер ethernetпротокола. Таким образом можно заставить мост пропускать или не пропускать протоколы, отличные от IP. Для вышеупомянутого протокола arp правило будет выглядеть следующим образом: add allow udp from 0.0.0.0 2054 to 0.0.0.0 Поскольку мы решили помимо фильтрации также использовать traffic shaper dummynet, напишем правило, ограничивающее, например, весь проходящий icmp-трафик (входящий+исходящй) на 50Кб/с: add pipe 1 icmp from any to any pipe 1 config bw 50Kbit/s queue 10 Заметим, что в случае написания других правил для shaper'а, включающих в себя адресаузлов, сетей - их нужно ставить в самое начало нашего файла ipfw.rules. ipfw устроен таким образом, что пакет проверяется по правилам сверху вниз и как только находится правило, которому он удовлетворяет - проверка на соответствие другим нижестоящим правилам не производится. Таким образом, если пакет будет удовлетворять правилу фильтрации - он может не дойти до правил traffic shaper'а. Однако если первыми стоят правила шейпера, то существует возможность пропустить пакет по правилам, котрые стоят ниже правил шейпера. Для этого нужно установить переменную net.inet.ip.fw.one_pass=0. Добавим еще парочку правил, например, разрешающих прохождение входящего dns-трафика, обращений к web-серверу и icmp-трафика через интерфейс xl0. Также не забудем разрешить любой трафик через xl1: add add add add

1000 1200 1300 1400

allow allow allow allow

tcp tcp udp udp

from from from from

any any any any

to any to any to any domain

in via domain domain to any

http://www.freebsd.bip.ru/bridge_filter.shtml (4 of 6)10.04.2004 17:25:46

xl0 established in via xl0 in via xl0 1024-65535 in via xl0

Daemon News Russia

add 1500 allow tcp from any to any www in via xl0 add 1600 allow icmp from any to any add 1700 allow ip from any to any via xl1 Итого, наш итоговый файл /etc/ipfw.rules получился следующим: add pipe 1 icmp from any to any pipe 1 config bw 50Kbit/s queue 10 add 0900 allow udp from 0.0.0.0 2054 to 0.0.0.0 add 1000 allow tcp from any to any in via xl0 established add 1200 allow tcp from any to any domain in via xl0 add 1300 allow udp from any to any domain in via xl0 add 1400 allow udp from any domain to any 1024-65535 in via xl0 add 1500 allow tcp from any to any www in via xl0 add 1600 allow icmp from any to any add 1700 allow ip from any to any via xl1 5. Запуск моста с фильтрацией Перезагрузимся, чтобы вступили в силу настройки rc.conf и загрузилось новое ядро. По умолчанию мост не работает. Для его запуска необходимо установить параметры net.link. ether.bridge_ipfw (чтобы работала фильтрация) и net.link.ether.bridge(чтобы активировать мост) в 1. Также необходимо для одновременной работы шейпера и фильтрации переменную net.inet.ip. fw.one_pass установить в 0. Сделаем это из приглашения командной строки: # sysctl -w net.inet.ip.fw.one_pass=0 # sysctl -w net.link.ether.bridge_ipfw=1 # sysctl -w net.link.ether.bridge=1 Все, мост работает. Для того, чтобы каждый раз после перезагрузки не надо было изменять значения переменных, добавим следующие строки в /etc/sysctl.conf (если нет такого файла создайте его): net.inet.ip.fw.one_pass=0 net.link.ether.bridge_ipfw=1 net.link.ether.bridge=1 6. Производительность и несколько замечаний Итак, мост готов. Мы провели примерные замеры производительности. Конфигурация: PIII-500MHz, 128Mb RAM, 2 сетевых интерфейса 3COM 3C905B-TX, 3 очереди для шейпера + фильтр на 30 правил. Результаты получились следующими: задержка в 0.2 ms при отсутствии трафика и 0.8 ms при интенсивном обмене. Несколько замечаний по использованию мостов. Мосты не допускают создания архитектуры с http://www.freebsd.bip.ru/bridge_filter.shtml (5 of 6)10.04.2004 17:25:46

Daemon News Russia

петлями, поскольку в этом случае будет некорректно строится таблица соответствия моста. Если вы используете мост с фильтрацией, постарайтесь предусмотреть в правилах фильтра всё необходимое, иначе вы рискуете потратить много времени на поиск места, через которые не проходят нужные вам пакеты, особенно в больших сетях со сложной топологией. Мы также рекомендуем назначать на один из интерфейсов ip-адрес, чтобы иметь возможность настраивать его удаленно через ssh. И, конечно, при использовании фильтрации, у вас должны быть открыты необходимые порты tcp для работы протокола ssh. Автор: [email protected] (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/bridge_filter.shtml (6 of 6)10.04.2004 17:25:46

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Policy routing в FreeBSD с помощью ipfw. новости

Статическая маршрутизация по двум исходящим каналам в зависимости от ip-адреса источника. Итак, имеем следующие интерфейсы. rl0 (1.1.1.2/30) - смотрит на одного провайдера, у провайдера интерфейсный ip-адрес 1.1.1.1/30 rl1 (2.2.2.2/30) - смотрит на другого провайдера, у провайдера интерфейсный ip-адрес 2.2.2.1/30 rl2 (3.3.3.1/24, alias 4.4.4.1/24) - смотрит на клиентов, Пользователи из сети 3.3.3.0/24 идут в инет через первого провайдера, а пользователи из сети 4.4.4.0/24 идут в инет через второго провайдера. # # /etc/rc.firewall # ipfw -f flush # эта часть скрипта для того, чтобы пользователи могли #"ходить" друг к другу напрямую. nets=" #список ваших сетей 1.1.1.0/30 2.2.2.0/30 3.3.3.0/24 4.4.4.0/24 " rule_num=200 for net in $nets do for net1 in $nets do rule_num=$(($rule_num+1)) ipfw add $rule_num allow ip from $net to $net1 done done #самая нужна часть: ipfw add 1000 fwd 1.1.1.1 ip from 3.3.3.0/24 to any ipfw add 1005 fwd 2.2.2.1 ip from 4.4.4.0/24 to any Автор: Lamer

(c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/policy_routing.shtml (1 of 2)10.04.2004 17:25:47

Daemon News Russia

http://www.freebsd.bip.ru/policy_routing.shtml (2 of 2)10.04.2004 17:25:47

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Введение в автоматизацию. Часть 1 новости

Статья является переводом текста Dru Lavigne, опубликованного по адресу: http://www.onlamp.com/pub/a/ bsd/2001/11/08/FreeBSD_Basics.html. Совсем недавно, в статье «Как заставить cron выполнять наши приказания» мы рассмотрели использование демона cron. В сегодняшней статье мы сосредоточим внимание на реальных сценариях обслуживания системы, которые cron запускает ежедневно, еженедельно и ежемесячно. Вообще говоря, всегда разумно знать какие сценарии запускаются на вашем компьютере, поскольку любой сценарий это палка о двух концах. Их положительная сторона в том, что они могут держать вас курсе состояния «здоровья» операционной системы, а так же выполнять некоторые процедуры для поддержания ее работоспособности. В вашу FreeBSD встроены автоматически запускающиеся сценарии для выполнения практически всех часто применяющихся рутинных операций администрирования. Вам даже не придется знать как вообще пишутся сценарии. Обратная сторона медали заключается в том, что любой сценарий может быть уязвим перед злоумышленником. Поэтому со сценариями надо поступать так же как и с демонами – использовать только те, которые вам действительно необходимы, отбрасывая все лишнее. Сценарии, о которых мы будем говорить, находятся в каталоге /etc/periodic, где они рассортированы по трем подкаталогам, которые соответствуют периодичности их запуска – ежедневно, еженедельно и ежемесячно: ls -F /etc/periodic ./ monthly/ ../ weekly/ daily/ Имена сценариев начинаются с чисел, которые задают порядок их выполнения. Таким образом сценарий, название которого начинается с числа «120» будет выполнен перед сценарием, начинающимся на «300». Все сценарии помечены признаком выполняемого файла, на что указывает символ «*» в выводе команды ls -F: ls -F /etc/periodic/weekly ./ 320.whatis* ../ 330.catman* 120.clean-kvmdb* 340.noid* 300.uucp* 400.status-pkg* 310.locate* 999.local* И наконец, каждый из этих сценариев является сценарием оболочки Bourne (в этом можно убедиться посмотрев на первую строчку сценария – #/bin/sh), а это значит, что вы всегда можете протестировать любой из этих сценариев, запустив его в оболочке sh: cd /etc/periodic/daily http://www.freebsd.bip.ru/freebsd_basics.shtml (1 of 9)10.04.2004 17:25:50

Daemon News Russia

sh 430.status-rwho Local system status: 8:25AM up 19 days, 21:34, 7 users, load averages: 0.41, 0.38, 0.29 Вы, наверное, помните, что демон cron использует системный файл crontab для того, что бы определить, когда сценарии должны быть запущены в каждом каталоге. Вот часть файла crontab, в которой это отражено: more /etc/crontab

# do daily/weekly/monthly maintenance # запустить ежедневное/-недельное/-месячное обслуживание 1 3 * * * root periodic daily 15 4 * * 6 root periodic weekly 30 5 1 * * root periodic monthly

Таким образом демон cron вызывает программу periodic, для запуска необходимых ежедневных сценариев – каждую ночь в 3:01, для запуска еженедельных – каждую субботу в 4:15 и для ежемесячных – в 5:30 утра в каждый первый день месяца. Программа periodic имеет собственный конфигурационный файл, который называется periodic.conf, в котором указывается какие именно сценарии будут запускаться, а какие в свою очередь должны быть отключены. Ваша FreeBSD уже имеет установленный по умолчанию конфигурационный файл periodic.conf, давайте посмотрим начало этого файла: head -20 /etc/defaults/periodic.conf #!/bin/sh # # This is defaults/periodic.conf - a file full # of useful variables that you can set to change # the default behaviour of periodic jobs on your # system. You should НЕТt edit this file! Put any # overrides into one of the $periodic_conf_files # instead and you will be able to update these defaults # later without spamming your local configuration # information. # # Это установленный по умолчанию periodic.conf – файл, заполненный # полезными переменными, значения которых вы можете менять для того # что бы изменить поведение периодически выполняемых заданий в вашей # системе. # Вы не должны менять этот файл. Поместите любые измененные значения # переменных в любой из файлов указанных в переменной $periodic_conf_files # для того что бы при обновлении этого файла ваши настройки не были утеряны. # # The $periodic_conf_files files should only contain # values which override values set in this file. This # eases the upgrade path when defaults are changed and # new features are added. # # Файлы названия которых указаны в переменной $periodic_conf_files могут # содержать только параметры значения которых перекрывают значения # параметров указанных в этом файле. Это упростит обновление системы, когда http://www.freebsd.bip.ru/freebsd_basics.shtml (2 of 9)10.04.2004 17:25:50

Daemon News Russia

# при добавлении новых функций файл установок по умолчанию будет изменен. # # $FreeBSD: src/etc/defaults/periodic.conf,v 1.7.2.8 # 2001/07/28 11:44:22 brian Exp $ # # What files override these defaults ? # Какие файлы переписывают значения по умолчанию? periodic_conf_files="/etc/periodic.conf /etc/periodic.conf.local" # periodic script dirs local_periodic="/usr/local/etc/periodic /usr/X11R6/etc/periodic" В этом файле ясно сказано, что вы не должны вносить в него никаких изменений. Вам на выбор предлагается два места в которых вы можете хранить свои собственные файлы periodic.conf, значения указанных в них параметров будут переопределять соответствующие значения в файле /etc/defaults/ periodic.conf. Если вы попробуете найти эти файлы, вы обнаружите что их нет на диске, поскольку подразумевается что именно вы должны их создать: more /etc/periodic.conf /etc/periodic.conf: no such file or directory more /etc/periodic.conf.local /etc/periodic.conf.local: no such file or directory Перед тем как приступить к созданию вашего собственного настроечного файла, следует ознакомиться с тем, что делает каждый сценарий, для того что бы решить – имеется ли необходимость в его запуске или нет. Давайте посмотрим что делает каждый сценарий, а так же узнаем запускается он по умолчанию или нет. Эта информация содержится в странице руководства, вызываемой командой man periodic.conf. Я свел все эти данные в следующую таблицу:

Название сценария

Производимое действие

Запускается по умолчанию

Ежедневно запускаемые сценарии: 100.clean_disks

Удаляет все файлы по маске

НЕТ

110.clean_tmps

Очищает каталоги временных файлов

НЕТ

120.clean_preserve

Удаляет старые файлы из /var/preserve

ДА

130.clean_msgs

Удаляет старые системные сообщения из каталога /var/msg

ДА

140.clean_rwho

Удаляет старые файлы в каталоге /var/rwho ДА

150.clean_hoststat

Удаляет старые файлы в каталоге /var/ spool/.hoststat

200.backup_passwd

Делает резервное копирование файлов /etc/ master.passwdи /etc/group, а так же ДА сообщает о их изменении со времени последнего резервирования

210.backup_aliases

Делает резервное копирование файла /etc/ mail/aliasesfile, а так же сообщает о его изменении со времени последнего резервирования

http://www.freebsd.bip.ru/freebsd_basics.shtml (3 of 9)10.04.2004 17:25:50

ДА

ДА

Daemon News Russia

220.backup_distfile

Делает резервное копирование файла /etc/ Distfile и показывает его изменения

ДА

300.calendar

Проводит ежедневный запуск calendar -a

НЕТ

310.accounting

Проводит ротацию данных системы аккаунтинга

ДА

320.distfile

Запускает rdist(1)

ДА

330.news

Запускает сценарий /etc/news.expire

ДА

340.uucp

Запускает сценарий /etc/uuclean.daily

ДА

400.status_disks

Запускает df(1) и dump -W

ДА

410.status_uucp

Запускает uustat -a

ДА

420.status_network

Запускает netstat -i

ДА

430.status_rwho

Запускает uptime(1)

ДА

440.status_mailq

Запускает mailq(1)

ДА

450.status_security

Запускает сценарий /etc/security

ДА

Выдает статистику по отвергнутым 460.status_mail_rejects почтовым соединениям, которая хранится в /var/log/maillog

ДА

470.status_named

Выдает статистику о отвергнутых запросах на передачу информации о зонах с DNS серверов

ДА

500.queuerun

Запускает обработку почтовой очереди

ДА

999.local

Выполняет пользовательские сценарии указанные в файле /etc/daily.local Сценарии для еженедельного выполнения

120.clean_kvmdb

Удаляет старые /var/db/kvm_*.dbфайлы

ДА

300.uucp

Запускает /usr/libexec/uucp/clean.weekly

ДА

310.locate

Запускает /usr/libexec/locate.updatedb

ДА

320.whatis

Запускает /usr/libexec/makewhatis.local

ДА

330.catman

Запускает /usr/libexec/catman.local

НЕТ

340.НЕТid

Обнаруживает файлы с неправильным владельцем и группой-владельцем (так называемые сироты)

НЕТ

400.status_pkg

Используя pkg_version(1) показывает список устаревших программных пакетов

НЕТ

999.local

Выполняет список дополнительных сценариев, указанных в файле /etc/weekly. local Сценарии для ежемесячного выполнения

200.accounting

Выводит информацию системы пользовательского аккаунтинга, используя команду ac(8)

http://www.freebsd.bip.ru/freebsd_basics.shtml (4 of 9)10.04.2004 17:25:50

ДА

Daemon News Russia

999.local

Выполняет список дополнительных сценариев, указанных в файле /etc/monthly. local

Итак теперь вы узнали, что сценариев не так уж и много и большинство из них по умолчанию отрабатываются. Давайте станем суперпользователем и скопируем поставляемый во FreeBSD файл /etc/ defaults/periodic.conf в /etc/periodic.conf, для последующего редактирования: su Password: cp /etc/defaults/periodic.conf /etc/periodic.conf Затем я открыл /etc/periodic.conf в моем любимом текстовом редакторе (попробуйте ee /etc/periodic.conf – прим. переводчика) и прошелся по интересующим меня строкам. Давайте начнем со следующего куска: # Daily options # These options are used by periodic(8) itself to # determine what to do with the output of the sub-programs # that are run, and where to send that output. $daily_output # might be set to /var/log/daily.log if you wish to log the # daily output and have the files rotated by newsyslog(8) # Эти параметры используются программой periodic для того что бы # задать, что делать с выводом запускаемых сценариев и куда # его отсылать. Переменная $daily_output может быть установлена в # "/var/log/daily.log", если вы хотите журналлировать ежедневный вывод # и иметь возможность его ротации при помощи newsyslog(8). daily_output="root" # user or /file daily_show_success="YES" # scripts returning 0 daily_show_info="YES" # scripts returning 1 daily_show_badconfig="NO" # scripts returning 2 Итак мы видим, что по умолчанию, результаты выводимые ежедневно выполняющимися сценариями отсылаются по почте пользователю root. Если вы проверите почту пользователя root, то вы обнаружите там письма с темой «hostname daily run output», и, если вы прочитаете одно из таких писем, то его содержимое будет состоять из результатов работы сценариев, которые в таблице помечены знаком «ДА». Вы можете сделать так, что бы эти сообщения отсылались не пользователю root, а любому другому, если поменяете значение параметра daily_output с root на необходимое. Если требуется, то вы можете указать не имя пользователя, а путь к файлу, в котором будет сохраняться все сообщения от сценариев, обычно этот файл называется /var/log/daily.log. По умолчанию этот файл не существует, поэтому вам потребуется его создать, это можно сделать отдав команду: touch /var/log/daily. log. Давайте рассмотрим ежедневно выполняемые сценарии. Заметьте, что порядок выполнения сценариев имеет четкую логику: сначала выполняются сценарии удаляющие устаревшие файлы, затем идут сценарии задачей которых является резервное копирование и в самом конце находятся сценарии выполняющие разнообразные полезные программы. # 100.clean-disks daily_clean_disks_enable="NO" # Ежедневно удалять файлы daily_clean_disks_files="[#,]* .#* a.out *.core *.CKP .emacs_[0-9]*" daily_clean_disks_days=3 # Если они старше Х дней daily_clean_disks_verbose="YES" # Выдавать список удаленных файлов http://www.freebsd.bip.ru/freebsd_basics.shtml (5 of 9)10.04.2004 17:25:50

Daemon News Russia

Этот сценарий по умолчанию выключен, однако вы можете его включить, если ваша система испытывает проблемы со свободным дисковым пространством (этот сценарий предназначен для удаления файлов с определенными расширениями – прим. переводчика). Перед тем как включить этот сценарий, сделайте резервное копирование важных файлов, а так же обязательно посмотрите на список удаленных файлов, для того что бы убедиться, что сценарий не удалил что-нибудь важное. Это особенно важно, если вы решили добавить свои расширения в список для удаления. Следующий сценарий по умолчанию тоже выключен и может быть включен, если у вас мало свободного места (этот сценарий предназначен для очистки каталогов с временными файлами – прим. переводчика). # 110.clean-tmps daily_clean_tmps_enable="NO" # Ежедневно удалять временные файлы daily_clean_tmps_dirs="/tmp" # В этом каталоге daily_clean_tmps_days="3" # Если к ним не обращались более Х дней daily_clean_tmps_ignore=".X*-lock quota.user quota.group" # Такие файлы не удалять daily_clean_tmps_verbose="YES" # Показать список удаленных файлов Перед тем, как включить сценарий clean-tmps, имейте в виду, что в некоторых версиях FreeBSD у него существуют проблемы с безопасностью. Если вы еще не знаете о существовании бюллетеней безопасности FreeBSD (security advisories – SA), то обязательно занесите в «избранное» и время от времени читайте информацию размещенную на http://www.freebsd.org/security/index.html#adv. Подписавшись на один из листов рассылки на этом сайте, вы будете получать бюллетени безопасности о найденных уязвимостях и способах их устранения. Бюллетень безопасности посвященный уязвимости в вышеупомянутом сценарии называется FreeBSD-SA-01:40.fts.v1.1.asc. Следующий сценарий очищает каталог /var/preserve. Если вы не знаете что хранится в этом каталоге, посмотрите страницу руководства (man hier) и поищите там слово «preserve»: man hier /preserve preserve/ temporary home of files preserved after an accidental death of an editor; see ex(1) preserve/ временное хранилище для файлов, оставшихся после аварийного завершения текстового редактора. См. man ex Теперь, когда вы знаете что находится в каталоге preserve, вы можете решить, оставить или нет включенным этот сценарий. # 120.clean-preserve daily_clean_preserve_enable="YES" # Удалять файлы ежедневно daily_clean_preserve_days=7 # Если они не изменялись Х дней daily_clean_preserve_verbose="YES" # Показать список удаленных файлов Следующий сценарий удаляет сообщения посланные командой msgs. Если вы не используете эту утилиту, вы можете выключить этот сценарий, поскольку сообщений для удаления все равно нет. Если вы не уверены, используете ли вы эту утилиту или нет, то для того что бы узнать точно, прочитайте man msgs. # 130.clean-msgs daily_clean_msgs_enable="YES" # Ежедневно удалять сообщения daily_clean_msgs_days= # Если не изменялись Х дней

http://www.freebsd.bip.ru/freebsd_basics.shtml (6 of 9)10.04.2004 17:25:50

Daemon News Russia

Для того что бы принять решение о необходимости следующего сценария вам так же следует прочитать страницу руководства, на этот раз посвященную rwho. Если ваша машина с FreeBSD не подключена к сети UNIX-станций, то вы можете выключить этот сценарий, поскольку каталог /var/rwho будет всегда пуст. # 140.clean-rwho daily_clean_rwho_enable="YES" # Ежедневно удалять файлы rwho daily_clean_rwho_days=7 # Если они не изменялись Х дней daily_clean_rwho_verbose="YES" # Показать список удаленных файлов У вас в системе может быть, а может и не быть файл hoststat. Для того что бы узнать почему, прочитайте следующий текст: http://www.geocrawler.com/archives/3/169/1999/3/0/1437080. У меня этого файла нет, поэтому я выключил этот сценарий: # 150.clean-hoststat daily_clean_hoststat_enable="YES" # Ежедневно стирать файл .hoststat daily_clean_hoststat_days=3 # Если он не изменялся Х дней daily_clean_hoststat_verbose="YES" # Выдать список удаленных файлов Теперь у нас на очереди три сценария делающих резервное копирование. Вы наверняка не откажетесь от того что бы система ежедневно осуществляла резервное копирование ваших файлов с паролями и сведениями о группах. Этот сценарий не только резервирует эти файлы, но и дополнительно сообщает о появившихся в них за день изменениях. Вы должны ежедневно просматривать результат работы этого сценария. # 200.backup-passwd daily_backup_passwd_enable="YES" # Резервировать passwd & group Ежедневное резервное копирование ваших почтовых алиасов (псевдонимов) будет хорошей мыслью. Вот сценарий который занимается именно этим. # 210.backup-aliases daily_backup_aliases_enable="YES" # Резервировать почтовые алиасы Если вы не используете программу rdist для поддержки идентичности файлов на разных машинах, то у вас нет файла /etc/Distfile, и, соответственно, вы можете выключить следующий сценарий. # 220.backup-distfile daily_backup_distfile_enable="YES" # Резервировать /etc/Distfile Программа calendar интересна, но по умолчанию не активирована. Если вам нравится программа fortune, и вы любите читать про разные интересные факты, то вероятно вам стоит запускать утилиту calendar. Для начала надо решить какой именно календарь будет интересен вам и вашим пользователям. Возможные варианты находятся в каталоге /usr/share/calendar (обратите внимание, что есть календарь и для русскоязычных пользователей – прим. переводчика): cd /usr/share/calendar ls -F . ./ calendar.holiday ../ calendar.judaic calendar.all calendar.music calendar.birthday calendar.russian http://www.freebsd.bip.ru/freebsd_basics.shtml (7 of 9)10.04.2004 17:25:50

Daemon News Russia

calendar.christian calendar.usholiday calendar.computer calendar.world calendar.croatian de_DE.ISO_8859-1/ calendar.german hr_HR.ISO_8859-2/ calendar.history ru_SU.KOI8-R/ Это обычные текстовые файлы и вы можете легко их посмотреть и отредактировать их содержимое. Некоторые файлы содержат действительно ерундовые факты: more calendar.computer

01/01 AT&T officially divests its local Bell companies, 1984 01/01 The Epoch (Time 0 for UNIX systems, Midnight GMT, 1970) 01/03 Apple Computer founded, 1977 01/08 American Telephone and Telegraph loses antitrust case, 1982 01/08 Herman Hollerith patents first data processing computer, 1889 01/08 Justice Dept. drops IBM suit, 1982 01/10 First CDC 1604 delivered to Navy, 1960 01/16 Set uid bit patent issued, to Dennis Ritchie, 1979 01/17 Justice Dept. begins IBM anti-trust suit, 1969 (drops it, 01/08/82) 01/24 DG Nova introduced, 1969

А в некоторых других файлах сделаны подборки разных сведений: more calendar.all

#include #include #include #include #include

Любой пользователь, знающий о каталоге с календарями может посмотреть какие факты произошли сегодня и завтра, указав в параметре -f название файла с календарем: calendar -f calendar.birthday Nov 4 King William III of Orange born, 1650 Nov 5 Roy Rogers born, 1912 Однако по умолчанию, если пользователь не будет находиться в этом каталоге и не укажет полное имя файла желаемого календаря, то он получит следующее сообщение об ошибке: cd calendar -f calendar.birthday calendar: no calendar file: ''calendar.birthday'' or ''~/.calendar/calendar.birthday Для того что бы решить эту проблему, скажите пользователю, что бы он создал у себя в домашнем каталоге подкаталог и скопировал туда необходимый ему календарь: cd mkdir .calendar http://www.freebsd.bip.ru/freebsd_basics.shtml (8 of 9)10.04.2004 17:25:50

Daemon News Russia

cp /usr/share/calendar/calendar.world .calendar/calendar Мне нравится файл calendar.world, так как он включает в себя календари с днями рождения, с музыкальными, компьютерными, историческими и праздничными датами. Поскольку я сохранил его под названием «calendar», то я могу просто писать calendar в командной строке не указывая параметров и не заботясь о том, в каком каталоге я нахожусь: calendar Nov 4 King William III of Orange born, 1650 Nov 5 Roy Rogers born, 1912 Nov 4 UNIVAC I program predicts Eisenhower victory based on 7% of votes, 1952 Nov 4 Iranian militants seize US embassy personnel in Teheran, 1979 Nov 4 Soviet forces crush the anti-communist revolt in Hungary, 1956 Nov 5 Guy Fawkes' Plot, 1605 Nov 4 Flag Day in Panama Nov 4 Will Rogers Day Теперь давайте вернемся к сценариям. Если вы включите «календарный» сценарий, он будет посылать по почте настроенный вами вывод программы calendar всем пользователям у которых есть в домашнем каталоге файл .calendar. Суперпользователь будет получать такое письмо вне зависимости от наличия у него в каталоге такого файла. Создайте каталог с календарями, станьте суперпользователем и напишите: calendar -a Если вы проверите ваш почтовый ящик, то вы обнаружите там сообщение с темой «Day_of_the_Week Calendar». Если ваши пользователи хотят получить такие сообщения ежедневно, включите соответствующий сценарий: # 300.calendar daily_calendar_enable="NO" # Выполнить calendar -a На сегодня все, в следующей части статьи мы закончим обзор «периодических» сценариев. Автор: Станислав Лапшанский (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/freebsd_basics.shtml (9 of 9)10.04.2004 17:25:50

Daemon News Russia

новости \\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь

Исследуем процессы. Часть 2 Статья является переводом текста Dru Lavigne, опубликованного по адресу: http://www.onlamp.com/pub/a/ bsd/2000/11/22/FreeBSD_Basics.html. В первой части статьи мы узнали что представляют из себя процессы, а так же как посмотреть список запущенных процессов на вашей FreeBSD. В этой части мы узнаем как процессы общаются между собой, как вы можете чтонибудь передать процессу и зачем вам это может понадобиться. Ход общения процессов называется межпроцессным взаимодействием. Процессы не имеют права просто передавать что-нибудь кому-нибудь. В FreeBSD существует 31 предопределенное сообщение. Эти сообщения называются сигналами. Вы можете посмотреть список сигналов набрав: kill -l HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM URG STOP TSTP CONT CHLD TTIN TTOU IO XCPU XFSZ VTALRM PROF WINCH INFO USR1 USR2 Каждый сигнал имеет номер, и в этом списке они перечислены в порядку номеров. Таким образом HUP=1, INT=2 и т.д. Процесс может посылать эти сигналы другим процессам. Пользователи могут тоже самое. Для того, что бы понять, что означает каждый из этих сигналов наберите man 2 sigaction или man 3 signal. Следующая ниже таблица кратко описывает каждый из 31 сигналов, а также результаты их применения. Поскольку пользователи так же могут посылать любые из этих сигналов, рядом с наиболее часто используемыми сигналами я поставил звездочку.

Название сигнала

#

Действие по умолчанию

Описание

*HUP

1

уничтожить процесс

оборвалась связь с терминалом

*INT

2

уничтожить процесс

прерывание программы

*QUIT

3

создать дамп памяти

выход из программы

ILL

4

создать дамп памяти

запрещенная инструкция

TRAP

5

создать дамп памяти

отладочное прерывание

ABRT

6

создать дамп памяти

вызов функции abort

EMT

7

создать дамп памяти

была выполнена эмулируемая инструкция

FPE

8

создать дамп памяти

исключение при операциях с плавающей точкой

*KILL

9

уничтожить процесс

убить программу

BUS

10 создать дамп памяти

ошибка на шине

SEGV

11 создать дамп памяти

нарушение сегментации

SYS

12 создать дамп памяти

вызов несуществующей системной программы

PIPE

13 уничтожить процесс

запись в канал при отсутствии чтения

ALRM

14 уничтожить процесс

истек таймер реального времени

http://www.freebsd.bip.ru/freebsd_basics2.shtml (1 of 7)10.04.2004 17:25:52

Daemon News Russia

*TERM

15 уничтожить процесс

программный сигнал на уничтожение процесса

URG

16 игнорирование сигнала

неотложное условие

*STOP

17 остановить процесс

останов (не может игнорироваться)

*TSTP

18 остановить процесс

сигнал стоп с клавиатуры

CONT

19 игнорирование сигнала

продолжить после останова

CHLD

20 игнорирование сигнала

статус порожденного процесса изменился

TTIN

21 остановить процесс

попытка фонового чтения

TTOU

22 остановить процесс

попытка фоновой записи

IO

23 игнорирование сигнала

ввод/вывод возможен

XCPU

24 уничтожить процесс

исчерпан лимит процессорного времени

XFSZ

25 уничтожить процесс

исчерпан лимит на размер файла

VTALRM

26 уничтожить процесс

сигнал от виртуального таймера

PROF

27 уничтожить процесс

сигнал от таймера профайлера

WINCH

28 игнорирование сигнала

изменение размеров окна

INFO

29 игнорирование сигнала

запрос статуса с клавиатуры

USR1

30 уничтожить процесс

Определенный пользователем сигнал 1

USR2

31 уничтожить процесс

Определенный пользователем сигнал 2

Некоторые из сигналов использовались пользователями столь часто, что получили свои клавиатурные сокращения. Для просмотра этих сокращений посмотрите четыре последние строки вывода команды stty -e: stty -e discard dsusp eof eol eol2 erase intr kill lnext ^O ^Y ^D ^H ^C ^U ^V min quit reprint start status stop susp time werase 1 ^\ ^R ^Q ^T ^S ^Z 0 ^W Символ «^» означает что вы должны нажать клавишу «ctrl», а затем указанную за ним букву. Обратите внимание, что три сигнала были привязаны к управляющим последовательностям: ● ● ●

^C привязан к сигналу INT (сигнал 2) ^\ привязан к сигналу QUIT (сигнал 3) ^Z привязан к сигналу TSTP (сигнал 18, хотя здесь он называется susp)

Не путайте слово «kill» в выводе команды stty с сигналом KILL (сигнал 9). Комбинация ^U удаляет строку, а не шлет сигнал номер 9. Для того что бы в этом убедиться, напечатайте в командной оболочке длинную строку, а затем нажмите ^U. Но как послать сигнал, который не имеет соответствующей комбинации клавиш? Используйте для этого команду kill. whatis kill kill(1) - terminate or signal a process (уничтожение или сигнализация процессу) kill(2) - send signal to a process (послать сигнал процессу) Есть пара способов использования команды kill. Если вы просто напечатаете: kill PID то по умолчанию процессу с идентификатором PID будет послан сигнал TERM. Если вы хотите послать какойhttp://www.freebsd.bip.ru/freebsd_basics2.shtml (2 of 7)10.04.2004 17:25:52

Daemon News Russia

нибудь другой сигнал, то в команде укажите его название или номер: kill -название_сигнала PID или kill -номер_сигнала PID Таким образом команды kill PID kill -TERM PID kill -15 PID эквивалентны. Не забывайте, что в UNIX имеет значение регистр набранных команд, если вы напечатаете: kill -term PID то получите следующее сообщение об ошибке: term: Unknown signal; kill -l lists all signals. Итак теперь мы знаем о каждом из 31 возможных сообщений, а так же можем посылать их различным процессам. Давайте рассмотрим причины, по которым вам может потребоваться послать процессу сигнал. Когда вы прорабатываете какой-нибудь вопрос используя FreeBSD Handbook или другое руководство, их авторы часто обучают как и что менять в тех или иных конфигурационных файлах, а затем говорят вам о необходимости послать сигнал HUP. Дело в том, что большинство процессов прочитывают свои конфигурационные файлы только при первоначальном запуске. Сигнал HUP говорит процессу, что он должен прекратить выполнение. После того как процесс перезапустится, он перечитает конфигурационные файлы и внесенные в них изменения вступят в силу. Аналогичным образом, когда вы выходите командой logout из терминала, сигнал HUP рассылается всем процессам, которые были запущены на этом терминале. Это значит, что все процессы которые выполнялись на этом терминале будут остановлены. Иногда вы можете запустить процесс и захотеть его остановки, до того, как он завершится в штатном режиме. Например в приливе вдохновения вы можете решить, что вам необходимо посмотреть имена всех файлов в вашей системе. Это можно сделать написав следующее: find / -print | more Однако, вероятнее всего вы быстро утомитесь нажимать пробел и поймете, что на самом деле вам вовсе не хочется в данный момент просматривать список всех ваших файлов. Другими словами вам захочется подать прерывающий сигнал. Один из путей сделать это, нажать на терминале «Ctrl+C»: ^C То, что на вашем терминале появится приглашение интерпретатора команд, свидетельствует о том, что посланный вами сигнал INT сработал. Опять выполните ту же самую команду find, но в этот раз пошлите сигнал 3, нажав на клавиатуре «Ctrl+\»: ^ Теперь, перед тем, как вы получите приглашение интерпретатора команд, вы увидите следующее сообщение:

http://www.freebsd.bip.ru/freebsd_basics2.shtml (3 of 7)10.04.2004 17:25:52

Daemon News Russia

Quit (core dumped) Выход (сохранен «посмертный» дамп памяти) Если вы воспользуйтесь комбинацией Alt+F1, что бы посмотреть сообщения системной консоли, там вы увидите сообщение примерно следующего содержания: Nov 19 13:50:09 genisis /kernel: pid 806 (find), uid 1001: exited on signal 3 Nov 19 13:50:09 genisis /kernel: pid 807 (more), uid 1001: exited on signal 3 (core dumped) Если теперь вы вернетесь на предыдущий терминал и посмотрите список файлов в каталоге, среди прочего вы обязательно найдете файл more.core. Обычно вам никогда не потребуется посылать процессу сигнал номер 3, если конечно вы не программист, который знает как использовать отладчик ядра. Я включил этот пример в статью для того что бы показать разницу между сигналами 2 и 3. Удаляйте core-файлы без опаски. Межпроцессное взаимодействие (в оригинале используется термин «межпроцессные коммуникации» – прим. переводчика) практически ни чем не отличается от любых других видов коммуникаций: вы или какой-нибудь процесс можете послать сигнал в надежде на определенный результат, однако процесс получающий этот сигнал распоряжается с ним «на свое усмотрение». Помните, что процессы – это всего лишь запущенные программы. Большинство программ используют процедуры «обработки сигналов», применяемые для того, что бы решать что и как надо делать с поступившими сигналами в данный момент времени. Обычно, если вы посылаете процессу какой-нибудь из сигналов останавливающих выполнение программы, процедура обработки сигналов этого процесса пытается корректно закрыть все используемые программой файлы для предотвращения потери данных после останова. В некоторых случаях обработчик сигналов может просто проигнорировать поступивший процессу сигнал и отклонить запрос на останов программы (обычно так поступают зависшие программы, которые на момент поступления сигнала уже не работают должным образом – прим. переводчика). Однако (к счастью – прим. переводчика), некоторые сигналы не могут быть проигнорированы программой. Это например девятый и семнадцатый сигналы. Представим, что вы хотите остановить процесс который вы некоторое время назад запустили. Воспользовавшись связкой команды ps и grep, вы узнали PID процесса, а затем при помощи команды kill послали ему сигнал TERM, а затем решили проверить остановлен ли процесс повторив команду ps: ps | grep processname kill PID ps | grep processname Однако при повторе команды ps вы опять обнаружили этот процесс в списке, а это значит, что по каким-то причинам сигнал TERM был проигнорирован. Любая из этих двух команд исправит ситуацию: kill -9 PID или kill -KILL PID Если вы теперь повторите команду ps, то вы должны будете получить пустой список, что свидетельствует об успешном останове процесса. Вы можете спросить: «Почему бы всегда не посылать процессам сигнал 9, если он не может быть игнорирован?». Дело в том, что сигнал 9 на самом деле просто «убивает» процесс, не давая ему времени на корректное сохранение всех обработанных данных, что означает, что при применении сигнала 9 могут быть потеряны данные (никогда не применяйте сигнал номер 9 без крайней на то необходимости – прим. переводчика). Намного лучше попробовать для начала послать процессу какой-нибудь другой сигнал останова, а сигнал номер 9 иметь «про запас» для процессов упрямо игнорирующих другие сигналы. Не забывайте так же, что если вы работаете от имени обычного пользователя, то вы сможете посылать сигналы только процессам, владельцем которых http://www.freebsd.bip.ru/freebsd_basics2.shtml (4 of 7)10.04.2004 17:25:52

Daemon News Russia

являетесь. Суперпользователь root может посылать сигналы любым процессам. Может возникнуть ситуация, когда вам захочется остановить все принадлежащие вам процессы. Результаты этого действия будут отличаться в зависимости от того находитесь ли вы в системе как обычный или как суперпользователь. Продемонстрируем это. Войдите в систему на другом терминале и введите команду ps: ps PID 316 957 317 915 941 942 913 946 951 955

TT v0 v0 v1 v2 v2 v2 v3 v3 v3 v3

STAT TIME COMMAND Ss 0:00.39 -csh (csh) R+ 0:00.00 ps Is+ 0:00.20 -csh (csh) Is 0:00.12 -csh (csh) I+ 0:00.09 lynx Z+ 0:00.00 (lynx) Is 0:00.12 -csh (csh) I+ 0:00.01 /bin/sh /usr/X11R6/bin/startx I+ 0:00.04 xinit /home/genisis/.xinitrc -S 0:03.00 xfce

В этом примере я вошел в систему с терминалов 0, 1, 2, 3. Я запустил команду ps с консоли (терминал 0 по совместительству выполняет роль системной консоли – прим. переводчика), на первом терминале запущена оболочка командного процессора, на втором – запущен браузер lynx и на третьем у меня запущен сеанс X Window. И так я являюсь владельцем 10 процессов. Если в команде kill я воспользуюсь идентификатором процесса (PID) равным -1, я отправлю указанный в команде сигнал всем принадлежащим мне процессам. так попробуем послать сигнал TERM таким образом: kill -1 А теперь проверим результаты, воспользовавшись командой ps: ps PID 316 969 317 915 913

TT v0 v0 v1 v2 v3

STAT TIME COMMAND Ss 0:00.41 -csh (csh) R+ 0:00.00 ps Ss+ 0:00.21 -csh (csh) Is+ 0:00.12 -csh (csh) Is+ 0:00.12 -csh (csh)

Обратите внимание – мы остановили шесть процессов, однако четыре оставшиеся проигнорировали сигнал TERM. Давайте будем более агрессивными: kill -KILL -1 ps PID TT STAT TIME COMMAND 317 v1 Ss 0:00.22 -csh (csh) 995 v1 R+ 0:00.00 ps Если вы «пройдетесь» по тем четырем терминалам, на которых выполнялись ваши программы, то на трех из них вы увидите приглашение войти в систему. Последняя команда kill уничтожила все процессы, за исключением своего родительского процесса, т.е. командного интерпретатора C shell, в котором вы набрали команду kill (так произошло потому, что структура процессов в UNIX древовидна и каждый процесс должен иметь своего родителя – прим. переводчика). Обратите внимание, что если вы допустите ошибку при наборе команды и напишете:

http://www.freebsd.bip.ru/freebsd_basics2.shtml (5 of 7)10.04.2004 17:25:52

Daemon News Russia

kill 1 вместо kill -1 то вы получите сообщение об ошибке: 1: Operation not permitted 1: Действие запрещено Дело в том, что -1 это специальный идентификатор процесса, который обозначает «все процессы», а 1 это идентификатор процесса с именем init. Только суперпользователь может останавливать процесс init. К тому же суперпользователь должен останавливать процесс init только при условии того, что он знает что делает. Теперь давайте поглядим что произойдет, если мы повторим то же упражнение, но только от имени суперпользователя. Для начала на моем тестовом компьютере (где выполняются следующие программы: apache, mysql, squid, nfs и т.п.) я выполню команду ps: ps -acux USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND genisis 1050 0.0 0.2 428 244 v0 R+ 4:08PM 0:00.00 ps root 1 0.0 0.2 532 304 ?? ILs 5:10AM 0:00.04 init root 2 0.0 0.0 0 0 ?? DL 5:10AM 0:00.03 pagedaemon root 3 0.0 0.0 0 0 ?? DL 5:10AM 0:00.00 vmdaemon root 4 0.0 0.0 0 0 ?? DL 5:10AM 0:00.04 bufdaemon root 5 0.0 0.0 0 0 ?? DL 5:10AM 0:02.62 syncer root 27 0.0 2.0 70780 2540 ?? ILs 5:10AM 0:00.08 mount_mfs root 30 0.0 0.1 208 92 ?? Is 5:10AM 0:00.00 adjkerntz root 110 0.0 0.3 536 368 ?? Ss 10:10AM 0:00.22 dhclient root 163 0.0 0.5 904 608 ?? Ss 10:10AM 0:00.19 syslogd daemon 166 0.0 0.4 916 556 ?? Is 10:10AM 0:00.01 portmap root 171 0.0 0.3 504 320 ?? Is 10:10AM 0:00.00 mountd root 173 0.0 0.1 360 172 ?? Is 10:10AM 0:00.01 nfsd root 175 0.0 0.1 352 164 ?? I 10:10AM 0:00.00 nfsd root 176 0.0 0.1 352 164 ?? I 10:10AM 0:00.00 nfsd root 177 0.0 0.1 352 164 ?? I 10:10AM 0:00.00 nfsd root 178 0.0 0.1 352 164 ?? I 10:10AM 0:00.00 nfsd root 181 0.0 0.5 263052 576 ?? Is 10:10AM 0:00.00 rpc.statd root 197 0.0 0.6 1028 764 ?? Is 10:10AM 0:00.02 inetd root 199 0.0 0.6 956 700 ?? Ss 10:10AM 0:00.19 cron root 202 0.0 1.0 1424 1216 ?? Is 10:10AM 0:00.20 sendmail root 227 0.0 0.4 876 488 ?? Is 10:10AM 0:00.00 moused root 261 0.0 1.4 2068 1704 ?? Ss 10:10AM 0:00.98 httpd root 275 0.0 0.4 620 448 con- I+ 10:10AM 0:00.02 sh root 293 0.0 0.4 624 452 con- I+ 10:10AM 0:00.01 sh mysql 303 0.0 1.4 10896 1796 con- S+ 10:10AM 0:00.43 mysqld nobody 305 0.0 4.7 6580 5928 con- S+ 10:10AM 0:05.42 squid nobody 308 0.0 1.4 2092 1704 ?? I 10:10AM 0:00.00 httpd nobody 309 0.0 1.4 2092 1704 ?? I 10:10AM 0:00.00 httpd nobody 310 0.0 1.4 2092 1704 ?? I 10:10AM 0:00.00 httpd nobody 311 0.0 1.4 2092 1704 ?? I 10:10AM 0:00.00 httpd nobody 312 0.0 1.4 2092 1704 ?? I 10:10AM 0:00.00 httpd genisis 317 0.0 0.8 1336 960 v1 Is+ 10:10AM 0:00.24 csh root 320 0.0 0.5 920 628 v4 Is+ 10:10AM 0:00.02 getty root 321 0.0 0.5 920 628 v5 Is+ 10:10AM 0:00.01 getty root 322 0.0 0.5 920 628 v6 Is+ 10:10AM 0:00.01 getty root 323 0.0 0.5 920 628 v7 Is+ 10:10AM 0:00.01 getty nobody 324 0.0 0.3 832 348 ?? Is 10:10AM 0:00.01 unlinkd http://www.freebsd.bip.ru/freebsd_basics2.shtml (6 of 7)10.04.2004 17:25:52

Daemon News Russia

root 992 0.0 0.5 920 628 v2 Is+ 3:46PM 0:00.01 getty root 993 0.0 0.5 920 628 v3 Is+ 3:46PM 0:00.01 getty genisis 994 0.0 0.8 1336 956 v0 Ss 3:46PM 0:00.14 csh root 0 0.0 0.0 0 0 ?? DLs 5:10AM 0:00.02 swapper Теперь я пошлю сигнал KILL специальному идентификатору -1 от имени суперпользователя: $ su Password: # kill -9 -1 Эта команда произвела на меня большее впечатление чем предыдущая, поскольку я был выкинут из командного интерпретатора в котором только что набрал команду kill. После того, как я опять вошел в систему, я определил масштаб разрушений следующим образом: ps -acux USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND genisis 1070 0.0 0.2 396 244 v0 R+ 4:11PM 0:00.00 ps root 1 0.0 0.2 532 304 ?? ILs 5:10AM 0:00.05 init root 2 0.0 0.0 0 0 ?? DL 5:10AM 0:00.03 pagedaemon root 3 0.0 0.0 0 0 ?? DL 5:10AM 0:00.00 vmdaemon root 4 0.0 0.0 0 0 ?? DL 5:10AM 0:00.05 bufdaemon root 5 0.0 0.0 0 0 ?? DL 5:10AM 0:02.65 syncer root 1059 0.0 0.5 920 628 v3 Is+ 4:10PM 0:00.01 getty root 1060 0.0 0.5 920 628 v2 Is+ 4:10PM 0:00.01 getty root 1061 0.0 0.5 920 628 v7 Is+ 4:10PM 0:00.01 getty root 1062 0.0 0.5 920 628 v6 Is+ 4:10PM 0:00.01 getty root 1063 0.0 0.5 920 628 v5 Is+ 4:10PM 0:00.01 getty genisis 1064 0.0 0.8 1336 956 v0 Ss 4:10PM 0:00.12 csh root 1065 0.0 0.5 920 628 v4 Is+ 4:10PM 0:00.01 getty root 1066 0.0 0.5 920 628 v1 Is+ 4:10PM 0:00.01 getty root 0 0.0 0.0 0 0 ?? DLs 5:10AM 0:00.02 swapper Когда суперпользователь посылает сигнал идентификатору -1, он рассылается всем процессам за исключением системных. Если этим сигналом будет KILL, то вы наслушаетесь жалоб от простых пользователей, у которых будут потеряны все открытые ими, но не сохраненные файлы данных. Это является одной из причин, по которой только суперпользователь может выполнять команды reboot и halt. Когда одна из этих команд запускается на выполнение, то всем процессам рассылается сигнал TERM, для того что бы дать им шанс для сохранения данных, поскольку за сигналом TERM, через некоторое время, следует сигнал KILL, который посылается для того что бы гарантированно уничтожить все процессы. В следующей статье я продолжу эту тему, заострив внимание на процессах init и getty. Автор: Станислав Лапшанский (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/freebsd_basics2.shtml (7 of 7)10.04.2004 17:25:52

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Интеграция Антивируса Касперского с почтовой системой новости

В этой статье мы рассмотрим два метода установки AVP, точнее KAV (Kaspersky AntiVirus), на вашем почтовом сервере. Первый – это классический метод установки, который, скорее всего, описан в вашем руководстве по антивирусу. Второй – это новый метод интеграции, о его особенностях мы поговорим немного позже. Я не буду рассматривать установку, полагая, что AVP вместе с программой AVPKeeper уже установлены на вашем компьютере. Тем более что обычно при установке KAV проблем не возникает. Самое главное – правильно настроить антивирус, иначе «программа будет делать то, что вы ей сказали, но не то, что вы хотите». Напомню, что настройки программы KAV находятся в файле /opt/AVP/AvpUnix.ini, а настройки программы AVPKeeper – в файле /opt/AVP/kavkeeper/kavkeeper.ini. Классический метод Программа AVPKeeper (kavkeeper) предназначена для обнаружения и удаления вирусов в почтовых сообщениях. Существуют версии данной программы для почтовых систем sendmail, qmail, postfix. Программа sendmail является классическим агентом доставки почты (MTA – Mail Transfer Agent), поэтому в статье будет рассмотрена именно эта программа. Немаловажным фактором для рассмотрения sendmail является фактор предпочтения – я почему-то предпочитаю использовать sendmail. Программа AVPKeeper может работать в двух режимах: локальном и глобальном. В локальном режиме проверяются только входящие сообщения, которые должны получить пользователи нашего почтового сервера. В глобальном режиме проверяются также и исходящие сообщения, которые наши пользователи отправляют в Internet или другим пользователям. Для небольших сетей рекомендуется использовать локальный режим – он работает быстрее и стабильнее. Итак, перейдем к настройке. Скопируйте каталог /opt/AVP/kavkeeper/sendmail-cf каталог /usr/ share. Теперь выполните следующую команду: m4 kav_loc.mc > /etc/sendmail.cf Данная команда настраивает программу AVPKeeper для работы в локальном режиме. Если вам нужен глобальный режим, введите команду: m4 kav_glb.mc > /etc/sendmail.cf Обе эти команды нужно вводить, находясь в каталоге /usr/share/sendmail-cf/cf. Перед выполнением данных команд скопируйте куда-нибудь старый файл /etc/sendmail.cf, чтобы можно было его восстановить в случае некорректной интеграции. Листинги файлов kav_loc.mc и kav_glb.mc приводить не буду - вы можете просмотреть их в любой момент на своей машине. Если вас по каким-либо причинам не устраивают стандартные http://www.freebsd.bip.ru/kav.shtml (1 of 6)10.04.2004 17:25:54

Daemon News Russia

файлы kav_loc.mc и kav_glb.mc, а интегрировать KAV с sendmail все-таки нужно, укажу, какие строки нужны для совместной работы KAV и sendmail (локальный режим): dnl define(`KAVKEEPER_MAILER',`/usr/local/bin/kavkeeper') dnl define(`KAVKEEPER_CONFIG',`/etc/kavkeeper.ini') dnl define(`KAVKEEPER_LOCAL_MAILER',`mail.local') ... FEATURE(local_kav) Естественно, что для нормальной работы нужно правильно указать путь к программе kavkeeper. Скорее всего, у вас программа kavkeeper будет установлена в каталог /opt/AVP/kavkeeper/. Для работы глобального режима используются строки: dnl define(`KAVKEEPER_CONFIG',`/etc/kavkeeper.ini') define(`KAV_LOCAL_HACK') dnl define(`confDEF_USER_ID',`kavuser:kavuser') dnl define(`confRUN_AS_USER',`kavuser') dnl define(`KAVKEEPER_MAILER_FLAGS', `APhnu9') ... MAILER(kavkeeper) Функция KAV_LOCAL_HACK необходима для проверки локальной почты. После этого нужно перезагрузить sendmail командой: /etc/init.d/sendmail restart Теперь осталось проверить корректность выполненных вами действий. Данную проверку нужно производить только в случае, если вы выбрали глобальный режим работы программы AVPKeeper! В противном случае при проверке вы получите совсем не то, что ожидали. Введите команду: sendmail -bt Вы должны увидеть примерно следующее сообщение: ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) Enter > В ответ на приглашение (>) введите набор правил (3,0) и какой-нибудь адрес. Желательно, чтобы адрес действительно существовал. Я использовал адрес [email protected]. 3,0 [email protected] В результате на экране вы должны увидеть примно это: > canonify input: evg @ localhost . localdomain Canonify2 input: evg < @ localhost . localdomain > Canonify2 returns: evg < @ localhost . localdomain . > canonify returns: evg < @ localhost . localdomain . > http://www.freebsd.bip.ru/kav.shtml (2 of 6)10.04.2004 17:25:54

Daemon News Russia

parse input: evg < @ localhost . localdomain . > Parse0 input: evg < @ localhost . localdomain . > Parse0 returns: evg < @ localhost . localdomain . > ParseLocal input: evg < @ localhost . localdomain . > ParseLocal returns: $# kavkeeper $@ localhost . localdomain . KAV $: evg @ localhost . localdomain . KAV parse returns: $# kavkeeper $@ localhost . localdomain . KAV $: evg @ localhost . localdomain . KAV Разберемся, что же здесь происходит. Программа sendmail преобразует имя evg@localhost. localdomain в имя [email protected] и использует для доставки сообщения локальный почтовый агент kavkeeper. Теперь посмотрим, что же сделает sendmail с адресом [email protected]. Не нужно быть гением, чтобы догадаться, что сейчас произойдет обратное преобразование, то есть адрес [email protected] будет преобразован в адрес [email protected] (или просто egv), что наглядно отображено в листинге: > canonify input: evg @ localhost . localdomain . KAV Canonify2 input: evg < @ localhost . localdomain . KAV > localhost.localdomain.KAV: Name server timeout Canonify2 returns: evg < @ localhost . localdomain . KAV > canonify returns: evg < @ localhost . localdomain . KAV > == Ruleset 3,0 (3) status 75 parse input: evg < @ localhost . localdomain . KAV > Parse0 input: evg < @ localhost . localdomain . KAV > Parse0 returns: evg < @ localhost . localdomain . KAV > ParseLocal input: evg < @ localhost . localdomain . KAV > ParseLocal returns: evg < @ localhost . localdomain . > Parse1 input: evg < @ localhost . localdomain . > Parse1 returns: $# local $: evg parse returns: $# local $: evg > Как видите страшное имя [email protected] благополучно преобразовалось в имя локального пользователя. Если бы мы отправляли почту не локальному пользователю, а пользователю другой системы (например, пользователю [email protected]), наше сообщение было бы передано агенту доставки. Обычно это esmtp. Я думаю, что теории вполне достаточно, посмотрим, как KAV справляется с возложенной на него задачей. Для этого проведем небольшой эксперимент. В качестве «подопытного кролика» нам будет нужен какой-нибудь вирус, с этим проблем, надеюсь, не будет. Введите команду: uuencode /root/virus.exe virus.exe | mail -s Virus user@localhost С помощью данной команды мы отправим письмо нашему локальному пользователю, содержащее вирус. После отправления письма программа AVPKeeper проверит (точнее передаст письмо для проверки программе kavdaemon, которая должна загружаться автоматически при запуске системы) его и, обнаружив вирус, сообщит об этом. Прежде всего, будет отправлено сообщение отправителю (пользователь root), что в его сообщении обнаружен вирус, затем об этом будет уведомлен администратор системы (root), после этого будет отправлено третье сообщение – адресату (пользователь evg), о том, что отправитель пытался отправить сообщение с вирусом. Последовательность отправления сообщений и их содержание зависит от настроек программы AVPKeeper. Настройки программы можно изменить, http://www.freebsd.bip.ru/kav.shtml (3 of 6)10.04.2004 17:25:54

Daemon News Russia

отредактировав файл kavkeeper.ini. На этом описание классического метода «сопряжения» антивируса KAV (AVP) с почтовой системой можно считать завершенным. Самое время перейти к описанию совершенно нового метода интеграции. Новый метод интеграции Новый метод интеграции заключается в настройке двух очередей для почтовых сообщений. Одна очередь будет в /var/spool/mqueue, а вторая /var/spool/mqueue1. Напомню, что обычно используется одна почтовая очередь. Приступим к настройке. Остановите sendmail и создайте новый подкаталог для почты в каталоге / var/spool: mkdir mqueue1 chown root.mail mqueue1 В уже существующий файл sendmail.mc добавляем строки: define(`QUEUE_DIR',`/var/spool/mqueue1') MAILER(kavkeeper2) После чего нужно создать файл sendmail.cf: m4 sendmail.mc > /etc/sendmail.lis.cf В файле конфигурации kavkeeper добавьте строку: sendmail=/usr/sbin/sendmail -oi -C/etc/sendmail.cf -i -f$f -- $u Запускать sendmail для работы с двумя очередями нужно так: /sbin/sendmail -bd -C /etc/sendmail.lis.cf /sbin/sendmail -q10m -C /etc/sendmail.cf Для большей определенности приведу листинг mc-файла: divert(-1) dnl This is the macro config file used to generate the /etc/sendmail.cf .... dnl work. include(`../m4/cf.m4') define(`confDEF_USER_ID',``8:12'') OSTYPE(`linux') undefine(`UUCP_RELAY') undefine(`BITNET_RELAY') define(`confAUTO_REBUILD') define(`confTO_CONNECT', `1m') http://www.freebsd.bip.ru/kav.shtml (4 of 6)10.04.2004 17:25:54

Daemon News Russia

define(`confTRY_NULL_MX_LIST',true) define(`confDONT_PROBE_INTERFACES',true) define(`QUEUE_DIR',`/var/spool/mqueue1') define(`KAVKEEPER_MAILER',`/opt/AVP/kavkeeper/kavkeeper') define(`KAVKEEPER_CONFIG',`/etc/kavkeeper.ini') FEATURE(`smrsh',`/usr/sbin/smrsh') FEATURE(mailertable) FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable') FEATURE(redirect) FEATURE(always_add_domain) FEATURE(use_cw_file) MAILER(smtp) MAILER(kavkeeper2) FEATURE(`access_db') FEATURE(`blacklist_recipients') ... Вам также потребуется еще один файл – kavkeeper2.m4. Его листинг ниже: PUSHDIVERT(-1) ifdef(`KAVKEEPER_MAILER_PATH',, `ifdef(`KAVKEEPER_MAILER', `define(`KAVKEEPER_MAILER_PATH', KAVKEEPER_MAILER)', `define(`KAVKEEPER_MAILER_PATH', /opt/AVP/kavkeeper/kavkeeper)')') ifdef(`KAVKEEPER_MAILER_FLAGS',, `define(`KAVKEEPER_MAILER_FLAGS', `ASPhnu9')') define(`KAV_CONF_ARG', ifdef(`KAVKEEPER_CONFIG', `-c KAVKEEPER_CONFIG', `')) ifdef(`KAVKEEPER_MAILER_ARGS',, `define(`KAVKEEPER_MAILER_ARGS', `kavkeeper -s $f -r $u -x $h -m sendmail KAV_CONF_ARG')') POPDIVERT VERSIONID(`@(#)kavkeeper.m4 1.0 (Kaspersky Lab) 20/03/2000') Mkavkeeper, P=KAVKEEPER_MAILER_PATH, F=CONCAT(`DFM', KAVKEEPER_MAILER_FLAGS), S=0, R=0, T=DNS/RFC822/X-Unix, ifdef(`KAVKEEPER_MAILER_MAX', `M=KAVKEEPER_MAILER_MAX, ') A=KAVKEEPER_MAILER_ARGS LOCAL_RULE_0 R$* $#kavkeeper $@$1 $:$1 На этом описание метода можно считать завершенным. Какой из методов использовать – решать вам. При выборе метода руководствуйтесь простым правилом: чтобы работал :). Если будут какие-нибудь вопросы, пишите, постараюсь ответить.

http://www.freebsd.bip.ru/kav.shtml (5 of 6)10.04.2004 17:25:54

Daemon News Russia

Автор: Денис Колисниченко (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/kav.shtml (6 of 6)10.04.2004 17:25:54

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Руководство по настройке аутентификации пользователей посредством LDAP новости

Введение. В крупных организациях увеличение числа пользователей неизбежно ведет к проблемам администрирования их учетных записей. В этом случае возникает необходимость внедрения единой системы аутентификации. Один из вариантов такой системы может быть основан на использовании сервера LDAP. Для построения такой системы на FreeBSD (FreeBSD-4.4-Release) мною было использовано следующее свободно-распространяемое программное обеспечение: ● ● ● ● ● ●

OpenLDAP-2.0.23 - http://www.openldap.org/ OpenSSH-2.3.0 http://www.openssh.org/ Samba-2.2.4 - http://www.samba.org/ Squid-2.4-Stable6 - http://www.squid-cache.org/ Qpopper-4.0.4 - www.eudora.com/qpopper pam_ldap-1.5.0 - http://www.padl.com/

Перед началом заранее хочу сделать несколько важных замечаний и предостережений. Вопервых, предлагаемое руководство относится к жанру quick start , и приведенные здесь варианты конфигурации не являются идеальным решением проблемы аутентификации, это лишь модель работы системы аутентификации, построенной на LDAP. Во-вторых, проводить изменения в pam.conf нужно осторожно, поскольку возможна ситуация при которой ни один пользователь просто не сможет пройти аутентификацию ни одним методом. И, наконец, втретьих, после установки сервера LDAP, следует убедиться, что библиотеки liblber .* и libldap.* находятся в каталогах /usr/lib, а файлы disptmpl.h, lber*.h, ldap*.h и srchpref.h располагаются в каталоге /usr/include. Это избавит вас от ошибок компиляции и линкования клиентского программного обеспечения. Настройка сервера LDAP. В качестве сервера LDAP будем настраивать OpenLDAP-2.0.23. Все конфигурационные файлы OpenLDAP находятся в каталоге /usr/local/etc/openldap. Здесь, прежде всего, интересен файл slapd.conf, в котором указываются настройки сервера. В нашем случае этот файл должен состоять как минимум из следующих 8-ми строк: include /usr/local/etc/openldap/schema/core.schema include /usr/local/etc/openldap/schema/cosine.schema include /usr/local/etc/openldap/schema/nis.schema http://www.freebsd.bip.ru/ldap.shtml (1 of 8)10.04.2004 17:25:56

Daemon News Russia

database ldbm suffix "dc=testdomain,dc=ru" rootdn "cn=Admin,dc=testdomain,dc=ru" rootpw adminpassword directory /usr/local/var/openldap-ldbm Первые три строки подключают схемы LDAP. Формат и структура данных, хранимые в LDAP, определяются схемами. Порядок подключения схем важен, поскольку схема может использовать значения, определенные в другой схеме. Далее указывается тип базы данных, в которой по-настоящему и хранится информация, в нашем случае это ldbm. Suffix определяет основу для формирования запроса, корень, к которому мы обращаемся при запросе к базе банных LDAP. Suffix выбирается при настройке LDAP-сервера и обычно является доменным именем организации. Затем следует запись об администраторе (rootdn) и его пароль (rootpw). Необходимо заметить, что учетная запись администратора действует даже в тех случаях, когда в самой базе данных административная запись отсутствует или содержит пароль, отличающийся от указанного в rootpw. Последняя строка определяет каталог, в котором будут находиться файлы базы данных LDBM. В завершении, в slapd.conf полезно добавить правила, разграничивающие доступ к ресурсам LDAP, например такие: access to dn=".*,dc=testdomain,dc=ru" attr=userPassword by dn="cn=Admin,dc=testdomain,dc=ru" write by self write by * auth access to dn=".*,dc=testdomain,dc=ru" by dn="cn=Admin,dc=testdomain,dc=ru" write by self write by * read

http://www.freebsd.bip.ru/ldap.shtml (2 of 8)10.04.2004 17:25:56

Daemon News Russia

Запускаем сервер LDAP: /usr/local/libexec/slapd Теперь можно заполнять базу данных сервера LDAP. Для этого создадим текстовый файл, например, testdomain.ldif, содержащий записи о нашей организации, администраторе, группе пользователей и, собственно, одном из пользователей: dn: dc=testdomain,dc=ru objectclass: dcObject objectclass: organization o: testdomain dc: testdomain dn: cn=Admin,dc=testdomain,dc=ru objectclass: organizationalRole cn: Admin dn: ou=Users,dc=testdomain,dc=ru ou: Users objectclass: top objectclass: organizationalUnit dn: uid=zmey,ou=Users,dc=testdomain,dc=ru uid: zmey cn: Mikhail E. Zakharov objectclass: account objectclass: posixAccount objectclass: top objectclass: uidObject loginshell: /bin/tcsh http://www.freebsd.bip.ru/ldap.shtml (3 of 8)10.04.2004 17:25:56

Daemon News Russia

uidnumber: 1000 gidnumber: 1000 homedirectory: /home/zmey gecos: Mikhail E. Zakharov,,,, userpassword: topsecret Итак, OpenLDAP настроен. Удостоверимся, что все работает правильно, проверим записи, находящиеся на сервере: ldapsearch -x -b "dc=testdomain,dc=ru" "(objectclass=*)" Ответ сервера должен быть следующим: version: 2 # # filter: (objectclass=*) # requesting: ALL # # Admin, testdomain, ru dn: cn=Admin,dc=testdomain,dc=ru objectClass: organizationalRole cn: Admin # Users, testdomain, ru dn: ou=Users,dc=testdomain,dc=ru ou: Users objectClass: top objectClass: organizationalUnit

http://www.freebsd.bip.ru/ldap.shtml (4 of 8)10.04.2004 17:25:56

Daemon News Russia

# zmey, Users, testdomain, ru dn: uid=zmey,ou=Users,dc=testdomain,dc=ru uid: zmey cn: Mikhail E. Zakharov objectClass: account objectClass: posixAccount objectClass: top objectClass: uidObject loginShell: /bin/tcsh uidNumber: 1000 gidNumber: 1000 homeDirectory: /home/zmey gecos: Mikhail E. Zakharov,,,, # search result search: 2 result: 0 Success # numResponses: 4 # numEntries: 3

Клиенты LDAP. Для обеспечения функционирования сетевых служб на FreeBSD обычно устанавливаются свободно-распространяемые варианты программного обеспечения. Большинство этих программ не могут напрямую взаимодействовать с LDAP, зато поддерживают возможность проведения аутентификации через модули PAM. Поскольку в нашем случае, таких программ большинство, с них и начнем. Прежде всего, модуль PAM, которым мы будем пользоваться, называется pam_ldap. В http://www.freebsd.bip.ru/ldap.shtml (5 of 8)10.04.2004 17:25:56

Daemon News Russia

дистрибутив FreeBSD этот модуль не входит, поэтому его необходимо установить, используя систему портов или скомпилировать вручную, забрав с сервера http://www.padl.com/. Модуль pam_ldap ищет конфигурационный файл ldap.conf. Обычно этот файл должен располагается в каталоге /etc, но иногда, в зависимости от опций, указанных при компиляции, может находиться и в /usr/local/etc/. Наш /etc/ldap.conf будет содержать лишь 3 строки: BASE dc=testdomain,dc=ru HOST ldap_server pam_password clear Здесь BASE база для поиска в дереве LDAP; HOST IP-адрес или имя хоста, на котором работает LDAP-сервер; pam_password указывает, что будут использоваться незашифрованные пароли. Это сделано для простоты, на практике разумнее пользоваться шифрованными паролями. Однако, в этом случае необходимо, чтобы пароли, хранимые в LDAP, тоже были шифрованы. Разумеется, и запись rootpw в файле /usr/local/etc/slapd.conf, тоже рекомендуется зашифровать. Для генерации паролей, в том числе и шифрованных, можно воспользоваться утилитой ldappasswd из комплекта OpenLDAP. Основной конфигурационный файл PAM находится в каталоге /etc и называется pam.conf. Он состоит из правил описывающих методы проведения аутентификации для различных сервисов. Для наших сервисов записи в pam.conf могут быть такими: Первое, что мы хотим, это организовать доступ по login: login auth sufficient pam_ldap.so login auth sufficient pam_skey.so login auth requisite pam_cleartext_pass_ok.so login auth required pam_unix.so try_first_pass login account required pam_unix.so login password required pam_permit.so login session required pam_permit.so Для FTP записи выглядят проще:

http://www.freebsd.bip.ru/ldap.shtml (6 of 8)10.04.2004 17:25:56

Daemon News Russia

ftpd auth sufficient pam_ldap.so ftpd auth sufficient pam_skey.so ftpd auth requisite pam_cleartext_pass_ok.so ftpd auth required pam_unix.so try_first_pass OpenSSH потребуются следующие правила: sshd auth sufficient pam_ldap.so sshd auth sufficient pam_skey.so sshd auth required pam_unix.so try_first_pass sshd account required pam_unix.so sshd password required pam_permit.so sshd session required pam_permit.so Конфигурация Samba (в нашем случае Samba 2.2.4) требует дополнительных комментариев. Вопервых, хотя Samba и имеет возможность работать с LDAP-серверами напрямую, но этот механизм еще не отработан, и поэтому мы будем использовать PAM. Во-вторых, исходные тексты должны быть скомпилированы с поддержкой PAM. По умолчанию, эта опция отключена, поэтому компилируем и устанавливаем программу так: ./configure --with-pam make make install В /etc/pam.conf требуется наличие следующих строк: samba auth required pam_ldap.so samba session required pam_ldap.so Самая простая конфигурация у Qpopper 4.4. В /etc/pam.conf добавляем: pop3 auth sufficient pam_ldap.so Кроме того, Qpopper тоже должен быть скомпилирован с поддержкой PAM: ./configure --with-pam http://www.freebsd.bip.ru/ldap.shtml (7 of 8)10.04.2004 17:25:56

Daemon News Russia

make make install Единственный продукт, который работает серверами с LDAP без помощи PAM, это SQUID. Для аутентификации через LDAP Squid используется собственный модуль squid_ldap_auth, представляющий собой внешнюю программу. В дистрибутиве Squid, его исходные тексты находится в каталоге auth_modules/LDAP. Скомпилировав и установив squid_ldap_auth, можно приступать к настройке Squid. В squid.conf указываем, что необходимо использовать наш модуль аутентификации: authenticate_program /usr/local/squid/libexec/squid/squid_ldap_auth -b dc=testdomain,dc=ru ldap_server Здесь b dc=testdomain,dc=ru - суффикс LDAP, ldap_server IP-адрес или DNS- имя сервера LDAP. Путь usr/local/squid/libexec/squid/ взят по умолчанию. Далее для проверки, добавим в squid.conf простейший ACL: acl password proxy_auth REQUIRED http_access allow password http_access deny all Автор: Михаил Захаров (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/ldap.shtml (8 of 8)10.04.2004 17:25:56

Daemon News Russia

новости

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь

Accept-фильтры Два года назад во FreeBSD появились accept-фильтры. Они позволяют не передавать в accept() пришедшее соединение до тех пор, пока не придёт первый пакет с данными (фильтр dataready) или заголовок HTTP-запроса (фильтр httpready). Использование фильтров в Apache (а в нём они поддерживаются, начиная с версии 1.3.14) позволяет уменьшить число процессов. В серверах, использующих select(), poll() или kqueue(), например, в thttpd-2.22, фильтры уменьшают число открытых файлов. И наконец, в обоих случаях accept-фильтры уменьшают число переключений контекста процесса. Идея accept-фильтра принадлежит одному из основателей Yahoo! Дэвиду Фило (David Filo). В Yahoo! использовался фильтр для запросов HTTP. 15.06.2000 Alfred Perlstein внёс во FreeBSD 5.0-CURRENT код этого фильтра и добавил фильтр для первого пакета с данными. Для включения фильтра нужно было с помощью setsockopt(2) установить опцию SO_DELAYACCEPT или SO_HTTPACCEPT для сокета, который принимал соединения. Но этот вариант просуществовал не больше трёх суток – уже 18.06.2002 он был удалён и 20.06.2000 во FreeBSD 5.0-CURRENT появилась новая, более общая реализация accept-фильтров. Теперь фильтры включались с помощью опции SO_ACCEPTFILTER, вместе с которой передавался указатель на структуру, описывающую фильтр. Для современных фильтров в этой структуре нужно передать только имя фильтра – dataready или httpready. В отличие от первой реализации, каждый фильтр нужно явно указать в конфигурации ядра: options ACCEPT_FILTER_DATA options ACCEPT_FILTER_HTTP или же загрузить как ядерный модуль. Именно это вариант появился 28.07.2000 во FreeBSD 4.1STABLE. Подробнее об использовании accept-фильтрах можно прочитать в setsockopt(2), accf_data(9) и accf_http(9). Надо заметить, что первоначальная реализация фильтра httpready была далека от суровой реальности, так как поддерживала только протоколы HTTP/1.x и не поддерживала протокол HTTP/0.9 – если первый пришедший пакет начинался со строки "GET ", то фильтр не передавал соединение в очередь завершённых соединений до тех пор, пока не находил во входном потоке пустую строку. Однако 6.09.2000 во FreeBSD 5.0-CURRENT и 20.09.2000 во FreeBSD 4.1-STABLE (практически перед самым 4.1.1-RELEASE) фильтр httpready был переписан – при получении запроса, непохожего на "^(GET|HEAD) .+ HTTP/1.x", соединение сразу же помещается в очередь завершённых соединений. Оба фильтра – dataready и httpready не предполагали никаких таймаутов, но при переполнении очереди входящих соединений вызывалась функция sodropablereq(), которая удаляла старые незавершённые соединения или же соединения, завершённые с точки зрения TCP/IP, но незавершённые с точки зрения фильтра. После того, как во FreeBSD 5.0-CURRENT и 4.4-STABLE появился syncache, с accept-фильтрами http://www.freebsd.bip.ru/accept_filters.shtml (1 of 2)10.04.2004 17:25:58

Daemon News Russia

стали возникать некоторые проблемы. Первая из них, по-видимому, наблюдалась только с httpready фильтром – после того, как соединение было передано accept()'у, следующий за ним read() ничего не мог прочитать. Эта ошибка была исправлена 21.12.2001 во FreeBSD 5.0CURRENT и 27.12.2001 во FreeBSD 4.5-PRERELEASE. Недавно разработчики обнаружили, что сервер, использующий accept-фильтры, может быть легко подвержен DoS-атаке. Как уже говорилось, до syncache избытком незавершённых соединений занималась функция sodropablereq(), но в syncache эта функция не используется и в результате очередь легко переполняется соединениями, незавершёнными с точки зрения фильтра. 26.04.2002 ошибка была исправлена во FreeBSD 5.0-CURRENT, а 1.05.2002 – во FreeBSD 4.5-STABLE. Была идея на основе accept-фильтров реализовать ядерный http-сервер, который бы возвращал в accept() те запросы, которые не мог обработать сам, но она, по-видимому, так и осталась нереализованной. Надо заметить, что accept-фильтры – не единственное решение отложить accept() до прихода данных. В Linux 2.4.x можно установить опцию SO_DEFER_ACCEPT, а в Windows NT 3.51 появилась функция AcceptEx(). (C) Igor Sysoev http://sysoev.ru (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/accept_filters.shtml (2 of 2)10.04.2004 17:25:58

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь VMware2 и образы компактных дисков новости

Летом 2001 я захотел поэкспериментировать с загрузочными CD-дисками, в частности, с загрузочным диском NT. Делать это на физических CD-RW дисках не хотелось и я решил воспользоваться VMware. Однако, существовавшая в то время VMware2 не умела работать с образами CD, поэтому я научил устройство vn изображать из себя некое подобие CD-ROM. Способ это применим только для FreeBSD 4.x, так как в FreeBSD 5 уже нет устройства vn. Тем не менее, этот способ пока не потерял актуальности, так как, хотя VMware3 умеет работать с образами CD, но под FreeBSD она на данный момент не работает. Для того, чтобы VMware воспринимало устройство vn как CD-ROM, нужно добавить несколько ioctl. Прежде всего нужен ioctl CDIOCGETVOL, возвращающий уровень громкости. С его помощью VMware проверяет, является ли устройство CD-ROM'ом. В ответ vn возвращает нулевую громкость. Затем VMware вызывает ioctl CDIOCALLOW, который разрешает использовать кнопку eject. В ответ нужно просто вернуть 0. Надо заметить, что этот ioctl вызывается достаточно часто. Для того, что бы с диском можно было работать и загружаться, нужно ещё два ioctl. Первый, CDIOREADTOCHEADER, возвращает таблицу трэков (TOC), vn возвращает TOC c одним треком. Второй, CDIOREADTOCENTRY, возвращает начало запрашиваемого трека. С помощью CDIOREADTOCENTRY VMware запрашивает два трека – 0 и 1 в формате LBA. vn в обоих случаях возвращает начало трека, равное нулю. NT так же запрашивает два трека – 1 и последний – 170, но в формате MSF. Для первого трека vn возвращет начало трека – 2 секунды, а для последнего – длину всего диска в формате MSF. Кроме того, NT периодически вызывает ioctl CDIOCREADSUBCHANNEL, возвращающий информацию о подканале – vn возвращает CD_AS_NO_STATUS, говорящий о том, что трек не содержит аудио. На всякий случай также реализован ioctl CDIOCPREVENT, блокирующий кнопку eject, хотя я не видел, чтобы он использовался. Для того, что бы vn всё это умел, нужно наложить патч: # patch -d /usr/src < patch.vn_cd.txt и пересобрать модуль vn.ko и vnconfig. Для сборки модуля нужно перейти в каталог, где лежат объектные файлы ядра и запустить make: # cd /usr/src/sys/compile/KERNEL # make Переустанавливать всё не нужно, достаточно только скопировать модуль:

http://www.freebsd.bip.ru/vmware2.shtml (1 of 2)10.04.2004 17:25:59

Daemon News Russia

# cp modules/usr/src/sys/modules/vn/vn.ko /modules/vn.ko Для сборки vnconfig нужно перейти в каталог /usr/src/usr.sbin/vnconfig и запустить make: # cd /usr/src/usr.sbin/vnconfig # CFLAGS="${CFLAGS} -I /usr/src/sys/" make obj all Собранный vnconfig можно установить: # make install После всех этих действий в vnconfig появится новый флаг cdrom: # vnconfig -s cdrom -c vn0c image.iso и с помощью cdcontrol можно попробовать прочитать TOC имиджа: # cdcontrol -f /dev/vn0c info Starting track = 1, ending track = 1, TOC size = 18 bytes В этой строке отображается информация, которую cdcontrol получает через ioctl CDIOREADTOCHEADER. Однако, в отличие от реального диска, в нашем случае cdcontrol не может показать начало и длину треков, так как вместо реализованного ioctl CDIOREADTOCENTRY, он использует нереализованный ioctl CDIOREADTOCENTRYS, возвращающий начало нескольких треков. В настройках VMware нужно указать, что CD-ROM находиться в устройстве /dev/vn0c. (C) Igor Sysoev http://sysoev.ru (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/vmware2.shtml (2 of 2)10.04.2004 17:25:59

Daemon News Russia

1 of 4

http://www.freebsd.bip.ru/dostup.shtml

\\ О

\\

\\

\\

\\

я

\\

ч ,

. ,

.

,

Apache xinetd,

-

Squid,

. а

ч

а

tcpd

. hosts.allow hosts.deny Ц

. ,

,

. :х

. ,

ALL.

ALL:ALL (

.

1).

1.

/etc/hosts.allow

http:ALL ftp:ALL ALL:main.dhsilabs.com 1 http ftp main.dhsilabs.com.

, .

,

(

)

. а

ч

я

ч /etc/mail/access (

access.db, sendmail. SMTP. | | :

access). ,

(

)

:

а

localhost.localdomain RELAY localhost RELAY 127.0.0.1 OK [email protected] REJECT spamworld.com ERROR:"550 Access denied" 192.168.1 RELAY host.mydomain.ru REJECT mydomain.ru RELAY -

SMTP [email protected],

spamworld.com. Ш 192.168.1.*.

SMTP OK

RELAY

, (

.

Ц , mydomain.ru Ц host.

,

(

sendmail DNS).

)

,

,

REJECT.

-

Access denied. ( : ERROR:D.S.N:Message,

ERROR

, ).

D.S.N Ц

ERROR RFC 1893.

,

:

10.04.2004 18:25

Daemon News Russia

2 of 4

http://www.freebsd.bip.ru/dostup.shtml

makemap hash /etc/mail/access < /etc/mail/access makemap. sendmail а

!

ч

а

а :

1. access.conf 2. console.perms 3. limits.conf Э

Ц

/etc/security. .

-

(

),

, .

,

(

)

(

). access.conf ш

:

ь

:

: Д +╗,

-╗,

.

,

а

, ,

.

user@host. host.

user, ALL Ц



.

)

,

( (

) ).

, IP-

,

,

(

(

), ).

LOCAL. EXCEPT ( (

)

) :

-:ALL EXCEPT den user serge:LOCAL .dsoft.com +:reboot shutdown:LOCAL +:root:tty1 -:root:LOCAL -:den user serge:LOCAL EXCEPT host1 ,

(EXCEPT) den, user, serge

.dsoft.com. . reboot .

shutdown root root den, user, serge

Ц

,

tty1, (

).

host1.

C

. .

-

,

,

Ц

, ,

.

,

.

,

.

,

:

,

reboot. ,

-

,

,

, .

root

tty1 ( .

,

), -:root:ALL /etc/securetty,

. Ц console.perms. Э , (

).

,

.

10.04.2004 18:25

Daemon News Russia

3 of 4

http://www.freebsd.bip.ru/dostup.shtml

: pam_console_apply -r . . limits.conf

,

,

. ,

, /etc/securetty, ,

root.

, root. root

.

(

)

securetty.

,

su (super user).

,

root,

,

root.

limits.conf .

:

(domain) 1. 2. 3.

:

. *╗.

@╗ .

Ц

:

(soft)

(hard).

,

, .

,

.

Э

(item) 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.

:

core Ц data Ц fsize Ц memlock Ц nofile Ц stack Ц cpu Ц nproc Ц as Ц maxlogins Ц locks Ц

core ( ( ) ( )

)

( (

. user. Э

) (

)

)

,

user soft nproc 50 user hard nproc 60 ( ,

dialup1 , .Э

30

Ц

50),

dialup2.

. 30

. 15

:

@dialup1 - maxlogins 14 @dialup2 - maxlogins 14 15 (maxlogins 14 Ц

). :

Too many logins for 'dialup1' а

ч

а

FTP ProFTPD

Limit, , FTP, Anonymous.

( Limit:

)

.

Limit

/etc/proftpd.conf. , Directory

DenyAll

10.04.2004 18:25

Daemon News Russia

4 of 4

http://www.freebsd.bip.ru/dostup.shtml

AllowUser user1 MaxClients 1 Deny from 123.141.181.191 Deny from 192.168.2.

Limit user1,

,

Ц

(1). 123.141.181.191,

192.168.2. AllowAll DenyUser

DenyAll

AllowUser

Ц

.

: (c) 2001-2002 Daemon News Russia

10.04.2004 18:25

Daemon News Russia

новости \\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Как вернуть мышь из четвёртого измерения с плюсом

21.03.2000 в FreeBSD 4.0-STABLE появилась поддержка двух моделей мышей – A4 Tech 4D Mouse и A4 Tech 4D+ Mouse. После этого на некоторых материнских платах перестали работать мышки MS IntelliMouse и подобные ей Logitech'евские мышки с колёсиком. Я сталкивался с подобным на платах, где в качестве Super I/O контроллера используются чипы фирмы ITE. Например, на Gigabyte BX2000+ установлен ITE IT8687A или R, а на моей ASUS CUSL2-C используется Winbond W83627F-AW, хотя в документации на фотографии вместо неё стоит ITE IT88703-A. Возможно, кто-то у кого-то чего-то лицензировал. Так вот, если до изменения мышь на таких платах распознавалась как IntelliMouse: /kernel: psm0: irq 12 on atkbdc0 /kernel: psm0: model IntelliMouse, device ID 3 то после изменения – вот так: /kernel: psm0: irq 12 on atkbdc0 /kernel: psm0: model 4D+ Mouse, device ID 8 Но самое неприятное заключается в том, что неправильно опознанная мышь начинает буйствовать. Для укрощения зверька нужно приложить патч: patch -d /usr/src < patch.4d_mouse.txt указать в конфигурации ядра options

PSM_DISABLE_4D_MOUSE

и пересобрать ядро. Мышь станет шёлковой. (C) Igor Sysoev http://sysoev.ru/

http://www.freebsd.bip.ru/4d.shtml10.04.2004 17:26:02

(c) 2001-2002 Daemon News Russia

Daemon News Russia

новости

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь

Оболочки Программы-оболочки. Интерпретатор bash Командный язык bash 1. 2. 3. 4. 5. 6. 7. 8.

Переменные. Массивы. Специальные переменные. Арифметические выражения Подстановка переменных. Подстановка значений. Управляющие структуры. Циклы. Подоболочки

Программы-оболочки. В той статье мы поговорим о неотъемлемой части пользовательского интерфейса Linux – о программах-оболочках. Именно программа-оболочка запускается после регистрации пользователя в системе. Программы-оболочки часто называют командными интерпретаторами, потому что они обрабатывают (интерпретируют) команды, введенные пользователем. Во времена DOS этим занимался файл C:\command.com. В файле /etc/passwd для каждого пользователя указывается, какую оболочку он будет использовать. root:x:0:0:root:/root:/bin/bash den:x:501:501:Denis:/home/den:/bin/bash Из листинга видно, что оба пользователя используют оболочку /bin/bash. Оболочка, как правило, указывается в последнем поле файла passwd. Список всех установленных в системе программ-оболочек содержится в файле /etc/shells. У меня он выглядит так: Листинг 1. /bin/sh /bin/bash /bin/ash /bin/bsh /bin/tcsh /bin/csh /bin/zsh http://www.freebsd.bip.ru/obolochki.shtml (1 of 11)10.04.2004 17:26:05

Daemon News Russia

На любой Unix-системе, даже на самой старой, вы можете увидеть, по крайней мере, два интерпретатора из этого списка: sh, csh. Названия, как вы догадались, исходят от слова shell – оболочка. Csh – это оболочка, использующая командный язык, напоминающий язык программирования C. В ОС Linux по умолчанию используется оболочка bash (Bourne Again Shell). Bash является более «продвинутой» версией обыкновенной оболочки sh. Все оболочки выполняют одну и туже функцию – интерпретируют команды пользователя. Например, когда вы вводите команду $ program -s /etc/passwd Интерпретатор запустит программу program и передаст ей два (точнее три)параметра: первый – это -s, второй – это /etc/passwd. А что делать с этими параметрами разберется сама программа. Я что-то говорит о третьем параметре? Существует еще один так называемый нулевой параметр. Этот параметр содержит полное имя файла программы. Например, если наша программа находится в каталоге /bin, то нулевой параметр будет содержать значение /bin/ program. Обратите внимание на знак доллара возле команды. Это признак того, что сейчас мы работаем как обыкновенный пользователь. Если мы зарегистрируемся как пользователь root (суперпользователь), то знак доллара измениться на решетку – #. Отличием каждой программы-оболочки является ее командный язык. Вот поэтому одни пользователи предпочитают использовать bash, а другие – tcsh. Командные языки некоторых оболочек очень похожи, например, sh и bash, csh и tsch. Командный язык используется для создания сценариев. Сценарий – это последовательность команд, которую должен выполнить интерпретатор команд. Пример простейшего сценария (командный язык bash): Листинг 2. #!/bin/bash echo -n "Enter your name" read name echo "Hello, $name" Для определенности скажем, что мы сохранили этот сценарий под именем script1. Чтобы мы могли выполнить этот сценарий нужно сделать этот файл исполнимым (например, с помощью команды chmod 550 ./script1) и ввести команду (я предполагаю, что вы создали этот файл в текущем каталоге): ./script1 При запуске сценария программа-оболочка определяет, какую программу нужно запустить для обработки этого сценария. После этого интерпретатор запускает нужную программу и передает ей имя файла сценария в качестве параметра. В нашем случае интерпретатор выполнит команду (первая строка листинга 2): /bin/bash ./script1 При этом не имеет значения, какой интерпретатор сейчас активен: будет запущена программа, указанная в первой строке сценария. Вы можете указать также и опции программы-оболочки: #!/usr/bin/myshell -option

http://www.freebsd.bip.ru/obolochki.shtml (2 of 11)10.04.2004 17:26:05

Daemon News Russia

При запуске сценария, в первой строке которого стоит такая команда, интерпретатор выполнит команду: /usr/bin/myshwll -option Обратите внимание на первую строку сценария script1 #!/bin/bash Это указание программы для обработки этого сценария. Если же вы напишете # !/bin/bash то это будет уже обыкновенным комментарием и система не сможет выполнить ваш сценарий, поскольку не будет знать, какую программу-оболочку нужно использовать. В лучшем случае, если сейчас активным является интерпретатор, на языке которого написан сценарий, файл всетаки будет выполнен, а в другом случае вы получите сообщение об ошибке. Например, если вы написали сценарий на bash, не указав (или неправильно указав) интерпретатор, и пытаетесь выполнить его при запущенном интерпретаторе csh, то получите сообщение о синтаксической ошибке. Интерпретатор bash В этой статье я рассмотрю оболочку bash, которая стандартна для большинства систем. Однако сам командный язык подробно разобран не будет из-за его объемности. Итак, начнем по порядку с регистрации пользователя. Как я уже отмечал, после успешной аутентификации пользователя, запускается программа-оболочка (в нашем случае это /bin/bash). При запуске оболочки выполняются некоторые действия. Эти действия определены в файле ~/.bash_profile (см. листинг 3). Листинг 3. # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/bin BASH_ENV=$HOME/.bashrc USERNAME="user" HISTIGNORE=" [ ]*:&:bg:fg" export USERNAME BASH_ENV PATH HISTIGNORE clear Файл .bash_profile представляет собой обыкновенный сценарий. Теперь разберемся, какие действия выполняет этот сценарий. В этом файле определяются переменные окружения и программы, которые должны запускаться автоматически. В листинге 3 сначала проверяется существование файла .bashrc и, если он существует, интерпретатор выполняет его. Файл . bashrc рассмотрим немного позже. Затем устанавливаются переменные окружения: PATH, BASH_ENV, USERNAME, HISTIGNORE. Первая задает путь для поиска программ, вторая определяет среду интерпретатора (файл .bashrc), третья устанавливает имя пользователя, а последняя относится к истории команд, введенных пользователем. Затем переменные экспортируются. Дело в том, что переменные локальны в рамках сценария. При экспорте переменных их значение будет доступно порожденным процессам. Например, создайте такие два сценария (см. листинги 4 и 5).

http://www.freebsd.bip.ru/obolochki.shtml (3 of 11)10.04.2004 17:26:05

Daemon News Russia

Листинг 4. #!/bin/bash MYVAR="My var" export MYVAR ./listing5 Листинг 5 #!/bin/bash echo "$MYVAR" Запустите сценарий ./listing4. Он экспортирует переменную MYVAR и запустит сценарий listing5, которые выведет значение переменной MYVAR («My var») на экран. Теперь закомментируйте строку: export MYVAR в сценарии listing4 и запустите его снова. На экране значение переменной MYVAR не будет отображено. Теперь вернемся к файлу .bashrc, а потом перейдем к командному языку оболочки bash. Листинг 6 # .bashrc # User specific aliases and functions alias rm='rm -i' alias mv='mv -i' alias cp='cp -i' alias s='cd ..' alias d='ls' alias p='cd -' # Need for a xterm & co if we don't make a -ls [ -n $DISPLAY ] && { [ -f /etc/profile.d/color_ls.sh ] && source /etc/profile.d/color_ls.sh export XAUTHORITY=$HOME/.Xauthority } # Read first /etc/inputrc if the variable is not defined, and after the /etc/inputrc # include the ~/.inputrc [ -z $INPUTRC ] && export INPUTRC=/etc/inputrc # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi Здесь задаются определенные установки. В основном данные установки необходимы для удобства пользователя. Например, определяются псевдонимы команд (alias). Оболочка bash использует еще один командный файл – .bash_logout. В этом файле указываются действия, которые нужно выполнить при выходе из интерпретатора, то есть выхода из системы.

http://www.freebsd.bip.ru/obolochki.shtml (4 of 11)10.04.2004 17:26:05

Daemon News Russia

Командный язык bash. Переменные. Обязательным атрибутом переменной в любом языке программирования является тип значения переменной. В командном языке bash все переменные текстовые. Например, если вы присваиваете переменной значение A=23, то значением переменной будет строка из двух сиволов – «23». Имя переменной должно начинаться с буквы и может состоять из латинских букв, цифр, знака подчеркивания. Оператор присваивания в bash выглядит так: =значение. Например, NAME=Ivan Если нужно присвоить значение, содержащее пробелы, нужно использовать кавычки: NAME="Ivan Ivanov" Обращение к значению переменной выполняется с помощью знака доллара перед именем переменной: echo "NAME" echo "$NAME" Первая команда выведет на экран слово NAME, а вторая – значение переменной NAME (Ivan Ivanov). Если значение переменной может содержать пробелы, имя переменной нужно заключить в кавычки. Например, NAME="Ivan Ivanov" echo $NAME echo "$NAME" Первая команда echo выведет на экран слово Ivan, а вторая – Ivan Ivanov. Интерпретатор bash использует такие метасимволы, имеющее для него особое значение: * ? ; & ( ) | ^ < > cd \netboot C:> nb8390 Boot from Network (Y/N) ?Y BOOTP/TFTP/NFS bootstrap loader

ESC for menu

Searching for adapter.. WD8013EBT base 0x0300, memory 0x000D8000, addr 00:40:01:43:26:66 Searching for server... Теперь моя бездисковая система пытается найти машину, которая выступает в качестве сервера загрузки. Запомните строку addr выше, позже она вам понадобится. Перезагрузите бездисковую систему и измените ваши файлы config.sys и autoexec.bat , чтобы они выполняли эти действия автоматически. Может быть, в меню. Если вы запускали nb3c509. com , а не nb8390.com , то выводимые сообщения будут точно такими же. Если вы получили сообщение ``No adapter found '' после >Searching for adapter... , проверьте правильность задания параметров времени компиляции в файле Makefile . 5. Настройка возможности системам загружаться по сети (на сервере) Проверьте, что в файле /etc/inetd.conf имеются записи для tftp и bootps. Ниже показаны мои записи: tftp dgram udp wait nobody /usr/libexec/tftpd tftpd /tftpboot # # Additions by who ever you are bootps dgram udp wait root /usr/libexec/bootpd bootpd /etc/bootptab

Если вы изменили файл /etc/inetd.conf , то пошлите программе inetd сигнал HUP . Для этого найдите ID процесса inetd командой ps -ax | grep inetd | grep -v grep . После этого пошлите ему сигнал HUP. Это делается командой kill -HUP . Это заставит inetd повторно прочесть свой конфигурационный файл. Не забыли ли вы строку с addr из вывода начального загрузчика на бездисковой системе? Как вы можете угадать, теперь он вам требуется. Добавьте запись в файл /etc/bootptab (может быть, вам потребуется его создать). Она должна иметь следующий вид: altair:\ :ht=ether:\ http://www.freebsd.bip.ru/diskless-x.shtml (2 of 4)10.04.2004 17:26:11

Daemon News Russia

:ha=004001432666:\ :sm=255.255.255.0:\ :hn:\ :ds=199.246.76.1:\ :ip=199.246.76.2:\ :gw=199.246.76.1:\ :vm=rfc1048: Строки имеют такой смысл: altair

название бездисковой системы без доменной части.

ht=ether

тип оборудования 'ethernet'.

ha=004001432666 аппаратный адрес (число, записанное ранее). sm=255.255.255.0 маска подсети. hn

указывает серверу посылать клиенту его имя хоста.

ds=199.246.76.1

указывает клиенту расположение сервера имен.

ip=199.246.76.2

указывает клиенту его IP-адрес.

gw=199.246.76.1

указывает клиенту маршрутизатор по умолчанию.

vm=...

просто оставьте это так. Note: Проверьте правильность настройки IP-адресов, адреса выше являются моими.

Создайте каталог '/tftpboot', в котором будут располагаться конфигурационные файлы для бездисковых систем, которые будет обслуживать сервер. Эти файлы будут именоваться 'cfg.', где является IP-адресом бездисковой системы. Конфигурационный файл для 'altair' будет носить название /tftpboot/cfg.199.246.76.2. Его содержимое: rootfs 199.246.76.1:/DiskLess/rootfs/altair hostname altair.kcis.com Строка hostname altair.kcis.com просто указывает бездисковой системе ее полное доменное имя. Строка rootfs 199.246.76.1:/DiskLess/rootfs/altair указывает бездисковой системе местоположение ее корневой файловой системы, монтируемой по протоколу NFS. Note: Корневая файловая система, монтируемая через NFS, будет монтироваться в режиме только для чтения. Дерево для бездисковой системы может быть смонтировано повторно с правом на выполнение операций чтения и записи, если это потребуется. Я использую мой никому не нужный 386DX-40 в качестве выделенного X-терминала. Дерево для 'altair' имеет такой вид: / /bin /etc /tmp /sbin /dev /dev/fd /usr /var /var/run Вот реальный список файлов:

http://www.freebsd.bip.ru/diskless-x.shtml (3 of 4)10.04.2004 17:26:11

Daemon News Russia

-r-xr-xr-x -r-xr-xr-x -rw-r--r--rw-r--r--rw-r--r--rw-r--r--r-x------r-xr-xr-x -r-xr-xr-x -r-xr-xr-x -r-xr-xr-x -r-xr-xr-x -r-xr-xr-x

1 1 1 1 1 1 1 1 1 1 1 1 1

root root root root root root bin bin bin bin root root root

wheel bin wheel wheel wheel bin bin bin bin bin bin wheel wheel

779984 299008 499 1411 157 1569 151552 176128 110592 135168 73728 1992 24419

Dec Dec Dec Dec Dec Dec Jun Jun Jun Jun Dec Jun Jun

11 12 15 11 15 15 10 10 10 10 13 10 10

23:44 00:22 15:54 23:19 15:42 15:26 1995 1995 1995 1995 22:38 1995 1995

./kernel ./bin/sh ./etc/rc ./etc/ttys ./etc/hosts ./etc/XF86Config.altair ./sbin/init ./sbin/ifconfig ./sbin/mount_nfs ./sbin/reboot ./sbin/mount ./dev/MAKEDEV.local ./dev/MAKEDEV

Не забудьте запустить команду MAKEDEV all в каталоге dev . Мой /etc/rc для altair выглядит вот так: #!/bin/sh # PATH=/bin:/ export PATH # # configure the localhost /sbin/ifconfig lo0 127.0.0.1 # # configure the ethernet card /sbin/ifconfig ed0 199.246.76.2 netmask 0xffffff00 # # mount the root filesystem via NFS /sbin/mount antares:/DiskLess/rootfs/altair / # # mount the /usr filesystem via NFS /sbin/mount antares:/DiskLess/usr /usr # /usr/X11R6/bin/XF86_SVGA -query antares -xf86config /etc/XF86Config.altair > /dev/null 2>&1 # # Reboot after X exits /sbin/reboot # # We blew up.... exit 1 Автор: Jerry Kendall (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/diskless-x.shtml (4 of 4)10.04.2004 17:26:11

Daemon News Russia

новости

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь

Звук во FreeBSD Если вы еще не читали раздел руководства администратора, посвященный мультимедиа (см. http://www.freebsd.org/handbook/multimedia.html), вы будете приятно удивлены. Недавно он был полностью переработан и теперь это действительно то место, где в первую очередь можно выяснить, поддерживается ли ваша звуковая плата, и, если да, то как заставить ее работать под FreeBSD. В моей машине установлен SoundBlaster PCI 128, поэтому для того что бы включить поддержку звука, мне надо добавить в файл конфигурации ядра только устройство pcm. Поскольку я собираюсь пользоваться DVD проигрывателем, я добавлю в конфигурацию пункт оптимизирующий ядро для выполнения мультимедиа-приложений. Мультимедийные программы так же используют нечто, называемое LDT, строка для включения которого может быть, а может и не быть в вашем конфигурационном файле. Если ее не было – добавьте. Вот три строки, которые я добавил в файл конфигурации ядра: options CPU_ENABLE_SSE #используется при декодировании DVD options USER_LDT #используется разнообразными приложениями device pcm #используется для поддержки SoundBlaster Затем я перекомпилировал ядро используя инструкции содержащиеся в соответствующей главе руководства администратора (см. http://www.freebsd.org/handbook/kernelconfig-building.html). Вот несколько значений sysctl-переменных, которые могут повысить производительность мультимедийных операций. Две из них имеют атрибут «только чтение», поэтому вы должны поместить их в файле /boot/loader.conf: hw.ata.atapi_dma="1" hw.ata.ata_dma="1" Следующие четыре переменные можно поместить в файл /etc/sysctl.conf. Обратите внимание, что в отличие от предыдущего файла, вы не должны использовать кавычки: kern.ipc.shmmax=67108864 kern.ipc.shmall=32768 hw.snd.pcm0.vchans=4 hw.snd.maxautovchans=4 Если ваша звуковая карта не использует устройство pcm, не выключайте в файл /etc/sysctl.conf строку содержащую эту аббревиатуру. Если вы используете pcm1 вместо pcm0, измените 0 на 1 в соответствующей строке. Так же обратите внимание, что вам придется перезагрузиться что бы изменения вошли в силу.

http://www.freebsd.bip.ru/soundinbsd.shtml (1 of 6)10.04.2004 17:26:13

Daemon News Russia

Первое время, после того, как я собрал новое ядро, при монтировании компакт диска я получал странное сообщение. Вот оно: cd9660: /dev/acd0c: Device not configured Обычно это сообщение выводится, если приводе не установлен диск с данными. Однако в данном случае диск был. Поиск информации в списках рассылки показал, что такая ошибка происходит, если вы используете cvsup для обновления FreeBSD с версии 4.5 до версии 4.6, как и было в моем случае. Для решения возникшей проблемы, я обновил файл дискового устройства: cd /dev cp /usr/src/etc/MAKEDEV . rm acd* ./MAKEDEV acd0 Заодно я решил изменить права доступа к устройству CD-ROM, для того чтобы иметь возможность прослушивать аудио компакт-диски не только под аккаунтом суперпользователя, но и под обычным пользователем: chmod 666 /dev/acd0c Теперь я могу начать сборку приложений для работы со звуком. Я испробовал большинство приложений из audio раздела коллекции портов, и могу честно сказать, что для проигрывания звука трудно найти утилиту лучше чем xmms. Она поддерживает скины, хотя даже по умолчанию выглядит отлично. Для нее написана масса штепселей на любой вкус. Она умеет проигрывать mp3, mpeg, wav, shoutcast-файлы, а заодно и компакт диски, при этом используя CDDB сервера. Исчерпывающая документация описывающая использование всех этих возможностей находится на сайте программы http://www.xmms.org/. Так же на сайте можно найти скриншоты, штепсели и скины. Для инсталляции этой программы напечатайте: cd /usr/ports/audio/xmms make install clean Помимо этого я установил все штепсели к xmms имеющиеся в коллекции портов. Поскольку их очень много, я собрал их в список, где указал где находится штепсель, краткое описание того что он делает и где настраивается: Эти штепсели после установки конфигурируются в вкладке Audio I/O plug-ins диалога Preferences: /usr/ports/audio/xmms-a52dec #a52/a53 декодер /usr/ports/audio/xmms-bonk #bonk декодер /usr/ports/audio/xmms-crossfade #перетекание одной композиции в другую /usr/ports/audio/xmms-fc #декодер future composer файлов http://www.freebsd.bip.ru/soundinbsd.shtml (2 of 6)10.04.2004 17:26:13

Daemon News Russia

/usr/ports/audio/xmms-mad #позволяет использовать libmad /usr/ports/audio/xmms-musepack #mpegplus /usr/ports/audio/xmms-osssurround #поддержка surround звука /usr/ports/audio/xmms-shn #поддержка формата shorten /usr/ports/audio/xmms-sid #проигрыватель sid файлов /usr/ports/graphics/smpeg-xmms #поддержка mpeg видео /usr/ports/audio/xmms-sndfile #libsndfile файлы /usr/ports/audio/xmms-tfmx #поддержка формата tfmx Эти штепсели после инсталляции конфигурируют во вкладке Effect/General Plug-ins диалога Preferences: /usr/ports/x11-clocks/xmms-alarm #будильник /usr/ports/audio/xmms-crystality #ремастеринг mp3 звука /usr/ports/audio/xmms-ladspa #предоставляет ladspa интерфейс /usr/ports/audio/xmms-liveice #поддержка потока icecast /usr/ports/audio/xmms-pipe #управление плейером при помощи именованного канала /usr/ports/audio/xmms-quix3dn #эффекты объемного звука /usr/ports/audio/xmms-sndstretch #позволяет менять высоту или скорость проигрывания /usr/ports/audio/xmms-volnorm #выравниватель уровня сигнала Эти штепсели после установки конфигурируют во вкладке Visualization Plug-ins диалога Preferences: /usr/ports/graphics/xmms-blursk #размытый дисплей /usr/ports/graphics/xmms-finespectrum #спектрометр из тоненьких полосок /usr/ports/graphics/xmms-gforce #визуализатор музыки /usr/ports/graphics/xmms-goom #крутой визуализатор музыки /usr/ports/graphics/xmms-infinity #полноэкранный генератор визуальных эффектов /usr/ports/graphics/xmms-jess #удивительный визуализатор музыки /usr/ports/graphics/xmms-paranormal #анализатор спектра http://www.freebsd.bip.ru/soundinbsd.shtml (3 of 6)10.04.2004 17:26:13

Daemon News Russia

На момент написания статьи все порты имеющие отношение к xmms отлично устанавливались, за исключением: ●

● ● ● ●



/usr/ports/graphics/xmms-avi – отмечен как неработоспособный, но ведутся работы по устранению проблем /usr/ports/graphics/xmms-xvs – выдавал мне ошибку библиотеки libxml Исходные тексты /usr/ports/misc/xosd больше недоступны Я установил /usr/ports/graphics/xmms-iris, но при попытке его активации xmms падал Установив и /usr/ports/graphics/xmms-fishmatic, и /usr/ports/audio/xmms-gdancer, я так и не смог добиться ни показа рыбок, ни танцующих героев комиксов. Если у вас получится, сообщите мне пожалуйста как это сделать, что бы я смог рассказать об этом в следующей статье Наконец, я даже не стал пытаться установить /usr/ports/audio/xmms-kde, поскольку он предназначен для KDE2, а я использую KDE3. Тем более что мне нравится добавлять ярлыки прямо в мою панель, не используя меню KDE.

Давайте совершим краткую экскурсию по xmms. Вместо повторения стандартной информации о использовании xmms, которая хорошо задокументирована на сайте программы (см. http://www. xmms.org/), я дам вам несколько советов, которые помогут вам начать использовать xmms. Я буду исходить из предположения, что ваша звуковая карта и привод компакт-дисков установлены и работают корректно и FreeBSD может с ними взаимодействовать. Начнем с аудио компакт-дисков. При помощи вашего оконного менеджера запустите xmms и нажмите «Ctrl+P», при этом должно открыться окно настройки параметров программы («Preferences»). Вы увидите несколько различных вкладок для конфигурации штепселей, которые были описаны мною выше, и были установлены вами из коллекции портов. Во вкладке «Audio I/O» выделите пункт «CD Audio Player», а затем кликните на кнопку «Configure». Теперь во вкладке «Device» убедитесь, что устройство проигрывателя установлено на /dev/acd0c, а каталог на /cdrom. Если вы хотите сконфигурировать поддержку работы с CDDB сервером, щелкните на вкладку «CD Info». CDDB серверы, это великая вещь, они содержат информацию о содержимом аудио компакт-дисков, типа названия диска, имени артиста, а так же наименования всех композиций. Однако использование этих серверов требует подключения к Интернету, когда вы в первый раз загружаете компакт-диск в привод, для того что бы загрузить о нем информацию с сервера. Если вам нравится эта функция, щелкните «Use CDDB» и введите название вашего любимого сервера. Я использую freedb.freedb.org. Сохраните сделанные настройки, вставьте компакт-диск в привод, и дождитесь пока на нем погаснет лампочка. Затем кликните в xmms на значок выталкивания диска. Вместо того что бы отдать вам диск, xmms выдаст всплывающее окно, где вы сможете выбрать файлы для проигрывания. Идите в каталог /cdrom, там вы должны увидеть список всех композиций, записанных на диске. (Если список пуст, вы, вероятно, забыли поменять права доступа к файлу устройства /dev/acd0c.) Нажмите кнопку «Add all files in directory» (добавить все файлы содержащиеся в каталоге). Если у вас включена поддержка работы с CDDB сервером и этот музыкальный диск оказывается в вашем приводе первый раз, потерпите – процесс загрузки сведений о диске из Интернета занимает одну-две минуты. После того как файлы будут добавлены, нажмите «Close» – в плейлисте вы увидите названия выбранных композиций. Если плейлист не отображается, вызовите его нажав кнопку «PL». Если вам непонятны некоторые из пиктограмм xmms, то для того что бы ознакомиться со списком имеющихся функций, потратьте немного времени на чтение документации (см. http://www.xmms.org/documentation.html).

http://www.freebsd.bip.ru/soundinbsd.shtml (4 of 6)10.04.2004 17:26:13

Daemon News Russia

Xmms может проигрывать не только компакт-диски. У меня довольно специфические музыкальные пристрастия, а это означает, что компакт-диски, которые мне понравились, достаточно сложно приобрести. К счастью для меня, Интернет является великолепным источником для поиска новой музыки. Если бы не Интернет, то как бы иначе я узнал, что мне понравятся еврейское регги, ближневосточная попса, блюзы западной Индии, электронные ремиксы классической музыки и даже кое-что из готического рока? Свое свободное время я обычно трачу на поиск и прослушивание новых mp3, так что у меня всегда есть список компактдисков, который я беру с собой в музыкальный магазин. Я использую Mozilla, и, поскольку у меня уже установлен plugger (см. предыдущую статью), когда я нахожу интересный mp3, для его прослушивания мне достаточно просто кликнуть на ссылку «play». Вы можете настроить Mozilla таким образом, что бы для проигрывания mp3 использовалась xmms. Для этого в Mozilla откройте меню Edit -> Preferences -> Helper Applications -> New Type. Впишите в первые три поля строку «mp3», а в поле «Application to use» строку «/usr/X11R6/bin/xmms». Для хранения загруженных из Интернета mp3-файлов, я создал в моем домашнем каталоге подкаталог «mp3s». Для того что бы прослушивать эти файлы в xmms, я нажимаю комбинацию клавиш «Shift+L», после чего, в открывшемся диалоге делаю двойной щелчок на каталоге «mp3s». Если вы установили штепсель «xmms-liveice», вы можете прослушивать Shoutcast-поток. Сходите на сайт http://www.shoutcast.com/, отыщите что-нибудь интересное, и кликните на кнопку «Tune In!». Когда браузер спросит вас, что делать с файлом такого типа, выберите пункт «Open using an application», и в качестве приложения выберите «/usr/X11R6/bin/xmms». Когда вам надоест слушать, нажмите кнопку «Stop» на панели xmms. Если вам не нравится каждый раз указывать xmms в качестве обработчика для shoutcast-потока, откройте меню Edit -> Preferences -> Helper Applications -> New Type. Впишите какое-нибудь описание типа файла, в качестве расширения используйте «pls», тип MIME «audio/x-scpls» и в качестве используемого обработчика впишите «/usr/X11R6/bin/xmms». Теперь я смогу вообще никогда не пользоваться радио! Большое количество радиостанций можно найти на сайте http://www.icecast.org/. Большинство из этих станций используют для трансляции другой тип MIME-контента, так что вам опять придется вернуться в окошко Helper Applications. На этот раз расширение будет «mpu», а тип «audio/ mpegurl». Мне меньше повезло с этим типом вещания: некоторые станции звучали отлично, а некоторые издавали только щелчки. Если вы знаете как с этим бороться, напишите мне, и я включу рассказ об этом в следующую статью. Если во время прослушивания музыки вы хотите смотреть на красивые визуальные эффекты, нажмите «Ctrl+P», при этом откроется окно настройки параметров «Preferences», а затем кликните там на пункте «Visualization Plug-ins». Выделите любой из установленных штепселей, а затем нажмите кнопку «Enable Plug-in». Больше всех мне нравится штепсель «xmms-jess», на втором месте «xmms-gloom». Если вам надоело глядеть на цветомузыку, нажмите на кнопку «Enable Plug-In» еще раз, при этом штепсель будет отключен. Я заметил, что xmms виснет, если я включаю одновременно более одного цветомузыкального штепселя. Поскольку мы заговорили о видеоэффектах, давайте вспомним о скинах. При первом запуске xmms, в вашем домашнем каталоге, для хранения скинов, был создан подкаталог .xmms/Skins. Зайдите на http://www.xmms.org/skins.html, выберите понравившийся вам скин и загрузите его в каталог ~/.xmms/Skins. Для того что бы нацепить загруженный скин на xmms, нажмите «Alt+S», и http://www.freebsd.bip.ru/soundinbsd.shtml (5 of 6)10.04.2004 17:26:13

Daemon News Russia

выделите его в списке, при этом xmms немедленно поменяет свой облик. Еще одну очень хорошую коллекцию скинов я обнаружил на сайте http://www.spacefem.com/ xmms.shtml. Если вы сами начнете искать скины, то вы очень скоро обнаружите, что подавляющее большинство имеющихся в Интернете скинов предназначены для проигрывателя WinAmp. Не бойтесь, смело загружайте их в свой каталог ~/.xmms/Skins. Как будто по волшебству, они будут отлично работать и в xmms. Например я отыскал в Интернете популярный скин «mooamp» и теперь в моей xmms есть «короволайзер» (совершенно отвязный скин, между прочим – прим. переводчика). Пусть вас не испугают расширения у загружаемых скинов – в моем каталоге есть файлы с расширениями .tar.gz, zip, wsz и png, которые прекрасно вместе уживаются и работают. Так что, с легким сердцем потратьте время на исследование сайта http://winamp-skins.com/. Если вы установите штепсель «smpeg-xmms», то сможете смотреть mpeg-фильмы. Просто нажмите клавишу «l» («Эл») и выберите файл с фильмом. Этот штепсель может быть настроен на показ фильма в окне центрованном по экрану, в окне двойного размера, а так же в полноэкранном режиме. Для того что бы попробовать его в действии, сходите в Библиотеку Конгресса, там есть целый ряд фильмов познавательного характера (см. http://lcweb.loc.gov/rr/ mopic/ndlmps.html). Одной из моих излюбленных функций является будильник, который появляется при установке штепселя «xmms-alarm». Для того что бы задать время срабатывания будильника, нажмите «Ctrl +P», при этом откроется окно «Preferences», выберите там вкладку «Effect/General Plug-Ins», выделите «Alarm» и нажмите кнопку «Configure». Не устанавливайте громкость на 100%, если не хотите выпрыгнуть из кровати. Если вы не выберите список музыки в настройках штепселя, то вас разбудит какая-нибудь песня из основного плейлиста, выбранная наудачу. Для того что бы быть разбуженным с утра, просто убедитесь, что перед тем как лечь спать, вы запустили xmms. Для начала работы с xmms этого вполне должно хватить. В следующей статье я расскажу о проигрывании DVD-дисков, RealPlayer'е и некоторых других программах, призванных расширить мультимедийные возможности вашего компьютера Автор: Dru Lavigne Перевод: Станислав Лапшанский (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/soundinbsd.shtml (6 of 6)10.04.2004 17:26:13

Daemon News Russia

новости

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь

Мультимедиа в FreeBSD Недавно я купил новый компьютер и решил сделать из него мультимедийную рабочую станцию. Я совершенно измотал себя проводя слишком много времени за научной работой и сетевым администрированием, поэтому я осознал, что пришло время хорошенько покопаться в мире Flash'а, DVD и mp3. На первый взгляд FreeBSD не важно смотрится в качестве операционной системы для рабочей станции. Устоялось мнение, что FreeBSD это «непробиваемый» сервер, однако для того, что бы заставить работать на ней звуковую плату или Java-программу, вам нужно обладать знаниями доктора наук. Это чушь! Действительно, вам потребуется время для того, что бы собрать и сконфигурировать необходимые вам компоненты, но в этом и заключается прелесть FreeBSD. Ни одна компания не навяжет вам своего видения того, что должно быть у вас на экране и вы получите большое удовольствие от осознания того, что создали систему исключительно согласно своему представлению об удобстве и функциональности. Не говоря уже о буквально сотнях мультимедийных программ, некоторые из которых значительно опережают конкурирующие коммерческие решения. В этой статье я сконцентрирую свое внимание на установке последней версии системы из самых свежих исходников, а так же интегрировании Java, Flash и проигрывателя потокового мультимедиа-контента в браузер. Я выбрал медленный, методичный маршрут, так что следуйте за мной находя моменты, которые будут вам интересны. Поскольку я являюсь параноиком, я собираюсь провести установку с CD, а затем защитив систему брандмауэром от вторжений, воспользоваться утилитой cvsup для полного обновления дерева исходных кодов. Перед тем как начать установку я всегда делаю копии следующих фалов на дискету: ● ● ● ●

Файл конфигурации интерпретатора команд (~/.cshrc) Правила брандмауэра (/etc/ipfw.rules) Файл /etc/rc.conf исправленный в соответствии с моими предпочтениями Файл конфигурации программы cvsup, файл refuse, а так же файл /etc/make.conf.

Затем я инсталлирую систему с CD, при этом выбирая полную инсталляцию, включив в нее установку дерева портов (ports collection). Как только проинсталлирован каталог /bin, я нажимаю Alt+F4, что позволяет мне оказаться в интерпретаторе команд. Я монтирую гибкий диск с сохраненными файлами, и копирую первые три файла: mkdir /floppy mount -t msdos /dev/fd0 /floppy cd cp /floppy/.cshrc . source .cshrc (Теперь интерпретатор будет выдавать мне мое любимое приглашение) http://www.freebsd.bip.ru/mmediainbsd.shtml (1 of 9)10.04.2004 17:26:15

Daemon News Russia

cp /floppy/.cshrc /usr/share/skel/dot.cshrc (теперь и пользователи, которых я впоследствии создам будут использовать мое любимое приглашение) cp /floppy/ipfw.rules /etc/ cp /floppy/rc.conf /etc/ umount /floppy Обычно, ко времени, когда я размонтирую гибкий диск, инсталляция уже закончена, и инсталлятор предлагает мне провести послеинсталляционное конфигурирование системы. Затем я перезагружаюсь и просматриваю системные сообщения, для того, что бы убедиться, что приготовленные для брандмауэра правила успешно загрузились. Теперь, когда я защищен брандмауэром, надо сходить в Интернет и загрузить архивы последних исходных кодов, а также текущее дерево портов. Во-первых, я устанавливаю утилиту cvsupwithout-gui: su Password: cd /usr/ports/net/cvsup-without-gui make install clean После завершения инсталляции я опять подмонтирую гибкий диск и скопирую необходимые файлы: mount -t msdos /dev/fd0 /floppy cp /floppy/cvs-supfile ~ cp /floppy/make.conf /etc/ cd /usr/local/etc mkdir cvsup cd cvsup mkdir sup cd sup cp /floppy/refuse . umount /floppy Если вы до этого никогда не пользовались утилитой cvsup, вам следует предварительно ознакомиться с содержанием соответствующей главы руководства системного администратора FreeBSD (см. http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/cvsup.html). Когда я впервые познакомился с утилитой cvsup я был одновременно и напуган и заинтригован. Теперь я не могу без нее жить. Она дает мне уверенность ;-) в том, что моя система действительно находится в последнем обновленном состоянии и в отношении функциональности и в отношении безопасности, а так же что все мои приложения самые свежие и клевые. В руководстве администратора написано как правильно отредактировать для ваших нужд необходимые конфигурационные файлы утилиты cvsup. Вот, например, мои выглядят примерно так: more /root/cvs-supfile http://www.freebsd.bip.ru/mmediainbsd.shtml (2 of 9)10.04.2004 17:26:15

Daemon News Russia

*default host=cvsup.ca.freebsd.org *default base=/usr/local/etc/cvsup *default prefix=/usr *default tag=RELENG_4_6_2_RELEASE *default release=cvs delete use-rel-suffix compress src-all ports-all tag=. doc-all more /usr/local/etc/cvsup/sup/refuse doc/es* doc/fr* doc/ja* doc/ru* doc/zh* ports/biology ports/chinese ports/french ports/german ports/hebrew ports/japanese ports/korean ports/russian ports/ukranian ports/vietnamese more /etc/make.conf # $FreeBSD: src/etc/defaults/make.conf,v 1.97.2.67 # 2002/06/02 16:07:01 matusita Exp $ # CFLAGS= -O -pipe # # Для запрещения сборки некоторых частей базовой системы: NO_BIND= true # не собирать BIND NO_FORTRAN= true # не собирать g77 и соответствующие библиотеки NO_I4B= true # не собирать пакет isdn4bsd NO_LPR= true # не собирать lpr и соответствующие программы NOPROFILE= true # Не компилировать библиотеки для профайлера NOUUCP= true # не собирать uucp и подобные программы DOC_LANG= en_US.ISO8859-1 После того как вы отредактируете конфигурационные файлы, запустите cvsup, вот так: cvsup -g -L 2 ~/cvs-supfile В процессе работы cvsup будет выводить на экран информацию о том, что она делает. Во время первого запуска cvsup загрузит много изменений в каталог src, а это значит, что вам придется пересобрать операционную систему (make world). (Чем ты занимался в субботу? Да ничего особенного, просто переделывал мир…) Вам не придется выполнять перекомпиляцию системы после каждого запуска cvsup. Только если изменится каталог src. В однажды обновленной системе каталог src изменяется достаточно редко, обычно это происходит когда в безопасности системы находят брешь, которую надо закрыть. Руководство администратора содержит инструкции, как регулярно запускать cvsup используя cron. Я предпочитаю делать это вручную, http://www.freebsd.bip.ru/mmediainbsd.shtml (3 of 9)10.04.2004 17:26:15

Daemon News Russia

что бы глядя на вывод cvsup видеть изменился ли каталог src (в принципе, ничего не мешает посмотреть вывод в присланном cron'ом письме – прим. переводчика). Также утилита cvsup загружает последние изменения в коллекции портов. Ее содержимое меняется ежедневно, поэтому я ежедневно запускаю cvsup, для того, что бы иметь самые свежие версии портов. Затем я запускаю утилиту portupgrade (которая находится в разделе sysutils коллекции портов) что бы обновить уже установленные у меня порты (При этом следует иметь в виду, что иногда обновленное программное обеспечение работает не так как хотелось бы и вместо исправления мелких и незаметных для вас багов вы получаете неработоспособную в вашей конфигурации программу. Например недавно так было с русским апачем, а непосредственно сейчас есть проблемы с proftpd версии 1.2.6. Такие проблемы возникают достаточно редко для того, что бы можно было не замечать их на домашней системе. Но на сервере это недопустимо – прим. переводчика). Майкл Лукас написал отличную статью (см. http:// www.onlamp.com/pub/a/bsd/2001/11/29/Big_Scary_Daemons.html) посвященную использованию portupgrade. Она поможет вам начать работать с этой утилитой. Так как операционная система еще не обновлялась, мне придется ее перекомпилировать после запуска cvsup. Если вы никогда не перекомпилировали систему, внимательно прочитайте соответствующую часть руководства администратора (см. http://www.freebsd.org/doc/en_US. ISO8859-1/books/handbook/makeworld.html). Сейчас у меня свежеустановленная система, поэтому перед перекомпиляцией я не буду делать резервное копирование данных. Если мне понадобится перекомпилировать уже работающую систему, я обязательно уделю несколько минут для резервирования моего домашнего каталога и каталога настроек /etc: cd /etc tar cvfz /dev/fd0 . tar cvfz etc.tar.gz . Каталогу /etc я уделил больше внимания и скопировал его не только на дискету, но и в файл. Затем я послал по электронной почте самому себе этот файл, на случай непредвиденных обстоятельств (небольшая паранойя в вопросе резервного копирования никогда не повредит – прим. переводчика). Я не усердствую так с моим домашним каталогом, поскольку обычно не храню в нем данных, о потере которых буду потом сожалеть. Кроме закладок (bookmarks) для моего браузера. Я всегда пересылаю себе по почте файл с закладками. Если вы беспокоитесь о своих данных, сделайте резервное копирование вашего домашнего каталога. Первый раз перекомпилируя операционную систему тщательно следуйте инструкции из руководства администратора. Будьте готовы к тому, что это займет определенное время. Используйте то ядро, которое поставляется с системой. Вы успеете скомпилировать ядро по вашему вкусу после перекомпиляции системы. На свежеустановленной системе я сразу перехожу в однопользовательский режим для того, что бы следующие несколько часов ничего кроме перекомпиляции на нем не делать. На рабочей системе я не перехожу в однопользовательский режим до тех пор, пока не наступит время инсталлировать перекомпилированную систему. shutdown now (входим в однопользовательский режим) cd /usr/src make -j4 buildworld (это самое долгое действие; оно занимает около двух часов на http://www.freebsd.bip.ru/mmediainbsd.shtml (4 of 9)10.04.2004 17:26:15

Daemon News Russia

свежеустановленном P3 с 320Mb оперативной памяти) make buildkernel make installkernel make installworld shutdown -r now После перезагрузки я получаю полностью обновленную систему. Теперь я могу заняться установкой моих любимых приложений. Я начну с установки последнего релиза XFree86, поскольку большинство мультимедийных приложений требуют его наличия. На мой взгляд, самым простым способом установить XFree86 можно просто скачав исходные коды и запустив встроенный инсталляционный сценарий (если вы гордый владелец FreeBSD версии выше или равной 4.6, то для вас самым простым и логичным путем установки XFree86 будет запуск утилиты /stand/sysinstall, в которой еще на этапе инсталляции системы можно установить и настроить XFree86 – прим. переводчика). Поскольку я еще не устанавливал никаких приложений, я закачаю исходные тексты старым, добрым способом при помощи программы ftp (для гарантированной закачки файлов в FreeBSD используется стандартная утилита fetch, поддерживающая докачку и содержащая массу других полезных функций – прим. переводчика). Но сначала я создам каталог, в котором я буду хранить эти файлы: mkdir /usr/XFree86-4 cd /usr/XFree86-4 ftp ftp.xfree86.org Connected to ftp.xfree86.org. 220 ftp.xfree86.org FTP server (Version wu-2.6.1(1) Wed Dec 5 13:09:53 EST 2001) ready. Name (ftp.xfree86.org:genisis): anonymous 331 Guest login ok, send your complete e-mail address as password. Password: [email protected] ftp> cd pub ftp> cd XFree86 ftp> cd 4.2.0 ftp> cd binaries ftp> cd FreeBSD-4.x ftp> get Xinstall.sh ftp> get extract ftp> get Xbin.tgz ftp> get Xlib.tgz ftp> get Xman.tgz ftp> get Xdoc.tgz ftp> get Xfnts.tgz ftp> get Xfenc.tgz ftp> get Xetc.tgz ftp> get Xvar.tgz ftp> get Xxserv.tgz ftp> get Xmod.tgz ftp> bye Теперь дело за малым – вызвать инсталляционный сценарий: sh Xinstall.sh

http://www.freebsd.bip.ru/mmediainbsd.shtml (5 of 9)10.04.2004 17:26:15

Daemon News Russia

и ответить на задаваемые им вопросы (нажимайте «Enter», для того что бы выбрать ответ по умолчанию, в случае, если вы не знаете что ответить). После установки XFree, можно приниматься за сборку своего любимого оконного менеджера. На данный момент мне очень нравится KDE, который очень-очень долго компилируется. Стоит попробовать запустить процесс компиляции, перед тем как ложиться в постель, в надежде на то, что к тому времени как вы проснетесь утром, он закончится. Итак на одном терминале я напечатал: cd /usr/ports/x11/kde3 make install clean Теперь я переключусь на второй терминал и установлю библиотеки XFree86-4, о которых забыл (на самом деле не забыл поскольку XFree86 установлен, просто они не зарегистрированы в базе портов и поэтому система о их наличии не догадывается – прим. переводчика), так как большинство приложений требуют их наличия в системе: cd /usr/ports/x11/XFree86-4-libraries make install clean А на третьем терминале я сконфигурирую сервер XFree86. Сегодня я впервые конфигурирую систему с USB мышью. Во время установки системы, я ответил «да» на вопрос есть ли у меня USB мышь. На всякий случай, я проверил наличие соответствующих строк в файле /etc/rc.conf: usbd_enable="YES" moused_flags="/dev/ums0" usbd_flags="-vv" Перед конфигурированием сервера XFree86 узнайте следующую информацию: ● ● ●

Модель вашей видеокарты Количество памяти на видеокарте Тип вашей мыши и номер последовательного порта в который она включена (если это последовательная мышь)

Затем: /stand/sysinstall Configure XFree86 XF86Setup (если у вас неподдерживаемая видеокарта и вы получаете сообщение об ошибке, выберите xf86config) Если вас спросят о типе вашей мыши, выберите правильный и запустите тестирование для проверки правильности выбора. Теперь, с ее помощью, вы можете выбрать видеокарту и сделать необходимые настройки. Надеюсь, что при этом у вас не возникнет проблем и все получится довольно быстро. После того как я получил работоспособный сервер XFree86, я вышел из режима http://www.freebsd.bip.ru/mmediainbsd.shtml (6 of 9)10.04.2004 17:26:15

Daemon News Russia

суперпользователя и создал в своем домашнем каталоге файл .xinitrc, который содержал следующую строку: exec startkde Как только компиляция KDE завершится, я смогу напечатать на терминале startx и тем самым запустить KDE. Теперь приступим к браузеру. Я очень доволен браузером Mozilla. Несмотря на то, что в нем есть странности, в целом он неплох: быстр, конфигурируем, поддерживает штепсели (plug-in) и скины. cd /usr/ports/www/mozilla make install clean Теперь соберем ядро, которое способно поддерживать звук и работу Java-машины: cd /usr/src/sys/i386/conf cp /GENERIC MULTIMEDIA В файл MULTIMEDIA я добавил следующие строки: options SER_LDT #используется Java options CPU_ENABLE_SSE #используется DVD декодерами device pcm #поддержка PCI SoundBlaster Мне давно нравится SoundBlaster PCI 128. Это недорогая звуковая плата, которая требует для своей работы всего одну строку в конфигурационном файле ядра. После сохранения измерений в файле MULTIMEDIA, компилируем ядро: cd /usr/src make buildkernel KERNCONF=MULTIMEDIA make installworld KERNCONF=MULTIMEDIA После того как ядро установлено, я перегрузил машину: reboot Теперь, используя Mozilla, я загружу файлы необходимые для поддержки Java: http://java.sun.com/j2se/1.3/download.html ● ● ●

Выберите «Linux GNUZIP Tar shell script» Согласитесь с лицензионным соглашением Сохраните файл в /usr/ports/distdiles/j2sdk-1_3_1_04-linux-i586.bin

http://wwws.sun.com/software/java2/download.html http://www.freebsd.bip.ru/mmediainbsd.shtml (7 of 9)10.04.2004 17:26:15

Daemon News Russia

● ●

Выберите загрузку JavaTM 2 SDK 1.3.1 (необходима бесплатная регистрация) Сохраните файл в /usr/ports/distfiles/j2sdk-1_3_1-src.tar.gz

http://www.eyesbeyond.com/freebsddom/java/jdk13.html ● ● ●

Выберите «Download the latest BSD JDK 1.3.1 patchset» Согласитесь с загрузкой Patchset7 Сохраните в /usr/ports/distfiles/bsd-jdk131-patches-7.tar.gz

cd /usr/ports/java/linux-sun-jdk13 make install clean cd /usr/ports/java/jdk13 make install clean Для того что бы убедиться что это сработало перезапустите Mozilla и зайдите в меню Help -> About Plug-ins. Вы должны получить страницу, в которой упоминается штепсель Java. Небольшое путешествие на сайт http://javaboutique.internet.com/ должно полностью развеять ваши сомнения относительно работоспособности Java. Теперь очередь потокового мультимедиа-контента: cd /usr/ports/www/plugger make install clean Этот порт устанавливает поддержку mpeg, avi, quicktime, midi и pdf. Полный список вы сможете найти в меню Help -> About Plug-ins. Затем идите проверять работоспособность этого штепселя (см. http://fredrik.hubbe.net/plugger/test.html). Наконец штепсель для Flash: cd /usr/ports/www/flashplugin-mozilla make install clean Перед инсталляцией штепселя имейте в виду, что Flash это зарегистрированный товарный знак и он был «создан исключительно для Windows и Macintosh компьютеров». Помимо этого имеются определенные проблемы с правами на редистрибуцию. Из всего этого следует, что GPL версия не полностью поддерживает Flash-функциональность. Это значит, что некоторые Flash сайты будут работать, некоторые будут виснуть, а некоторые будут ронять ваш браузер. Например, если вы установите Flash-штепсель, даже не пытайтесь сходить на сайт http://www. shockwave.com/, если вы конечно не хотите наблюдать падение вашего браузера. Я выяснил, что от фазы Луны и набора используемых заклинаний, зависит увижу ли я на сайте Hallmark электронную открытку или просто серый прямоугольник. Однако мой браузер без проблем показывает мне заставки, которые все более популярны на сайтах современного Интернета. Кто бы мог подумать! Теперь, когда Mozilla оснащена штепселями, я займусь установкой какого-нибудь скина.

http://www.freebsd.bip.ru/mmediainbsd.shtml (8 of 9)10.04.2004 17:26:15

Daemon News Russia

Отправимся по меню: Edit -> Preferences -> Appearance -> Themes. Теперь кликните на ссылку «Get New Themes». Мне нравятся темы с http://www.mozdev.org/. Тема SkyPilot выглядит достаточно интересно, так что я кликну на ее ссылке, а затем, еще раз на ссылке Install. Затем я отметил пункт «Use this theme» в диалоговом окне и нажал кнопку «OK». После того как инсталляция скина завершилась, я отправился опять в Preferences, где выбрал в списке «SkyPilot» и опять нажал «OK». Mozilla сказала мне что изменения войдут в силу после перезапуска. Теперь, когда мой браузер ужасно красиво ;-) выглядит, я пойду на мой любимый сайт с «обоями» (см. http://www.digitalblasphemy.com/). Для смены обоев в KDE, кликните правой кнопкой мыши на рабочем столе и выберите «Configure Desktop». Затем кликните «Background Icon», вкладку «Wallpaper», а затем укажите файл с вашими любимыми обоями. В следующей статье мы отправимся в удивительный мир звука, а так же посмотрим на кое-какие утилиты, которые поразят даже ваших друзей-виндузятников. Автор: Dru Lavigne Перевод: Станислав Лапшанский (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/mmediainbsd.shtml (9 of 9)10.04.2004 17:26:15

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Просмотр DVD фильмов на FreeBSD новости

В сегодняшней статье мы поговорим о проигрывании DVD-дисков. Я продемонстрирую вам четыре плейера, которые так или иначе справляются с этой задачей. Поскольку мои изыскания базируются на информации почерпнутой из соответствующего раздела руководства администратора (см. http://www.freebsd.org/handbook/video-playback.html), то вам, вероятно, тоже не помешает его прочитать. С проигрыванием DVD на компьютере тесно связаны два понятия, о которых вы должны иметь представление. Во-первых это так называемые коды регионов (зон). (Перед дальнейшим чтением я очень рекомендую ознакомиться с отличной статьей Алексея Шишкова «Как сделать DivX из DVD», см. http://www.computerra.ru/offline/2002/463/20678/, особенно с той ее частью, которая посвящена избавлению вашего DVD-привода от функции региональной защиты – прим. переводчика.) Практически каждый купленный вами DVD-диск, имеет фиксированный региональный код, описывающий ореол легального распространения данного релиза DVDдиска. Код региона можно обнаружить на тыльной стороне коробки из под диска, обычно он находится внизу, рядом с другими значками Dolby Digital, названием студии и рейтингом фильма. Так как фильмы в разных регионах мира выпускаются в разное время, региональные коды используются для предотвращения продажи DVD-дисков до даты официального релиза. Обычно это не является проблемой, кроме случая, когда вы купили DVD во время заграничной поездки и, после возвращения, неожиданно обнаруживаете, что у вас дома диск невозможно использовать. Поскольку большинство портов предназначенных для проигрывания DVD по умолчанию настроены на первый регион, и вам может потребоваться поменять это значение, для этого я собрал список номеров регионов с расшифровкой их географии в этой (чрезвычайно мрачной – прим. переводчика) таблице:

Код региона

Географическое расположение

1

Канада, США и их территории

2

Япония, Европа, Южная Африка, Ближний Восток, Египет

3

Юго-восточная Азия, Западная Азия

4

Австралия, Новая Зеландия, Океания, Центральная Америка, Мексика, Южная Америка

5

Россия, Индия, Пакистан, Африка (кроме Египта), Северная Корея, Монголия

6

Китай

7

Резерв

8

Самолеты, корабли

http://www.freebsd.bip.ru/dvdinbsd.shtml (1 of 6)10.04.2004 17:26:17

Daemon News Russia

Вторым немаловажным понятием является CSS (Content Scrambling System – Система шифрования содержимого). Многие DVD (обычно те, которые имеют региональный код) зашифрованы для предотвращения незаконного тиражирования дисков пользователями. Это означает, что для нормального просмотра содержимого диска, аппаратный DVD проигрыватель должен иметь соответствующее программное обеспечение для расшифровки DVD. Тут все становится печальным и мрачным. Поскольку разрешение этой проблемы находится в руках судей, а я не являюсь адвокатом, я оставляю исследование этого вопроса на ваше усмотрение. Будете вы смотреть шифрованные DVD на вашем компьютере или нет, решать вам. Поиск на Google фразы «dvd css», дает много пищи для размышлений. Так или иначе шифруются не все DVD. Когда я прошелся по моей коллекции DVD, я обнаружил, что зашифрованы примерно 75% дисков. Проигрывание DVD на компьютере до сих пор является занятием для экспериментаторов, поэтому ваши достижения на этом поприще могут сильно зависеть от процессора, марки видеокарты и настроек видеорежима на вашем компьютере. Очень вероятно, что ваши результаты будут отличаться от моих, поэтому отнеситесь к этой статье с зерном сомнения и постарайтесь уделить немного времени собственным экспериментам. Я настоятельно рекомендую вам, что бы и ваша FreeBSD, и ваша коллекция портов, были самыми свежими. Так же пользуйтесь самой последней версией XFree86 и не забудьте оптимизировать систему для проигрывания DVD: ● ● ● ●

переконфигурировать ядро с поддержкой CPU_ENABLE_SSE в файле /boot/loader.conf включена опция dma настроены системные переменные в файле /etc/sysctl.conf на устройство /dev/acd0c назначены права 666

Пошаговые инструкции для реализации такой оптимизации были приведены в статье «Звук во FreeBSD». Если вы не собираетесь удовлетворяться «умолчальными» параметрами принятыми в DVD плеерах, а заняться их тонкой настройкой, то следующие ссылки будут отличным введением в терминологию DVD и хорошим навигатором в куче устройств ввода-вывода: ● ●

Xine HOWTO, см. http://dvd.sourceforge.net/xine-howto MPlayer - The Movie Player for Linux, см. http://www.mplayerhq.hu/DOCS

Я очень рекомендую почитать сайт MPlayer'а. Ему стоит посвятить вечер. Теперь, войдите в систему под суперпользователем и создайте следующие символические ссылки: ln -s /dev/acd0c /dev/dvd ln -s /dev/racd0c /dev/rdvd Одним из первых наблюдений, которые я сделал, начав проигрывать DVD диски на моем компьютере, было то, что большинство из моих дисков зашифрованы при помощи CSS. Мне повезло и самый первый DVD, который я попробовал посмотреть, оказался нешифрованным. А вот следующий DVD был зашифрован, что заставило меня поразмышлять о том, что иногда вещи кажущиеся простыми, в одночасье становятся очень сложными. Во время демонстрации возможностей каждого проигрывателя, я расскажу об отличиях между результатами

http://www.freebsd.bip.ru/dvdinbsd.shtml (2 of 6)10.04.2004 17:26:17

Daemon News Russia

проигрывания обоих дисков. Вот четыре порта, способные проигрывать DVD диски: vlc, xine, mplayer и ogle. Моими критериями выбора лучшего плеера были: 1. Отсутствие рывков и пропаданий звука или видео во время проигрывания диска 2. Работоспособность плеера «из коробки», без утомительного чтения массы документации 3. Симпатичный внешний вид и поддержка скинов.

vlc Пожалуй хватит теории, давайте перейдем к практике. Начнем с плеера «vlc»: cd /usr/ports/graphics/vlc make install clean Исполняемый файл устанавливается в /usr/local/bin/vlc. В настоящий момент «vlc» не умеет пользоваться скинами, однако он имеет вполне пристойный пользовательский интерфейс, который, к тому же очень интуитивен. Просто вставьте в DVD привод DVD диск, нажмите на кнопку «Disk» в окне программы и выберите раздел диска с которого вы собираетесь начать просмотр. Если во время просмотра DVD вы обнаружите, что на экране видно только две трети фильма, то значит разрешение вашего экрана слишком велико. Нажмите комбинацию «Ctrl+Alt+Серый минус». При помощи этой нехитрой комбинации вы можете постепенно уменьшать разрешение до тех пор, пока не найдете подходящего для просмотра DVD. Я обнаружил, что при использовании настроек «из коробки», в плеере «vlc» имеет место пропадание звука, а так же отставание его от видео на одну-две секунды. Шифрованные DVD проигрываются еще хуже, так что смотреть их невозможно. В настроечном окошке Settings -> Preferences имеется огромное количество опций, однако всякий раз, когда я проносил указатель мыши над кнопками выбора опций, я получал сообщение, начинающееся словами: «по умолчанию, выбирается самый лучший модуль». Таким образом мне не удалось изменить предложенные по умолчанию настройки. Как выяснилось из vlc FAQ (см. http://www.videolan.org/ vlc/doc/FAQ), прерывистый звук во время проигрывания дисков, является известной проблемой, над устранением которой уже ведутся работы. Для себя я решил на некоторое время отложить «vlc», для того что бы через несколько месяцев вернуться к нему, для того что бы посмотреть на изменения, произошедшие за это время.

xine Следующим я попробовал xine: cd /usr/ports/graphics/xine make install clean Сам по себе xine может проигрывать только нешифрованные DVD. Однако к нему существуют штепсели, которые позволяют так же смотреть и шифрованные DVD:

http://www.freebsd.bip.ru/dvdinbsd.shtml (3 of 6)10.04.2004 17:26:17

Daemon News Russia

/usr/ports/graphics/xine_d4d_plugin /usr/ports/graphics/xine_d5d_plugin И вот еще штепсель, при помощи которого осуществляется поддержка меню в DVD-фильме: /usr/ports/graphics/xine_dvdnav_plugin В процессе тестирования я установил все четыре порта. Xine устанавливается в /usr/X11R6/bin/ xine, при этом каждый установленный штепсель отображается в виде кнопки на основном окне xine. Интерфейс xine поддерживает скины, которые можно загрузить с сайта http://xine. sourceforge.net/. Если вы нашли интересный скин, то проделайте следующее: cd ~/.xine mkdir skins Затем загрузите скин в каталог ~/.xine/skins. Скины xine, серьезно меня напрягли. Автор каждого скина считал своим долгом изменить местонахождение и название кнопок, а так же поменять настройки. Некоторые скины не были интуитивно понятны. Часто я не знал к чему приведет нажатие той или иной кнопки. Иногда все заканчивалось сообщением «xine engine error», которое невозможно было убрать, кроме как убив процесс xine. Еще более ужасные ощущения мне пришлось испытать, при попытке проиграть DVD-диски. Иногда, нажатие на кнопку «DVD», а затем на «Play», запускало проигрывание незашифрованного DVD-диска, а иногда только, нажатие кнопки «MLR», а затем «DVD» и «Play». Время от времени бывали ситуации, когда нажав все что только можно я, в результате, получал только зависшую программу. С кнопкой «NAV», которая появилась после инсталляции штепселя «dvdnav», мне повезло больше. Этот штепсель добавляет новые функции для получения названия DVD и поддержки мыши в DVD-меню. До его установки мне приходилось непродуктивно тратить время на выяснение того, какая кнопка вернет меня из главного меню в фильм. Проигрывание нешифрованных DVD при помощи xine выявило проблему с точностью до наоборот присутствующую в vlc: звук был удовлетворительным, а вот видео слегка заикалось и шло не всегда синхронно со звуком. Для проигрывания зашифрованных DVD, я попробовал воспользоваться кнопками D4D и D5D. Если при нажатии кнопки «DVD» я получал сообщение «xine engine error», то вероятнее всего это оказывался шифрованный DVD-диск. Использование кнопки «D4D» приводило исключительно к ошибке защиты памяти. При нажатии кнопки «D5D», несколько минут уходило на расшифровку ключей. Получившееся в результате видео было просто великолепным. Я забыл насколько разрешение компьютерного монитора лучше, по сравнению с телевизионным. Качество звука менялось от чистейшего до заикающегося. С досады я едва не выкинул компьютер из окна! Я думаю, что перед тем, как еще раз попробовать xine, надо слегка подождать, пока доведут до ума его штепсели.

MPlayer Затем я протестировал MPlayer. Этот порт идет с большим количеством опций, большинство из которых уже включено или автоматически будет включено в зависимости от возможностей http://www.freebsd.bip.ru/dvdinbsd.shtml (4 of 6)10.04.2004 17:26:17

Daemon News Russia

вашего компьютера. Несмотря на это, включение некоторых вещей вы должны указать явно: WITH_GUI #собирать графический интерфейс WITH_LIVE #включает поддержку потокового # контента с сайта live.com WITH_TDFXFB #включает поддержку чипов Voodoo 3/Banshee У меня нет видеокарты Voodoo и я не интересуюсь live.com. Но вот поддержку графического интерфейса я включу. Вот так: cd /usr/ports/graphics/mplayer make WITH_GUI=yes install clean Я могу использовать и другой метод указания опций: make -DWITH_GUI install clean После окончания установки я покинул аккаунт суперпользователя. После этого зайдя в тот же каталог, уже под своим обычным пользователем, я выполнил команду: make install_user Так как я собрал графический интерфейс, для запуска MPlayer, я воспользуюсь файлом /usr/local/ bin/gmplayer. Если вы решили обойтись без графики, запускайте /usr/local/bin/mplayer. Графический интерфейс MPlayer'а поддерживает скины, поэтому я собрал и их: cd /usr/ports/graphics/mplayer-skins make install clean Меня спросили, какие скины я хочу установить. Я выбрал все. При первом запуске MPlayer, я был поражен его интерфейсом. Именно так должен выглядеть DVD проигрыватель. Остальные плееры не идут ни в какое сравненье! Щелчок правой кнопкой мыши в любом месте плеера давал мне возможность сменить скин, войти в окно настройки программы или открыть DVD диск. Я подумал: «Великолепно, я нашел плеер с отличным и интуитивно понятным интерфейсом». К сожалению мой энтузиазм был недолог. Я начал с нешифрованного DVD, который начал проигрываться с четким видеоизображением и чистым звуком. По прошествии около 20 секунд, на экран было выдано очень длинное сообщение об ошибке, смысл которого сводился к тому, что у меня слишком медленная машина. Подавив раздражение от столь вопиюще глупого предположения, я послушно остановил DVD, записал предложенные в сообщении об ошибке действия и в соответствии с ними, исправил настройки программы. Внесенные изменения только ухудшили ситуацию: теперь звук и изображение стали заикаться, при этом появлялось тоже самое сообщение об ошибке. Не испугавшись, я начал методично менять настройки, по одной опции за раз. Максимум чего мне удалось добиться от настроек «no sound», «chopper sound» и «perfect sound», – двух минут

http://www.freebsd.bip.ru/dvdinbsd.shtml (5 of 6)10.04.2004 17:26:17

Daemon News Russia

нормальной работы. После исчерпания всех возможных вариантов одиночных настроек, я стал их комбинировать. Тут я решил посмотреть документацию. Недостатка в ней не было. Есть подробная страница руководства man mplayer, и еще более длинная /usr/local/share/doc/mplayer/ documentation.html. Однако в определенный момент моих исследований мне вдруг стало ясно, что я делаю слишком много работы для обычного проигрывания DVD-диска. В отчаянном стремлении достигнуть успеха, я попробовал запустить MPlayer без графического интерфейса, надеясь на то, что он просто конфликтует с моей системой: mplayer -dvd l Безрезультатно. Единственная разница была в том, что мерзкое сообщение об ошибке тихонько выдавалось в окне xterm, а не всплывало поперек фильма. Так что мне пришлось с грустью проститься с замечательным графическим интерфейсом и поместить MPlayer в мой список вещей, к которым я собираюсь вернуться через некоторое время.

ogle Наконец я взялся за ogle. По умолчанию ogle использует интерфейс командной строки, однако существует разновидность порта, который компилирует простенький графический интерфейс. cd /usr/ports/graphics/ogle-gui make install clean Программа помещается в /usr/local/bin/ogle. Интерфейс не имеет ничего такого о чем стоило бы написать, он опрятен и интуитивен. Для проигрывания DVD надо пройти в меню File -> Open disk. Ogle автоматически устанавливает поддержку меню, так что вы можете выбрать необходимый пункт после начала фильма. Я начал с проигрывания нешифрованного диска, и, к моему удивлению, великолепное видео точно совпадало с кристально чистым звуком. Ни пятен, ни заиканий. С трудом веря в свое счастье, я вставил зашифрованный DVD. После нескольких минут, требующихся на расшифровку, я опять получил прекрасное видео и идеальный звук. Это произошло когда я уже почти совсем разочаровался в идее просмотра DVD на компьютере. Ogle удовлетворяет двум первым моим критериям: проигрывание без заиканий «из коробки», без утомительного чтения документации и кучи настроек, лишь при нажатии кнопки «Play». На самом деле я не знаю ошибка это или намеренно введенная функция, но при нажатии в меню ogle Edit -> Properties, ничего не происходит. Недостаток один – программа не поддерживает скины. Ну вот и все результаты моих исследований проигрывания DVD на FreeBSD. Я помню, что в прошлой статье обещал описать RealPlayer и некоторые другие программы, но описание DVD заняло намного больше места, чем я предполагал и поэтому описание RealPlayer'а и компании переносятся в следующую статью. Автор:Станислав Лапшанский (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/dvdinbsd.shtml (6 of 6)10.04.2004 17:26:17

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Простая и эффективная система подсчета трафика в ОС FreeBSD новости

Очень часто в качестве Интернет-шлюза администраторы устанавливают PC-совместимый компьютер с ОС FreeBSD. Одной из замечательных особенностей этой системы является простая возможгость практически автоматического учета и оперативного контроля всего трафика. Делается это с помощью специализированного пакетного фильтра bpf (Berkley Packet Filter). Этот механизм работает независимо от работы файрволла (ipfw) и способен "запоминать" все пакеты, идущие через интерфейсы. Ниже описано как эффективно воспользоваться возможностями bpf для учета трафика. 1. Средство оперативного контроля трафика. Итак, предположим, что сервер на основе FreeBSD успешно установлен и настроен. Для оперативного контроля трафика служит очень удобная утилита trafshow. Рекомендуется установить ее из дерева портов: cd /usr/ports/net/trafshow make install Далее можно сразу же переходить к просмотру текущего трафика на интерфейсах. Допустим, на нашем шлюзе два интерфейса: внутренний (ed0), к которому присоеденена локальная сеть и внешний (xl1), через который осуществляется выход в Интернет. Для того, чтобы увидеть трафик на внутреннем интерфейсе, нужно выполнить команду: trafshow -i ed0 Эта команда покажет весь трафик, проходящий через интерфейс ed0. Команда будет работать быстрее, если отключить ресолвинг ip адресов в имена (ключ -n). При этом весь трафик будет выдан в виде удобной таблицы, в которой видны адреса источникков и приемников, скорости соединений, количество переданных и принятых байт и т.п. (рис 1). Соотвественно, чтобы увидеть трафик на внешнем интерфейсе, нужно ввести команду trafshow -i xl1.

http://www.freebsd.bip.ru/trafd2.shtml (1 of 7)10.04.2004 17:26:21

Daemon News Russia

РИС 1. Мониторинг tcp\ip соединений с помощью trafshow. Если нужно увидеть не весь, а только нужный администратору трафик, то можно ограничить облать просмотра программы trafshow. Например, если нас интересует трафик из интернет в сеть 10.128.0.0/16, то нужно набрать команду вида: trafshow -i ed0 -n dst net 10.128.0.0 mask 255.255.0.0 Полный синтаксис описания правил для trafshow можно узнать по документации команды tcpdump (man tcpdump), т.к. команда trafshow интерпритируют вывод именно этой программы). Вообще, команда trafshow имеет множество дополнительных параметров и ключей для более тонкой настройки работы. Все параметры работы можно узнать по команде man trafshow. ПРИМЕЧАНИЕ. Часто для вывода локальной сети в Интернет через FreeBSD администраторы используют систему NAT. Тогда команда trafshow на внешнем интерфейсе не будет "видеть" внутренних адресов (потому что они уже "собраны" системой NAT во внешний интерфейс). Для того, чтобы увидеть трафик корпоративной сети, нужно "просматривать" внутренний интерфейс. 2. Средство сбора и учета трафика Для сбора трафика и построения отчетов, применяется пакет trafd. Рекомендуется ставить его через дерево портов. cd /usr/ports/net/trafd make install 2.1 Сбор статистики

http://www.freebsd.bip.ru/trafd2.shtml (2 of 7)10.04.2004 17:26:21

Daemon News Russia

Демон trafd собирает трафик на определенном интерфейсе. Для начала сбора трафика на интерфейсе ed0, необходимо: ●







создать файл, где trafd будет хранить статистику: touch '/var/trafd/trafd.ed0' запустить сбор статистики на интерфейсе: /usr/local/bin/trafd -i ed0 (рекомендуем сразу прописать эту строчку в /etc/rc.local) проверить работу демона: ps ax | grep trafd при необходимости собирать статистику на других интерфейсах, повторить действия, аналогичные описанным.

Демон trafd коллекционирует статистику в оперативной памяти. Для того, чтобы статистика не "потерялась" и счетчики не переполнились, необходимо периодически "скидывать" наполненную информацию из оперативной памяти на диск (в файл, который был создан). Эту процедуру выполняет специальная программа: trafsave. Периодичность выполнения этой команды выбирает сам системный администратор. Для UNIX систем выполнение периодических команд применяется демон crontab. Например, для того, чтобы команда trafsave выполнялась каждые 4 часа, необходимо выполнить команду crontab -e и ввысти строчку . 0 0,4,8,12,16,20 * * 1-7 /usr/local/bin/trafsave PS. Для тех, кто не знаком с vi: нажать i, ввести строчку приведенную выше, нажать ESCAPE, ':', 'wq'. PS. Кроме того, рекомендуется каждый месяц "обнулять" файл сбора статистики, т.к. количество записей в одном файле ограничено 1000, после чего traflog перестает отображать отчеты по номеру записи. Это можно сделать с помощью короткой программки на языке sh: #!/bin/sh PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin LOG_FILE=/var/log/traffic.log if [ $# = 0 ]; then # Get List of Listening IFaces . /etc/rc.conf else IFF_LISTEN=$* fi for iface in $IFF_LISTEN; do rotate /var/trafd/trafd.$iface `date -v-1m +%b` echo "Rotate Logs For $iface" > $LOG_FILE done http://www.freebsd.bip.ru/trafd2.shtml (3 of 7)10.04.2004 17:26:21

Daemon News Russia

Нужно разместить эту программку в файле /usr/local/bin/trafrotate. Для ее работы необходимо установить утилиту rotate: cd /usr/ports/sysutils/rotate make install Для того, чтобы эта программа запускалась каждый месяц, нужно записать еще одну строчку в crontab: 20 2 1 * * /usr/local/bin/trafrotate Теперь можно быть уверенным, что ни один байт мимо не пройдет ! 2.2 Построение отчетов Система trafd способна строить удобные отчеты на основе собранных данных. Отчеты строятся с помощью программы traflog. Для того, чтобы посмотреть результаты последней сохраненной записи демона trafd, нужно набрать команду: traflog -n -i ed0 (флаг -n указывает не ресолвить ip-адреса) Результатами работы программы будет отчет, начало которого показано на рис 2.

Рис2. Отчет по сохраненной статистике ip-соединений.

http://www.freebsd.bip.ru/trafd2.shtml (4 of 7)10.04.2004 17:26:21

Daemon News Russia

Программа traflog "умеет" строить отчеты на основе заданных правил. Например, для того, чтобы увидеть отчет по трафику сети 10.128.0.0/16, необходимо набрать команду: traflog -i ed0 -n from all to 10.128.0.0 mask 255.255.0.0 Авторы trafd приводят такие примеры фильтров: Pattern examples from turbo.nsk.su to ns.nsk.su port domain to all port ftp port ftp-data from TURBONET to all from 192.188.187.127 mask 255.255.255.224 port all from all to 144.206.0.0 proto tcp from turbo.nsk.su to ns.nsk.su port domain to all port ftp port ftp-data from TURBONET to all from 192.188.187.127 mask 255.255.255.224 port all from all to 144.206.0.0 proto tcp Кроме применения фильтров, traflog позволяет формировать отчеты, суммируя информацию из записей trafd. Для того, чтобы увидесть список записей (а это нужно для того, чтобы потом построить отчет на основе диапазона правил), нужно вызвать trafd с ключом -l. Например, вызов traflog -i ed0 -l выдаст результат:

Рис 3. Список сохраненных записей. Теперь, для того чтобы построить отчет за определенный период, нужно указать первую и http://www.freebsd.bip.ru/trafd2.shtml (5 of 7)10.04.2004 17:26:21

Daemon News Russia

последнюю запись для отчета (параметры -b -e ). Например, для того чтобы получить отчет за 2 декабря 2002 годя для сети 10.128.0.0/16, нужно ввести команду: traflog -n -i ed0 -b7 -e12 -s from all to 10.128.0.0 mask 255.255.0.0 (параметр -s указывает посчитать суммарный трафик, т.е. trflog автоматически суммирует трафик по одинаковым адресам и портам).

Рис 4. Получение отчета за определенный период. Кроме того, команде traflog можно указать файл вместо интерфейса. Например, для построения сентябрьского отчета по всему файлу, сохраненному за месяц программой trafrotate, нужно вызвать trfloglog: traflog -i /var/log/var/trafd.ed0.Sep -n. Еще в пакете программ trafd, есть 2 команды, которые используются не очень часто: trafstat (показывает статистику, хранящуюся в оперативной памяти), команда trafdump (сохраняет данные из памяти во временном файле) и еще набор программ, с которыми можно познакомиться из документации к trafd. Выводы. Итак, как видно система trafd позволяет эффективно учитывать трафик и строить разнообразные отчеты. На основе результатов отчетов программы traflog с помощью достаточно простых скриптов отчеты можно отправлять по почте, переводить их в нужный формат, строить графики и т.п. Основное преимущество trafd - законченность решения и простота использования. Решение готово к работе практически сразу: весь трафик сохраняется автоматически, имеется готовая http://www.freebsd.bip.ru/trafd2.shtml (6 of 7)10.04.2004 17:26:21

Daemon News Russia

система построения гибких отчетов. Строго говоря, администратору не нужно думать, как хранить информацию о трафике, как ее обрабатывать, как потом строить отчеты. Несомненно в этом смысле trafd очень удобная и продвинутая система. Однако, применяя эту систему в сети с каналами большой пропускной способности и интенсивным трафиком, были замечены проблемы и ошибки в работе системы. Основной недостаток: переполняются счетчики в отчетах. При этом, traflog выдает отрицательный результат и теряется все мощность пакета (приходиться разбивать отчет по сделанным записям и суммировать трафик самостоятельно). Также trafd требует достаточно много памяти, занимет много процессорного времени и достаточно долго строит отчеты по трафику. Кроме того, на очень интенсивном трафике теряются пакеты. Надеюсь, что готовящаяся к выпуску версия 4.0 не будет обладать приведенными недостатками. Поэтому рекомендуем trafd для администраторов небольших сетей (до 50 рабочих мест) с не очень интенсивным трафиком (менее 2 Гб в день). Система очень хорошо показала себя как универсальное решение для учета трафика в мелких и средних сетях. Авторы статьи успешно применяют эту систему на серверах вывода сетей в Интернет. В настоящее время реализовано более 10 таких проектов. С гордостью можно сказать, что система trafd была сделана в России, в Новосибирске. Но опять же, к сожалению, развивается она вяло и медленно. В этой статье применялась версия 3.0.1, а сейчас к выпуску готовиться 4.0. Время покажет, как новая версия приспособлена к большим объемам информации. Ссылки: ● ● ●

Документация по trafd (файл /usr/local/share/doc/trafd/README) Сайт по trafd 4: http://bpft4.sourceforge.net man trafshow

Автор: Дмитрий Новиков (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/trafd2.shtml (7 of 7)10.04.2004 17:26:21

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Построение Частных Виртуальных Сетей на основе UNIX сервера FreeBSD новости

Вступление Частная Виртуальная Сеть (она же ЧВС или VPN) является наиболее удобным способом подключения удаленных пользователей или офисов к компьютерной сети через Интернет. Технология VPN позволяет пользователю, подключенному к Интернет в любой точке мира получить защищенное соединение с корпоративной сетью, где бы она не находилась. Если кратко, то технология VPN состоит в следующем: ●





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

Решения по построению VPN Существуют различные решения по построению VPN. Самым распространенным, по понятным причинам, является реализация, встроенная в Windows системы. Она позволяет строить VPN на основе протокола PPTP (Point To Point Protocol) и L2TP. Причем, VPN позволяет шифровать канал 128 или 40-битным ключом, передает пароли в шифрованном виде по протоколу MS CHAP (v1 и v2). Хотя считается, что у Microsoft не самая лучшая реализация VPN (кроме того, она основанна на закрытых протоколах), но благодаря тому, что решение встроено во все Windows-системы, то оно получило достаточно широкое распространение. Логично, что в локальной корпоративной сети на основе Windows-систем и сервер устанавливают под управлением Windows. Однако, многие администраторы справедливо не любят "держать" Windows-серверы, подключенные к Интернет, да еще и соединенные с корпоративной сетью. Зачастую такая установка пробивает брешь в безопасности сети и это привносит администраторам, ответственным за безопасность корпоративной сети большие сложности. Заслуженно считается , что наиболее защищенным с точки зрения безопасности и наиболее функциональным решением для вывода корпоративных сетей в Интернет являются UNIXсерверы. Причем, многие администраторы предпочитают "прятать" Windows-серверы "внутрь" корпоративной сети, за защищенный UNIX-сервер. Реализация же VPN от Microsoft "заставляет" держать Windows-сервер подключенный и к Интернету и к корпоративной сети. К счастью, разработчики UNIX-систем нашли решение по

http://www.freebsd.bip.ru/mpd.shtml (1 of 11)10.04.2004 17:26:23

Daemon News Russia

построению VPN-сервера на основе UNIX, совместимого с клиентами Microsoft. Построение VPN на основе UNIX сервера. Введение Итак, для того чтобы не устанавливать дополнительный Windows-сервер, необходимо установить VPN-сервер на UNIX-сервере. Как уже отмечалось, в последнее время для популярных UNIX систем появились программные продукты, совместимые с VPN "от Microsoft". В частности для очень популярной платформы, на которой строят большинство UNIX-серверов "FreeBSD" имеется продукт mpd (Multi-link PPP daemon), в котором реализован VPN сервер, совместимый с Microsoft (более подрбне о mpd можно почитать из документации на продукт после установки или на страничке описания порта http://www.freebsd.org/cgi/url.cgi?ports/net/mpd/ pkg-descr ) . А для Linux имеется аналогично решение PoPToP (http://www.poptop.org/). Далее в данной статье будет рассмотрена платформа FreeBSD и сервер mpd. Решение Перед нами стояла задача построить VPN сервер, совместимый с Microsoft на основе ОС FreeBSD. Точнее сказать - избавиться от "лишнего" Windows сервера, осуществляющего функцию VPN-сервера. Выводом в Итернет локальной сети (около 300 компьютеров), защитой сети, сбором статистики по трафику у нас занимается сервер под управлением FreeBSD 4.4. В ОС FreeBSD, начиная с версии 4.0 реализована технология NETGRAPH, которая позволяет разделить логику работы сетевого интерфейса от физического устройства, прикрепленного к этому Интерфейсу, а также последовательно применять различные алгоритмы для пакетов, идущих через интерфейс. Описание технологии NETGRAPH на английском языке можно прочитать по адресу: http://www.daemonnews.org/200003/netgraph.html. Для установки PPTPсервера глубокое знание этой технологии не нужно - достаточно знать, что она применяется пакетом mpd. Шаг 1. Компилируем mpd Компилируем mpd из дерева FreeBSD-портов (можно установить его и из packages). PS. Желательно перед компиляцие пакета mpd обновить дерево портов через cvsup, для того, чтобы установить последнюю версию. Компилируем и инсталлируем mpd: cd /usr/ports/net/mpd make make install Шаг 2. Конфигурируем mpd В принципе, рекомендуется перед конфигурацией mpd включить опции FreeBSD-ядра для http://www.freebsd.bip.ru/mpd.shtml (2 of 11)10.04.2004 17:26:23

Daemon News Russia

работы с NETGRAPH. Однако компоненты NETGRAPH загружаются как модули ядра и ядро впринципе пересобирать необязательно. Как показала практика, все компоненты работают без пересборуки ядра. Для того, чтобы настроить mpd нужно создать 3 файла (все файлы должны по умолчанию находиться в каталоге /usr/local/etc/mpd): 1. mpd.conf - файл описывающий конфигурацию интерфейсов 2. mpd.links - файл, описывающий конфигурацию соединений 3. mpd.secret - файл с паролями поьзоватлей. Для краткости и конкретики ниже приводяться все 3 файла, взятые с работающей системы. Конфигурация написана для семи одновременно входящих соединений (сетевые устройства ng0ng6). Mpd.conf: default: load pptp0 load pptp1 load pptp2 load pptp3 load pptp4 load pptp5 load pptp6 pptp0: #так создается новый интерфейс, воторой параметр - название соединения, который этот интерфейс будет использовать (из файла mpd.links) new -i ng0 pptp0 pptp0 #Задается локальный и удаленный ip адреса set ipcp ranges 10.128.1.193/32 10.128.5.100/32 #Загружаются паремтры, одинаковые для всех интерфейсов load pptp_standart pptp1: new -i ng1 pptp1 pptp1 set ipcp ranges 10.128.1.193/32 10.128.5.101/32 load pptp_standart pptp2: new -i ng2 pptp2 pptp2 set ipcp ranges 10.128.1.193/32 10.128.5.102/32 load pptp_standart pptp3: new -i ng3 pptp3 pptp3 set ipcp ranges 10.128.1.193/32 10.128.5.103/32 load pptp_standart pptp4: new -i ng4 pptp4 pptp4 http://www.freebsd.bip.ru/mpd.shtml (3 of 11)10.04.2004 17:26:23

Daemon News Russia

set ipcp ranges 10.128.1.193/32 10.128.5.104/32 load pptp_standart pptp5: new -i ng5 pptp5 pptp5 set ipcp ranges 10.128.1.193/32 10.128.5.105/32 load pptp_standart pptp6: new -i ng6 pptp6 pptp6 set ipcp ranges 10.128.1.193/32 10.128.5.106/32 load pptp_standart pptp_standart: set iface disable on-demand set bundle disable multilink set link yes acfcomp protocomp #Требуем chap авторизации set link no pap chap set link enable chap set link keep-alive 60 180 set ipcp yes vjcomp #Устанавливаем DNS и Wins set ipcp dns 10.128.1.1 set ipcp nbns 10.128.1.42 #Включаем proxy-arp, чтобы компьютер "видел" без маршрутизации корпоративную сеть (по протоколу arp) set iface enable proxy-arp #Включаем компрессию данных set bundle enable compression #Включаем компрессию данных, совсестимую с Microsoft-клиентами set ccp yes mppc #Включаем шифрование, совместимое с Microsoft-клиентами set ccp yes mpp-e40 set ccp yes mpp-e128 set ccp yes mpp-stateless set bundle yes crypt-reqd #Задаем адрес для входящих соединений set pptp self 195.31.12.122 #Разрешаем входящие соединения set pptp enable incoming set pptp disable originate http://www.freebsd.bip.ru/mpd.shtml (4 of 11)10.04.2004 17:26:23

Daemon News Russia

Как видно, создается 7 "бандлов" (pptp0-pptp6), которые обслуживают 7 интерфейсов. На каждый "бандл" накладываются определенные парамтры работы на интерфейс. Кроме того к каждому "бандлу" прикрепляется "линк" (второй (pptpX) параметр в команде new -i ng5 pptp5 pptp5), который должен быть описан в файле mpd.links. mpd.links pptp0: set link type pptp pptp1: set link type pptp pptp2: set link type pptp pptp3: set link type pptp pptp4: set link type pptp pptp5: set link type pptp pptp6: set link type pptp Т.к. все параметры уже были установлены в файле mpd.conf, то для "линков" достаточно обозначить их тип (pptp). Авторизация пользователей осуществляется на основе данных из файла mpd.secret. Он имеет простой формат: "логин" "пароль" IP-пользователя(необязательно) Например, наш mpd.secret: dmn pass1 10.128.5.200 rick pass2 * artp pass3 10.128.5.202 Логин\пароль могут совпадать с доменными именами, а могут и не совпадать. Если указано поле IP-пользователя, то пользователю будет выдан персональный IP-адрес. Шаг 3. Запускаем mpd По умолчанию mpd работает в интерактивном режиме. Т.е. он загружает конфигурацию из файлов и предоставляет оболочку для изменения параметров. Первый раз его можно пустить именно в таком режиме: /usr/local/sbin/mpd При этом должны загрузиться все "бандлы", и создаться интерфейсы ng0-ng6 (проверить можно командой ifconfig -a). http://www.freebsd.bip.ru/mpd.shtml (5 of 11)10.04.2004 17:26:23

Daemon News Russia

mpd.log: Oct 14 14:13:15 vGate mpd: mpd: pid 291, version 3.9 ([email protected] 1 4:08 30-Sep-2002) Oct 14 14:13:16 vGate mpd: [pptp0] ppp node is "mpd291-pptp0" Oct 14 14:13:16 vGate mpd: [pptp0] using interface ng0 Oct 14 14:13:16 vGate mpd: mpd: local IP address for PPTP is xxx.xxx.xxx.xxx Oct 14 14:13:16 vGate mpd: [pptp1] ppp node is "mpd291-pptp1" Oct 14 14:13:16 vGate mpd: [pptp1] using interface ng1 Oct 14 14:13:16 vGate mpd: [pptp2] ppp node is "mpd291-pptp2" Oct 14 14:13:16 vGate mpd: [pptp2] using interface ng2 Oct 14 14:13:16 vGate mpd: [pptp3] ppp node is "mpd291-pptp3" Oct 14 14:13:16 vGate mpd: [pptp3] using interface ng3 Oct 14 14:13:16 vGate mpd: [pptp4] ppp node is "mpd291-pptp4" Oct 14 14:13:16 vGate mpd: [pptp4] using interface ng4 Oct 14 14:13:16 vGate mpd: [pptp5] ppp node is "mpd291-pptp5" Oct 14 14:13:16 vGate mpd: [pptp5] using interface ng5 Oct 14 14:13:16 vGate mpd: [pptp6] ppp node is "mpd291-pptp6" Oct 14 14:13:16 vGate mpd: [pptp6] using interface ng6 ifconfig -a ng0: flags=8890 mtu 1500 ng1: flags=8890 mtu 1500 ng2: flags=8890 mtu 1500 ng3: flags=8890 mtu 1500 ng4: flags=8890 mtu 1500 ng5: flags=8890 mtu 1500 ng6: flags=8890 mtu 1500 После провероки правильности работы в дальнейшем mpd можно запускать как демон: /usr/ local/sbin/mpd -b, а результаты работы смотреть через лог-файл. PS. Во время тестирования mpd в системе часто оставались интерфейсы ngXX после принудительной выгрузки mpd. При этом команда ifconfig ng0 down delete не удаляла интерфейс. Опытным путем выяснилось, что для того чтобы удалить интерфейс нужно набрать команду ngctl и в появившейся оболочке написать "shutdown ngX:" (двоеточние в конце обязательно). PPS. Для создания Лог-файла нужно: - добавить строчки в /etc/syslog.conf: !mpd *.* /var/log/mpd.log - создать файл /var/log/mpd.log - перепустить syslogd (killall -1 syslogd) Шаг 4. Настраиваем клиента После этого нужно настроить какого-нибудь Windows-клиента для работы с VPN. Все установки можно оставить по умолчанию, а адрес VPN-сервера нужно поставить такой же как в параметре http://www.freebsd.bip.ru/mpd.shtml (6 of 11)10.04.2004 17:26:23

Daemon News Russia

set pptp self 195.31.12.122. Более подробную инструкцию по конфигурированию Windows-клиента можно получить из документации по Windows. Шаг 5. Проверяем в работе Теперь нужно "зайти" с любого Windows клиента на PPTP-сервер и проверить правильность работы. Если все было установлено правильно, то в Windows должна пройти авторизация и вход в сеть и как минимум стать доступной корпоративная сеть. mpd сервер при "правильном" входе должен написать в Лог-файл нечто вроде приведенного ниже: Oct 15 12:28:38 vGate mpd: mpd: PPTP connection from 10.128.36.5:4563 Oct 15 12:28:38 vGate mpd: pptp0: attached to connection with 10.128.36.5:4563 Oct 15 12:28:38 vGate mpd: [pptp0] IFACE: Open event Oct 15 12:28:38 vGate mpd: [pptp0] IPCP: Open event Oct 15 12:28:38 vGate mpd: [pptp0] IPCP: state change Initial --> Starting Oct 15 12:28:38 vGate mpd: [pptp0] IPCP: LayerStart Oct 15 12:28:38 vGate mpd: [pptp0] IPCP: Open event Oct 15 12:28:38 vGate mpd: [pptp0] bundle: OPEN event in state CLOSED Oct 15 12:28:38 vGate mpd: [pptp0] opening link "pptp0"... Oct 15 12:28:38 vGate mpd: [pptp0] link: OPEN event Oct 15 12:28:38 vGate mpd: [pptp0] LCP: Open event Oct 15 12:28:38 vGate mpd: [pptp0] LCP: state change Initial --> Starting Oct 15 12:28:38 vGate mpd: [pptp0] LCP: LayerStart Oct 15 12:28:38 vGate mpd: [pptp0] device: OPEN event in state DOWN Oct 15 12:28:38 vGate mpd: [pptp0] attaching to peer's outgoing call Oct 15 12:28:38 vGate mpd: [pptp0] device is now in state OPENING Oct 15 12:28:38 vGate mpd: [pptp0] device: UP event in state OPENING Oct 15 12:28:38 vGate mpd: [pptp0] device is now in state UP Oct 15 12:28:38 vGate mpd: [pptp0] link: UP event Oct 15 12:28:38 vGate mpd: [pptp0] link: origination is remote Oct 15 12:28:38 vGate mpd: [pptp0] LCP: Up event Oct 15 12:28:38 vGate mpd: [pptp0] LCP: state change Starting --> Req-Sent Oct 15 12:28:38 vGate mpd: [pptp0] LCP: phase shift DEAD --> ESTABLISH Oct 15 12:28:38 vGate mpd: [pptp0] LCP: SendConfigReq #4 Oct 15 12:28:38 vGate mpd: ACFCOMP Oct 15 12:28:38 vGate mpd: PROTOCOMP Oct 15 12:28:38 vGate mpd: MRU 1500 Oct 15 12:28:38 vGate mpd: MAGICNUM 302bfc54 Oct 15 12:28:38 vGate mpd: AUTHPROTO CHAP MSOFTv2 Oct 15 12:28:38 vGate mpd: pptp0-0: ignoring SetLinkInfo Oct 15 12:28:38 vGate mpd: [pptp0] LCP: rec'd Configure Request #0 link 0 (Req-Sent) Oct 15 12:28:38 vGate mpd: MAGICNUM 39507ff3 Oct 15 12:28:38 vGate mpd: PROTOCOMP Oct 15 12:28:38 vGate mpd: ACFCOMP Oct 15 12:28:38 vGate mpd: CALLBACK Oct 15 12:28:38 vGate mpd: Not supported Oct 15 12:28:38 vGate mpd: MP MRRU 1614 Oct 15 12:28:38 vGate mpd: ENDPOINTDISC [LOCAL] a9 ac 3a 6f a9 f9 46 50 88 7e e7 ed 18 7a 0c 33 00 00 00 08 Oct 15 12:28:38 vGate mpd: [pptp0] LCP: SendConfigRej #0 Oct 15 12:28:38 vGate mpd: CALLBACK http://www.freebsd.bip.ru/mpd.shtml (7 of 11)10.04.2004 17:26:23

Daemon News Russia

Oct 15 12:28:38 vGate mpd: MP MRRU 1614 Oct 15 12:28:38 vGate mpd: [pptp0] LCP: rec'd Configure Request #1 link 0 (Req-Sent) Oct 15 12:28:38 vGate mpd: MAGICNUM 39507ff3 Oct 15 12:28:38 vGate mpd: PROTOCOMP Oct 15 12:28:38 vGate mpd: ACFCOMP Oct 15 12:28:38 vGate mpd: ENDPOINTDISC [LOCAL] a9 ac 3a 6f a9 f9 46 50 88 7e e7 ed 18 7a 0c 33 00 00 00 08 Oct 15 12:28:38 vGate mpd: [pptp0] LCP: SendConfigAck #1 Oct 15 12:28:38 vGate mpd: MAGICNUM 39507ff3 Oct 15 12:28:38 vGate mpd: PROTOCOMP Oct 15 12:28:38 vGate mpd: ACFCOMP Oct 15 12:28:38 vGate mpd: ENDPOINTDISC [LOCAL] a9 ac 3a 6f a9 f9 46 50 88 7e e7 ed 18 7a 0c 33 00 00 00 08 Oct 15 12:28:38 vGate mpd: [pptp0] LCP: state change Req-Sent --> Ack-Sent Oct 15 12:28:40 vGate mpd: [pptp0] LCP: SendConfigReq #5 Oct 15 12:28:40 vGate mpd: ACFCOMP Oct 15 12:28:40 vGate mpd: PROTOCOMP Oct 15 12:28:40 vGate mpd: MRU 1500 Oct 15 12:28:40 vGate mpd: MAGICNUM 302bfc54 Авторизуемся по MSCHAP2 (Этот протокол использует MS Windows 2000 и выше) Oct 15 12:28:40 vGate mpd: AUTHPROTO CHAP MSOFTv2 Oct 15 12:28:40 vGate mpd: pptp0-0: ignoring SetLinkInfo Oct 15 12:28:40 vGate mpd: [pptp0] LCP: rec'd Configure Ack #5 link 0 (Ack-Sent) Oct 15 12:28:40 vGate mpd: ACFCOMP Oct 15 12:28:40 vGate mpd: PROTOCOMP Oct 15 12:28:40 vGate mpd: MRU 1500 Oct 15 12:28:40 vGate mpd: MAGICNUM 302bfc54 Oct 15 12:28:40 vGate mpd: AUTHPROTO CHAP MSOFTv2 Oct 15 12:28:40 vGate mpd: [pptp0] LCP: state change Ack-Sent --> Opened Oct 15 12:28:40 vGate mpd: [pptp0] LCP: phase shift ESTABLISH --> AUTHENTICATE Oct 15 12:28:40 vGate mpd: [pptp0] LCP: auth: peer wants nothing, I want CHAP Oct 15 12:28:40 vGate mpd: [pptp0] CHAP: sending CHALLENGE Oct 15 12:28:40 vGate mpd: [pptp0] LCP: LayerUp Oct 15 12:28:40 vGate mpd: [pptp0] LCP: rec'd Ident #2 link 0 (Opened) Oct 15 12:28:40 vGate mpd: MESG: MSRASV5.00 Oct 15 12:28:40 vGate mpd: [pptp0] LCP: rec'd Ident #3 link 0 (Opened) Oct 15 12:28:40 vGate mpd: MESG: MSRAS-1-DMN Oct 15 12:28:40 vGate mpd: [pptp0] CHAP: rec'd RESPONSE #1 Проверка имени пользователя и пароля Oct 15 12:28:40 vGate mpd: Name: "dmn" Oct 15 12:28:40 vGate mpd: Peer name: "dmn" Oct 15 12:28:40 vGate mpd: Response is valid Oct 15 12:28:40 vGate mpd: [pptp0] CHAP: sending SUCCESS Oct 15 12:28:40 vGate mpd: [pptp0] LCP: authorization successful Oct 15 12:28:40 vGate mpd: [pptp0] LCP: phase shift AUTHENTICATE --> NETWORK Oct 15 12:28:40 vGate mpd: [pptp0] up: 1 link, total bandwidth 64000 bps Oct 15 12:28:40 vGate mpd: [pptp0] IPCP: Up event Oct 15 12:28:40 vGate mpd: [pptp0] IPCP: state change Starting --> Req-Sent

http://www.freebsd.bip.ru/mpd.shtml (8 of 11)10.04.2004 17:26:23

Daemon News Russia

Oct 15 12:28:40 vGate mpd: [pptp0] IPCP: SendConfigReq #1 Oct 15 12:28:40 vGate mpd: IPADDR 10.128.1.193 Oct 15 12:28:40 vGate mpd: COMPPROTO VJCOMP, 16 comp. channels, no comp-cid Oct 15 12:28:40 vGate mpd: [pptp0] CCP: Open event Oct 15 12:28:40 vGate mpd: [pptp0] CCP: state change Initial --> Starting Oct 15 12:28:40 vGate mpd: [pptp0] CCP: LayerStart Oct 15 12:28:40 vGate mpd: [pptp0] CCP: Up event Oct 15 12:28:40 vGate mpd: [pptp0] CCP: state change Starting --> Req-Sent Oct 15 12:28:40 vGate mpd: [pptp0] CCP: SendConfigReq #1 Oct 15 12:28:40 vGate mpd: MPPC Oct 15 12:28:40 vGate mpd: 0x01000060: MPPE, 40 bit, 128 bit, stateless Oct 15 12:28:40 vGate mpd: [pptp0] CCP: rec'd Configure Request #4 link 0 (Req-Sent) Используется 40-битный ключ Oct 15 12:28:40 vGate mpd: MPPC Oct 15 12:28:40 vGate mpd: 0x010000a1: MPPC MPPE, 40 bit, 56 bit, stateless Oct 15 12:28:40 vGate mpd: [pptp0] CCP: SendConfigNak #4 Oct 15 12:28:40 vGate mpd: MPPC Oct 15 12:28:40 vGate mpd: 0x01000020: MPPE, 40 bit, stateless Oct 15 12:28:40 vGate mpd: [pptp0] IPCP: rec'd Configure Request #5 link 0 (Req-Sent) Oct 15 12:28:40 vGate mpd: IPADDR 0.0.0.0 Oct 15 12:28:40 vGate mpd: NAKing with 10.128.5.200 Oct 15 12:28:40 vGate mpd: PRIDNS 0.0.0.0 Oct 15 12:28:40 vGate mpd: NAKing with 10.128.1.1 Oct 15 12:28:40 vGate mpd: PRINBNS 0.0.0.0 Oct 15 12:28:40 vGate mpd: NAKing with 10.128.1.42 Oct 15 12:28:40 vGate mpd: SECDNS 0.0.0.0 Oct 15 12:28:40 vGate mpd: SECNBNS 0.0.0.0 Oct 15 12:28:40 vGate mpd: [pptp0] IPCP: SendConfigRej #5 Oct 15 12:28:40 vGate mpd: SECDNS 0.0.0.0 Oct 15 12:28:40 vGate mpd: SECNBNS 0.0.0.0 Oct 15 12:28:40 vGate mpd: [pptp0] IPCP: rec'd Configure Reject #1 link 0 (Req-Sent) Oct 15 12:28:40 vGate mpd: COMPPROTO VJCOMP, 16 comp. channels, no comp-cid Oct 15 12:28:40 vGate mpd: [pptp0] IPCP: SendConfigReq #2 Oct 15 12:28:40 vGate mpd: IPADDR 10.128.1.193 Oct 15 12:28:40 vGate mpd: [pptp0] CCP: rec'd Configure Request #6 link 0 (Req-Sent) Oct 15 12:28:40 vGate mpd: MPPC Oct 15 12:28:40 vGate mpd: 0x01000020: MPPE, 40 bit, stateless Oct 15 12:28:40 vGate mpd: [pptp0] CCP: SendConfigAck #6 Oct 15 12:28:40 vGate mpd: MPPC Oct 15 12:28:40 vGate mpd: 0x01000020: MPPE, 40 bit, stateless Oct 15 12:28:40 vGate mpd: [pptp0] CCP: state change Req-Sent --> Ack-Sent Oct 15 12:28:40 vGate mpd: [pptp0] IPCP: rec'd Configure Request #7 link 0 (Req-Sent) Oct 15 12:28:40 vGate mpd: IPADDR 0.0.0.0 Oct 15 12:28:40 vGate mpd: NAKing with 10.128.5.200 Oct 15 12:28:40 vGate mpd: PRIDNS 0.0.0.0 Oct 15 12:28:40 vGate mpd: NAKing with 10.128.1.1 Oct 15 12:28:40 vGate mpd: PRINBNS 0.0.0.0 Oct 15 12:28:40 vGate mpd: NAKing with 10.128.1.42 Oct 15 12:28:40 vGate mpd: [pptp0] IPCP: SendConfigNak #7 Oct 15 12:28:40 vGate mpd: IPADDR 10.128.5.200 Oct 15 12:28:40 vGate mpd: PRIDNS 10.128.1.1 http://www.freebsd.bip.ru/mpd.shtml (9 of 11)10.04.2004 17:26:23

Daemon News Russia

Oct 15 12:28:40 vGate mpd: PRINBNS 10.128.1.42 Oct 15 12:28:40 vGate mpd: [pptp0] IPCP: rec'd Configure Ack #2 link 0 (Req-Sent) Oct 15 12:28:40 vGate mpd: IPADDR 10.128.1.193 Oct 15 12:28:40 vGate mpd: [pptp0] IPCP: state change Req-Sent --> Ack-Rcvd Oct 15 12:28:40 vGate mpd: [pptp0] IPCP: rec'd Configure Request #8 link 0 (Ack-Rcvd) Oct 15 12:28:40 vGate mpd: IPADDR 10.128.5.200 Oct 15 12:28:40 vGate mpd: 10.128.5.200 is OK Oct 15 12:28:40 vGate mpd: PRIDNS 10.128.1.1 Oct 15 12:28:40 vGate mpd: PRINBNS 10.128.1.42 Oct 15 12:28:40 vGate mpd: [pptp0] IPCP: SendConfigAck #8 Oct 15 12:28:40 vGate mpd: IPADDR 10.128.5.200 Oct 15 12:28:40 vGate mpd: PRIDNS 10.128.1.1 Oct 15 12:28:40 vGate mpd: PRINBNS 10.128.1.42 Oct 15 12:28:40 vGate mpd: [pptp0] IPCP: state change Ack-Rcvd --> Opened Oct 15 12:28:40 vGate mpd: [pptp0] IPCP: LayerUp Oct 15 12:28:40 vGate mpd: 10.128.1.193 -> 10.128.5.200 Oct 15 12:28:40 vGate mpd: [pptp0] IFACE: Up event Oct 15 12:28:40 vGate mpd: [pptp0] exec: /sbin/ifconfig ng0 10.128.1.193 10.128.5.200 netmask 0xffffffff -link0 Oct 15 12:28:40 vGate mpd: [pptp0] exec: /usr/sbin/arp -s 10.128.5.200 0:30:4f:e:d5:fd pub Oct 15 12:28:40 vGate mpd: [pptp0] IFACE: Up event Oct 15 12:28:40 vGate mpd: [pptp0] rec'd unexpected protocol IP on link 0 Oct 15 12:28:42 vGate mpd: [pptp0] CCP: SendConfigReq #2 Oct 15 12:28:42 vGate mpd: MPPC Oct 15 12:28:42 vGate mpd: 0x01000060: MPPE, 40 bit, 128 bit, stateless Oct 15 12:28:44 vGate mpd: [pptp0] CCP: SendConfigReq #3 Oct 15 12:28:44 vGate mpd: MPPC Oct 15 12:28:44 vGate mpd: 0x01000060: MPPE, 40 bit, 128 bit, stateless Oct 15 12:28:46 vGate mpd: [pptp0] CCP: SendConfigReq #4 Oct 15 12:28:46 vGate mpd: MPPC Oct 15 12:28:46 vGate mpd: 0x01000060: MPPE, 40 bit, 128 bit, stateless Oct 15 12:28:47 vGate mpd: [pptp0] CCP: rec'd Configure Nak #2 link 0 (Ack-Sent) Oct 15 12:28:47 vGate mpd: Wrong id#, expecting 4 Oct 15 12:28:47 vGate mpd: [pptp0] CCP: rec'd Configure Nak #3 link 0 (Ack-Sent) Oct 15 12:28:47 vGate mpd: Wrong id#, expecting 4 Oct 15 12:28:47 vGate mpd: [pptp0] CCP: rec'd Configure Nak #4 link 0 (Ack-Sent) Oct 15 12:28:47 vGate mpd: MPPC Oct 15 12:28:47 vGate mpd: 0x01000020: MPPE, 40 bit, stateless Oct 15 12:28:47 vGate mpd: [pptp0] CCP: SendConfigReq #5 Oct 15 12:28:47 vGate mpd: MPPC Oct 15 12:28:47 vGate mpd: 0x01000020: MPPE, 40 bit, stateless Oct 15 12:28:47 vGate mpd: [pptp0] CCP: rec'd Configure Ack #5 link 0 (Ack-Sent) Oct 15 12:28:47 vGate mpd: MPPC Oct 15 12:28:47 vGate mpd: 0x01000020: MPPE, 40 bit, stateless Oct 15 12:28:47 vGate mpd: [pptp0] CCP: state change Ack-Sent --> Opened Oct 15 12:28:47 vGate mpd: [pptp0] CCP: LayerUp Oct 15 12:28:47 vGate mpd: Compress using: MPPE, 40 bit, stateless Oct 15 12:28:47 vGate mpd: Decompress using: MPPE, 40 bit, stateless И должен появиться сетевой интерфейс, обслуживающий соединение: ng0: flags=88d1 mtu 1496 inet 10.128.1.193 --> 10.128.5.200 netmask 0xffffffff http://www.freebsd.bip.ru/mpd.shtml (10 of 11)10.04.2004 17:26:23

Daemon News Russia

У нас же при этом работало "сетевое окружение" и прикреплялись сетевые диски и принтеры. Что хорошо и что плохо. Плюсы: ●

● ●





решение вполне рабочее и может применяться для организации доступа клиентов к корпоративной сети; решение позволяет полностью заменить Windows-сервер; решение совместимо с Windows-сервером и поэтому не требуется дополнительных установок и настроек клиентского оборудования; решение поддерживает шифрацию, шифрованную авторизацию и компрессию данных по протоколам, совместимым с Microsoft. решение проверено для Windows 95,98,Me,2000,XP

Минусы: ●

необходимо прописывать пользователей в файле mpd.secret. К сожалению пока не существует решения, авторизующего пользователя прямо из Windows-домена. Решения, аналогичные авторизации в SQUID через winbind не могут быть применены, т.к. при шифрации пароля он приходит в "закрытом" виде и его не передать на внешний авторизатор.

Ссылки ● ● ● ●

Описание MPD http://www.freebsd.org/cgi/url.cgi?ports/net/mpd/pkg-descr Сайт PopTop http://www.poptop.org/ О системе NETGRAPH: http://www.daemonnews.org/200003/netgraph.html Патчи к mpd для запуска внешних авторизаторов http://www.itga.com.au/~gnb/vpn/

Автор: Дмитрий Новиков

(c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/mpd.shtml (11 of 11)10.04.2004 17:26:23

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Мини-руководство по созданию Makefile-ов новости

Введениe Допустим, вы разрабатываете некую программу под названием foo, состоящую из пяти заголовочных файлов -- 1.h, 2.h, 3.h, 4.h и -- 5.h, и шести файлов с исходным текстом программы на языке С - 1.cpp, 2.cpp, 3.cpp, 4.cpp, 5.cpp и main.cpp. (Хочу заметить, что в реальных проектах следует избегать подобного стиля именования файлов). Теперь представим себе, что вы обнаружили ошибку в файле 2.cpp и исправили ее. Далее, чтобы получить исправленную версию программы вы компилируете все файлы, входящие в состав проекта, хотя изменения коснулись только одного файла. Это приводит к нерациональной потере времени, особенно если компьютер не слишком быстрый. Существует ли решение проблемы? Не стоит беспокоиться, друзья мои! Эта проблема уже давно решена. Опытными программистами была разработана утилита make. Вместо того, чтобы производить повторную компиляцию всех файлов с исходными текстами, она обрабатывает только те файлы, которые претерпели изменения. В нашем случае будет скомпилирован только один файл - 2.cpp. Разве это не здорово!? Кроме того: ●



● ●

Утилита make значительно упрощает жизнь, когда для сборки проекта необходимо выполнение длинных и сложных команд. Проект иногда требует задания редко используемых, а потому сложных для запоминания опций компилятора. make избавит вас от необходимости удерживать их в памяти. Единообразие, т.к. работа с этой утилитой поддерживается многими средами разработки. Процесс сборки можно автоматизировать, поскольку make может быть вызвана из сценариев или из cron.

Для чего нужен Makefile? Несмотря на все свои достоинства, утилита make ничего не знает о нашем проекте, поэтому необходимо создать простой текстовый файл, который будет содержать все необходимые инструкции по сборке. Файл с инструкциями по сборке проекта называется makefile (произносится как "мэйкфайл". прим. перев.). Как правило этим файлам дается имя makefile или Makefile, в соответствии с соглашениями по именованию таких файлов. Если же вы дадите файлу инструкций другое имя, то вам потребуется вызывать утилиту make с ключом -f. http://www.freebsd.bip.ru/heriyanto.shtml (1 of 4)10.04.2004 17:26:25

Daemon News Russia

Например, если свой makefile вы назвали bejo, то команда на сборку проекта будет выглядеть так: make -f bejo Структура файла Makefile содержит разделы для "целей" [targets], зависимостей [dependencies] и правил (rules) сборки. Все это оформляется следующим образом: сначала указывается имя цели (обычно это имя исполняемого или объектного файла), после которого следует двоеточие, затем следуют имена зависимостей, т.е. файлов, необходимых для получения данной цели. И, наконец, следует список правил: т.е. команд, которые необходимо выполнить для получения указанной цели. Простой пример структуры makefile'а: target: dependencies command command ... Каждое правило command должно начинаться с символа табуляции -- это обязательное условие! Отсутствие символа табуляции в начале строки с правилом - самая распространенная ошибка. К счастью, подобные ошибки легко обнаруживаются, так как утилита make сообщает о них. Пример Makefile Ниже приводится простой пример (номера строк добавлены для ясности). 1 client: conn.o 2 g++ client.cpp conn.o -o client 3 conn.o: conn.cpp conn.h 4 g++ -c conn.cpp -o conn.o В этом примере строка, содержащая текст client: conn.o, называется "строкой зависимостей", а строка g++ client.cpp conn.o -o client называется "правилом" и описывает действие, которое необходимо выполнить. А теперь более подробно о примере, приведенном выше: ●

● ●

Задается цель -- исполняемый файл client, который зависит от объектоного файла conn.o Правило для сборки данной цели В третьей строке задается цель conn.o и файлы, от которых она зависит -- conn.cpp и conn.h.

http://www.freebsd.bip.ru/heriyanto.shtml (2 of 4)10.04.2004 17:26:25

Daemon News Russia ●

В четвертой строке описывается действие по сборке цели conn.o.

Комментарии Строки, начинающиеся с символа "#", являются комментариями Ниже приводится пример makefile с комментариями: 1 2 3 4 5 6 7

# Создать исполняемый файл "client" client: conn.o g++ client.cpp conn.o -o client # Создать объектный файл "conn.o" conn.o: conn.cpp conn.h g++ -c conn.cpp -o conn.o

"Ложная" цель Обычно "ложные" [phony] цели, представляющие "мнимое" имя целевого файла, используются в случае возникновения конфликтов между именами целей и именами файлов при явном задании имени цели в командной строке. Допустим в makefile имеется правило, которое не создает ничего, например: clean:

rm *.o temp

Поскольку команда rm не создает файл с именем clean, то такого файла никогда не будет существовать и поэтому команда make clean всегда будет отрабатывать. Однако, данное правило не будет работать, если в текущем каталоге будет существовать файл с именем clean. Поскольку цель clean не имеет зависимостей, то она никогда не будет считаться устаревшей и, соответственно, команда 'rm *.o temp' никогда не будет выполнена. (при запуске make проверяет даты модификации целевого файла и тех файлов, от которых он зависит. И если цель оказывается "старше", то make выполняет соответствующие командыправила -- прим. ред.) Для устранения подобных проблем и предназначена специальная декларация .PHONY, объявляющая "ложную" цель. Например: .PHONY : clean Таким образом мы указываем необходимость исполнения цели, при явном ее указании, в виде make clean вне зависимости от того - существует файл с таким именем или нет. Переменные Определить переменную в makefile вы можете следующим образом: $VAR_NAME=value http://www.freebsd.bip.ru/heriyanto.shtml (3 of 4)10.04.2004 17:26:25

Daemon News Russia

В соответствии с соглашениями имена переменных задаются в верхнем регистре: $OBJECTS=main.o test.o Чтобы получить значение переменной, необходимо ее имя заключить в круглые скобки и перед ними поставить символ '$', например: $(VAR_NAME) В makefile-ах существует два типа переменных: "упрощенно вычисляемые" и "рекурсивно вычисляемые". В рекурсивно вычисляемых переменных все ссылки на другие переменные будут замещены их значениями, например: TOPDIR=/home/tedi/project SRCDIR=$(TOPDIR)/src При обращении к переменной SRCDIR вы получите значение /home/tedi/project/src. Однако рекурсивные переменные могут быть вычислены не всегда, например следующие определения: CC = gcc -o CC = $(CC) -O2 выльются в бесконечный цикл. Для разрешения этой проблемы следует использовать "упрощенно вычисляемые" переменные: CC := gcc -o CC += $(CC) -O2 Где символ ':=' создает переменную CC и присваивает ей значение "gcc -o". А символ '+=' добавляет "-O2" к значению переменной CC. Заключение Я надеюсь, что это краткое руководство содержит достаточно информации, чтобы начать создавать свои makefile. А за сим -- успехов в работе. Автор: Tedi Heriyanto Перевод: Андрей Киселев (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/heriyanto.shtml (4 of 4)10.04.2004 17:26:25

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Система фильтрации интернет траффика на основе squidGuard + Apache + Squid + Berkeley DB новости

Целью данных записок является создание простой в управлении и, в то же время, гибкой в настройке системы фильтрации интернет трафика. Строить мы ее будем на основе FreeBSD 4.5 + Squid + SquidGuard + Berkeley DB 3.2.9 + Apache. Стоит отметить что обсуждаемые в этой статье приемы будут работать и на основе Linux. В принципе такой комплекс можно построить на любой Unix совместимой системе. Главной проблемой будет неоходимость найти версии SquidGuard и Squid для этой системы. Вместо Apache можно использовать любой другой Web сервер. Кстати Web сервер можно запустить на одельной машине под управлением любой операционной системы. В то же время можно использовать уже существующий Web сервер. Не стоит отчаиваться, если база данных Berkeley DB еще не портирована для Вашей платформы. SquidGuard легко может работать и без нее. Вы можете спросить зачем нам нужны все эти сложности? Как любой другой ресурс интернет траффик имет обыкновение заканчиваться. Да и канал от нас к провайдеру не резиновый, Отсюда вывод - необходимо тем или иным образом ограничить аппетиты пользователей. С другой стороны если начальство поймает кого-то из сотрудников за просмотром порносайтов или скачиванием mp3, нагоняй получит не только провинившийся. Администратор будет виноват в том, что позволяет пользователям тратить оплачиваемый организацией трафик на всякую ерунду. В тоже время стоит помнить что разные организации могут иметь различные правила пользования интернет. Довольно часто в списке запретов можно встретить не только эротику, но и сайты анекдотов, форумы и чаты. Например бесплатные почтовые сайты могут быть запрещены из сображения секретности. Одновремнно можно запретить пользователям скачивать из наружной сети выполняемые файлы. Это существено снижает опасность вирусного заражения сети. В тоже время перед нами все еще стоит задача экономии траффика. Существенно снизить его потребление поможет запрещение бесполезной для нас баннерной рекламы. Вы могли бы спросить что в баннерах плохого? Squid - кеширующий прокси соответственно скачиваемые файлы ложатся в локальный кэш. При следующих запросах эти файлы уже не будут скачиваться из интернета. Проблема в том что баннерная реклама построена на применении механизма CGI. CGI (Common Gateway Interface) - расшифровыается как Общий интерфейс шлюза. Характерным признаком CGI является использование знака "?" в адресной строке запроса. Например адрес одного из баннеров Украинской баннерной сети выглядит так : http://banner.kiev.ua/cgi-bin/bi.cgi?h" + user + "&"+ pid + "&" + page + "&2 К сожалению CGI используется не только для баннерной рекламы, но и для чатов, форумов, сетевых магазинов и прочей полезной сетевой функциональности. То есть везде где необходимо получить от пользователя данные. Затем полученне данные должны быть обработаны, а результаты работы CGI необходимо вернуть пользователю. Значит для каждого пользователя не только запросы, но и ответы будут разные. Поэтому класть полученые документы в кэш squid бесполезно. По умолчанию squid не использует кэш при работе с динамическими документами. В свою очередь это значит, что одни и те же баннеры будут выкачиваться бесконечно. Резко снизить количество потребляемого траффика можно подменяя банеры пустыми картинками с локального Web сервера. Многие администраторы уже столкнувшиеся с вышеописанным комплексом проблем могут утверждать, что они легко решатся с помощью штатных средств Squid. Я не стану отрицать что Access Control List (Списки контроля доступа) сокращенно ACL, используемые в Squid это довольно мощный инструмент. Но для работы с ним требуется достаточно большой опыт. С другой стороны трудно представить каким образом администратор будет разбираться какие сайты он должен блокировать. Остается только всед за пользователями ходить на все часто посещаемые сайты, и постепенно запрещать неугодных. Учитывая http://www.freebsd.bip.ru/squidguard.shtml (1 of 16)10.04.2004 17:26:29

Daemon News Russia

количество сайтов интернет, а так же распространенность баннерной рекламы такой путь выглядит утопией. В начале такого ошибочного пути кажется что нужно всего лишь записывать все запрещенные сайты в отдельные файлы с помошью ACL записей типа: acl porno src "/usr/local/squid/etc/porno.lst" acl erotic src "/usr/local/squid/etc/erotic.lst" А затем запрещать их всех скопом. Но обслуживание такой системы способно превратиться в головную боль уже на первой тысячи сайтов. Squid загружает списки контроля доступа в оперативную память. С добавлением новых сайтов размер файла будет постоянно расти. Соответственно и Squid будет занимать все больше оперативной памяти. В связи с тем что список запрещенных сайтов не упорядочен поиск в нем будет занимать довольно продолжительное время. Для сравнения Squidguard выполняет за 12 секунд 100.000 запросов к базе содержащей 205.900 записей. Тестирование проводилось на машине с процессором Pentium 500MHz. Такой скорости удается добиться за счет того, что SquidGuard хранит список сайтов в форме B-дерева. Как мы видим средствами Squid все вышеописанное выполнить достаточно тяжело. И тут в поле нашего внимания попадает класс программ под названием редиректоры. С разной степенью легкости эти программы позволяют решать наши проблемы. Используемый нами SquidGuard тоже является редиректором. Давайте коротко опишем его возможности. ●

может разрешить доступ некоторой группе пользователей только к некоторым сайтам



блокирует доступ пользователей к определенному списку адресов



позволяет запретить доступ к определенному списку адресов



помогает блокировать доступ к сайтам на основе списка регулярных выражений



запрещает пользователям использовать IP адреса вместо доменных имен внутри URL



позволяет запретить доступ к определенному списку адресов









дает возможность перенаправить пользователей, пытающихся получить доступ к запрещенным страницам, на другую страницу, где им будет объяснена причина запрета помогает перенаправить запросы на доставку часто скачиваемый файлов, таких как MSIE, Netscape Navigator или ICQ, к их локальным копиям позволяет использовать разные политики доступа в зависимости от времени дня, текущей даты, дня недели дает возможность гибкой настройки процесса протоколирования обрабатываемых запросов

В качестве кандидатов на место SquidGuard претендовали squirm и Jesred. После тестирования от squirm пришлось отказаться, потому что список фильтрации поддерживается всего один на всех пользователей. Соответственно запретить что-либо конкретному пользователю не представляется возможным. Запрещать приходится либо всем, либо никому. К тому же список сайтов приходится хранить в виде довольно сложных и неудобных для восприятия регулярных выражений. По моему мнению, такое ограничение не позволяет использовать squirm в сетях средних и больших размеров. Затем мне под руку попался Jesred. Несмотря на то, что Jesred является модернизированным потомком squirm и имеет более гибкий синтаксис файла шаблонов, он все еще страдает от тех же детских проблем. Единственное улучшение в этой области достаточно высокая скорость работы и возможность пропускать запросы некоторых пользователей без фильтрации. Как Вы понимает в этом случае ни о каком гибком http://www.freebsd.bip.ru/squidguard.shtml (2 of 16)10.04.2004 17:26:29

Daemon News Russia

разграничении полномочий пользователей и речи быть не может. Ну что же, теперь когда с формальностями и изучением начальной теории покончено, приступим к установке. Я думаю, нижеприведенных инструкций по настройке Apache и Squid хватит, что бы установить их в комплектации по умолчанию. Для получения более подробных сведений вам стоит посетить следующие сайты: http://apache.lexa.ru/ http://www.squid-cache.org/ http://squid.opennet.ru/ В процессе компиляции всего програмного обеспечения вместо стандартного make мною использовался gmake, но это опять же вопрос личных предпочтений. Мне кажется, что gmake работает стабильнее и быстрее. В качестве прокси сервера я использовал squid 2.5.STABLE1. На момент написания статьи это была самая свежая версия. Взять ее можно здесь. Рекомендуется всегда использовать самые новейшие из стабильных версий программ. Такой подход позволит в дальнейшем избежать многих проблем со стабильностью и безопасностью работы той или иной программы. # # # # #

tar zxvf squid-2.5.STABLE1-src.tar.gz cd squid-2.5.STABLE1 ./configure gmake gmake install

После инсталяции редактируем файл конфигурации squid, находящийся в файле /usr/local/squid/etc/squid. conf. Должно получиться примерно следующее: http_port 3128

# Обрабатывать запросы на порт 3128

hierarchy_stoplist cgi-bin ? acl QUERY urlpath_regex cgi-bin \?

# Запрещаем кэшировать CGI

no_cache deny QUERY cache_mem 64 MB

# Размер оперативной памяти отводимой под кэш

error_directory /usr/local/squid/share/errors/ Russian-koi8-r

#Тут мы будем брать файлы стандартных сообщений об ошибках

maximum_object_size 16384 KB

# Максимальный размер объекта записываемого в кэш

cache_dir ufs /usr/local/squid/cache 5000 16 256

# Здесь у нас будет храниться кэш. Отводим под него места 5000 мгб. Приказываем создать 16 директорий первого уровня и 256 второго уровня.

cache_access_log /usr/local/squid/logs/ access.log

# Протокол доступа к кэшу

cache_log /usr/local/squid/logs/cache.log

# Тут находится протокол работы кэша

cache_store_log /usr/local/squid/logs/store.log # Протокол работы менеджера кэша ftp_user [email protected]

# Под этим пользователем будем ходить по Ftp

http://www.freebsd.bip.ru/squidguard.shtml (3 of 16)10.04.2004 17:26:29

Daemon News Russia

quick_abort_pct 60

# Если Squid уже скачал 60% файла, а пользователь отказался его забирать, то все равно продолжать скачивать файл.

negative_ttl 1 minutes

# Время жизни запросов завершившихся ошибкой. Например "connection refused" или "404 Not Found"

positive_dns_ttl 6 hours

# Время жизни успешного DNS запроса.

negative_dns_ttl 5 minutes

# Время жизни DNS запросов завершившихся ошибкой.

half_closed_clients on

Поддержка нестандартных Http клиенттов

acl all src 0.0.0.0/0.0.0.0 acl manager proto cache_object

# Минимальные рекомендуемые права

acl localhost src 127.0.0.1/255.255.255.255 acl SSL_ports port 443 563

# Ssl

acl Safe_ports port 80

# http

acl Safe_ports port 21

# ftp

acl Safe_ports port 443 563

# https, snews

acl Safe_ports port 70

# gopher

acl Safe_ports port 210

# wais

acl Safe_ports port 1025-65535

# unregistered ports

acl Safe_ports port 280

# http-mgmt

acl Safe_ports port 488

# gss-http

acl Safe_ports port 591

# filemaker

acl Safe_ports port 777

# multiling http

acl CONNECT method CONNECT acl users src "/usr/local/squid/etc/users.txt"

# описываем наших пользователей

http_access allow manager localhost http_access deny manager http_access deny !Safe_ports http_access allow users http_access deny !Safe_ports

# Разрешаем соединения только по правильным портам. И раздаем всем права доступа

http_access deny CONNECT !SSL_ports http_access deny all cache_mgr [email protected]

# Адрес пользователя которого будут уведомлять о переполнении кэша

cache_effective_user nobody

# Пользователь от имени которого будет работать Squid

cache_effective_group nogroup

# Группа от имени которой будет работать Squid

forwarded_for on

# Включать ли IP адресс клиента в заголовок Http запроса

cachemgr_passwd passwd all

# Разрешаем управлять кэшем с помощью cachemgr.cgi. В качестве пароля будем использовать слово "passwd"

client_db on

# Включаем сбор статистики по каждому клиенту

http://www.freebsd.bip.ru/squidguard.shtml (4 of 16)10.04.2004 17:26:29

Daemon News Russia

Обращаю Ваше внимание на строку acl users src "/usr/local/squid/etc/users.txt". Она означает, что список пользователей, которым разрешен доступ к squid, находится в файле /usr/local/squid/etc/users.txt Файл списка имеет следующий формат: #Петрова Наталья (Снабжение) 192.168.10.91/32 #Иванов Владимир (Доставка) 192.168.10.92/32 #Сергеев Игорь (Плановый отдел) 192.168.10.93/255.255.255.255 #Кривоухина Ирина (Лаборатория) 192.168.10.94/255.255.255.255 #Синицына Светлана (секретарь генерального директора) 192.168.10.95/255.255.255.255 Реально в списке содержатся не имена пользователей, а IP адреса их машин. Как Вы смогли убедиться все устроено достаточно просто. Отдельный файл со списком пользователей решено использовать, что бы не захламлять главный конфигурационный файл. Users.txt должен иметь те же права доступа, что и squid.conf для того что бы squid мог читать его содержимое. # chown nobody:nogroup /usr/local/squid/etc/users.txt Возможен и другой вариант управления доступом к web. При это доступ в наружнюю сеть средствами squid не ограничивается. Разграничением доступа в этом случае будет заниматься SquidGuard. Для тех пользователей, чей адрес не внесен в файл /usr/local/squidGuard/squidGuard.conf, производится перенаправление на страницу запрещения. Соответственно, эти пользователи никогда интернета не увидят. Чтобы добиться такого эффекта, нужно удалить из squid.conf строки: acl users src "/usr/local/squid/etc/users.txt" http_access allow users http_access deny all И добавить в squid.conf вместо них строку http_access allow all Мне больше нравится второй вариант разграничения доступа. Если использовать традиционную схему разграничения прав, то проверка прав доступа происходит дважды. Сначала внутри Squid а затем в SquidGuard. Мне кажется что управлять доступом в одной точке, вместо двух гораздо удобнее. Но это опять же дело вкуса и эстетика чистейшей воды. Настало время создать директорию, в которой у нас будет храниться кэш squid. # mkdir /usr/local/squid/cache А тут у нас будут лежать логи. # mkdir /usr/local/squid/logs Нужно позаботиться, чтобы директории /usr/local/squid/cache и /usr/local/squid/logs были доступны пользователю, от имени которого работает squid. Узнать имя этого пользователя можно так: # cat /usr/local/squid/etc/squid.conf | grep cache_effectiv http://www.freebsd.bip.ru/squidguard.shtml (5 of 16)10.04.2004 17:26:29

Daemon News Russia

cache_effective_user nobody сache_effective_group nogroup Получается, что пользователя зовут nobody, и группа у него nogroup. # chown -R nobody /usr/local/squid/cache /usr/local/squid/logs # /usr/local/squid/sbin/squid -z Внутри директории /usr/local/squid/cache создаем иерархию директорий для хранения кэш файлов. Заглянув в /usr/local/squid/cache, вы сразу поймете, что имелось в виду под словом иерархия. Запускаем squid. # /usr/local/squid/sbin/squid -D А на другой консоли смотрим, какие сообщения об ошибках появляются в файле протокола. # tail -f /var/log/messages Если все сделали правильно, то ошибок мы так и не дождемся. Зато должны увидеть что-то подобное. Oct 3 12:15:05 dns squid[139]: Squid Parent: child process 141 started Это значит что, squid у нас заработал. Теперь примемся за установку Russian Apache. Я использовал весрсию 1.3.27 PL30.16. Ну а Вы как всегда берите новейший дистрибутив. Распаковываем его и ставим в комплекте по умолчанию. # # # #

tar zxvf apache_1.3.27rusPL30.16.tar.gz ./configure gmake gmake instal

Запускаем apache: /usr/local/apache/bin/apachectl start Создаем директорию, где будут лежать пустой баннер и файл mp3 с каким-либо забавным звуком. # mkdir /usr/local/apache/htdocs/replace Кладем туда 1x1.gif и my.mp3. Берем модифицированный block.cgi и копируем его в /usr/local/apache/cgi-bin Выставляем ему нужные права: # chown nobody:wheel /usr/local/apache/cgi-bin/block.cgi # chmod 500 /usr/local/apache/cgi-bin/block.cgi block.cgi это perl скрипт который будет вызываться каждый раз, когда пользователь попытается посетить запрещенную страницу. Взять его можно из архива с дистрибутивом squidGuard. В первоначальном варианте этот скрипт назывался squidGuard-1.2.0/samples/squidGuard.cgi.in. Можно использовать его, но все же лучше взять слегка модифицированный мною вариант. Мой, скрипт наверно, лучше, потому что руссифицированный. На его исправление ушло почти два часа.

http://www.freebsd.bip.ru/squidguard.shtml (6 of 16)10.04.2004 17:26:29

Daemon News Russia

Итак, все подготовительные работы окончены, и самое время взяться за установку squidGuard 1.2.0. Для его работы необходимо иметь Berkeley DB 3.2.9. В свою очередь, Berkeley DB не соберется без libtool. Довольно запутаная получается цепочка. Но бояться не стоит. Берем libtool из коллекции портированных приложений и как обычно, выполняем распаковку, копиляцию, а затем и установку.: # tar zxvf libtool-1.3.4.tar.gz # cd libtool-1.3.4 # ./configure # gmake # gmake install С выполнение этих действий не должно возникнуть никаких сложностей. Скачиваем Berkeley DB 3.2.9. Забираем два патча здесь или здесь. И снова: # tar zxvf db-3.2.9.tar.gz Копируем патч файлы в получившуюся после распаковки дистрибутива директорию db-3.2.9. Затем применяем их для модификации исходного кода. # # # #

cp patch.3.2.9.1 patch.3.2.9.2 ./db-3.2.9 cd /usr/local/src/db-3.2.9 patch -p0 < patch.3.2.9.1 patch -p0 < patch.3.2.9.2

А теперь снова компиляция. # # # #

cd build_unix ../dist/configure gmake gmake install

Забираем squidGuard-1.2.0. Распаковываем и компилируем: # tar zxvf squidGuard-1.2.0.tar.gz # cd squidGuard-1.2.0 # ./configure --prefix=/usr/local/squidGuard --with-db=/usr/local/BerkeleyDB.3.2 --with-sg-config=/usr/local/squidGuard/squidGuard.conf \ --with-sg-logdir=/usr/local/squidGuard/log \ --with-sg-dbhome=/usr/local/squidGuard/db Разберемся с ключами передаваемыми программе configure: --prefix=/usr/local/squidGuard

директория куда будет установлен squidGuard

--with-db=/usr/local/BerkeleyDB.3.2

тут находится используемая при линковке библиотека BerkeleyDB.3.2

--with-sg-config=/usr/local/squidGuard/ squidGuard.conf

местонахождение файла конфигурации squidGuard

--with-sg-logdir=/usr/local/squidGuard/log

директория для файлов протоколов

--with-sg-dbhome=/usr/local/squidGuard/ db

тут будут находиться списки блокируемых сайтов

http://www.freebsd.bip.ru/squidguard.shtml (7 of 16)10.04.2004 17:26:29

\

Daemon News Russia

# gmake # gmake test # gmake install Cоздаем для хранения файлов протоколирования работы squidGuard директорию /usr/local/squidGuard/log. # mkdir /usr/local/squidGuard/log Официальный список блокируемых доменов можно взять на сайте squidGuard. Так же доступен список от MESD. И еще один хороший список от Dansguardian. Кратко сравним их между собой: База

squidGuard

Mesd

dansguardian

ads adult

Комментарии реклама

нет

сайты для взрослых

aggressive

агрессия

audio-video

музыка и видео

chat

нет

forums

нет

нет

чаты форумы

drugs

наркотики

gambling

азартные игры

hacking

хакерство

local-block

нет

нет

сайты заблокированные местным админом

local-ok

нет

нет

сайты разрешенные местным админом

mail

бесплатные почтовые сервера

porn

порнография

proxy

общедоступные прокси сервера

publicite

нет

опять реклама

redirector

нет

анонимные прокси сервера

violence

насилие

warez

пиратское програмное обеспечение

Итак, вполне очевидно, что лучше всего взять список MESD или Dansguardian. Какой из них выбрать оставляю на Ваше личное усмотрение. И тот, и другой обновляются довольно часто. Но, во избежание перегрузки сервиса, не стоит качать списки чаще чем раз в неделю. Скачав себе один из списком распакуем его в директорию /usr/local/squidGuard/db : # tar zxvf blacklists.tgz -C /usr/local/squidGuard # mv /usr/local/squidGuard/blacklists /usr/local/squidGuard/db В директории /usr/local/squidGuard/db появилось несколько поддиректорий. В свою очередь, в каждой из них лежат файлы: domains

список доменов

http://www.freebsd.bip.ru/squidguard.shtml (8 of 16)10.04.2004 17:26:29

Daemon News Russia

urls

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

expression

выражения используемые при поиске в url. Например sex, hot, teens, porno и.т.д

Если бы мы взяли официальный список squidGuard, то внутри каждой директории можно было бы увидеть файлы обновлений к базам с такими названиями: domains.20020825.diff domains.20020901.diff domains.20020908.diff domains.20020915.diff domains.20020922.diff Внутри каждого из этих файлов находятся записи вида: +xratedpornsite.com +209.51.157.43 -zena.cenhost.com -scuzz.xtac.com Так же в директории находятся файлы: urls.20020825.diff urls.20020901.diff urls.20020908.diff urls.20020915.diff urls.20020922.diff С записями вроде -silva.org/look_at_me +recom.it/fuck/beatrice Записи, начинающиеся знаком "+", это запрос на добавление строчки в главную базу. Соответственно, строки с минусом имеют обратное назначение. К сожалению применить файлы обновления можно только к базе в формате Berkeley DB. Выполняется это действие командой squidGuard -u. Мне кажется, что такой способ обновления не очень удобен. Поэтому нам следует либо отказаться от списка доменов составленного squidGuard, либо написать конвертор обновлений в нормальный формат. Разобравшись с форматом базы приступим к конфигурированию squidGuard. Cоздаем файл /usr/local/ squidGuard/squidGuard.conf. И вносим в него вот это: logdir /usr/local/squidGuard/log logdir /usr/local/squidGuard/db

# тут у нас логи лежат # здесь базы

src it-department { ip 192.168.10.222-192.168.10.223

http://www.freebsd.bip.ru/squidguard.shtml (9 of 16)10.04.2004 17:26:29

# описываем адреса отдела ИТ

Daemon News Russia

}

src dostavka { ip 192.168.10.101, 192.168.10.104

# отдел доставки

}

src snab { ip 192.168.10.105

# отдел снабжения

}

rewrite mp3 { s@.*\.mp3$@http://192.168.10.9/replace/my.mp3@r

log rewr_mp3 }

# говорим что, все обращения к файлам *.mp3 нужно перенаправить на http://192.168.10.9/ replace/my.mp3 #и запротоколировать это событие в файле /usr/local/ squidGuard/log/ rewr_mp3

dest porn { domainlist porn/domains urllist porn/urls log porn

# описываем базу порносайтов # записать протокол в файл / usr/local/ squidGuard/log/ porn

}

dest ads { domainlist ads/domains

http://www.freebsd.bip.ru/squidguard.shtml (10 of 16)10.04.2004 17:26:29

# описываем базу рекламы # записать протокол в файл /

Daemon News Russia

urllist ads/urls log ads redirect http://192.168.10.9/replace/1x1.gif }

dest banners { domainlist banners/domains expressionlist banners/expressions urllist banners/urls redirect http://192.168.10.9/replace/1x1.gif log banners }

dest local-ok { domainlist local-ok/domains urllist local-ok/urls }

dest local-block {

domainlist local-block/domains

http://www.freebsd.bip.ru/squidguard.shtml (11 of 16)10.04.2004 17:26:29

usr/local/ squidGuard/log/ads # подменяем все баннеры прозрачным изоражением размером 1x1 пиксель

# описываем свою собственную базу баннерных систем # в этом файле записаны выражения типа baner, banner, ads, show_ads # перенаправляем все запросы на прозрачный gif размером 1x1 пиксель

# описываем домены которые не должны блокироваться никогда # вне зависимости от списка скачиваемого из сети

# описываем домены которые должны быть заблокированы всегда # вне зависимости от списка скачиваемого из сети

Daemon News Russia

urllist local-block/urls

#и перенаправляем все запросы на block.cgi

redirect http://192.168.10.9/cgi-bin/block.cgi? clientaddr=%a&clientname=%n&clientident= %i&clientgroup=%s&targetgroup=%t&url=%u }

acl {

# начинаем раздавать права

it-department { pass local-ok !banners !ads all

# отделу ИТ можно все кроме рекламы

}

dostavka { pass local-ok !porn !banners !ads !local-block all redirect http://192.168.10.9/cgi-bin/block.cgi? clientaddr=%a&clientname=%n&clientident= %i&clientgroup=%s&targetgroup=%t&url=%u rewrite mp3 }

snab {

pass local-ok none

http://www.freebsd.bip.ru/squidguard.shtml (12 of 16)10.04.2004 17:26:29

# отделу снабжения разрешаем только то что определено в local-ok # так можно дать пользователю доступ только к избранным сайтам

Daemon News Russia

redirect http://192.168.10.9/cgi-bin/block.cgi? clientaddr=%a&clientname=%n&clientident= %i&clientgroup=%s&targetgroup=%t&url=%u rewrite mp3 }

default {

pass none

# действия выполняемые по умолчанию, если пользователь не описан ни в одном src # блокируем все

redirect http://192.168.10.9/cgi-bin/block.cgi? clientaddr=%a&clientname=%n&clientident= %i&clientgroup=%s&targetgroup=Not_Authorized&url=%u log default

# пишем логи в файл /usr/local/ squidGuard/log/ default

}

}

# закрываем список acl

Кстати не забудьте скачать мою базу баннеров. Потом вы сможете вносить в нее свои собственные записи. Иначе при запуске squidGuard будет жаловаться на ее отсутствие, и становиться в режим холостой работы. В этом режиме он будет пропускать все запросы без обработки. Покончив с файлом конфигурации, продолжим настройку squidGuard. Даем права пользователю, от имени которого будет работать squidGuard на директории log и db. Так же поступаем и с файлом squidGuard.conf. # chown -R nobody /usr/local/squidGuard/log /usr/local/squidGuard/db # chown nobody /usr/local/squidGuard/squidGuard.conf SquidGuard может работать с текстовыми базами данных, но в таком случае при каждом запуске ему приходится создавать в оперативной памяти бинарное дерева всех загружаемых баз в формате Berkeley DB. Этот процесс занимает довольно продолжительное время. Подобных задержек можно избежать, если заранее самому создать базы в нужном формате. На моей машине после создания баз время загрузки сократилось почти в 10 раз. Поэтому мы напишем скрипт для перестройки баз и перезапуска squidGuard с новыми базами. # cat > /usr/local/squidGuard/bin/rebuid_base.sh #!/bin/sh

http://www.freebsd.bip.ru/squidguard.shtml (13 of 16)10.04.2004 17:26:29

Daemon News Russia

/usr/local/squidGuard/bin/squidGuard -C all chown -R nobody /usr/local/squidGuard/db killall -HUP squid ^D Устанавливаем нужные права доступа на файл rebuid_base.sh. Так же необходимо убедиться что этот скрипт имеет право запускать только пользовать root. # chmod 100 /usr/local/squidGuard/bin/rebuid_base.sh # /usr/local/squidGuard/bin/rebuid_base.sh Запустив rebuid_base.sh, необходимо дождаться нормального завершения задачи. Теперь во всех директориях, упомянутых в разделах dest конфигурационного файла, появились файлы баз данных domains. db и urls.db. Перед тем как подключать squidGuard к squid, необходимо протестировать его локально. Для начала немного теории. Squid передает данные на стандартный ввод редиректора. Редиректор, в свою очередь, обрабатывает запрос и выдает на стандарный вывод результаты своей работы. Затем squid забирает эти данные. Редиректор отвечает на запрос от squid либо пустой строкой, если перенаправление не требуется, либо измененным URL. Формат запроса от squid к редиректору выглядит так: URL http://test.ru/win2000/setup.exe

адрес клиента

разделитель

метод запроса

127.0.0.1/

-

GET

Для того чтобы проверить как squidGuard будет реагировать на запросы пользователей, скачиваем написанную мною тестовую программу test.tar.gz. Распаковываем ее и кладем полученный файл test.pl в /usr/ local/squidGuard/bin/. Устанавливаем файлу test.pl разрешение на выполнение. Затем запускаем test.pl и вводим тестируемый адрес. После этого в файле result.txt смотрим результаты работы squidGuard. Набор тестируемых сайтов можно изменять прямо в файле test.pl. Если результаты теста Вас удовлетворили, значит самое время объединить squidGuard и Squid. В файл /usr/local/squid/etc/squid.conf добавляем строки:

redirector_bypass on

# если не один из экземпляров squidGuard не # отвечает, то работать напрямую

redirect_program /usr/local/squidGuard/bin/squidGuard redirect_children 1

# где находится squidGuard # сколько экземрляров squidGuard запускать

Перезапускаем squid. В свою очередь, squid самостоятельно выполнит перезапуск всех дочерних процессов редиректоров. # killall -HUP squid В конце файла /usr/local/squidGuard/log/squidGuard.log ищем такие строки: 2002-10-15 16:11:04 [10653] squidGuard 1.2.0 started (1034683864.337) 2002-10-15 16:11:04 [10653] squidGuard ready for requests (1034683864.353) Если они есть, значит все работает как положено. Теперь сделаем так, что бы Squid и Apache запускались http://www.freebsd.bip.ru/squidguard.shtml (14 of 16)10.04.2004 17:26:29

Daemon News Russia

автоматически при каждой загрузке машины. # cat > /usr/local/etc/rc.d/apache.sh #!/bin/sh /usr/local/apache/bin/apachectl start ^D # cat > /usr/local/etc/rc.d/squid.sh #!/bin/sh /usr/local/squid/bin/squid -D ^D # chmod 100 /usr/local/etc/rc.d/apache.sh /usr/local/etc/rc.d/squid.sh Настало время перезапустить компьютер и наслаждаться тем, как все гладко работает. Для проверки стоит перезагрузить машину . Это даст нам возможность посмотреть как сервисы поведут себя при возможных перебоях в подаче электричеста. В качестве маленького бонуса можно наладить автоматическое обновление базы доменов. Для скачивания файла базы доменов нам понядобится программа wget. Конечно можно было обойтись и стандартным fetch. Но все же wget работает надежнее. Распаковываем и ставим как обычно. # # # # #

tar zxvf wget-1.8.2.tar.gz cd wget-1.8.2 ./configure gmake gmake install

Смотрим, куда он у нас установился. # where wget /usr/local/bin/wget Пишем скрипт, который будет выкачивать обновления с сайта MESD и класть их в директорию /usr/local/ squidGuard/update. Затем архив с обновлениями будет распакован и скопирован в директорию /usr/local/ squidGuard/bd. После этого будет произведена перестройка баз и перезапуск squid. #cat > /usr/local/squidGuard/bin/update_blacklist.sh #!/bin/sh /usr/local/bin/wget -q --cache=off 'http://squidguard.mesd.k12.or.us/blacklists.tgz' -O /usr/local/squidGuard/update/blacklist.tgz tar zxvf /usr/local/squidGuard/update/blacklist.tgz -C /usr/local/squidGuard/update/ cp -R -f /usr/local/squidGuard/update/blacklists/* /usr/local/squidGuard/bd rm -R /usr/local/squidGuard/update/blacklists /usr/local/squidGuard/rebuid_base.sh ^D Теперь даем нашему скрипту нужные права. # chmod 100 /usr/local/squidGuard/bin/update_blacklist.sh Создадим временную директорию в которую будут распаковываться обновления. # mkdir /usr/local/squidGuard/update http://www.freebsd.bip.ru/squidguard.shtml (15 of 16)10.04.2004 17:26:29

Daemon News Russia

Настраиваем планировщик на выполнение нашего задания. # crontab -e -u root MAILTO="[email protected]" 1 0 * * 7 /usr/local/squidGuard/bin/update_blacklist.sh Назначаем выполнение обновления на 0 часов 1 минуту каждого воскресенья. Уведомление о выполнении этого задания приказываем слать по адресу [email protected]. Теперь осталось раздать всем пользователям подабающие права и можно отдыхать. Автор: Бешков Андрей (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/squidguard.shtml (16 of 16)10.04.2004 17:26:29

Daemon News Russia

новости

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь

GPL или BSD? Да! 1. 2. 3. 4. 5.

Что представляет из себя лицензия GPL? Что представляет из себя лицензия BSD? Что лучше для вас? Что лучше для меня? Выводы

Что представляет из себя лицензия GPL? Стандартная общественная лицензия GNU, на мой взгляд, многословна, и пытается поддерживать программистов, распространяющих программное обеспечение бесплатно и открыто. Она сбивает с толку понятиями "свободный" и "свобода", поскольку ограничивает свободу тех, кто не хочет свободно распространять программы, находящиеся под действием лицензии GPL. Рик Холберт (Rick Holbert) полагает, что нужно использовать термин "освобожденное программное обеспечение" вместо "свободного ПО". Эта формулировка тоже меня смущает, потому что программное обеспечение GNU не есть истинно освобожденное: вы не можете делать с программами все, что захотите, хотя слово "освобожденное" много лучше чем "свободное". Лицензия GPL требует, чтобы люди, вносящие изменения в программу, открыто распространяли эти изменения. Такое положение защищает свободу "получателя" программы, но не "программистов", вносящих в программу изменения. Быть может, это несколько сбивает с толку, потому что лицензия уменьшает свободу программистов и увеличивает свободу тех, кто программами пользуется. В общем, как мне кажется, лицензия GPL больше подойдет людям, желающим подарить свое ПО человечеству, поскольку она удовлетворяет этой цели. Иногда, исходя из деловых перспектив, вы хотели бы взять такую программу, которую можно сделать проприетарной (т.е. являющейся вашей интеллектуальной собственностью), чтобы на ее основе сделать закрытый (для посторонних) продукт, обладающий денежной стоимостью. Если вы закрываете исходный текст имеющей определенную ценность программы и имеющих самостоятельную ценность (ваших) изменений, то вы можете брать деньги с тех, кто не может написать программу сам, поскольку это либо слишком сложно, либо подразумевает слишком большие затраты времени. В этом случае вам стоит рассмотреть возможность использовать лицензию BSD. При другом сценарии, когда вы больше заинтересованы в предоставлении поддержки, а не в продаже ПО, тогда лицензия GPL -- не то, чего вам стоит бояться. IBM, например, использует ее для многих серверов Linux. Если вы разрабатываете бизнес-процесс, основанный на программном обеспечении под лицензией GPL, то вам не о чем беспокоится. Кроме того, вы можете не раскрывать исходные тексты программ под лицензией в стиле BSD или программ, созданных вами "с нуля" и без проблем использовать их в окружении, основанном на GPL-ПО. Существует еще множество способов использования программного обеспечения GPL без угрозы вашему бизнесу. Клиента не интересует, как это все работает, они просто хотят, чтобы http://www.freebsd.bip.ru/gpl_bsd.shtml (1 of 6)10.04.2004 17:26:37

Daemon News Russia

это работало. Хорошим примером послужит мерзкие программы для наиболее популярной пользовательской ОС: 99% пользователей не знают, какой мусор помещен в программы, да их это и не волнует. Посмотрите на счастливых получателей патчей к их "самой стабильной и надежной версии" ОС, не смотря на то, что это противоречит здравому смыслу. Быть может, она должна быть стабильной и надежной изначально? А если текущая версия является самой стабильной и надежной, хотя и рушится, и содержит море ошибок, то предыдущие -- это мусор? Я пытаюсь сосредоточить внимание на том, что если что-то надежнее и стабильнее, чем мусор, то это все еще мусор, только слегка более стабильный и надежный (автор, видимо, пытается сказать, что KDE и GNOME -- это мусор, потому как количество ошибок в них можно охарактеризовать именно этим словом: "море" -- Прим. пер.). Все это не играет важной роли. Продажи движет не качество продукта, а возможность дешево продавать на массовом рынке продукт, который удовлетворяет минимальным требованиям (чтобы им вообще можно было пользоваться). Или же вы добиваетесь монопольного положения, а затем с помощью рекламы и денег запудриваете мозги людям и конгрессу, утверждая, что ваше ПО самое лучшее, хотя и знаете, что это не так. В конечном счете, если вы боитесь лицензии GPL исходя из соображений бизнеса, вы, вероятно, недостаточно глубоко разработали свою бизнес-модель. Наиболее популярный дистрибутив Linux в США -- не лучший в мире, ему не достает некоторых возможностей, имеющихся в других дистрибутивах, но, благодаря хорошему маркетингу и улучшениям в каждой следующей версии, он остается самым популярным. Это удерживает клиентов, которые, вероятно, даже и не знают, на сколько качественнее может быть программное обеспечение. Что представляет собой лицензия BSD? Поддержка авторского права в FreeBSD предлагает набор лицензий. В общем, у вас есть свобода делать с программным обеспечением все что угодно до тех пор, пока вы подтверждаете и признаете, что оно происходит из проекта, над которым вы работаете. В какомто смысле, у вас есть больше свободы делать то, что вздумается, но когда вы внесете в программное обеспечение изменения, вы можете "ограничить" свободу получателей модифицированного вами ПО. Лицензии BSD не содержат "передающихся" свобод. Они не предлагают "свободы" получателям программ. Если вы хотите взять программу, разработанную другими людьми, внести незначительное количество изменений и продавать ее, то это может оказаться полезным. Можно даже скрыть суть сделанного вами от других людей. Не-программист, возможно, понимает, что программа делает, но не то, как она это делает, и, с хорошими маркетинговыми знаниями вы, можете продать такому человеку программу, даже не принимая участие в ее разработке. Возьмите для примера наиболее популярную ОС для десктопов и вы увидите как компания, которая не имеет никакого понятия в программировании, но очень хорошо владеет маркетинговыми трюками, продает мусор под видом программного обеспечения (действительно, компания, которая выпускала XENIX, стояла у истоков графического интерфейса MacOS и на которую работают такие люди, как отец OS OpenVMS и RSX-11, кстати, одного из очень немногих, если не единственного, профессионала, который разрабатывал сразу три (!) широко распространенные ОС, не владеет никакими навыками в программировании. -- Прим.пер.). Возможность использовать ПО сторонних разработчиков (которые разбираются в том, что делают) без открытия изменений очень выгодна, если вы не программист и даже не можете написать малюсенькой заплатки, но сильны в маркетинге. С позиции бизнеса, цель которого делать деньги (а это цель любого бизнеса), если вы можете использовать ПО, полученное под лицензией BSD -- используйте его. У вас будет лучший контроль над вашей ОС, а у других людей не будет возможности копировать выгодный продукт. Две самые распространенные ОС для десктопов распространяются именно таким образом.

http://www.freebsd.bip.ru/gpl_bsd.shtml (2 of 6)10.04.2004 17:26:37

Daemon News Russia

Хочу заметить, что BSD программисты -- хорошие специалисты, и я не хочу, чтобы вам показалось, будто я говорю о написанных ими программах, как о мусоре. Как мне кажется, пока я могу посмотреть в исходный код, он не является мусором, но как только его закрывают -- он им становится, потому что я не знаю, что происходит "под капотом" (исходя из этого утверждения, все ОС реального времени -- мусор, станции SGI -- мусор, процессоры DEC Alpha-- мусор. Список можно продолжить. Это все закрытые технологии. -- Прим.пер.). Все BSD ПО с открытым кодом -- прекрасно (хотелось бы привести высказывание Кена Томпсона [Ken Tompson] о ядре Linux: "Я видел исходные тексты, там есть как вполне приличные компоненты, так и никуда не годные. Поскольку в создании этих текстов принимали участие самые разные, случайные люди, то и качество отдельных его частей значительно разнится" -- Прим.пер.). Что лучше для вас? Один важный принцип, который нужно понять: ОДНА ЛИЦЕНЗИЯ НЕ МОЖЕТ БЫТЬ ЛУЧШЕ ИЛИ ХУЖЕ ЛЮБОЙ ДРУГОЙ ЛИЦЕНЗИИ. Она лишь может больше или меньше подходить для ваших задач. Лицензия -- это основа того, как люди должны себя вести, что очень похоже на правительство. С точки зрения бизнеса, США имеют отличное правительство, в котором деньги правят всем. С гуманитарной точки зрения есть правительства с идеями и целями получше. Но ни одно из них не может считаться лучшим или худшим, покуда они делают то, что хотят люди. Если лицензия отвечает вашим требованиям, тогда она вам подходит. Она может не подходить кому-нибудь другому, но это проблемы кого-нибудь другого. И ТОЛЬКО ИДИОТЫ ЗАЯВЛЯЮТ, ЧТО ОДНА ЛИЦЕНЗИЯ ЛУЧШЕ ДРУГОЙ, ЕСЛИ ОНИ НЕ ПОНИМАЮТ ВАШИХ ЦЕЛЕЙ. Когда мы знаем наши цели, мы можем выбирать лицензию, наиболее подходящую к ПО. Но даже на этом этапе можно дискутировать о выборе. Когда я общаюсь с "BSD-шниками", я обычно убеждаю их в том, что GPL -- неплохая штука. Как? Как я указывал, лицензии нужны, что бы ими пользовались люди. Никто не заставляет вас использовать лицензию BSD или GPL. Так, ЕСЛИ ВЫ РЕШИТЕ использовать лицензию GPL, и не против того, что люди будут иметь полный доступ к исходному коду ваших программ, то почему это плохо? Вы согласились с этим, вы не против, и вы не хотите, чтобы некто пришел и начал получать прибыль с закрытой версии того, над чем вы упорно трудились, не получая за это ни копейки. GPL уравнивает возможности игроков так, что все имеют равные возможности получить прибыли из одного и того же ПО и нет возможности помешать кому бы то ни было получать прибыль тем же способам. Это выглядит, как управляемое рынком соревнование, способствующее развитию бизнеса и дающее лучшим возможность победить. Опять таки, вы решаете распространять программное обеспечение на равных для всех условиях. Если кто-либо не хочет выполнять условия открытости, прекрасно, пускай он инвестирует миллионы долларов, необходимые для создания собственного ПО. Никто не запрещает. Вы можете распространять свою программу более чем под одной лицензией. Так Perl лицензирован под GPL и лицензией Artistic. Если вы хотите, чтобы ваше ПО использовалось с другим свободным ПО, вы должны лицензировать его не только под лицензией GPL. GPL не очень хорошо приспособлен для работы с другими свободными лицензиями. Сообщество свободного ПО, в том числе GPL, критикуют за то, что оно "крадет" само слово "свобода". Вопрос: имеет ли диктатор свободу быть диктатором? Ответ: Да. Свобода не имеет ничего общего с "сообществом" [community]. Свобода означает, что вы можете делать то, что хотите, когда вы этого хотите и так, как вы этого хотите. Люди должны иметь возможность быть несвободными. Одна вещь, которая мне докучает, не смотря на то, что я понимаю, из каких политических соображений это делается: чуваки из FSF и GPL склонны переопределять понятие свободы, так, как им хотелось бы его понимать. В действительности, они ищут лишь малое подмножество понятия свободы, но не ВСЮ свободу. Они заинтересованы в свободе для людей http://www.freebsd.bip.ru/gpl_bsd.shtml (3 of 6)10.04.2004 17:26:37

Daemon News Russia

свободно обмениваться программным обеспечением с открытыми исходными текстами и в сообществе разработчиков, но не в индивидуальной свободе делать с куском кода то, что хочется -- например, выпускать версию GPL'ного ПО без исходников. Отсюда вытекает, что GPL в действительности предлагает не "свободу" в истинном понимании этого слова, а свободу для сообщества использовать ПО. Мне не нравиться то, как они переопределяют слово "свобода", и как некоторые фанатики не хотят даже говорить с вами, пока вы не станете использовать слова "свободный" и "свобода" в их понимании. Однако, мне кажется, что это хорошо с политической точки зрения, потому как это заставляет людей думать о свободе. А с привычным напряженным рабочим графиком 80-рабочих-часов-в-неделю большинство людей просто не успевают думать. С другой стороны, лицензия BSD не хуже. Она предназначена для программистов, которые предпочитают создавать ПО с закрытым исходным кодом. Я понимаю, почему это так привлекательно. Я понимаю, почему это так важно для некоторых людей, но позвольте мне поднять важный вопрос о BSD, который не имеет смысла с философской точки зрения: Допустим люди создали ПО под лицензией BSD. Кто-либо может взять всю их работу и анонсировать сделанный на его основе закрытый проект. Так группа разработчиков может работать годами для того, чтобы написать полезный код. А другие люди или компании могут "украсть" все, что создали разработчики, открыв слегка измененный проект с закрытым исходным кодом, разрекламировав его, как стандарт и, тем самым, лишив настоящих разработчиков всех выгод и заслуг. Я просто не понимаю, почему так много людей так напряженно работают для того, что бы делать других миллионерами? GPL защищает от этого. Она уравнивает шансы всех, использующих данное ПО. Все имеют равные возможности. Вот недвусмысленный пример того, насколько опасна лицензия BSD и как она помогает распространяться вирусу (эта мерзкая операционная система от первоклассной маркетинговой, но слабой в программировании компании) по всему миру. Посмотрите на несчастье с Kerberos. Какие ужасные вещи с ним творятся! Для меня лично, когда намеренно опасная компания разрушает ПО и нет возможности заставить ее считаться с остальным сообществом, значит, что нужно объявить бойкот всем версиям такого ПО. Я не могу позволить себе тратить время на постоянно проявляющиеся несовместимости между разными версиями. Kerberos уничтожен, и я никогда им не воспользуюсь. Почему он уничтожен? Ошибочная версия имеет слишком большое влияние в мире, потому не стоить использовать аналогичное ПО, зная, что однажды, будущие версии могут стать закрытыми, разрушив все шансы быть совместимым с версиями используемыми мной. Опасность быть несовместимым с другими системами, которые не вовлечены в политические игры, слишком велика для меня, чтобы использовать такой тип программ. И я всеми силами буду стараться избежать его использования (я надеюсь). Итак, со всеми плюсами и минусами GPL или BSD, которые я указал, что же лучше использовать? Скорее всего, и ту и другую. Просто нужно понять, что делают лицензии. И если вас не волнуют последствия -- великолепно! Даже не смотря на то, что мне действительно не нравятся BSD-лицензии, если вас не волнует то, что кто-то может сделать из вашего кода закрытый продукт и продавать его, тогда BSD-лицензии могут вам подойти. Что лучше для меня? Какая лицензия больше подходит мне? Ответ: обе. Однако, я использую только GPL. Почему? Я очень признателен всему свободному ПО. Я не создаю программ, которые можно продать (обычно я пишу веб-скрипты на Python), и я хотел бы, чтобы кто-то пользовался после меня всем тем, что я пишу для мира, и потому имеет смысл использовать GPL. Я даже не представляю себе себя использующим лицензию в стиле BSD, поскольку не хочу, чтобы империя зла взяла мои программы и использовала их для извлечения прибыли, скрывая то, что http://www.freebsd.bip.ru/gpl_bsd.shtml (4 of 6)10.04.2004 17:26:37

Daemon News Russia

они сделали на самом деле от тех, кому они выставляют счет. Причина, почему мне подходит лицензия BSD -- возможность выбора в будущем. Я не использую ее, но я рад, что такой вариант существует. Выводы Анонимный трус высказал хорошую мысль: Я был готов написать в ответ длинное эссе, но большинство читателей удовлетворит вывод: Лицензия GPL подходит свободному ПО. BSD подходит свободным людям. С лицензией GPL ПО получает большую свободу, чем программисты, работающий над ним. С лицензией BSD программисты получают большую свободу, чем код, получившийся в результате. Я предпочитаю выражаться следующим образом: ● ●

GPL дает свободу конечным пользователям. BSD дает свободу программистам.

Следовательно, любой, кто говорит, что одна лицензия лучше другой -- просто туповатый тролль, который не понимает, что решать он может только за себя. Я хочу отметить, что таких людей нужно стерилизовать, чтобы их ДНК не распространялась и не давала начало политикам, генералам и судьям которые любят принимать решения за людей в других областях жизни. Я совершенно не уважаю, даже испытываю презрение, к людям, которые выбирают лицензию на ПО за других, и испытываю не на много меньшее презрение к людям, которые позволяют делать такие решения за них. Я не имею в виду теории о том, как лицензии влияют на общество, ПРОСТО НЕ ЗАЯВЛЯЙТЕ, ЧТО ОДНА ЛИЦЕНЗИЯ ЛУЧШЕ ДРУГОЙ, потому что это мнение, основанное на каких-то оценках, но это не факт. Я приму как факт, то, что вы думаете, что такаято лицензия лучше для вас, но не то, что она лучше для других -- это просто мнение и теория. Похоже, что приверженцев лицензии BSD, ненавидящих лицензию GPL раз в десять больше, чем их оппонентов. Мне кажется, что это потому, что Linux раз в десять популярнее, но, если честно -- я не знаю. Если бы FreeBSD была в 10-ть раз популярнее Linux, можно представить, что было бы в десять раз больше приверженцев GPL ненавидящих лицензию BSD. Лично я свое мнение активно не высказываю, поскольку я не сталкиваюсь с ПО под BSD лицензией каждый день. И мне не нравятся люди, которые жалуются на те или иные лицензии по двум причинам: ●



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

Вот и все.

http://www.freebsd.bip.ru/gpl_bsd.shtml (5 of 6)10.04.2004 17:26:37

Daemon News Russia

Автор: Mark Nielsen Перевод: Иван Песин (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/gpl_bsd.shtml (6 of 6)10.04.2004 17:26:37

Daemon News Russia

новости \\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Установка Oracle8i 8.1.7.4 на FreeBSD шаг за шагом

Введение Эта статья содержит описание пошаговой установки Oracle8i для Linux (8.1.7.4) на FreeBSD. Перед тем как написать эту статью, я внимательно перечитал материал Стаса Корниенко "Установка Oracle 8.1.x на FreeBSD 4. x". И все меня вроде устраивало в статье Стаса, да только не давала спокойно спать мысль - почему же установщик Oracle8i (Oracle Universal Installer) на последней стадии своей работы зависает, из-за чего заканчивать установку приходилось в ручную. Поэтому, я поставил перед собой цель, произвести установку Oracle8i так, чтобы все неприятные ситуации, связанные с зависанием не возникали при установке. Тщательно проанализировав различную документацию по установке Oracle8i на различных дистрибутивах Linux и проведя различные эксперементы над установкой Oracle8i, как на FreeBSD, так и на Linux, я пришел к выводу, что Oracle8i все же можно установить на FreeBSD так, чтобы он не зависал во время установки. Также на FreeBSD возможно использование GUI-утилит, которые будут доступны после установки. У меня это получилось, чего желаю и Вам! :-) ●













Предполагается, что установлена FreeBSD-4.x на базе i686 вместе с настроенной и готовой к работе XFree86 / X Window System. Предполагается, что если у Вас нет неразмеченного места на дисках Вашей машины, не меньше 1 ГБ, то в файловой системе примонтированой в директорию /usr имеется 1,5 ГБ свободного места. Также необходимо, чтобы общий размер своп разделов был равен 1 ГБ, если общий размер своп разделов не удовлетворяет указанным требованиям и у Вас отсутствует дополнительное неразмеченное место для создания еще одного своп раздела, то Вам понадобится еще 1 ГБ сводного места, в любой имеющейся на дисках Вашей машины файловой системе UFS. Конфигурация машины на которую устанавливается Oracle8i должна удовлетворять следующим параметрам CPU PIII-500 МГц и выше, RAM 256 МБ и более. Предполагается, что все команды начинающиеся с символа # выполняются от имени суперпользователя, а с символа % от имени пользователя oracle, которого Вам еще предстоит создать в соответствии с рекомендациями из этой статьи. Предполагается, что в качестве командного интерпритатора у суперпользователя установлен csh и суперпользователь находится в группе wheel, GID которой равен 0. Предполагается, что исходные тексты системы доступны в директории /usr/src, а коллекция портов находится в директории /usr/ports. Предполагается, что будет использоваться обновленная с помощью cvsup коллекция портов, в связи с тем, что старые версии FreeBSD, содержат в портах emulators/linux_base-6 и devel/ linux_devtools ссылки на уязвимые версии пакетов. Об обновлении коллекции портов при помощи cvsup можно прочесть в "FreeBSD Handbook". Предполагается, что в системе установлены bzip2 и unzip. Если у Вас одна из последних версий FreeBSD-4.x, то bzip2 уже есть в системе, если нет, то необходимо установить его из коллекции портов, выполнив следующее,

http://www.freebsd.bip.ru/oracle8.shtml (1 of 22)10.04.2004 17:26:44

Daemon News Russia

# cd /usr/ports/archivers/bzip2 && make install clean && rehash Для установки unzip выполните следующие команды, # cd /usr/ports/archivers/unzip && make install clean && rehash ●

Предполагается, что в корневой директории существует символическая ссылка /compat указывающая на директорию /usr/compat. Проверьте это командой, # ls -l /compat Если выдается, что-то вроде, lrwxr-xr-x 1 root wheel 11 6 Dec 13:18 /compat -> /usr/compat значит все нормально, если команда выдала ``ls: /compat: No such file or directory'' то создайте ссылку, следующим образом, # ln -s /usr/compat /compat

Закачаем все необходимые файлы для установки Oracle8i Закачаем все необходимые файлы для установки Oracle8i и положим их в директорию /usr/oinstall, которую необходимо создать. # mkdir /usr/oinstall # cd /usr/oinstall Итак, нужны следующие файлы: ●







linux81701.tar (549867520 Б) - дистрибутив Oracle8i Enterprise Edition Release 3 (8.1.7.0.1) for Linux (Intel). http://otn.oracle.com/software/products/oracle8i/content.html procps-2.0.4-2.i386.rpm (134767 Б) - содержит некоторые системные утилиты необходимые Oracle8i. ftp://ftp.redhat.com/pub/redhat/linux/6.1/en/os/i386/RedHat/RPMS/procps-2.0.4-2.i386.rpm jre118_v3-glibc-2.1.3.tar.bz2 (7156122 Б) - дистрибутив JRE версии 1.1.8 от blackdown.org. Список FTP-серверов откуда можно закачать дистрибутив находится на http://blackdown.org/ p2376472_8174_LINUX.zip (134488247 Б) - кумулятивный патч устраняющий довольно большое количество различных ошибок в Oracle8i (8.1.7.0) и поднимающий Oracle8i до версии 8.1.7.4. На текущий момент это патч доступен http://metalink.oracle.com/ доступ на этот ресурс является платным. Но при желании найти этот файл в Internet не составит труда. Ведь у Вас "карты в руках" - имя файла. ;-) В крайнем случае можно поднять Oracle8i до версии 8.1.7.3 этот кумулятивный патч доступен на официальном FTP-сервере Oracle Corporation и на текущий момент бесплатный. Файл

http://www.freebsd.bip.ru/oracle8.shtml (2 of 22)10.04.2004 17:26:44

Daemon News Russia

p2189751_8173_LINUX.zip (121801951 Б) можно загрузить по ссылке на директорию с FTP-сервера ftp://oracle-ftp.oracle.com/server/patchsets/unix/LINUX/817patchsets/. О выходе новых кумулятивных патчей всегда можно узнать на странице http://otn.oracle.com/support/patches.htm Устанавливаем своп размером в 1 ГБ Если своп равен 1 ГБ или больше, то не выполняйте этот пункт. Если же размер своп меньше чем 1 ГБ и на дисках Вашей машины нет неразмеченного места для его создания, то с помощью команды df определите в какой файловой системе у Вас есть 1 ГБ свободного места и создайте файл swap. Например, для размещения файла swap в директории /usr, выполним следующие команды, # cd /dev # sh ./MAKEDEV vn0 # dd if=/dev/zero of=/usr/swap bs=1024k count=1024 # chmod 0600 /usr/swap # echo 'swapfile="/usr/swap"' >> /etc/rc.conf Реально для работы лучше делать своп не в файле, а так как это положено, выделить для этого раздел на диске. Поэтому в будущем решите этот вопрос, но до момента когда у Вас появится дополнительный диск, можно использовать и этот вариант. Инсталируем emulators/linux_base-6 и devel/linux_devtools Порты emulators/linux_base-6 и devel/linux_devtools должны установить пакеты от дистрибутива Linux Red Hat 6.1 и частично от 6.2. # cd /usr/ports/emulators/linux_base-6 # make install clean && rehash # cd /usr/ports/devel/linux_devtools # make install clean && rehash Будьте внимательны! В коллекции портов имеются порты устанавливающие пакеты от Linux Red Hat 7.1 emulators/linux_base и devel/linux_devtool-7 - эти пакеты не подойдут! Oracle8i для Linux собран с glibc-2.1.3 именно эта версия glibc имеется в портах на момент написания этой статьи. $FreeBSD: ports/emulators/linux_base-6/Makefile, v 1.68 2002/12/08 22:03:04 trevor Exp $ $FreeBSD: ports/devel/linux_devtools/Makefile, v 1.33 2002/11/10 16:45:38 lioux Exp $ Дополнительно устанавливаем пакет procps-2.0.4-2.i386.rpm Дополнительно к эмуляции Linux устанавливаем пакет procps-2.0.4-2.i386.rpm. Без него у Вас на FreeBSD, http://www.freebsd.bip.ru/oracle8.shtml (3 of 22)10.04.2004 17:26:44

Daemon News Russia

установщик Oracle8i не сможет нормально завершить свою работу - он попросту зависнет при попытке создания базы данных. А происходит это из-за того, что во время инсталляции вызывается утилита dbassist, которая без пакета procps-2.0.4-2.i386.rpm на FreeBSD работать не хочет. Вот чтобы этого не произошло, Вы и установите пакет procps-2.0.4-2.i386.rpm, который до этого должны были положить в директорию /usr/ oinstall. # cd /usr/oinstall #rpm -U --ignoreos --root /compat/linux --dbpath /var/lib/rpm --nodeps --replacepkgs procps-2.0.4-2.i386.rpm Включаем поддержку совместимости с Linux. Включаем поддержку совместимости с Linux. В файле /etc/rc.conf нужно добавить строку linux_enable="YES" # echo 'linux_enable="YES"' >> /etc/rc.conf Создаем символическую ссылку /compat/linux/etc/mtab Создаем символическую ссылку которая будет необходима Oracle8i для получения информации о Вашем (-их) диске (-ах). # ln -s /etc/fstab /compat/linux/etc/mtab Вносим изменения в /etc/fstab В файле /etc/fstab после строки где описывается proc, добавьте в текстовом редакторе строку, linproc /compat/linux/proc linprocfs rw 0 0 и сохраните файл. Создаем утилиту arch Создаем утилиту arch которая в Linux используется для вывода информации об архитектуре машины. # echo 'echo i686' > /compat/linux/bin/arch # chown root:wheel /compat/linux/bin/arch # chmod 0755 /compat/linux/bin/arch Устанавливаем JRE от blackdown.org Устанавливаем JRE от blackdown.org в /compat/linux/usr/local # cd /compat/linux/usr # mkdir local

http://www.freebsd.bip.ru/oracle8.shtml (4 of 22)10.04.2004 17:26:44

Daemon News Russia

# cd local # tar --bzip2 -xvf /usr/oinstall/jre118_v3-glibc-2.1.3.tar.bz2 # cd jre118_v3 # ln -s . linux # cd bin # ln -s i686 linux # cd ../lib # ln -s i686 linux Такое количество символических ссылок, объясняется тем, что некоторые утилиты Oracle8i используют эти пути, а раз используют, значит они должны быть, для того, чтобы обеспечить нормальную работу этих утилит. Устанавливаем JDK 1.2.2 от Sun Microsystems, Inc. Устанавливаем JDK 1.2.2 для Linux от Sun Microsystems, Inc. Дистрибутив JDK придется загрузить самостоятельно и положить в директорию /usr/ports/distfiles. Чтобы узнать откуда его можно загрузить, зайдите в директорию порта java/linux-sun-jdk12 и выполните команду make с целью fetch, в ответ Вы получите сообщение разъясняющее откуда можно загрузить дистрибутив. После загрузки установка происходит обычным для коллекции портов способом. # cd /usr/ports/java/linux-sun-jdk12 && make install clean && rehash Oracle8i будет видеть JDK как /usr/local/java, но мы устанавливаем дистрибутив Oracle8i под Linux, поэтому необходимо создать путь /compat/linux/usr/local/java # cd /compat/linux/usr/local # ln -s /usr/local/linux-sun-jdk1.2.2 java Распаковываем дистрибутив Oracle8i Распаковываем дистрибутив Oracle8i и проводим над ним небольшие манипуляции. # cd /usr/oinstall # tar -xfv linux81701.tar # cd Disk1 # mv * /usr/oinstall # cd .. # rm -rf Disk1

http://www.freebsd.bip.ru/oracle8.shtml (5 of 22)10.04.2004 17:26:44

Daemon News Russia

В результате данных действий получили распакованный дистрибутив Oracle8i в директории /usr/oinstall/ Disk1, а чтобы в будущем нажимать меньше клавиш содержимое Disk1 перенесли прямо в /usr/oinstall, а директорию Disk1 удалили. Вносим измения в дистрибутив Oracle8i Вносим в дистрибутив Oracle8i исправления, при этом делая копию оригинальных файлов. Необходимо, чтобы в файле /usr/oinstall/runInstaller переменной THREADS_FLAG было присвоено значение green, а не native. # cd /usr/oinstall # sed -i .orig -e "s|THREADS_FLAG=native|THREADS_FLAG=green|g" runInstaller Теперь отредактируем файл /usr/oinstall/install/oraparam.ini, заменив строку JRE_LOCATION=../stage/Components/oracle.swd.jre/1.1.8/1/DataFiles/Expanded/linux на JRE_LOCATION=/usr/local/jre118_v3/linux # cd install # sed -i .orig -e "s|\.\./stage/Components/oracle\.swd\.jre/1\.1\.8/1/DataFiles/Expanded/ linux|/usr/local/jre118_v3/linux|g" oraparam.ini Конечно, не обязательно применять для изменения строк sed, Вы можете исправить файлы в любом удобном для Вас текстовом редакторе. Распаковываем кумулятивный патч Распаковываем в директорию /usr/oinstall/patch, которая появилась после распаковки дистрибутива Oracle8i, кумулятивный патч, находящийся в файле p2376472_8174_LINUX.zip. Файл zip-архива содержит в себе два файла, lnx32_8174_patchset.tar и README.html. # cd /usr/oinstall # unzip p2376472_8174_LINUX.zip # cd patch # tar -xvf ../lnx32_8174_patchset.tar Прочтите файл README.html, чтобы быть в курсе того, что исправляет данный патч. Создаем группы dba и oinstall Создаем группы dba c GID 94 и oinstall c GID 95. # pw groupadd -n dba -g 94 # pw groupadd -n oinstall -g 95

http://www.freebsd.bip.ru/oracle8.shtml (6 of 22)10.04.2004 17:26:44

Daemon News Russia

Создаем пользователя oracle и назначаем ему пароль Создаем пользователя oracle c UID 94 и помещаем его в группы dba и oinstall, а командный интерпритатор дадим /compat/linux/bin/bash. # pw useradd -n oracle -u 94 -c "Oracle Daemon" -d /usr/oracle -s /compat/linux/bin/bash -g dba -G oinstall Назначаем пароль для пользователя oracle. Не стоит принебрегать мерами безопасности, поэтому не надо вводить пустой или легко подбираемый пароль пользователю oracle. # passwd oracle Создаем директорию для установки Oracle8i. Мы будем устанавливать Oracle8i в соответствии с рекомендациями Optimal Flexible Architecture (OFA). Я думаю не стоит принебрегать этими рекомендациями, практика эксплуатации продуктов Oracle показывает, что в будущем это позволит, эффективно использовать и обновлять их, а также гибко управлять постоянно растущими объемами информации. Если Вы еще не знаете, что такое OFA, то думаю документация идущая вместе с дистрибутивом Oracle8i, поможет Вам в это разобраться. Согласно рекомендации желательно, чтобы установка производилась на отдельную файловую систему, к тому же желательно, чтобы эта файловая система была расположена на отдельном диске и примонтирована в точку монтирования расположенную в корне. Вот мы сейчас и создадим эту точку монтирования. # mkdir /m01 # chmod 0775 /m01 # chown oracle:oinstall /m01 Дальше в этом пункте статьи, пути тех, у кого есть возможность создания отдельной файловой системы, и у кого такой возможности пока нет, на время разойдутся. Если у Вас есть неразмеченое место, то создайте новую файловую систему UFS, размером не меньше чем 1 ГБ. Описание процесса создания новой файловой системы выходит за рамки этой статьи, Вы должны выполнить это самостоятельно. После создания файловой системы запишем информацию о новой файловой системе в файл /etc/fstab, с точкой монтирования /m01. # echo "/dev/device /m01 ufs rw 2 2" >> /etc/fstab На место /dev/device, Вы должны подставить файл устройства партиции новой файловой системы! Теперь надо примонтировать новую файловую систему и создать в ней директорию app. # mount /m01 # mkdir /m01/app # chmod 0775 /m01/app # chown oracle:oinstall /m01/app http://www.freebsd.bip.ru/oracle8.shtml (7 of 22)10.04.2004 17:26:44

Daemon News Russia

Вот и все, можете переходить к следующему пункту статьи, дальше будут рекомендации для тех у кого нет возможности создания дополнительной файловой системы. Если возможности для создания новой файловой системы нет, в связи с отсутствием неразмеченого места на дисках, то придется пойти другим путем, смонтируем директорию /compat/linux/m01 в директорию /m01, в этом нам поможет замечательная команда mount_null. Для этого выполним следующее, # echo "/compat/linux/m01 /m01 null rw 2 2" >> /etc/fstab # mkdir /compat/linux/m01 /compat/linux/m01/app # chmod -R 0775 /compat/linux/m01 # chown -R oracle:oinstall /compat/linux/m01 # mount /m01 Сделайте именно так как рекомендовано, смонтируйте директорию /compat/linux/m01 в директорию /m01. Не делайте /m01 символической ссылкой на директорию /compat/linux/m01. Если Вас интересует почему, то рекомендую почитать как и почему работают Linux-приложения на FreeBSD, а потом посмотреть какой размер корневой файловой системы у Вашей FreeBSD. Вероятно если Вы устанавливали FreeBSD в здравом уме, то это 192 МБ? Ну максимум 256 МБ? Этого очень мало для установки Oracle8i. :-) Установщик Oracle8i получит именно эту информацию о файловой системе в которой расположена директория /m01 и откажется устанавливать туда что-либо. Поэтому мы и смонтировали директорию в директорию. Теперь для Вашей системы в директории /m01 отдельная файловая система. Потом когда Вы обзаведесь дополнительным диском и создадите на нем отдельную файловую систему, будет достаточно соответствующе отредактировать /etc/fstab, смонтировать эту файловую систему в /m01 и перенести содержимое /compat/linux/m01 в /m01, а директорию /compat/linux/m01 удалить. Возможно при этом Вы первый раз испытаете преимущество OFA. ;-) Создаем домашнюю директорию для пользователя oracle Создаем домашнюю директорию для пользователя oracle. # mkdir /usr/oracle # cd /usr/oracle В любом текстовом редакторе наберите БЕЗ ОШИБОК текстовый файл с содержимым приведенным ниже, и сохраните этот файл как /usr/oracle/.profile ORACLE_BASE=/m01/app ORACLE_HOME=$ORACLE_BASE/product/oracle/8.1.7 ORACLE_DOC=$ORACLE_HOME/doc ORACLE_SID=OSID export ORACLE_HOME ORACLE_BASE ORACLE_SID ORACLE_DOC NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1 #NLS_LANG=AMERICAN_CIS.UTF8 #NLS_LANG=AMERICAN_CIS.CL8ISO8859P5 #NLS_LANG=AMERICAN_CIS.CL8MACCYRILLIC #NLS_LANG=AMERICAN_CIS.CL8MSWIN1251 #NLS_LANG=AMERICAN_CIS.CL8KOI8R http://www.freebsd.bip.ru/oracle8.shtml (8 of 22)10.04.2004 17:26:44

Daemon News Russia

ORA_NLS32=$ORACLE_HOME/ocommon/nls/admin/data ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/precomp/lib export NLS_LANG ORA_NLS32 ORA_NLS33 LD_LIBRARY_PATH JRE_LOCATION=/usr/local/jre118_v3 PERL5LIB=$ORACLE_HOME/Apache/perl/lib/5.00503 TMPDIR=/var/tmp PATH=$PATH:$ORACLE_HOME/bin export JRE_LOCATION PERL5LIB TMPDIR PATH umask 022 unset LANG unset LC_ALL

Если Вы собираетесь использовать систему управления реляционной базой данных (СУРБД) Oracle8i на территории России, то трудность в понимании этого файла, видимо вызовет только значение $NLS_LANG. Уж в чем "повезло" русским, так это с количеством различных наборов символов. :-) Поэтому маленькое разъяснение не помешает. Переменная окружения $NLS_LANG принимает значения LANGUAGE_TERRITORY.CHARACTERSET, где LANGUAGE - указывает на язык сообщений; TERRITORY - указывает как нужно представлять даты, разделители и т. п., а также определяет сортировку по умолчанию; CHARACTERSET - указывает язык в котором работает клиент и желает видеть и вводить данные. Для того чтобы СУРБД Oracle8i выдавала сообщения на русском языке можно определить значение LANGUAGE равным RUSSIAN. Значение TERRITORY для стран СНГ равно CIS. Сортировку по умолчанию можно переопределить, с помощью переменной окружения $NLS_SORT. Значение CHARACTERSET для русских кодировок может принимать значения: CL8ISO8859P5, RU8PC866, RU8BESTA, RU8PC855, CL8MACCYRILLIC, CL8MACCYRILLICS, CL8MSWIN1251, CL8KOI8R, UTF8. Примечание: В случае если Вы собираетесь использовать Oracle Internet Directory (OID), то Ваш выбор должен обязательно остановиться на UTF8. Создаем файл /usr/oracle/root В текстовом редакторе наберите текст приведенный ниже и сохраните его как файл /usr/oracle/root. #!/bin/sh # Переходим в директорию $ORACLE_HOME и делаем копию файла root.sh cd $ORACLE_HOME cp root.sh root.sh.orig # Вносим исправления в файл root.sh sed -e 's|/bin/chown|/usr/sbin/chown|g' root.sh.orig \ | sed -e 's|/usr/bin/test|/bin/test|g' \ | sed -e 's|/bin/awk|/usr/bin/awk|g' \ | sed -e 's|/bin/grep|/usr/bin/grep|g' \ | sed -e 's|/usr/local/bin/sed|/usr/bin/sed|g' \ | sed -e 's|RMF=/bin/rm -f|RMF="/bin/rm -f"|g' \ | sed -e "s|) '{print \$1}\`|) '{print \$1}'\`|g" > root.sh # Удаляем файл root.sh.orig rm root.sh.orig # Переходим в $ORACLE_HOME/bin http://www.freebsd.bip.ru/oracle8.shtml (9 of 22)10.04.2004 17:26:44

Daemon News Russia

# и вносим изменения в netasst и в netca cd $ORACLE_HOME/bin cp -p netasst netasst.orig cp -p netca netca.orig sed -e 's|\$JRE -classpath|\$JRE -native -classpath|g' netasst.orig > netasst sed -e 's|\$JRE -classpath|\$JRE -native -classpath|g' netca.orig > netca # Вносим исправления во все файлы сообщений СУРБД Oracle8i отвечающих за сообщения на русском языке echo 'echo $1 cp -p $1 $1.orig printf "\003\014\043\011\023\017\043\043\040\044\020\040\000\000\000\000" > $1 dd if=$1.orig of=$1 bs=16 seek=1 skip=1' > /tmp/$$.ru.msb.sh find $ORACLE_HOME -follow -name "*ru.msb" -exec /bin/sh /tmp/$$.ru.msb.sh {} ";" rm /tmp/$$.ru.msb.sh

Этот файл, как и пакет procps-2.0.4-2.i386.rpm очень сильно повлияет на установщик Oracle8i, чтобы обеспечить его нормальную работу. Во время установки, Oracle Universal Installer будет просить Вас запустить файл $ORACLE_HOME/root.sh, который содержит неправильные пути к командам, с точки зрения FreeBSD, и две синтаксические ошибки, с точки зрения командного интерпретатора sh. Вот перед запуском $ORACLE_HOME/root.sh, Вы и запустите / usr/oinstall/root, который исправит все эти ошибки. Не путайте скрипт $ORACLE_HOME/orainstRoot.sh, который Вам тоже еще предстоит запускать, и скрипт $ORACLE_HOME/root.sh, это два разных файла! Изменения в netasst и в netca, которые также вносит /usr/oracle/root, делаются для того, чтобы обеспечить нормальную работу Net8 Configuration Assistant на FreeBSD. Скрипты netasst и netca во время установки, запуская JRE без ключа -native, приводят к неверной работе Net8 Configuration Assistant, что влечет за собой зависание установщика Oracle8i. Следовательно необходимо позаботиться, чтобы этого не произошло, что и сделает /usr/oinstall/root. В файлах с расширением *.msb сохранены сообщения от различных компонентов СУРБД Oracle8i, которые будут выдаваться во время работы с СУРБД. Изменения в файлы *ru.msb вносятся для того, чтобы сообщения на русском языке выдаваемые СУРБД Oracle8i во время ее работы, правильно перекодировались на стороне клиента. То есть, если Вы решите назначить переменную окружения $NLS_LANG c LANGUAGE равной RUSSIAN, то СУРБД будет разговаривать на русском языке, но без изменения файлов *ru.msb, эти сообщения будут в неверной кодировке. СУРБД Oracle8i может разговаривать на самых различных языках, достигается это за счет того, что СУРБД в зависимости от значения LANGUAGE в переменной окружения $NLS_LANG использует для сообщений те msb-файлы, которые предназначены для этого языка. Если на какой-то компонент СУРБД Oracle8i отсутствуют msb-файлы с требуемым языком, то СУРБД игнорирует значение LANGUAGE в переменной окружения $NLS_LANG и использует для выдачи сообщений msb-файлы для английского языка. Первые 16 байт каждого msb-файла несут информацию о кодировке в которой сохранены сообщения в самом msb-файле, и файлы *ru.msb отвечающие за сообщения на русском языке, здесь не исключение. Да вот беда, набор символов в России, не один, и даже, не два... :-) И вот с русскими msb-файлами, приключилась неприятная история в недрах корпорации Oracle. В файлах, *ru.msb первые 16 байт, должны иметь следующую последовательность: ●

для CP1251 03 0C 23 0D 13 17 09 0E 1C 1D 20 1C 00 00 00 00



для ISO8859-5

http://www.freebsd.bip.ru/oracle8.shtml (10 of 22)10.04.2004 17:26:44

Daemon News Russia

03 0C 23 09 13 0F 23 23 20 24 10 20 00 00 00 00 ●

для CP866 12 15 23 10 03 23 21 21 00 00 00 00 00 00 00 00

Сообщения перекодируются из кодировки msb-файла в кодировку указанную в части CHARACTERSET, переменной окружения $NLS_LANG, и если заголовок msb-файла неверный, то вместо нужного текста идет "китайская грамота". Именно это и произошло с файлами *ru.msb, сообщения в этих файлах сохранены в кодировке ISO8859-5, а первые 16 байт говорят, что сообщения в CP1251. Поэтому скрипт /usr/oracle/root и предусматривает изменение в файлах *ru.msb первых 16 байт, записывая в начало каждого русского msbфайла правильную последовательность байт, которые информируют СУРБД Oracle8i, что исходные сообщения в кодировке ISO8859-5. Даже если Вы не собираетесь устанавливать поддержку русского языка, то как минимум один msb-файл для каждого языка все равно будет установлен в директорию $ORACLE_HOME/ oracore/mesg, в том числе и один неправильный msb-файл русских сообщений. Однако, до момента когда будет нужно запустить /usr/oinstall/root, придется еще поработать, поэтому пока забудем про этот файл. Передадим директорию /usr/oracle пользователю oracle Передаем директорию /usr/oracle и все ее содержимое в распоряжение пользователю oracle. # chmod 0755 /usr/oracle # chmod 0644 /usr/oracle/.profile # chmod 0644 /usr/oracle/root # chown -R oracle:dba /usr/oracle Создаем конфигурацию нового ядра Создаем конфигурацию нового ядра с поддержкой System V. Необходимо, чтобы в новой конфигурации обязательно присутствовали следующие параметры: maxusers options options options

512 MAXDSIZ="(1024*1024*1024)" MAXSSIZ="(1024*1024*1024)" DFLDSIZ="(1024*1024*1024)"

# System V shared memory and tunable parameters options SYSVSHM # include support for shared memory options SHMMAXPGS=65536 # max amount of shared memory pages (4k on i386) options SHMMIN=2 # min shared memory segment size (bytes) options SHMMNI=256 # max number of shared memory identifiers options SHMSEG=256 # max shared memory segments per process

http://www.freebsd.bip.ru/oracle8.shtml (11 of 22)10.04.2004 17:26:44

Daemon News Russia

# System V semaphores and tunable parameters options SYSVSEM # include support for semaphores options SEMMAP=256 # amount of entries in semaphore map options SEMMNI=256 # number of semaphore identifiers in the system options SEMMNS=512 # number of semaphores in the system options SEMMNU=256 # number of undo structures in the system options SEMMSL=256 # max number of semaphores per id options SEMOPM=256 # max number of operations per semop call # System V message queues and tunable parameters options SYSVMSG # include support for message queues

Для названия конфигурации ядра, например выберем букву "K" от слова "kernel" и текущую дату в формате год, месяц, число (YYYYMMDD): # cd /usr/src/sys/i386/conf # cp GENERIC K20021204 Правим конфигурацию /usr/src/sys/i386/conf/K20021204 в любом удобном для Вас редакторе добавляя нужное и удаляя все не нужное. Но опции приведенные выше должны присутствовать обязательно! СУРБД Oracle требовательна к количеству разделяемой системной памяти, значение которой задается опцией ядра SHMMAX. Совокупность процессов СУРБД Oracle и структур данных размещенных в разделямой системной области называется экземпляром. Согласно рекомендациям по использованию СУРБД Oracle8i, в ядре необходимо выставить опцию ядра SHMMAX в байтах, в размере общего объема физической оперативной памяти умноженной на коэффициэнт равный 0.5. Если значение SHMMAX будет не достаточно, то экземпляр Oracle8i просто не будет создан! Но в ядре FreeBSD данная опция ядра зависит от опции SHMMAXPGS по формуле, SHMMAX = SHMMAXPGS * PAGE_SIZE + 1 Где, PAGE_SIZE равно 4096 Б для i386, поэтому чтобы, сделать как рекомендовано в документации по Oracle8i, необходимо значение SHMMAXPGS, вычислить по формуле, SHMMAXPGS = k * RAM * 1024 / PAGE_SIZE Где, RAM - физическая оперативная память в МБ; k - коэффициент, равный 0.5; PAGE_SIZE - размер одной страницы в КБ, PAGE_SIZE = 4 КБ для i386. Например, для машины с памятью 512 МБ, SHMMAXPGS = 0.5 * 512 * 1024 / 4 = 65536. В случае если предполагается, что СУРБД Oracle, будет работать на специально выделенном для этого сервере и кроме нее никаких других серьезных сервисов запущено не будет, то коэффициэнт k, можно увеличивать до 0.75, это 3/4 от физической оперативной памяти.

http://www.freebsd.bip.ru/oracle8.shtml (12 of 22)10.04.2004 17:26:44

Daemon News Russia

При необходимости Вы всегда сможете отрегулировать опции ядра с помощью команды sysctl, или прописать их в /etc/sysctl.conf. Для того, чтобы понять какое влияние оказывают некоторые значения опций ядра на работу СУРБД Oracle, обязательно ознакомьтесь с документацией, которая идет вместе с дистрибутивом Oracle8i. Компилируем ядро с новой конфигурацией Компилируем ядро с новой конфигурацией (K20021204). Если что-то не пойдет при сборке ядра внимательно изучите файл /usr/src/buildkernel.log и после этого ищите ошибки в Вашей конфигурации ядра. # cd /usr/src # make buildkernel KERNCONF=K20021204 |& tee buildkernel.log Устанавливаем новое ядро Устанавливаем новое ядро. Результат уставновки будет сохранен в файле /usr/src/installkernel.log # cd /usr/src # make installkernel KERNCONF=K20021204 |& tee installkernel.log Удаляем файлы buildkernel.log и installkernel.log Если компиляция и установка ядра выполнены успешно, то файлы buildkernel.log и installkernel.log можно удалить. # rm /usr/src/buildkernel.log # rm /usr/src/installkernel.log Директории /tmp, /usr/tmp, /var/tmp Сделаем так, чтобы /tmp и /usr/tmp указывали на /var/tmp. Перед тем как начать манипуляции с директорией /tmp, завершите все процессы в системе которые создали в ней свои временные файлы. То же самое касается и /usr/tmp. Как правило /tmp это отдельная файловая система с весьма ограниченным размером, если у Вас именно так, то размонтируйте ее, удалите директорию /tmp и закоментируйте файловую систему /tmp в файле /etc/fstab или укажите другую точку монтирования для освободившейся файловой системы. ОБЯЗАТЕЛЬНО ОТРЕДАКТИРУЙТЕ /etc/fstab! Если у Вас это обычная директория, то команду umount выполнять не надо и править /etc/fstab естественно вам не придется. # umount /tmp Удаляем /tmp и /usr/tmp # rm -rf /tmp # rm -rf /usr/tmp Создаем символические ссылки на /var/tmp

http://www.freebsd.bip.ru/oracle8.shtml (13 of 22)10.04.2004 17:26:44

Daemon News Russia

# ln -s /var/tmp /tmp # ln -s /var/tmp /usr/tmp Гарантируем права 0777 на директорию /var/tmp, а владельцем этой директории назначим суперпользователя и группу wheel. # chmod 0777 /var/tmp # chown root:wheel /var/tmp Перезагрузка системы Итак, Вы подготовили систему для установки Oracle8i - установили все необходимые программы и подготовили дистрибутив Oracle8i, внесли изменения в некоторые конфигурационные файлы системы, установили новое ядро, следовательно, необходимо перегрузиться. # reboot В случае если Ваше новое ядро откажется загружаться, обратитесь к "FreeBSD Handbook", чтобы выяснить как восстановить и загрузить старое ядро, там это подробно расписано. Затем ищите ошибки в своей конфигурации ядра, исправляйте их и собирайте ядро заново (см. п. 21, п. 22 и п. 23). Если Ваша система загрузилась с новым ядром, то можете поздравить себя половину пути Вы уже прошли. Новые опции ядра можно посмотреть используя команду sysctl. # sysctl -a | grep kern.ipc | more Останавливаем веб-сервер Apache Если у Вас установлен и запущен веб-сервер Apache, лучше его пока остановить! # [ -r /var/run/httpd.pid ] && /usr/local/sbin/apachectl stop Возможно Ваш apachectl находится в другой директории, а файл процесса находится в другом месте, выясните это сами и остановите Apache. Сразу оговорюсь, если Вы в дальнейшем собираетесь использовать веб-сервер поставляемый с Oracle8i, то тот Apache которой у Вас уже есть в системе лучше не запускать когда работает веб-сервер Oracle8i. Или убирайте из своей системы Ваш Apache вообще, или сделайте так, чтобы он не мог стартовать автоматически при перезагрузке системы. То же самое относится и к OpenLDAP в случае использования Oracle Internet Directory (OID). Запускаем X Window System Теперь необходимо войти в X Window System под пользователем oracle. В качестве оконного менеджера для пользователя oracle сойдет twm. К тому же, twm потребляет очень мало системных ресурсов, которые очень сильно пригодятся при установке Oracle8i. В своей системе я использую xdm для входа в X Window System на 8-ой виртуальной консоли, поэтому мне было достаточно нажать Alt+F9, а затем ввести логин и пароль пользователя oracle. http://www.freebsd.bip.ru/oracle8.shtml (14 of 22)10.04.2004 17:26:44

Daemon News Russia

Читаем переменные окружения пользователя oracle Запустите xterm, если он не запустился у Вас автоматически, и выполните в нем, команду bash с ключем login. % bash -login После выполнения данной команды приглашение в командной строке должно смениться, показывая пользователя oracle, имя хоста и текущую директорию. Чтобы удостовериться, что все переменные окружения прочитаны из файла /usr/oracle/.profile, выполните в этом же окне xterm команду set и убедитесь, что все корректно. % set | more Откроем окно xterm для суперпользователя Запускаем еще одно окно xterm, из того, где мы выполняли bash -login. Запуск именно из этого окна необходим для того, чтобы суперпользователю достались все переменные окружения пользователя oracle. % xterm & Теперь в новом окне xterm выполним команду su с именем любого пользователя, который входит в группу wheel, так как сам пользователь oracle в эту группу не входит и сразу не cможет зайти под суперпользователем. Затем уже от имени этого другого пользователя выполним просто команду su без логина, что будет подразумевать логин суперпользователя. В обоих случаях su попросит Вас ввести пароль, сначала обычного пользователя входящего в группу wheel, а затем пароль суперпользователя. % su login % su Мы создали этот сеанс суперпользователя вовсе не из праздных целей, он нам еще очень сильно пригодится во время установки Oracle8i. Теперь на время забудем про это окно xterm и переключимся обратно в окно xterm пользователя oracle. Запускаем установщик Oracle8i % cd /usr/oinstall % ./runInstaller Запуск установщика Oracle8i на FreeBSD сравним пожалуй, с запуском двигателя машины, когда температура окружающей среды минус 30 градусов по Цельсию и ниже. С первого раза может и не завестись. ;-) Даже если, все рекомендации предложенные выше, выполнены правильно, то иногда, хотя и очень редко, установщик Oracle8i может зависнуть при прорисовке заставки. Это проявляется в виде прямоугольника серого цвета, появляющегося на экране, с надписью "Loading...", после чего можно подождать и если заставка так и не прорисовывается, то вернитесь в окно xterm, с помощью команды ps выясните номера процессов runInstaller и jre, и завершите их при помощи команды kill. % ps | grep "jre\|runInstaller" % kill PID PID http://www.freebsd.bip.ru/oracle8.shtml (15 of 22)10.04.2004 17:26:44

Daemon News Russia

Затем удалите в директории /tmp все файлы и директории, которые успел создать установщик Oracle8i. Имена файлов и директорий, которые необходимо удалить, можно выяснить по владельцу этих файлов. Они будут принадлежать пользователю oracle. Для удаления Вы можете выполнить следующее, % cd /tmp && find -d . -user oracle \( -type f -or -type d \) -delete -print Затем снова перейдите в директорию /usr/oinstall и запустите скрипт runInstaller. Со второго, раза установщик как правило запускается. В крайнем случае повторите это в третий раз. Логического объяснения этому явлению я пока найти не могу, однако и не считаю это мистикой, хотя очень на то похоже. Условия для запуска в первый и второй раз абсолютно равные, но такая вот чертовщина, иногда случается. Если ни со второго, ни с третьего раза, установщик Oracle8i так и не запустился, то видимо проблема не в "запуске двигателя при сильном морозе", возвращайтесь к началу статьи и последовательно проверяйте, где Вы ошиблись. Ну а если Вы увидели сначала заставку Oracle Universal Installer, а затем первый экран с приветствием, значит все замечательно. Господа из Oracle Corporation, видимо предчувствовали, что любой системный администратор будет добираться до этого экрана очень долго, поэтому и решили для начала поздороваться с Вами, чтобы разрядить напряженную обстановку и немного расслабить Вас. ;-) Однако, не будем здесь задерживаться очень долго, поэтому щелкаем мышью по кнопке Next. Отвечаем на вопросы Oracle Universal Installer На втором экране Вас попросят вести пути (File Locations). Пути к тому, что Вы собираетесь устанавливать (Source), и куда (Destination). Эти пути уже заполнены, значение того, что мы собираемся устанавливать взято из переменной $SOURCE назначенной в файле /usr/oinstall/install/oraparam.ini, а значение куда устанавливать, взято из переменной окружения $ORACLE_HOME, пользователя oracle. Так как в полях стоят нужные для нас значения, то переходим к следующему экрану, с помощью кнопки Next. Далее Вас попросят ввести группу пользователей (UNIX Group Name) на Вашей машине, которые будут иметь право обновлять продукты Oracle. Введем группу oinstall и щелкнем мышью по кнопке Next. После этого, Oracle Universal Installer понадобятся права суперпользователя для запуска скрипта orainstRoot. sh в директории на которую указывает $ORACLE_HOME. Запуск этого скрипта необходим, чтобы создать файл / etc/oraInst.loc. В этом файле будет сохранена информация о группе, которая имеет право обновлять продукты Oracle на Вашей системе, и будет сохранен путь к директории, где будет храниться информация об установленных продуктах Oracle. Переключимся в окно xterm где у нас запущен командный интерпритатор с правами суперпользователя и выполним следующее, # $ORACLE_HOME/orainstRoot.sh # ln -s /etc/oraInst.loc /compat/linux/etc/oraInst.loc Теперь вернемся к установщику Oracle8i и нажмем кнопку Retry для продолжения инсталляции. Далее установщик спросит Вас какой продукт Вы будете устанавливать. Выбираем Oracle8i Enterprise Edition 8.1.7.0.1 и продолжаем с помощью кнопки Next. Следующий вопрос каснется типа установки. Если Вам не нужна различная языковая поддержка для

http://www.freebsd.bip.ru/oracle8.shtml (16 of 22)10.04.2004 17:26:44

Daemon News Russia

компонентов СУРБД Oracle8i, то отметим пункт типичной установки - Typical (837 MB) и нажмем Next. Если же Вам необходимо, чтобы компоненты СУРБД умели выдавать сообщения на различных языках, но Вы не желаете разбираться с выборочной установкой - Custom, то можно договориться с установщиком Oracle8i на счет языков и при типичной установке. Для этого используем выборочную установку, отмечаем - Custom и нажимаем Next, в результате чего будет предложено выбрать различные компоненты и языки. Нажимаем на кнопку Product Languages... и добавляем необходимые языки. После окончания выбора языков нужно вернуться с помощью кнопки Previous в предыдущий экран. Теперь отметим пункт типичной установки - Typical (837 MB) и нажмем Next. Если Вы точно знаете и понимаете, что Вам надо от СУРБД, то можете произвести выборочную установку Custom или минимальную Minimal (677 MB), но дальше в статье рассматривается типичная установка. После, небольшой по времени, сборки сведений об устанавливаемых компонентах, Oracle Universal Installer попросит Вас ввести путь к JDK. По умолчанию он предложит путь /usr/local/java, согласитесь с предложенным путем сразу нажав Next. Помните в п. 11 мы делали символическую ссылку /compat/linux/ usr/local/java, вот именно эту ссылку мы сейчас и указали установщику Oracle8i, ведь Linux-приложениям, будет казаться, что директория java лежит в /usr/local. На следующем экране, Вам придется заполнить поля Global Database Name и SID. Так как SID подставился автоматически из переменной окружения $ORACLE_SID, Вам остается только ввести глобальное имя базы данных (Global Database Name). Прежде чем ввести глобальное имя базы данных хотелось бы напомнить, что в СУРБД Oracle рекомендуется использовать в имени базы данных соглашения об именах, которые соответствуют стандартным соглашениям принятых для доменов Internet. В соответствии с этим, имя базы данных может состоять из нескольких частей разделенных точками. Имя базы данных читается справа налево, а крайняя правая часть обозначается как - world. Эту часть совсем не обязательно указывать при работе с Net8, но для обеспечения совместимости с прежними версиями SQL*Net лучше указать. Крайняя левая часть содержит непосредственно имя базы данных. Т. е. например, имя базы данных расположенной в зоне dhs.net. ru, будет выглядеть как DB.dhs.net.ru.world. Руководствуясь вышесказанным введите Ваше имя для будущей базы данных и перейдите к следующему экрану, используя, все ту же кнопку Next. Так как любой "допрос" когда-нибудь заканчивается, этот тоже наконец-то закончился. Oracle Universal Installer спросил у Вас, на всех предыдущих этапах с момента своего запуска, все что ему было непонятно. Поэтому теперь он предоставил Вам отчет, о том, что, куда и сколько, он собирается установить, послушно ожидая, когда Вы нажмете кнопку Install. Ну что же, внимательно изучив предоставленный нам отчет, можно нажать Install. Индикатор установки компонентов должен медлено поползти, отображая в процентах процесс прохождения установки. Владельцы PIII-500/RAM 256 МБ, могут смело отправиться на прогулку по компьютерным салонам, чтобы присмотреть чего бы себе прикупить. Времени у них предостаточно. ;-) А вот владельцы PIV-1500/RAM 512 МБ, видимо обойдутся только парой чашек с чаем, у них все пройдет гораздо быстрее. Но все равно не торопитесь, чай можно пить медленно. ;-) Если Вы не хотите идти на прогулку по компьютерным салонам и Вам не хочется чаю, то можете запустить еще одно окно xterm и выполнить в нем команду top, чтобы понаблюдать, как безжалостно Oracle Universal Installer поглощает ресурсы Вашей машины. Завершение процесса установки Итак, процесс установки почти завершен и установщик Oracle8i просит Вас запустить на правах суперпользователя скрипт root.sh находящийся в директории на которую указывает переменная окружения $ORACLE_HOME. http://www.freebsd.bip.ru/oracle8.shtml (17 of 22)10.04.2004 17:26:44

Daemon News Russia

Но не стоит торопиться делать то, что просит установщик, перед тем как запустить этот скрипт, необходимо выполнить некоторые действия для того, чтобы установка завершилась удачно. Подменяем JRE Подменяем JRE которая идет вместе с дистрибутивом Oracle8i, на JRE от blackdown.org. Необходимо переключиться в окно xterm из которого Вы запустили установщик Oracle8i. В этом окне не будет видно приглашения командной строки, ведь Вы запустили из этого окна скрипт /usr/oinstall/ runInstaller, однако этот скрипт уже отработал запустив установщик Oracle8i, поэтому, чтобы увидеть приглашение нажмите клавишу Enter и выполните следующие команды, % cd $ORACLE_BASE/jre % mv 1.1.8 1.1.8.orig % ln -s /compat/linux/usr/local/jre118_v3 1.1.8 Некоторые считают, что достаточно изменить значение символической ссылки JRE в директории $ORACLE_HOME так, чтобы она указывала на JRE от blackdown.org, и этим можно решить проблему, чтобы Oracle8i никогда не пользовался своей родной JRE. Однако, это не так! Если заглянуть например, в bin/oemapp в директории $ORACLE_HOME, то можно увидеть, что в этом скрипте, как и в некоторых других, в переменную окружения $PATH, заносится первый путь к директории $ORACLE_BASE/jre/1.1.8/bin, поэтому для таких скриптов не важно на что ссылается символичиская ссылка JRE в $ORACLE_HOME. Они всегда будут запускать команду jre из $ORACLE_BASE/jre/1.1.8/bin, потому как в переменной окружения $PATH этот путь идет первым. Однако теперь мы оградили себя от этого, и создали надежную защиту от JRE идущей вместе с дистрибутивом Oracle8i. Применяем патчи идущие вместе с дистрибутивом Oracle8i и запускаем /usr/oracle/root Применяем патчи идущие вместе с дистрибутивом Oracle8i, исправляющие ошибки 1538440 и 1542738. Все из того же окна xterm, из которого мы запускали Oracle Universal Installer, выполним следующее, % cd /usr/oinstall/patch/bug1538440 && TOP_PATCH_DIR=`pwd` /bin/sh README.1538440 % cd ../bug1542738 && /bin/sh README.1542738 Теперь удалим мусор который появился после применения патчей. % rm -v $ORACLE_HOME/bin/*O % rm $ORACLE_HOME/lib/ldflagsO Маска *O - это символ ASCII под номером 42 - символ звездочки, и символ ASCII под номером 79 - символ заглавной латинской буквы O, не ноль! В команде rm ldflagsO в конце, тоже заглавная латинская буква O, а не ноль. Будьте осторожны с командой rm *O! Если Вы случайно не допишете O в командной строке и нажмете Enter, то... Надеюсь дальше объяснять не надо? ;-) Теперь выполним /usr/oracle/root. Вы должны были создать этот файл в п. 19 - вот он Вам и пригодился. :-) % /bin/sh /usr/oracle/root http://www.freebsd.bip.ru/oracle8.shtml (18 of 22)10.04.2004 17:26:44

Daemon News Russia

Запуск root.sh от имени суперпользователя Для запуска root.sh необходимы права суперпользователя, поэтому переключимся в окно xterm, в котором загружена оболочка на правах суперпользователя и запустим скрипт root.sh находящийся в $ORACLE_HOME. # $ORACLE_HOME/root.sh После запуска скрипт попросит Вас ввести путь к директории в которой будут размещены скрипты oraenv и dbhome. Enter the full pathname of the local bin directory: [/usr/local/bin]: Необходимо согласиться с предложенным путем - /usr/local/bin просто нажав клавишу Enter. О том, зачем нужны oraenv и dbhome читайте в документации по Oracle8i. Скрипт root.sh также во время своего выполнения создал файл /etc/oratab, но Oracle Database Configuration Assistant, который будет вскоре запущен, при создании базы данных будет искать этот файл в / compat/linux/etc, и естественно его там не найдет, если Вы не позаботитесь о создании символической ссылки на /etc/oratab. Поэтому создадим эту символическую ссылку. # ln -s /etc/oratab /compat/linux/etc/oratab При отсутствии ссылки Oracle Database Configuration Assistant, скажет Вам, что у него не хватает прав на запись в /etc/oratab в момент когда индикатор процесса будет показывать 80% выполнения. На самом деле права на /etc/oratab у него есть. Просто он сделает попытку записать этот файл в директории /compat/linux/ etc, где прав у него действительно нет. Поэтому мы как заботливые родители, заботятся о своих несмышленых чадах, предупредили эту ошибку. :-) Теперь можно вернуться к установщику Oracle8i и нажать кнопку OK. Configuration Tools или черная дыра от Oracle Corporation Ну вот мы и добрались до того злосчастного пункта установки, на котором спотыкается добрая половина дистрибутивов Linux, и имя этому пункту - Configuration Tools. Уж поверьте, на некоторых дистрибутивах Linux установка происходит неменее изысканым способом, чем на FreeBSD. Как некоторые говорят, установка Oracle8i на Linux это искусство! :-) Если Вы все делали как Вам было предложено, то должен запуститься Net8 Configuration Assistant. Выбираем типичную конфигурацию - отметим пункт Perform typical configuration и нажмем Next. В будущем читайте документацию по Oracle8i, о том что такое Net8, и с чем это едят. Oracle Database Configuration Assistant запустится сразу же после, того как отработает Net8 Configuration Assistant и приступит к созданию базы данных. Процесс создания базы данных будет отображен на индикаторе, и скорость его выполнения сильно зависит от конфигурации Вашей машины. Когда индикатор достигнет 100%, Вам будет выдано сообщение о том, что создание базы данных завершено. В этом сообщении также будет некоторая информация о Вашей базе данных - глобальное имя базы данных, системный идентификатор базы данных (SID), пароль для аккаунтов SYS и SYSTEM. В будущем, когда Вы будете самоcтоятельно разбираться со своей базой данных, необходимо сменить эти пароли в целях безопасности! А пока запомните эти пароли и нажмите кнопку OK.

http://www.freebsd.bip.ru/oracle8.shtml (19 of 22)10.04.2004 17:26:44

Daemon News Russia

Третий пункт на экране Configuration Tools - Starting web server in non-SSL mode on port 7777. Если предыдущее два пункта проходили для Вас визуально, то здесь Вы ничего не увидете. Установщик Oracle8i сделает все без единого вопроса к Вам. В результате чего Вы получите запущенный веб-сервер на порту 7777. В итоге Вы увидете последний экран об окончании установки! Ну вот, самая сложная часть уже позади, но не торопитесь выходить из установщика. У нас ведь остался еще кумулятивный патч. .Останавливаем экземпляр Oracle8i Прежде чем мы начнем устанавливать кумулятивный патч для Oracle8i, необходимо остановить экземляр Oracle8i который был старательно запущен Oracle Universal Installer на этапе конфигурирования. Да, да... Не удивляйтесь, но на Вашей машине уже запущены, как минимум, веб-сервер, экземпляр Oracle8i и Net8 listener. Для начала подправим файл /etc/oratab, иначе остановить экземпляр Oracle8i не получится. Модифицируем в нем всего одну строку несущую информацию об экземпляре Oracle8i. Заменим в этой строке :N, на :Y. Переключаемся в xterm с командным интерпретатором суперпользователя и выполняем следующее, # sed -i .orig -e "s|"$ORACLE_SID"\:"$ORACLE_HOME"\:N|"$ORACLE_SID"\ :"$ORACLE_HOME"\:Y|g" /etc/oratab Теперь переключаемся в окно xterm из которого мы запускали установщик Oracle8i и останавливаем вебсервер, экземпляр Oracle8i и Net8 listener. % $ORACLE_HOME/Apache/Apache/bin/apachectl stop % $ORACLE_HOME/bin/dbshut % $ORACLE_HOME/bin/lsnrctl stop Вот теперь можно приступить к установке кумулятивного патча. Устанавливаем кумулятивный патч Переключаемся в окно нашего "горячо любимого" Oracle Universal Installer, но вместо того, чтобы нажать желанную кнопку Exit, нажмем Next Install. Установщик Oracle8i попросит Вас опять вести пути (File Locations). Пути к тому, что Вы собираетесь устанавливать (Source), и куда (Destination). Путь куда - содержимое $ORACLE_HOME, нас вполне устроит, а вот путь к тому, что мы собираемся устанавливть, придется изменить. Введем путь к кумулятивному патчу - /usr/ oinstall/patch/stage/products.jar и нажмем Next. После некоторых размышлений установщик Oracle8i выведет отчет, такого же вида какой Вы уже видели в п. 32. Можете его проанализировать, после чего нажать кнопку Install и немного отдохнуть, процесс установки небыстрый, как Вы наверное уже догадались, из предыдущего опыта. Как только установка патча будет завершена Oracle Universal Installer, сообщит Вам об этом. Можете глубоко вздохнуть и нажать Exit. Теперь после установки патча необходимо убрать в директориях $ORACLE_HOME/bin и /tmp мусор. Переключаемся в окно xterm пользователя oracle и удаляем ненужные файлы. % rm -v $ORACLE_HOME/bin/*O http://www.freebsd.bip.ru/oracle8.shtml (20 of 22)10.04.2004 17:26:44

Daemon News Russia

% cd /tmp && find -d . -user oracle \( -type f -or -type d \) -delete -print Маска *O - это символ ASCII под номером 42 - символ звездочки, и символ ASCII под номером 79 - символ заглавной латинской буквы O, не ноль! Можете с помощью команды ps проверить не осталось ли каких зависших процессов jre, если Вы старательно выполнили все рекомендации предложенные в статье, то их не будет. Пример скрипта для запуска экземпляра Oracle8i Чтобы экземпляр Oracle8i стартовал каждый раз после перезагрузки системы автоматически, достаточно разместить небольшой скрипт в директории /usr/local/etc/rc.d. Пример такого скрипта приведен ниже, можете использовать его для обеспечения автоматического старта, а также для того, чтобы остановить (/usr/ local/etc/rc.d/oracle.sh stop) и снова запустить (/usr/local/etc/rc.d/oracle.sh start) экземпляр Oracle8i в нужный Вам момент времени. Пример 1. /usr/local/etc/rc.d/oracle.sh #!/bin/sh USER=oracle umask 022 unset LANG unset LC_ALL ORACLE_BASE=/m01/app ORACLE_HOME=$ORACLE_BASE/product/oracle/8.1.7 ORACLE_DOC=$ORACLE_HOME/doc ORACLE_SID=OSID export ORACLE_HOME ORACLE_BASE ORACLE_SID ORACLE_DOC NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1 ORA_NLS32=$ORACLE_HOME/ocommon/nls/admin/data ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/precomp/lib export NLS_LANG ORA_NLS32 ORA_NLS33 LD_LIBRARY_PATH JRE_LOCATION=/usr/local/jre118_v3 PERL5LIB=$ORACLE_HOME/Apache/perl/lib/5.00503 TMPDIR=/var/tmp PATH=$PATH:$ORACLE_HOME/bin export JRE_LOCATION PERL5LIB TMPDIR PATH case "$1" in start) # Starting Oracle Net8 listener su -m $USER -c "$ORACLE_HOME/bin/lsnrctl start" # Starting Oracle database su -m $USER -c "/bin/sh $ORACLE_HOME/bin/dbstart" # Starting Apache server su -m $USER -c "$ORACLE_HOME/Apache/Apache/bin/apachectl start" # Starting Oracle Intellegent Agent # su -m $USER -c "$ORACLE_HOME/bin/lsnrctl dbsnmp_start" # Starting Oracle CManager # su -m $USER -c "$ORACLE_HOME/bin/cmctl start" ;; http://www.freebsd.bip.ru/oracle8.shtml (21 of 22)10.04.2004 17:26:44

Daemon News Russia

stop) # # # # #

*)

Shutting down Oracle CManager su -m $USER -c "$ORACLE_HOME/bin/cmctl stop" Shutting down Oracle Intellegent Agent su -m $USER -c "$ORACLE_HOME/bin/lsnrctl dbsnmp_stop" Shutting down Apache server su -m $USER -c "$ORACLE_HOME/Apache/Apache/bin/apachectl stop" # Shutting down Oracle database su -m $USER -c "/bin/sh $ORACLE_HOME/bin/dbshut" # Shutting down Oracle Net8 listener su -m $USER -c "$ORACLE_HOME/bin/lsnrctl stop" ;;

echo "Usage: `basename $0` {start|stop}" >&2 ;; esac exit 0 После создания скрипта наделяем его соответсвующими правами для запуска. # chmod 0555 /usr/local/etc/rc.d/oracle.sh Теперь скрипт готов для работы. Заключение Ну вот и все закончилось. Или только начинается? ;-) Поздравляю Вас! Вы прошли огонь, воду и медные трубы. На этом мучения с установкой Oracle8i подошли к концу. Теперь Вы вероятно будете разбираться с его настройкой, но это уже другая история. Автор: Вячеслав Иванченко (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/oracle8.shtml (22 of 22)10.04.2004 17:26:44

Daemon News Russia

новости \\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Настройка почтового сервера на базе sendmail на FreeBSD 4.7

Предстоит следующая задача: - Настроить почтовый сервер на FreeBSD чтоб клиенты могли работать с ним по протоколам pop3, smtp (тоесть забирать почту клиентами The Bat, Outlook и т.п.). - Сервер должен обслуживать почту 3 доменов причем пользователи должны иметь одноименную почту в разных доменах т.е. ([email protected] [email protected] [email protected] должен быть одним и ткм же пользователем и почта для него должна складываться в один ящик.) - Почтовый сервер должен иметь дублирующий сервер которй мог бы принимать на себя почту этих 3-х доменов в случае выхода из строя основного сервера и затем пересылать почту на основной сервер когда восстановится основной сервер. - Доступ к серверу должен осуществляться только с определенных адресов (локальная сеть офиса) как для отправки так и для приема почты. - Пользователи старого почтового сервера (sendmail on FreeBSD 4.6) должны быть перенесены на новый сервер без изменения пароля. В качестве сервера выбрана следующая конфигурация. CPU: 2xPIII 1133 Mhz 512k кэш RAM: 2x512 DIMM ECC HDD: Seagate Barracuda IV 7200 rpm 40 Gb MB: Intel Server Board SAI2 ServerWorks ServerSet III LE chipset+LAN 100Mbit(Intel 82559)+Video Для установки скачиваем полседнию версию Sendmail: Sendmail sendmail-8.12.7.tar.gz http://www.sendmail.org/ ftp://ftp.sendmail.org/ Разархивирую пакет #cd / #mkdir src #tar xvfz sendmail-8.12.7.tar.gz

Компилирую и инсталирую новую версию вместо старой, шедшей в составе дистрибутива. #cd sendmail.8.12.7 #sh Build #sh Build install #cd ./mailstats #sh Build install #cd ../makemap #sh Build install #cd ../praliases #sh Build install #cd .. #install -d -m 755 /var/spool/mqueue #ln -fs /usr/sbin/sendmail /usr/lib/sendmail

Приступаю к конфигурированию. /src/sendmail-8.12.7/cf/cf/sendmail.mc

http://www.freebsd.bip.ru/mail-serv.shtml (1 of 4)10.04.2004 17:26:47

Daemon News Russia

divert(-1) divert(0)dnl define(confDEF_USER_ID 26:26)dnl OSTYPE(freebsd4)dnl # Если у вас FreeBSD 5.0 то пишем freebsd5 \ DOMAIN(generic)dnl define(confTRY_NULL_MX_LIST,true)dnl define(confDONT_PROBE_INTERFACES,true)dnl define(PROCMAIL_MAILER_PATH,/usr/local/bin/procmail)dnl define(LOCAL_MAILER_FLAGS,ShPfn)dnl define(LOCAL_MAILER_ARGS,procmail -a $h -d $u)dnl FEATURE(mailertable)dnl FEATURE(virtusertable,hash -o /etc/mail/virtusertable)dnl FEATURE(redirect)dnl FEATURE(always_add_domain)dnl FEATURE(use_cw_file)dnl FEATURE(local_procmail)dnl FEATURE(access_db)dnl

Следующие семь строк следует добавлять если сервер будет испольхзовать публичные антиспамовые базы данных. ********************** FEATURE(blacklist_recipients)dnl FEATURE(dnsbl)dnl FEATURE('dnsbl', 'relays.ordb.org', 'Spam bloked - see http://ordb.org/') FEATURE(dnsbl,'inputs.orbz.org', 'Input Spam bloked - see http://orbz.org/') FEATURE(dnsbl,'bl.spamcop.net', 'Spam blocked - see http://spamcop.net/bl.shtml?$&{client_addr}') FEATURE(dnsbl,'ex.dnsbl.org', 'Spam bloked - see http://www.dnsbl.org/') FEATURE(dnsbl, 'relays.osirusoft.com', 'Spam bloked - see http://relays.osirusoft.com/') ********************** MAILER(local)dnl MAILER(smtp)dnl MAILER(procmail)dnl Генерирование конфигурационного файла sendmail.cf из sendmail.mc с помощью m4

#m4 ../m4/cf.m4 sendmail.mc > /etc/mail/sendmail.cf #cd /usr/ports/mail/procmail #make #makeinstall #cd /etc/mail

Составление файла access и создания хэш базы. /etc/mail/access localhost.localdomain RELAY localhost RELAY uni12.ru RELAY uni12.ac.ru RELAY 193.215.78 RELAY informs12.ru RELAY #makemap hash access.db < access

http://www.freebsd.bip.ru/mail-serv.shtml (2 of 4)10.04.2004 17:26:47

Daemon News Russia

Составления файла в котором сождержатся те домены для которых будет приниматься почта сервером. /etc/mail/local-host-names uni12.ru data.uni12.ru system.uni12.ac.ru

Создание пустых хэш баз. В моем случае их конфигурирование не нужно было. #ee virtusertable #makemap hash virtusertable.db < virtusertable #ee mailertable #makemap hash mailertable.db < mailertable #ee domaintable #makemap hash domaintable.db < domaintable

Редактирование файла rc.conf /etc/rc.conf defaultrouter="193.215.78.xxx" hostname="data.uni12.ru" ifconfig_xl0="inet 193.215.78.xxx netmask 255.255.255.0" kern_securelevel_enable="NO" nfs_reserved_port_only="NO" sendmail_enable="YES" # Включаю sendmail sendmail_flags="-bd -q30m" sshd_enable="YES" usbd_enable="NO" inetd_enable="YES" #Для работы pop3 используется qpopper работающий под inetd firewall_enable="YES" #Включаю поддержку firewall firewall_type="filename" #Для его поддержки нужно перекомпилировать ядро с поддержкой firewall_script="/etc/firewall.conf" # firewall. firewall_quiet="NO" # Настройки firewall хранятся в отдельном файле firewall.conf Файл настроек firewall /etc/firewall.conf /sbin/ipfw /sbin/ipfw /sbin/ipfw /sbin/ipfw интернета /sbin/ipfw /sbin/ipfw https /sbin/ipfw /sbin/ipfw /sbin/ipfw /sbin/ipfw /sbin/ipfw

add add add add

1 2 3 4

allow allow allow allow

tcp tcp tcp tcp

from from from from

any to 193.233.78.37 80 in # Открываю 80 порт для веб сервера 193.233.78.33 to 193.233.78.37 22 in # 22 порт для ssh 193.233.78.33 to 193.233.78.37 110 in # 110 порт для pop3 any to 193.233.78.37 25 in # 25 порт для приема почты с

add 5 allow udp from any to 193.233.78.37 25 in add 6 allow tcp from any to 193.233.78.37 443 in # 443 для вебсервера работающего по add add add add add

7 allow tcp from 193.233.78.33 to 193.233.78.37 20-21 in # открываю ftp 50 reset tcp from any to 193.233.78.37 1-1024 in # дальше все блокирую 60 deny udp from any to any 1-1024 in 70 unreach port tcp from any to 193.233.78.37 1025-65535 in setup 65000 allow ip from any to any

Переношу файла спаролями и пользователями со старого сервера. Обьеденяю их с новым и стираю лишние записи из получившегося файлаю. Затем заменяю им оригинал. http://www.freebsd.bip.ru/mail-serv.shtml (3 of 4)10.04.2004 17:26:47

Daemon News Russia

#cat master.passwd ./old/master.passwd > master #cp master master.passwd Создаю базу паролей из файла master.passwd #pwd_mkdb master.passwd Устанавливаю qpopper из портов #cd /usr/ports/mail/qpopper #make #make install

На этом конфигурирование почтового сервера закончена. Перезагружаю сервер и смотрю что из этого получилось. Все используемые адреса в статье заменены на несуществующие. Статья посвящена моему новому другу. Автор: Дрезюля Дмитрий (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/mail-serv.shtml (4 of 4)10.04.2004 17:26:47

Daemon News Russia

новости

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь

Postfix изнутри Эта заметка пишется после громадного перерыва и поэтому, наверняка, будет отличаться от всего остального. Что же, год назад я закончил нравоучениями --- значит, логично начать с них же. Лично я практически никогда и нигде не видел эталонных программ для учащихся и это очень странно. Казалось бы, для того чтобы научить программированию, надо хотя бы один раз показать что это такое и как это делать хорошо. Является ли алгоритм сортировки пузырьком показателем "качественного" программирования? Нет, не является, потому что это частное решение некоторой задачи, практически никогда не возникающей перед человеком обособленно. Нет, этот алгоритм используется, конечно, и в его реализациях иногда делают ошибки, но он никогда не будет самоцелью для программиста. Выполняемые же задания бывают иногда хороши, но только как упражнения для фиксирования некоторого материала: те же сортировки, поиск, нахождение оптимального решения... любой из этих алгоритмов всегда будет средством достижения результата, а не конечным результатом. Даже курсовые работы и те отличаются малым объемом за очень редким исключением. Что остается? Диплом? Слишком поздно для того, чтобы на его основе можно было бы чего-нибудь изучить. Таким образом, должны существовать некоторые программы заранее известного качества, которые нужно изучить, может быть, внести измения и, что самое главное, понять что было сделано, как это было сделано и почему сделано именно так. Это очень важные вопросы, понимание же последнего из них является залогом накопления опыта и, чего уж там, некоторой профессиональной мудрости. Так вот, этих эталонных программ не существует. Максимум на что может надеяться студент, так это на написанные мелом на доске, чрезвычайно корявым почерком, надписи, изображающие некоторую программу. Обычно она не работает, а половина студентов не смогла правильно записать весь поток сознания от преподавателя и поэтому ничего не сможет разобрать уже в своих собственных каракулях. Требования к эталонным программам Программа, претендующая на звание "эталонной", должна выполнять следующие условия: ● ● ●



ее исходный текст должен быть свободно доступен; это должна быть настоящая программа, решающая какую-то реальную задачу; задача не должна требовать много специальных знаний, например, сложного протокола передачи данных или специфических машинных кодов некоторого процессора она должна быть не очень большой, но и не маленькой, примерно 100 тысяч строк;

http://www.freebsd.bip.ru/postfix2.shtml (1 of 6)10.04.2004 17:26:50

Daemon News Russia ● ●





она должна быть популярной и массово используемой; она должна быть поддерживаемой, то есть должен существовать программист или группа программистов, продолжающий работать над ее улучшением; она должна быть хорошо оформлена, хорошо написана, производительна, переносима и т.д. --- в общем, все то, что преподаватель считает "хорошей" программой в ней должны быть недостатки; впрочем, в любой программе есть недостатки.

Кстати сказать, пример подобной "эталонной" программы можно найти в книге Э. Таненбаума "Современные операционные системы", где он предлагал в качестве примера свою ОС под названием Minix. Но она была вытеснена Linux и перестала использоваться, соответсвенно сейчас она выглядит достаточно загадочно. А когда книга только появлялась, Minix, пожалуй, была очень хорошим примером "эталонной" программы, которую можно изучать или критиковать. Опять же, Linux возник именно потому, что Торвальдс изучал книгу Таненбаума, но ему не хватало Minix для своих нужд. Мне хочется взять на себя смелость и предложить подобную эталонную программу для изучения ее внутренностей. Выбрать исходники FreeBSD? Нет, они слишком большие и, зачастую, специфические. Можно было бы взять Apache, но тут уже я недостаточно хорошо знаком с его исходными текстами. Осмелюсь предложить postfix --- это популярный MTA (Mail Transfer Agent), позволяющий эффективно передавать письма адресатам. Азы протокола SMTP, которые надо знать, не особенно сложны для изучения и их можно освоить за время изучения самого postfix. Никто не против? Mail Transfer Agent MTA это программа, которая лежит в основе передачи электронной почты. Когда вы посылаете письмо своему знакомому с адресом [email protected], то вы делаете это посредством своего SMTP-клиента (например, Outlook, The Bat!, mutt), который передает письмо MTA. Он может делать это по протоколу SMTP или еще каким-нибудь способом, в любом случае он не выполняет доставку письма самостоятельно. MTA получает письмо и проверяет по своей конфигурации, что он должен с ним сделать: послать адресату напрямую (то есть, послать письмо MTA, который установлен на хосте, куда указывает MX-запись соответствующего домена). MTA должен сделать примерно следующее: ● ● ●



Обрабатывать входные соединения для приема почты по протоколу SMTP. Сохранять почту на диске в очереди. Отправлять почту адресату из очереди (это может быть локальный почтовый ящик, другой MTA или еще какой-то иной способ доставки почты). Гарантировать доставку почты получателю или нотификацию отправителю о невозможности доставки.

Этот список --- только самое необходимое. Хороший MTA должен, кроме того, быть надежным, высокопроизводительным, гибко настраиваемым, поддерживать встройку фильтров (например, для борьбы со спамом) и т.д. Долгое время фактически единственным MTA для Unix'ов был sendmail, отличающийся диким форматом конфигурации и, вообще, неудобством использования. Сейчас ситуация иная --- есть http://www.freebsd.bip.ru/postfix2.shtml (2 of 6)10.04.2004 17:26:50

Daemon News Russia

еще несколько свободных почтовых систем, таких как QMail и postfix, которые обладают целым рядом преимуществ по сравнению с sendmail. Впрочем, sendmail все равно есть и, наверное, останется самым популярным MTA, так как традиционно входит в состав огромного количества дистрибутивов Unix. Кроме того, опять же, интерфейс с установленным MTA все равно закрепился как вызов программ из установки sendmail и все остальные MTA поддерживают его. Общая организация postfix: модульность, управляющий процесс master Первое, на что стоит я хотел бы обратить внимание: postfix не является монолитной программой. Он весь состоит из модулей, которые передают почтовые сообщения или иную информацию между собой. Интересно, что модули постфикса, или сервисы, устроены в виде отдельных программ, каждая из которых запускается из управляющего сервиса master (порождается от master). Почему выбрана такая модель (то есть, множество однопоточных процессов) а не, к примеру, популярные потоки? Давайте я сразу оговорюсь --- многопоточные сервисы вполне могут существовать и создаваться, это мы все рассмотрим чуть позднее. Но все сервисы постфикса основаны либо на select, либо на pre-fork моделях. Связано это, как я думаю, с отлаженностью этих механизмов на различных операционных системах. Постфикс компилируется и успешно работает практически на всем зоопарке более-менее популярных Unix'ов, это было бы попросту невозможно в том случае, если бы использовались потоки, которые везде разные. А pre-fork модель или select вполне отлажена в течение десятилетий использования. Я отмечу сразу же --- то что я даю свои ответы на поставленные мною же вопросы, еще не значит что эти ответы верны. Я не автор постфикса и его мотивация могла быть совершенно иной, я же лишь предполагаю или, точнее, меряю на себя возникающие вопросы. Поэтому все причины, которые я пытаюсь разъяснить, следует понимать следующим образом: "Я бы тоже сделал бы так если бы стоял перед этой проблемой по следующей причине". Сделав эту ремарку, я надеюсь что читатель ее запомнит и не будет так уж безоговорочно верить в мои ответы --- может быть я и не прав. Если у читателя появились свои ответы (а в качестве postfix'а мы, напомню, не сомневаемся, эта программа является эталоном), то это значит что своей цели я добился. Для функционирования всей системы в целом необходимо запустить только процесс master. Он читает конфигурационный файл следующего вида: # ========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (50) # ========================================================================== smtp inet n n smtpd #628 inet n n qmqpd pickup fifo n n 60 1 pickup cleanup unix n n 0 cleanup qmgr fifo n n 300 1 qmgr #qmgr fifo n n 300 1 nqmgr rewrite unix n trivial-rewrite bounce unix n 0 bounce defer unix n 0 bounce flush unix n n 1000? 0 flush http://www.freebsd.bip.ru/postfix2.shtml (3 of 6)10.04.2004 17:26:50

Daemon News Russia

smtp showq error local virtual lmtp

unix unix unix unix unix unix

n -

n n -

n n n n n n

-

-

smtp showq error local virtual lmtp

Это список всех доступных сервисов. Вкратце, о том что значат все эти надписи, по столбцам: ●

● ●











service --- название сервиса в случае использования сокетов unix-domain и прочих средств IPC (interprocess communication), порт и интерфейс в случае использования интернет-сокетов (smtp, понятно, аналог *:25) type --- тип сокета, который слушается сервисом. Возможные значения, по-моему, ясны. private --- признак того, что сервис может доступен снаружи MTA. Все сервисы с типом inet не могут быть private по понятным причинам --- никак нельзя ограничить доступ процессов к интернет-сокету. В зависимости от этого флага отличается каталог и права доступа на файл, который связан с создаваемым сокетом. Доступные снаружи сервисы нужны по разным причинам, например сервис showq нужен для получения содержимого очереди сообщений для команды mailq. unpriv --- признак того, что сервис запускается от пользователя postfix, а не root. Надо сказать, что смена пользователя целиком и полностью на совести сервиса, а не master'а (единственное, чем отличается запуск непривилегированного процесса от запуска привелигированного --- так это наличием ключа -u). Это можно объяснить тем, что сервисы (а это программы в каталоге /usr/libexec/postfix) просто так не появляются и они должны поддерживать такой интерфейс. Этот флаг нужен для того, чтобы обезопасить сервер от сбоев в работе постфикса: допустим, в постфиксе найдена жуткая ошибка в каком-либо из сервисов, позволяющая злоумышленнику выполнить любой код на вашем сервере; если бы сервисы работали от root'а то этот человек получил бы полный доступ к компьютеру, а если они работают от пользователя postfix, который даже не имеет возможности логина, то под ударом только ваша почта. Естественно, что основной процесс, master, работает от root'а, это значит что master должен быть максимально простым для того, чтобы гарантировать отсутствие в нем грубых ошибок. chroot --- аналогично unpriv, флаг заставляет сервисы выполнить вызов chroot на /var/ spool/postfix. Тем самым для сервисов меняется положение каталога '/' и они не могут получить доступ к другим файлам, кроме очереди сообщений. Необходимость этого флага обусловлена теми же причинами, что и для unpriv. wakeup --- нотификация сервиса каждые n секунд. Это позволяет заставить сервисы, допустим, перечитать очередь. На самом деле, нотификация об изменениях в очереди может быть доставлена от других сервисов, но это все равно полезно: вдруг где-то что-то сломалось, или постфикс перезапустился, все равно очередь должна быть проверена. maxproc --- максимальное количество процессов сервиса, которые могут быть запущены. Это число очень полезно для настройки особенно тяжеловесных сервисов, запуск которых может привести к большой загрузке сервера. command --- это просто название программы и аргументы, которые должны быть ей переданы. Здесь никаких тонкостей нет.

Значения по-умолчанию (например, maxproc) настраиваются через другой конфигурационный файл --- main.cf. master: запуск сервисов, интерфейс с уже запущенными сервисами Теперь рассмотрим, как появляются новые процессы, выполняющие работу сервисов. http://www.freebsd.bip.ru/postfix2.shtml (4 of 6)10.04.2004 17:26:50

Daemon News Russia

При запуске master считывает master.cf, по которому он определяет какие сервисы понадобятся. Он создает все указанные сокеты и готовиться их "слушать", инициализирует внутри себя структуры, описывающие состояние каждого из сервисов (количество запущенных процессов и т. п.), после чего master загоняет все дескрипторы сокетов в select и ждет какого-нибудь из событий на каждый из них. Теперь, допустим, на наш сервер должна прийти почта. Сейчас интересно не то, как будет обрабатываться почта, а как будут запускаться сервисы. Что значит --- пришла почта? Это значит, что некий почтовый релей установил соединение на 25й порт нашего сервера. В этом случае, дескриптор в master'е, который связан с этим портом, будет "готов к чтению" и, тем самым, select завершится. Сам по себе master не умеет обрабатывать smtp-сессию, зато это умеет делать сервис smtpd, который и будет запущен при помощи fork. Естественно, что перед запуском производится некоторое количество действий, которые пока что не особенно интересны, важно то, что сразу же после запуска smtpd выполняет accept на этом дескрипторе и приступает к обработке smtpсессии и пересылке письма дальше по сервисам до менеджера очереди. Перед запуском master увеличивает счетчик процессов сервиса smtpd и запоминает его pid. Этот счетчик будет уменьшен тогда, когда master получит сигнал SIGCHLD, то есть smtpd завершится. Тем самым, master может контролировать количество запущенных процессов. Теперь самый интересный вопрос --- пока smtp-сессия обрабатывается, master может опять реагировать на изменения состояния дескриптора, связанного с 25-м портом, а что делать когда эта сессия закончится? Глупо завершать smtpd сразу же после обработки одного письма если через секунду, возможно, придет еще одно письмо: тогда будет слишком много затрат связанных с fork. Тем самым, сервисы должны уметь обрабатывать новые соединения и при этом им не должен мешаться master. Кроме того, master все равно должен следить за сервисами и если кто-то из них захотел "умереть", то это не должно сказаться на работоспобности MTA в целом. Опять же, технология в этом случае совершенно простая, грубо говоря это и есть pre-fork модель построения сетевых серверов, единственное отличие от, скажем так, классической реализации заключается в том, что обычно сервер выполняет только одну операцию и, тем самым, можно сделать так что "главный" сервер (который и выполняет fork) сам по себе тоже способен обрабатывать соединения. В случае с master, который запускает любые сервисы, реализовать такой подход попросту нереально. Обычно, каждый свободный экземпляр сервера (то есть, отдельный процесс) выполняет accept (или сначала select, а потом accept) на нужный дескриптор. При этом реально accept будет выполнен только у одного экземпляра сервера (заранее неизвестно какого именно), остальные получат ошибку и могут опять запустить accept или select. Сейчас же, master должен уметь отличать ситуации когда свободных экземпляров сервиса нет (тогда он должен слушать сокет сам и выполнить fork когда придет новое соединение) и когда кто-то свободен (и тогда ему не надо запускать select на этот сокет, поскольку этот "кто-то" сам следит за своим сокетом). Естественно, что это делается опять же через IPC: между потомком (то есть, экземпляром сервиса) и master'ом есть канал, через который потомок уведомляет master о своей занятости или свободности. Когда потомок изменяет свое состояние, он передает master'у два значения:

http://www.freebsd.bip.ru/postfix2.shtml (5 of 6)10.04.2004 17:26:50

Daemon News Russia

свой pid и флаг "занят" или "свободен". Реализация многопроцессного однопотокового сервиса в этом случае простая: сервис все время делает accept, по успеху последнего он оповещает master о занятости, затем начинает обрабатывать соединение, после чего сообщает master'у о своей свободности и опять делает accept. Если в какой-то момент он решит закончить свое выполнение, он может это сделать без оповещений --- master получит сигнал от операционной системы и выполнит все необходимые действия. Реализация многопотокого сервиса еще проще --- сервис никогда не оповещает master о своей занятости, а обрабатывает соединения во внутреннем select или еще каким-нибудь образом. Теперь небольшая ремарка о необходимости завершения работы процесса. Это общепринятая практика, когда сервер после выполнения определенного числа операций или простоя, прекращает свое выполнение. Такая логика очень полезно, потому что уменьшает зависимость от ошибок с неудалением выделенной ранее памяти (попросту, "разбухания" процесса), поэтому обычно любые сервера имеют какое-то ограничение на количество обработанных запросов и время простоя. В postfix каждый сервис имеет подобные ограничения, кроме, разумеется, master, так как последний некому перезапустить. Когда некий сервис требует для своей работы другой сервис (например, для того чтобы передать почтовое сообщение от smtpd в cleanup), он всего-навсего обращается по нужному сетевому адресу (в сети интернет или файловой системе), все остальное за него будет сделано master'ом или работающим целевым сервисом. Автор: Андрей Калинин (c) 2001-2002 Daemon News Russia

http://www.freebsd.bip.ru/postfix2.shtml (6 of 6)10.04.2004 17:26:50

Daemon News Russia

\\ библиотека \\ софт \\ форум \\ ссылки \\ поиск \\ связь Настройка VLAN в FreeBSD новости

Технология VLAN позволяет логически разделять сети, которые находятся на одном и том же физическом устройстве (устройствах). Так, при помощи VLAN можно сделать несколько независимых сетей на одном свитче. Эта технология очень удобна при подключении к Интернет пользователей по выделенным EtherNet линиям. Все постоянные соединения можно "собрать" в один свитч, но пользователи друг-друга видеть не будут, если свитч "разрезать" на независимые VLAN-ы. Также очень удобно применять VLAN-ы в бизнес-центрах - когда в бизнес-центре сразу же закладывается кабельная сеть с активным и пассивным оборудованием. Для арендатора, берущего порты оборудования в аренду, выделяется VLAN, который представляет из себя не что иное, как локальную сеть. Для того, чтобы организовывать VLAN, свитч (коммутатор) должен поддерживать технологию VLAN и протокол 802.1q. Эту технлогию поддерживают многие производители свитчей (например Cisco, 3Com). Классическим решением "вывода" VLAN в Internet - применение Cisco Catalyst и маршрутизатора Cisco. Однако в последнее время все чаще применяются маршрутизаторы на основе PC под управлением UNIX. В таких маршрутизаторах также можно эффективно работать с VLAN. Ниже будет показано как "увидеть" VLAN-ы в ОС FreeBSD. Есть сетевые карты, которые поддерживают vlan на аппартаном уровне, а есть которые не поддерживаются. Если сетевая карта не поддерживает vlan, в FreeBSD предусмотрена software поддержка, но карточка должна поддерживать oversized пакеты. Этим требованиям удовлетворяет большинство современных сетевых карт. Пример создания vlan при помощи свитча, поддерживающего эту технологию. 1. Ставим FreeBSD (как обычно) 2. Готовим ядро FreeBSD cd /usr/src/sys/i386/conf cp GENERIC vlan #vi vlan Добавляем строчку pseudo-devise vlan 4 # Количество необходимых vlan-ов # config vlan http://www.freebsd.bip.ru/vlan.shtml (1 of 3)10.04.2004 17:26:51

Daemon News Russia

# cd ../../compile/vlan # make depend # make # make install # shutdown -r now Перегружаемся 3. Проверяем интерфейсы После загрузки нового ядра команда ifconfig -a должна выдать: vlan0: flags=0 mtu 1500 ether 00:00:00:00:00:00 vlan: 0 parent interface: vlan1: flags=0 mtu 1500 ether 00:00:00:00:00:00 vlan: 0 parent interface: vlan2: flags=0 mtu 1500 ether 00:00:00:00:00:00 vlan: 0 parent interface: vlan3: flags=0 mtu 1500 ether 00:00:00:00:00:00 vlan: 0 parent interface: 4. Конфигурим интерфейсы Для конфигурирования VLAN нужно: а. сконфигурировать основной интерфейс на какой-нибудь ip (как обычный сетевой интерфейс) b. сконфигурировать vlan-интерфейсы, указав основной интерфейс в команде ifconfig В общем случае команда ifconfig для vlan выглядит так: ifconfig vlan inet netmask vlan