Академический Документы
Профессиональный Документы
Культура Документы
Корпоративный Интернет-сервер
на базе ОС FreeBSD.
Киев - 2006
1. Введение 4
1.1. Краткая история FreeBSD 4
1.2. Преимущества FreeBSD 5
1.3. Для кого эта книга 6
2. Инсталляция FreeBSD 7
1.4. Создание загрузочных дискет 7
1.5. Создание разделов на жёстком диске 7
1.6. Выбор Distributions и Packages 8
3. Базовая настройка FreeBSD 9
1.7. Создание пользователя с правами root 9
1.8. Проверка и настройка сети (ifconfig) 9
1.9. Если провайдер выдаёт ADSL (ppp) 10
1.10. Редактирование параметров загрузки (/etc/rc.conf)
10
1.11.Конфигурирование ядра 11
1.12. Настройка обновления дерева портов (cvsup)
12
1.13. Настройка службы DNS (named)
12
1.14. Настройка почтовой службы (sendmail)
13
1.15. Установка и базовая настройка proxy-сервера (squid)
13
1.16. Обновление индексной базы поиска файлов (locate) 14
1.17. Справочная система FreeBSD 14
1.18. Завершение базовой настройки FreeBSD 14
4. Дальнейшая настройка FreeBSD 15
1.19. Антивир
усный контроль почты (sendmail + drweb) 15
1.20. Более тонкая настройка proxy-сервера (squid)
15
1.21. Защита сети -firewall (ipfw)
16
1.22. Соединения через сокет (socket)
17
1.23. Настройка ftp-сервера
17
1.24. Установка и настройка web-сервера (apache)
17
1.25. Популярная связка apache + php + mysql
18
1.26. Web-интерфейс для доступа пользователей к почте (openwebmail)
18
1.27. Держим у себя файл зоны (первичный DNS)
18
1.28. Организуем виртуальную локальную сеть (ipsec) 19
1.29. Второй способ организовать VPN (openvpn) 19
1.30. Беспрепятственное копирование файлов между серверами FreeBSD 20
1.31. Графики статистики использования сетевого трафика (mrtg) 20
1.32. Подсчёт и ограничение трафика пользователей (ipa) 21
1.33. Настройка общения с сервером по sms 25
1.34. Завершение полной настройки FreeBSD - наводим красоту 26
5. Инструменты на каждый день 27
1.35. Работа с файлами в shell
27
1.36. Пользователи, группы и права доступа
29
1.37. Текстовый редактор vi
31
1.38. Программирование в shell
33
1.39. Справоч
ник по командам и конфигурационным файлам 40
6. Заключение 42
3
1. Введение
1.01. Краткая история FreeBSD
Всё начиналось с ОС UNIX. У истоков этой операционной системы стояла Bell Labs
компании AT&T. Два человека - Кен Томпсон (Ken Thompson) и Деннис Ритчи (Dennis
Ritchie) были главной движущей силой развития UNIX, которая вообще-то родилась
случайно. В середине 60-х годов AT&T Bell Labs совместно с другими компаниями
прикладывала немало усилий для разработки новой операционной системы под названием
Multics. Её предполагалось использовать для крупномасштабных вычислений, которые
выполнялись на машине класса мэйнфрейм. Кен Томпсон написал небольшую
компьютерную игру, но ему не нравились ни производительность мэйнфрейма, ни
стоимость машинного времени. С помощью Денниса Ритчи он переписал эту игру для
работы на компьютере DEC PDP-7 и, по ходу дела, написал целую операционную систему.
Весной 1969 года Bell Labs вышла из проекта, и программисты Computing Science Research
Center остались без вычислительной среды, однако, к этому моменту они уже разработали
базовую структуру файловой системы, которая впоследствии превратилась в файловую
систему UNIX. Первые версии UNIX были написаны на языке ассемблер, но уже в 1973 году
UNIX была переписана на С - совершенно новом языке программирования, разработанном
Ритчи. Создание языка программирования С и системы UNIX - две самые важные вехи в
истории компьютерной индустрии. Язык С стал первым мультиплатформенным языком,
который позволил относительно легко переносить как приложения, написанные на нём, так
и саму систему UNIX между различными компьютерными платформами. Это одна из
многих возможностей, благодаря которым система UNIX стала такой популярной.
AT&T в принципе не занималась компьютерным бизнесом (отчасти потому, что в то
время это было монополией правительства). Поэтому AT&T предложила UNIX в виде
исходных кодов правительственным учреждениям и университетам за сравнительно
небольшую плату. Вот так система UNIX попала в 80% университетов, имевших
компьютерные факультеты. Одной из первых организаций, вплотную занявшихся работой
над UNIX, стала группа из Калифорнийского университета в Беркли - Computer Systems
Research Group. Этому способствовал и тот факт, что в 1975 году Кен Томпсон оставил Bell
Labs и перешел в отдел компьютерных исследований в Беркли. В работе над расширением
системы ему активно помогал студент-выпускник Билл Джой (Bill Joy). Калифорнийские
студенты и преподаватели внесли значительный вклад в систему UNIX. Измененная и
скорректированная в университете версия была выпущена под названием Berkley Software
Distribution, или BSD. А в конце 70-х годов произошло важное событие: Министерство
обороны США объявило, что ее подразделение Advanced Research Project Agency будет
использовать UNIX и что в качестве базовой принята версия разработчиков из Беркли.
Одним из требований, поставленных министерством обороны, была возможность работы в
сети и высокая устойчивость системы. Так, благодаря военным, UNIX стала продвигаться
вперед по пути совершенствования. В это время Билл Джой оставил университетский
городок и основал компанию Sun Microsystems. Рабочие станции Sun использовали версию
операционной системы, производную от BSD и известную как SunOS. Большая часть
исходного кода BSD была доступна пользователям бесплатно. В 1991 году BSD была
портирована на платформу Intel x86, а в Калифорнийском университете образовалась
новая коммерческая группа, которая начала продавать коммерческую версию BSD для
платформы х86.
В 1993 году две совершенно разные группы одновременно пришли к выводу, что
UNIX заслуживает большего внимания. В результате были созданы два новых проекта.
Результатом первого проекта стала операционная система NetBSD. Здесь основное
4
внимание уделялось доступности и универсальности системы. Если существует аппаратная
платформа, то наверняка имеется и работающая на ней версия NetBSD. Второй проект
породил FreeBSD. В этой разработке внимание было сконцентрировано на том, чтобы
система стала проще в использовании. Иначе говоря, эта система была ориентирована на
широкий круг пользователей и на платформу Intel x86. Сегодня FreeBSD - самая известная
UNIX-система из семейства BSD. 1.02. Преимущества FreeBSD
Причин для того, чтобы использовать в своих задачах FreeBSD масса. Наверное у
тех, кто не любит FreeBSD, найдётся столько же причин её не использовать, поэтому,
задачей автора является «на практике показать реальные преимущества этой ОС», чтобы,
как у пользователя, так и у системного администратора, не осталось ни тени сомнения в
том, какую ОС использовать для реализации, например, корпоративного Интернет-сервера.
Итак, главным преимуществом автор, безусловно, считает её стабильность. По
данным компании Netcraft (netcraft.com), изучавшей сайты с самым продолжительным
календарным временем беспрерывной работы, из 50 первых в её списке сайтов 47
функционирует под управлением FreeBSD. С момента последней перезагрузки Web-
сервера №1 прошло уже более 5 лет! И, конечно же, он работает под FreeBSD.
Второе неоспоримое преимущество - это то, что FreeBSD бесплатная система, не
обременяющая пользователя дорогой лицензией. Вы можете бесплатно установить копию
FreeBSD на всех своих компьютерах, сколько бы их ни было. Если вы устанавливаете
сервер, вам не потребуется платить за каждое подключение или за дополнительных
пользователей, как в некоторых коммерческих сетевых операционных системах (вы
понимаете, о чём я).
Третье - это доступность тысяч бесплатных пакетов прикладных программ всегда в
режиме online! Эти свободно распространяемые программы элементарно устанавливаются
из дерева портов всего двумя командами - система сама найдёт нужные дистрибутивы и
патчи в сети и скомпилирует всё, что нужно на вашу FreeBSD. Требуется только
подключение к Интернет.
Четвёртое - это открытость системы. Доступно всё дерево исходного кода ОС
FreeBSD, в код можно вносить изменения, выполнять любые проверки защиты и т.д.
Ну и наконец, показателем качества является то, что системой FreeBSD пользуются
крупнейшие компании и интенсивно используемые сайты. Даже «славная» Microsoft
использует у себя эту ОС (например, в проекте hotmail.com).
5
набрать нужную команду гораздо быстрее, чем добиться того же самого эффекта с
помощью системы разветвленных меню.
Второе основное отличие - ядро Windows невозможно изменить. Ядро - это сердце
операционной системы, оно контролирует все аспекты её работы. FreeBSD позволяет
создать новое ядро, которое будет максимально соответствовать назначению конкретной
ОС. Благодаря этому существенно возрастает быстродействие и снижаются требования к
аппаратным ресурсам. В Windows же предпочтение отдается простоте эксплуатации, а не
производительности и эффективному использованию аппаратных средств.
Что касается Linux, то об этой системе сейчас знают все, впрочем, как и о Windows.
В последнее время она стала особенно популярной. Фактически Linux- это клон UNIX. Как и
FreeBSD, это открытая операционная система, разработанная добровольцами из разных
стран мира. У FreeBSD и Linux много общего, однако, для Linux создано больше программ,
чем для FreeBSD, но последняя в свою очередь позволяет запускать практически все
программы, разработанные для Linux. Более того, под FreeBSD они работают даже
быстрее, чем под Linux. Что касается политики разработки и поддержки, то у FreeBSD
только один дистрибьютор, а у Linux их более 30. FreeBSD будет работать одинаково на
любой системе. В случае с Linux это не так. У каждого дистрибьютора свой подход, что
нередко вводит пользователей в заблуждение, когда они переходят с одного дистрибутива
Linux на другой. FreeBSD является полноценной ОС, поддерживаемой основным составом.
Linux - это только ядро, поддерживаемое Линусом Торвальдсом (создателем Linux).
Компании, занимающиеся распространением Linux, комплектуют свои дистрибутивы целым
рядом программ, специально разработанных для Linux и, естественно, каждый
дистрибьютор имеет собственное мнение относительно того, что должно входить в
дистрибутив. Кроме того, процесс обновления кода FreeBSD отслеживается и
координируется намного тщательнее, чем в Linux. Для большинства пользователей это
позитивное явление, поскольку они уверены в том, что код был протестирован
специалистами на отсутствие проблем. Поскольку в системе FreeBSD поддерживается одно
дерево исходного кода, она стабильнее Linux и в большей степени соответствует
производственным целям. Основным недостатком FreeBSD, вызванным таким подходом,
является то, что нововведения допускаются в систему медленней, чем в Linux. Но есть
выбор: либо вы предпочтёте стабильность и неприступность ОС, либо остановите свой
выбор на моднейших вещичках и новейших игровых устройствах, пожертвовав ради этого
надежностью.
6
Для того, чтобы вы сразу смогли эффективно проделывать то, что описано в книге,
советуем с самого начала прочитать главы 5.01, 5.02 и особенно 5.03. Когда в книге
начнётся разговор о программировании скриптов, перед тем, как продолжить, прочитайте
главу 5.04. Удачи... :)
2. Инсталляция FreeBSD
В офисных условиях ОС FreeBSD можно установить двумя основными способами - с CD-
дисков, либо с ftp-сервера, однако, в последнем случае, необходимо создать две
загрузочные дискеты. Если вы планируете устанавливать ОС с CD-дисков, то можете
пропустить следующий раздел о загрузочных дискетах.
При загрузке с дискет или компакт-диска, попадаем в меню, в котором выбираем первый
пункт:
Skip kernel configuration and continue with installation.
7
swap 256 Mb ( обычно в 2 раза больше объёма ОЗУ)
/trap 256 Mb (больше не нужно)
/var з Gb (здесь будут все логи)
/home 1 Gb (домашние каталоги пользователей)
/usr всё остальное ( программы, пакеты, базы данных и т.д.)
Кто не разобрался:
#3 Раздел создаём клавишей «с»;
#4 Объём можно писать сокращённо, например: 256М, 3G и т.д.
И это почти всё уже. Нам остаётся выбрать тип установки - с ftp или компакт-диска и, если
ставим с ftp, то надо выбрать источник установки ftp-сервер ну и настроить сеть на нашем
будущем сервере (IP-адрес, шлюз, DNS).
Нажимаем Install и... ни в коем случае не идём курить. Инсталляция проходит очень
быстро и задаёт вопрос: «Вернуться ли к послеинсталляционным настройкам?» Мы,
конечно же, возвращаемся и не трогаем ничего (всё будем настраивать потом - так
нагляднее и правильнее), кроме раздела Packages. Здесь нам нужны только две вещи:
Security > sudo
Shells > bash
И всё. Осталось выбрать свой часовой пояс (иначе почта будет ходить с неправильным
временем - это, как минимум, неприятно) и тогда точно всё. Выходим из программы
Sysinstall и перезагружаемся в уже проинсталлированную ОС FreeBSD.
Удивляемся тому, насколько быстро прошла установка системы и двигаемся дальше - ещё
много чего нужно настроить.
3. Базовая настройка FreeBSD
Если загрузка системы пройдёт удачно, вы увидите приглашение: «login: » - это значит, что
всё прошло хорошо и у вас теперь есть установленная, но пока ещё ненастроенная
FreeBSD. Заходим в систему под пользователем root без пароля и, сразу же, запомните раз
и навсегда: первое, что нужно сделать, - это установить пароль для пользователя root:
# passwd root
Теперь можно и даже нужно выйти из системы (Ctrl-D) и зайти уже под своим
пользователем. Никогда не работайте в UNIX под пользователем root - на то есть много
причин и, кроме того, это считается плохим тоном. Получаем права root:
# sudo -s
provider name:
set device PPPoE:edO
set authname ppp login
set authkey ppp password
set dial
set login
add default HISADDR
При этом в системе появится виртуальный сетевой интерфейс tunO, и весь трафик
логически будет проходить именно через него, а не через ео!0. В рамках данной книги мы
будем описывать традиционное подключение к сети Интернет, т.е. работать с
существующими физическими интерфейсами edO и fxpO. Таким образом, если у вас ADSL,
то просто меняйте в дальнейших сетевых настройках edO на tunO там, где это нужно.
Сейчас самое время придумать имя вашему серверу. Наверняка у вас есть какой-то домен,
частью которого вы планируете быть. Не забудьте, что «как вы сервер назовёте, так он и
будет работать»... Допустим, у вас есть почтовый домен mail.ua и вы хотите назвать свой
сервер elbrus. Пропишите в файле зоны вашего домена хост elbrus.mail.ua (как это
делается читайте в разделе 3.07) и вперёд:
# vi /etc/rc.conf
sshd_enable="YES"
gateway enable="YES"
sendmail enable="YES"
hostname="elbrus.mail.ua"
ifconfig_fxpO="inet 10.0.0.1 netmask 255.255.255.0"
ifconfig_ed0="inet 222.111.33.100 netmask 255.255.255.252"
defaultrouter="222.111.33.99"
named_enable="YES"
natd_enable="YES"
natd interface="ed0"
10
firewall_enable="YES"
firewall type="/usr/local/etc/firewall.conf"
# vi /usr/local/etc/firewall.conf
add divert natd ip from any to any via edO
# vi /etc/rc.conf
sshd_enable="YES"
gateway enable="YES"
sendmail enable="YES"
hostname="elbrus.sint.ua"
ifconfig_fxpO="inet 10.0.0.1 netmask 255.255.255.0"
ppp_enable="YES"
ppp mode="background"
ppp profile="provider name"
named_enable="YES"
natd_enable="YES"
natd interface="tunO"
firewall_enable="YES"
firewall type="/usr/local/etc/firewall.conf"
# vi /usr/local/etc/firewall.conf
add divert natd ip from any to any via tunO
Чтобы заработал NAT (трансляция адресов), FIREWALL (надеюсь понятно, что это) и IPSEC
(об этом далее), необходимо пересобрать ядро. Т.е. добавить кое-какие строки в кое-какой
файл и выполнить три команды:
#7 cd /usr/src/sys/i386/conf/
#8 ср GENERIC ELBRUS
#9 vi ELBRUS
options IPFIREWALL
options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPDIVERT
options DUMMYNET
options IPSEC
options IPSEC_ESP
options IPSEC_DEBUG
pseudo-device gif 4
pseudo-device bpf 4
#10 config ELBRUS
#11 cd .. /.. /corapile/ELBRUS/
#12 make depend
#13 make
#14 make install
11
# make depend && make && make install
Находим файлик ports-supfile, копируем его в свой домашний каталог и редактируем его и
запускаем процедуру обновления дерева портов:
#17 ср /usr/share/examples/cvsup/ports-supfile /home/admin/
#18 vi /home/admin/ports-supfile
*default host=cvsup2.ua.FreeBSD.org
# cvsup -g -L 2 /home/admin/ports-supfile
Это нужно для того, чтобы наш сервер мог сам обрабатывать dns-запросы, а так же, если
понадобится, держать у себя доменные зоны. Нам нужен работающий демон named.
#19 cd /etc/namedb/
#20 /bin/sh /etc/namedb/make-localhost
#21 vi named.conf
forwarders {
222.111.0.1;
222.111.0.2;
};
# vi /etc/hosts
222.111.33.100 elbrus.mail.ua
10.0.0.1 elbrus.mail.ua
В принципе этого достаточно. Однако, можно ещё прописать у себя обратную зону нашей
локальной сети. Как правило, в 99,9%, это не нужно, поэтому, как хотите:
# vi named.conf
zone "0.0.10.IN-ADDR.ARPA" {
type master; file
"0.0.10.rev";
};
# vi 0.0.10.rev
$TTL 86400
0.0.10.IN-ADDR.ARPA. IN SOA elbrus.mail.ua. root.elbrus.mail.ua. (
20060606 r
serial
28800 r
refresh
1800 r
retry
604800 r
expire
86400 ) r
minimum
IN NS e lbrus mail.ua.
$ORIGIN 0 . 10 IN-ADDR.ARPA
12
$GENERATE 1-254 $ PTR local-$.mail.ua.
Для того, чтобы наш сервер мог принимать и отправлять почту, нужно немного подстроить
sendmail, а именно: разрешить локальной сети пользоваться им, как smtp, прописать
домены, для которых принимать почту извне, ограничить размер письма (не обязательно,
но полезно) и дать возможность забирать почту по протоколу рорЗ:
#22 cd /etc/mail/
#23 ср access.sample access
#24 vi access
10.0.0 RELAY
# vi local-host-names
mail.ua
# vi sendmail.cf
О MaxMessageSize=4096000
# make maps && make restart
Автор надеется, что читатель знает, что такое proxy и для чего он нужен. Естественно, что в
локальной сети, которой нужен доступ в Интернет, без него не обойтись. Ставим squid, и не
забываем поправить squid.conf, чтобы вашим сервером не пользовались все, кому не лень,
т.е. squid должен отвечать только на запросы вашей локальной сети.
#28 cd /usr/ports/www/squid/
#29 make && make install
#30 cd /usr/local/etc/squid/
#31 vi squid.conf
acl users src 10.0.0.0/255.255.255.0
В UNIX-системах есть хорошая программа поиска файлов - locate. Однако, для того, чтобы
она работала, необходимо создать индексную базу файловой системы, которая
обновляется автоматически один раз в неделю, но, так как мы только установили наш
сервер, её ещё попросту нет. Команда для создания или ручного обновления следующая: #
/etc/periodic/weekly/310.locate
Если не понятно, как пользоваться справкой, то есть даже для тех, кто в танке:
# man man
Вот собственно и всё, что касается основной базовой настройки системы. Осталось его
перегрузить, чтобы запустилось наше новое ядро, а с ним и firewall и natd и всё остальное.
Перегружаем сервер любой из следующих команд:
#34 reb
oot или:
#35 shutdown —r now
Как вы догадались, перегружать сервер кнопкой Reset не рекомендуется, т.к. хоть FreeBSD
и надёжнее Windows, но всё-таки файловая система есть и там и там, а с любой файловой
системой завершать работу следует корректно. Для выключения компьютера используйте:
#36 halt
или:
#37 shutdown —h now
И, конечно же, это далеко не всё, что вам может понадобиться, и что вы можете получить,
работая с ОС FreeBSD. Движемся дальше.
14
4. Дальнейшая настройка FreeBSD
4.01. Антивирусный контроль почты
Раз уж у нас появился сервер приёма электронной почты, то было бы неплохо сразу
настроить и антивирусный контроль входящих и исходящих писем. Использовать будем
антивирус DrWeb, т.к. он элементарно устанавливается из портов и не создаёт проблем в
процессе дальнейшей работы:
#44 cd /usr/ports/security/drweb-sendmail/
#45 make && make install
#46 vi /etc/mail/sendmail.cf
# Input mail filters
0 InputMailFilters=drweb-filter
Xdrweb-filter, S=local:/var/drweb/run/drweb-smf.skt, F=T,
T=S:320s;R:32 0s;E:In
#47 killall sendmail
#48 /usr/local/etc/rc.d/001.drwebd.sh start
#49 /usr/local/etc/rc.d/002.drweb-smf.sh start
#50 cd /etc/mail/
#51 make start
Очень часто бывает так, что всем разрешать пользоваться Интернетом не стоит. Это очень
просто можно ограничить прямо в файле настройки squid:
# vi /usr/local/etc/squid/squid.conf
acl good src "/usr/local/etc/squid/good.txt"
15
И наконец, если нужно фильтровать http-запросы пользователей, не пускать их на
ненужные сайты, перенаправлять их на определённые сайты при определённых условиях,
ограничивать доступ в Интернет по времени и так далее и тому подобное, то лучше всего
настроить фильтрацию при помощи программы SquidGuard:
#52 cd /usr/ports/www/squidguard/
#53 make && make install
#54 vi /usr/local/etc/squid/squid.conf
redirect program /usr/local/bin/squidGuard
redirect children 4
# vi /usr/local/etc/squid/squidGuard.conf
Здесь же опишем, как ограничить скорость трафика по определённым условиям (это нам
пригодится в дальнейшем):
# ipfw add pipe 1 tcp from any to 10.0.0.3 out
16
# ipfw pipe 1 config bw 32Kbit/s
To есть любой трафик на хост 10.0.0.3, исходящий от нас, отдавать со скоростью не более
32 Кбит в секунду. Пока подумайте, для чего мы это будем использовать. :)
Теперь можно подключаться терминальным клиентом к нашему серверу на его внешний IP-
адрес (222.111.33.100) - сервер перенаправит входящее соединение внутрь нашей
локальной сети на хост 10.0.0.5.
Очень часто бывает полезно иметь возможность попасть на свой сервер по ftp. Для того,
чтобы можно было попадать по ftp к себе в домашнюю директорию, нужно всего лишь:
# vi /etc/inetd.conf
ftp stream tcp nowait root /usr/libexec/ftpd ftpd -1
ftp stream tcp6 nowait root /usr/libexec/ftpd ftpd -1
# killall -HUP inetd
17
#61 cd /usr/ports/www/apachel3
#62 make && make install
#63 vi /etc/rc.conf
apache_enable="YES"
И это, как ни странно, всё. Осталось запустить httpd и ваш сервер будет отвечать на 80
порту. Предполагая, что у вас будет жить не один сайт, настроим сразу виртуальные хосты с
некоторыми полезными опциями (например прямой доступ к файлам в директории):
# vi /usr/local/etc/apache/httpd.conf
Include etc/apache/virtual.conf
# vi /usr/local/etc/apache/virtual.conf
NameVirtualHost 222.111.33.100:80
<VirtualHost 222.Ill.33.100:80>
ServerAdmin admin@mail.ua
DocumentRoot /home/admin/www
ServerName mail.ua
ServerAlias www.mail.ua
CustomLog etc/apache/logs/mail.ua-access log common
ErrorLog etc/apache/logs/mail.ua-error log
</VirtualHost> <Directory "/nome/admin/www/fotos/">
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
Здесь писать много не будем. Отметим только, что установив некоторые программы и
библиотеки из портов, и ничего не настраивая, вы будете иметь эту самую связку:
#64 cd /usr/ports/databases/mysql51-server/
#65 make && make install
#66 cd /usr/ports/lang/php4/
#67 make && make install
#68 cd /usr/ports/databases/phpmyadmin/
#69 make && make install
Теперь, когда у нас есть свой web-сервер, мы можем сделать полезную вещь для наших
пользователей - настроить доступ к их почтовым ящикам по web-интерфейсу:
#70 cd /usr/ports/mail/openwebmail
#71 make && make install
18
zone "admin.kiev.ua" { type master; file
"/etc/namedb/domains/admin.kiev.ua'
};
# vi /etc/namedb/domains/admin.kiev.ua
$TTL 10800
@ IN SOA ns.admin.kiev.ua . root.admin.kiev.ua
2006010101 10800 ; Serial
3600 604800 86400 ; Refresh
) ; Retry
; Expire
; Minimum
@ IN NS ns.admin.kiev.ua .
@ IN NS ns.secondary.net . ua.
@ IN MX 10 ns.admin.kiev.ua.
@ IN A 222.111.33.100
ns IN A 222.111.33.100
office IN A 222.111.33. 100
www IN CNAME ! ns
# killall -HUP named
Теперь представьте себе, что у вас есть второй удалённый офис. Он так же подсоединён к
сети Интернет, однако, вам этого мало. Вы хотите соединить две локальные сети офисов в
единую виртуальную локальную сеть и иметь доступ с любого компьютера одного офиса на
любой компьютер и принтер другого. Построим такую сеть (VPN) средствами IPSec.
Необходимые опции в ядро мы уже включили выше. Пусть второй офис имеет параметры:
1.42. Локальную офисную сеть 192.168.1.0/24;
1.43. Подключение к Интернет IP-адрес: 111.111.11.1;
Для организации VPN нам необходим будет FreeBSD сервер, аналогичный нашему. Теперь
пишем у нас:
# vi /etc/rc.conf
ipsec enable="YES"
gif interfaces="gif0"
gifconfig_gif0="22 2.111.33.100 111.111.11.1"
ifconfig_gifO="inet 10.0.0.1 192.168.1.1 netmask 255.255.255.0"
# vi /etc/rc.local
route add 192.168.1.0/24 192.168.1.1
# vi /usr/local/etc/firewall.conf
add allow ip from me to 111.111.11.1
add allow ip from 111.111.11.1 to me
add allow ip from 10.0.0.0/24 to 192.168.1.0/24
add allow ip from 192.168.1.0/24 to 10.0.0.0/24
19
Можно построить VPN не на уровне ядра системы, а при помощи утилиты openvpn. Минус
в том, что в этом случае наша сеть будет менее стабильна и устойчива. Плюс в том, что
таким образом можно настраивать не только связку FreeBSD - FreeBSD, а и, например,
FreeBSD - Windows 2000 / 2003. Подробно описывать настройку openvpn мы здесь не
будем. Кому интересно - в Интернете масса статей по этому поводу.
Рано или поздно у вас появится не один, а несколько FreeBSD серверов и вы захотите
копировать между ними файлы в автоматическом режиме (например, логи squid или
графики загрузки канала). Для этого есть прекрасная команда scp (secure copy), однако,
она требует ввода пароля. Для беспрепятственного же копирования файлов между
серверами UNIX нужно сформировать RSA1, RSA и DSA ключи. Генерировать их надо на
той машине с которой планируется копировать файлы:
#72 ssh-keygen -t rsal
#73 ssh-keygen -t rsa
#74 ssh-keygen -t dsa
Весьма небесполезная программа mrtg построит вам любые графики любых параметров,
которые можно измерять с течением времени. Мы же будем использовать её в связке с
snmp для построения графиков загрузки нашего Интернет-канала:
#75 cd /usr/ports/net-mgmt/net-snrap/
#76 make && make install
#77 cd /usr/ports/net-mgmt/mrtg/
#78 make && make install
#79 vi /usr/local/share/snmp/snmpd.conf
rwuser root noauth
rouser root noauth
rwcommunity public 222.111.33.100
rocommunity public 222.111.33.100
# vi /usr/local/etc/mrtg/mrtg.cfg
WorkDir: /usr/local/etc/mrtg/www
Target[elbrus]: -1:public@222.Ill.33.100
MaxBytes[elbrus]: 256000
Title [elbrus] : Traffic Analysis for Elbrus
PageTop[elbrus]: <Hl>Stats for Elbrus server</Hl>
# vi /etc/rc.local
/usr/local/sbin/snmpd
# vi /etc/crontab
*/5 * * * * root /usr/local/bin/mrtg /usr/local/etc/mrtg/mrtg.cfg
# killall -HUP cron
20
4.14. Подсчёт и ограничение трафика пользователей
Теперь нужно добавлять правила ipfw для того, чтобы ipa снимала с них информацию о
проходящем объёме трафика. Такие два правила у нас уже есть - они считают общий
объём входящего и исходящего внешнего трафика нашего сервера. После этого нужно
создать ipa.conf и ipastat.conf:
# vi /usr/local/etc/firewall.conf
# vi /usr/local/etc/ipa.conf
ac mod "ipa ipfw.so";
db mod "ipa db sdb.so";
global {
update time = 30s;
append time = In;
ac list = ipfw;
db list = sdb;
sdb:db group = wheel;
}
rule 30001 {
ipfw:rules = 30001;
ipfw:maxchunk = IOC-
info = "IP incoming";
}
rule 30002 {
ipfw:rules = 30002;
ipfw:maxchunk = IOC-
info = "IP outgoing";
}
# vi /usr/local/etc/ipastat.conf
st mod "ipa st sdb.so";
dynamic rules = yes;
global {
st list = sdb;
}
22
Теперь
-q
| напишем
-i -fl
| cut
mail $m -d'$nскрипт
-r | grepдляTotal
проверки объёма
| cut -f4 скачанного трафика в текущем месяце и
| mailсравнения
f2 его с назначенной пользователю квотой: # vi
-d'
~/scripts/ipa_check_quotas.sh
#!/bin/sh
f3
net="10.0.0"
ipfw show > /home/raph/scripts/ipfw.txt
exec < $1
while read str
do
echo $str echo $str | cut
echo $str | cut expr
21000 + $i" expr 33000 +
$i" date | cut -f2 -d' '"
="/usr/local/bin/ipastat
="expr $sl" ="expr $sl /
1024" ="expr $sl / 1024"
= "less /home/raph/scripts/ipfw.txt | grep $1 | cut -fl -d'
[ "$s2" ]
i=
q=
e=
1=
n=
m=
si
si
si
si
s2
if [
then
s2="expr $s2"
if [ $s2 -ne $1 ]
then
s2=""
fi fi
if [ $sl -ge $q ]
then
if [ -z "$s2" ]
then
ipfw add $1 deny tcp from $net.$i to me 3128 echo "Your
www access was blocked. Your quota is $q Mb. fi else
if [ "$s2" ]
then
ipfw delete $1
echo "Your www access was opened. Your quota is $q Mb.' fi fi
done exit 0 # vi ~/scripts/quotas.conf 7:600:korney@mail.ua
15:200:jurist@mail.ua
23
Второй вариант - при достижении определённого объёма в текущем месяце снизить
скорость пользователю до безопасной. Этот вид воспитания наверное более демократичен
и красив. Принцип написания тот же, однако в данном случае обойдёмся без отдельного
файла с квотами:
# vi ~/scripts/ipa_check_pipe.sh
#!/bin/sh
net="10.0.0"
ipfw show > /home/raph/scripts/ipfw.txt
ipfw show | grep count\ tcp > /home/raph/scripts/ipfw .txt
exec < /home/raph/scripts/ipfw .txt
while read str
do
q="expr $1"
n="echo $str | cut -fl -d' '
i="expr $n - 33000"
p="expr 39000 + $i"
m= ~ date | cut -f2 -d' '
sl="/usr/local/bin/ipastat -q -i $m -r $n | grep Total | cut -f4
sl="expr $sl"
sl="expr $sl / 1024"
sl="expr $sl / 1024"
s2="less /home/raph/scripts/ipfw.txt | grep $p | cut -fl -d' '
if [ "$s2" ]
then
s2="expr $s2"
if [ $s2 -ne $p ]
then
s2=""
fi fi
if [ $sl -ge $q ]
then
if [ -z "$s2" ]
then
ipfw add $p pipe $i tcp from any to $net.$i out ipfw
pipe $i config bw 32Kbit/s fi else
if [ "$s2" ]
then
ipfw delete $p fi fi
done exit 0
Кому хочется - может комбинировать эти два метода как угодно. И не забудьте добавить всё,
что вы написали в сгоп:
24
# vi /etc/crontab
0 * * * * root /home/raph/scripts/ipa check network.sh 5
* * * * root /home/raph/scripts/ipa check pipe.sh 150
В некотором роде полезную, а в основном конечно же просто для «прикола», вещь можно
написать при помощи скриптов shell. Это отправка команд вашему серверу при помощи
обычных sms с вашего мобильного телефона. Для начала нужно создать почтовый адрес
(например sms@mail.ua) специально для приёма команд (ведь sms сообщение будет
попадать на ваш сервер, как обычное письмо) и прописать алиас, чтобы письмо
сохранялось, как текстовый файл в системе, который, собственно и будет обрабатывать
наш скрипт:
# vi /etc/mail/aliases
sms: raph, /sms/sms.txt
#86 newaliases
#87 mkdir /sms
#88 chown mailnull:mailnull /sms
#89 chmod 0700 /sms
#90 vi /etc/crontab
*/2 * * * * root /sms/sms.sh
# vi /sms/sms.sh
#!/bin/sh
adr="grep "From 380777777777" /sms/sms.txt"
operl="grep "CMD:" /sms/sms.txt"
oper2="grep "RBT:" /sms/sms.txt"
echo " " > /sm/sms.txt
if [ "$adr" ]
then
if [ "$operl" ]
then
cmd="echo "$operl" | cut -d: -f2"
ans="$cmd"
echo "$ans" | mail 380777777777@sms.mobileoperator.com fi
if [ "$oper2" ]
then
time="echo "$oper2" | cut -d: -f2"
shutdown -r $time fi fi exit 0
Надеемся, что принцип действия скрипта вам понятен. Вы должны отправить со своего
телефона сообщение на почтовый адрес sms@mail.ua. Скрипт запускается каждые 2
минуты и проверяет, было ли получено письмо. Если да, то проверяет с вашего ли
телефона и верен ли формат команд. Если всё ОК - выполняется команда и отправляется
ответ. Ничего сложного. Формат сообщения должен иметь следующий вид:
sms@mail.ua CMD:ipfw add 50 deny ip from any to 10.0.0.3
или:
sms@mail.ua RBT: now Вы можете добавлять свои дополнительные условия
(например ещё пароль) и вообще модифицировать работу скрипта как хотите. Главное -
идея. :)
25
4.16. Для красоты - меняем приветствие сервера при входе в консоль
Теперь, когда ваш сервер полностью настроен и готов к тому, чтобы вы про него
благополучно забыли, самое время сделать себе лично приветствие при входе на сервер: #
vi /etc/motd
ELBRUS WellCome to
Korney's FreeBSD Server!!!
Ну, теперь можно наслаждаться даже входом в систему - ваш сервер полностью готов!
И напоследок маленький совет. Так как мы имеем дело всё-таки с техникой, делайте
резервные копии ваших конфигурационных файлов. В случае чего, вы сможете поднять
ваш сервер заново за 1 час, а это лучше, чем 1 день. Так что, если придумывать лень, вот
вам элементарный скрипт. Пусть он вам не пригодится никогда, но если вдруг что - потом
спасибо скажете: # vi ~/bkp/bkp.sh
#!/bin/sh
ср -г /home/raph/scripts ./
ср -г /etc ./
ср -г /usr/local/etc ./usr.local.etc
ср /usr/src/sys/i386/conf/* ./
rm ./GENERIC
rm ./LINT
cp /usr/local/share/snmp/snmpd.conf ./
chown raph:wheel ./*
chown raph:wheel . / * / *
chown raph:wheel . / * / * / *
chown raph:wheel . / * / * / * / *
chown raph:wheel . / * / * / * / * / *
exit 0
26
5. Инструменты на каждый день
5.01. Работа с файлами в shell
В этом коротком разделе мы опишем далеко не все, но очень нужные команды в shell,
которыми вы будете пользоваться каждый день. Так же опишем далеко не все, но очень
нужные ключи к этим командам. Если вы работали в MS-DOS, то некоторые вещи будут вам
знакомы. В ином случае вам потребуются некоторые вспомогательные сведения. Как и
большинство современных операционных систем, FreeBSD сохраняет файлы в
иерархической древовидной структуре. Такой же тип файловой системы используется в
системах Windows и Macintosh. Единственная разница заключается в том, что в Windows и
Macintosh используется графическое представление папок и файлов в графическом
диспетчере файлов, а в консоли FreeBSD - текстовое. В Windows или DOS при регистрации
пользователь, как правило, попадает в корневой каталог. Во FreeBSD дело обстоит иначе.
После регистрации пользователь попадает в свой начальный каталог, который расположен
на несколько уровней ниже корневого каталога. Теперь по командам:
Помните, что большинство команд UNIX выполняют указанные действия над файлами и
каталогами, не задавая лишних вопросов, даже в тех случаях, когда они могут уничтожить
существующие файлы. UNIX не ведет пользователей за руку, как Wndows. В UNIX по
умолчанию предполагается, что пользователь знает, что он делает, когда просит систему
выполнить что-либо. Поэтому в тех случаях, когда вы не уверены в своих действиях,
используйте опцию -i. Тогда большинство команд будет запрашивать подтверждения, если
возникнет угроза повреждения существующих файлов.
27
Все предыдущие команды поддерживают метасимволы и символы-заместители. Они
замещают один или несколько неизвестных символов. Три основных оператора замены,
используемые в командной строке FreeBSD:
Теперь несколько слов об именах файлов. Хотя технически UNIX позволяет включить в имя
файла любой символ (некоторые символы нельзя просто ввести, их следует указывать как
двусимвольные последовательности, начинающиеся с косой черты), желательно все-таки
ограничиться только буквами, цифрами, точкой, дефисом и символом подчеркивания.
Нежелательно начинать имя с дефиса, поскольку в UNIX дефис, как правило,
интерпретируется как символ, за которым следует опция (ключ). В имя можно включать и
пробелы. Однако в этом случае его необходимо заключить в кавычки, чтобы интерпретатор
мог воспринять имя целиком, а не как список нескольких файлов. Я рекомендую
воспользоваться распространенной практикой: заменять пробелы на символы
подчеркивания. Тогда имена легко читаются и не требуют кавычек при работе с ними.
Избегайте применения в именах файлов специальных символов. В противном случае,
пользуйтесь специальным escape-символом - это символ обратной косой черты «\». Он
указывает, что следующий за ним символ следует рассматривать в его первичном (а не в
специальном)значении.
Отличаются они тем, что команда locate использует свою собственную индексную базу
файловой системы, следовательно поиск происходит намного быстрее, однако индексная
база обновляется с некоторой периодичностью, следовательно, нельзя рассчитывать на то,
что команда locate покажет только что созданный (скопированный/перемещённый) файл.
Индексную базу locate можно обновить вручную:
# /etc/periodic/weekly/310.locate
Далее рассмотрим команды для работы с текстовыми файлами. UNIX и FreeBSD включают
множество команд обработки текстовых данных в интерпретаторе. Здесь мы рассмотрим
наиболее полезные из них:
28
sort [файл] - сортировка строк в файле.
cut [опции] [файл] - вывод частей строк из файлов. Опции обычно имеют вид:
-f[номер поля] -d'[символ-разделитель]'
Далее следует разобраться с моделью владения файлами. Все варианты UNIX имеют
одинаковую структуру: каждый файл или каталог принадлежит и пользователю, и группе.
Тем не менее это не означает, что все пользователи или члены группы имеют одинаковые
права доступа. Режим доступа к файлу задаётся строкой вида: -rwxr-xr-x
29
w - файл можно модифицировать, удалять и переименовывать;
х - файл можно выполнять.
Так, например, права доступа к файлу определяются записью типа -rwxr-xr-x. Первый
дефис означает, что данный объект является файлом, следующая тройка символов (rwx)
указывает права владельца файла (можно всё), вторая тройка (г-х) определяет права
членов группы, к которой принадлежит пользователь, и последние три символа (г-х)
относятся к правам всех остальных пользователей. Таким образом, в данном случае
пользователям группы, как и всем остальным, можно только читать и выполнять файл (но
не модифицировать или удалять).
Теперь рассмотрим строки, задающие права доступа к каталогам. Прежде всего, каталоги
распознаются по первому биту в строке - d. Это просто флажок, не связанный с правами
доступа. Полномочия на работу в каталоге действуют по тому же принципу, что и
полномочия на файлы, но здесь есть отличия:
г - каталог можно читать (выполнить команду Is);
w - каталог и файлы внутри него можно модифицировать, удалять и переименовывать;
х - в каталоге можно производить поиск файлов.
Так, например, запись drwxr-xr-x означает, что данный объект является каталогом (d), его
владелец может выполнять в этом каталоге любые действия, а его группа и остальные
могут только читать и выполнять поиск.
30
2 - установить идентификатор группы, setgid. Когда такой бит установлен для выполняемого
файла, последний выполняется с правами группы, владеющей файлом, а не с правами
пользователя, запустившего его;
4 - установить идентификатор пользователя, setuid. Когда такой бит установлен для
выполняемого файла, последний выполняется с правами пользователя, владеющего
файлом, а не с правами того, кто его запустил.
Во-первых, он имеется в любой операционной системе UNIX, с которой вам быть может,
придется работать. Как знать, он может оказаться и единственным редактором в
операционной системе...
Сразу после запуска редактор vi будет находиться в командном режиме. В этом режиме
нажатия клавиш интерпретируются как команды редактору, а не как текст, вводимый в
документ. Чтобы переключиться в режим ввода текста, необходимо нажать одну из клавиш:
а - append (присоединить). В этом режиме вводимый текст вставляется после символа, на
котором находится курсор.
i - insert (вставить). В этом режиме вводимый текст вставляется перед символом, на
котором находится курсор.
0 - open (открыть). Это приводит к тому, что после строки, на которой находится курсор, в
текст вставляется новая строка. Затем курсор перемещается на новую строку и редактор vi
переходит в режим insert, разрешая ввод текста на новой строке.
Перемещаться по тексту в режиме ввода текста можно, как правило, с помощью курсорных
клавиш или клавиш Page Up / Page Down. Однако имеются и другие клавиши, позволяющие
перемещаться по документу в командном режиме: h - перемещает курсор влево на один
символ; j - перемещает курсор вниз на один символ; к - перемещает курсор вверх на один
символ;
1 - перемещает курсор вправо на один символ;
w - перемещает курсор вперед на одно слово;
ь - перемещает курсор назад на одно слово;
е - перемещает курсор в конец следующего слова;
о - перемещает курсор в начало строки;
$ - перемещает курсор в конец строки;
) - перемещает курсор в начало следующего предложения;
( - перемещает курсор в начало предыдущего предложения;
31
} - перемещает курсор в начало следующего абзаца;
{ - перемещает курсор в начало предыдущего абзаца;
G - перемещает курсор в конец текущего документа;
Л
- перемещает курсор к первому символу строки, не являющемуся пробелом;
н - перемещает курсор на первую строку на экране;
L - перемещает курсор на последнюю строку на экране.
В редакторе vi имеется так же ряд команд для выполнения поиска и замены текста: /текст -
поиск в прямом направлении до первого совпадения с заданным текстом; / - повтор поиска
текста в прямом направлении до обнаружения очередного совпадения; ?текст - поиск в
обратном направлении до первого совпадения с заданным текстом; ? - повтор поиска
текста в обратом направлении до обнаружения очередного совпадения; % - перемещение
курсора на соответствующую парную скобку (для программистов); : з/текст1 /текст2 - замена
в текущей строке каждого совпадения текста1 на текст2; : %з/текст1 /текст2 - замена в
файле каждого совпадения текста1 на текст2;
И последнее, что нам осталось, - это операции над файлами и выход из редактора:
: wq - сохраняет изменения в текущем файле и осуществляет выход из редактора;
: w - сохраняет изменения в текущем файле;
: w! - сохраняет изменения в текущем файле в любом случае;
: q - осуществляет выход из редактора;
:q! - осуществляет выход из редактора в любом случае;
:е - файл загружает заданный файл в редактор для редактирования;
: е! - отбрасывает все изменения и перезагружает с диска старый вариант файла.
Вот в принципе и всё, что вам необходимо знать для эффективной работы с текстовыми
файлами в редакторе vi.
32
5.04. Программирование в shell
Переменные.
33
В именах переменных учитывается регистр. Они могут содержать буквы, цифры и символ
подчеркивания. Имя переменной не может начинаться с цифры. Кроме того, не следует
вначале имени переменной использовать подчерк. Желательно применять описательные
имена, чтобы код программы было легко читать. В простейшем случае значение
переменной присваивается следующим образом: myvar=5
Теперь MYVAR является переменной среды, которая будет доступна другим программам,
запущенным из данного командного интерпретатора.
34
Your last name is: Petrov
#
Подстановка команд.
Подстановка команд позволяет запустить команду и присвоить ее вывод переменной.
Выполняемую команду следует заключить в символы \ Их не следует путать с одинарными
кавычками. Символ " представляет собой символ обратной кавычки (на клавиатуре он, как
правило, совмещен с символом тильды ~). Например, оператор:
TodayDate="date" запускает команду date и присваивает ее вывод переменной
TodayDate. После этого к значению переменной можно обращаться обычным образом.
Циклы.
В некоторых случаях требуется повторять действие до тех пор, пока соблюдаются
определённые условия. В таких случаях стоит воспользоваться циклами. Командный
интерпретатор поддерживает три вида циклических конструкций: while, until и for.
Цикл while выполняет операторы, заключенные в нем, до тех пор, пока условие цикла
является истинным:
i=l
while [ $i -le 10 ]
do
35
echo $i
i="expr $i + 1" done Команда while содержит условие, заключенное в квадратные
скобки. На самом деле, они представляют собой сокращенную запись команды под
названием test. Последняя часто используется в сценариях командного
интерпретатора. Команда test использует достаточно прозрачный синтаксис, близкий к
Фортрану: -eq - истина, если операнды равны; -пе - истина, если операнды не равны; -gt -
истина, если первый операнд больше второго; -де - истина, если первый операнд больше
или равен второму; -it - истина, если первый операнд меньше второго; -1е - истина, если
первый операнд меньше или равен второму.
Циклы while и until позволяют работать с логическими операторами AND и OR. Логическое
выражение AND возвращает значение истина лишь в том случае, когда оба операнда
истинны, а выражение OR - когда лишь один из операндов имеет значение истина:
while [ $varl -gt 10 ] && [ $varl -it 20 ] - истина, если 10 < varl < 20;
while [ $vari -it 10 ] || [ $vari -gt 20 ] - истина, если varl < 10 или varl > 20.
Цикл for отличается от while и until. Вместо проверки истинности условия цикл for
выполняет операторы внутри тела цикла в зависимости от количества аргументов в списке.
Цикл for содержит переменную, которая при каждой итерации получает следующий
аргумент из списка. Цикл for продолжается до тех пор, пока список не будет исчерпан:
for num in "jot 10 10 2 0 " do
sq root="echo "scale=3; sqrt($num)" | be -1
echo $sq root done
Условные операторы.
Очень часто программу нужно построить так, чтобы определённые участки кода
выполнялись только при определённых условиях. Существует две общих формы условных
операторов: /7 и case. Кроме того, есть ещё логические операторы AND/OR.
36
Операторы if проверяют числовые выражения. Если условие истинно, выполняются
операторы внутри блока if. Если оно ложно, то либо выполняются операторы внутри блока
else, либо не выполняется ничего:
#!/bin/sh
if [ $# -ge 1 ]
then
echo "You supplied $# arguments."
else
echo "Usage: $0 filel file2..." fi
exit 0
Часть then оператора if является обязательной, а часть else - нет. Операторы в блоке then
выполняются тогда, когда условие истинно. Но иногда возникает необходимость выполнить
действия лишь тогда, когда выражение ложно. В этом случае нужно воспользоваться
двоеточием:
if [$# -ge l ]
then
else
echo "Usage: $0 filel file2..." fi
37
Логические операторы AND/OR (&& и ||) в некоторых случаях заменяют операторы if. Код
завершения первой команды используется как условие запуска второй. Мы часто
пользуемся ими в командной строке. Например:
# tar czvf backup.tar.gz ./scripts && rm -r ./scripts
Если первая операция прошла успешно, то выполняется вторая. Если нет, то вторая
команда не выполняется. Другими словами: "Необходимо выполнить команды А и В. Но
если команда А невыполнима, то не следует исполнять и В". Второй пример:
# tar czvf backup.tar.gz ./scripts || echo "Operation failed."
Если первая операция прошла успешно, то вторую выполнять не нужно. Если нет, то
выполнить вторую. Другими словами: "Если А невыполнимо, исполнить В. Но если А
завершилось успешно, В не выполнять".
Функции.
Теперь стоит отметить то, что иногда приходится повторять один и тот же набор команд в
скрипте. Здесь нам на помощь приходят функции. Они представляют собой группы
операторов, вызываемые одной командой. Их можно рассматривать как "минипрограммы
внутри программ". О важности и полезности функций говорить не будем, т.к. надеемся, что
это и так понятно. Прежде всего, если определенный набор операций требуется выполнить
в нескольких местах программы, достаточно воспользоваться лишь одной командой. Во-
вторых, если вы захотите изменить то, как исполняется операция, достаточно будет внести
изменения лишь в одном фрагменте кода: on exit() {
echo "Good b y e . "
mail korney@mail.ua < ./report.txt
rm ./report.txt }
on exit
Файловые дескрипторы.
Файловые дескрипторы представляют собой числовые идентификаторы, устанавливаемые
ядром при запуске каждого нового процесса. По умолчанию командный интерпретатор
открывает три файловых дескриптора:
F.D. О STDIN. Это стандартный входной поток. Обычно ввод поступает с клавиатуры,
однако его можно перенаправить из файла или какого-либо другого источника;
F.D. 1 STDOUT. Это стандартный выходной поток. Обычно вывод поступает на экран,
однако, как вы понимаете, его также можно перенаправить;
F.D. 2 STDERR. Это стандартный поток ошибок. Обычно выводится на экран, но и его
можно перенаправить.
Для открытия файлового дескриптора используется команда exec:
#!/bin/sh
exec > ./testfile.txt
echo "Line 1 of the file"
echo "Line 2 of the file"
echo "Line 3 of the file"
exit 0
38
Оператор exec во второй строке примера перенаправляет поток STDOUT в файл testfile.txt.
В результате, операторы echo выводят информацию в testfile.txt, а не на экран, хотя в
каждом из них поток не перенаправлен явно. Если в файл нужно вывести более одной
строки текста, эффективнее использовать файловый дескриптор, а не перенаправление
вывода в каждом операторе. Этот же подход применяется при работе с файловым
дескриптором STDIN и командой read:
#!/bin/sh
exec < ./testfile.txt
while read string do
echo $string
done
exit 0
Отладка сценариев.
И в завершение коснёмся отладки сценариев командного интерпретатора, которая рано
или поздно вам понадобится. Хотя интерпретатор не имеет полноценного отладчика, он
обеспечивает простейшие возможности для мониторинга всех выполняемых действий.
Трассировка включается посредством редактирования первой строки:
#! /bin/sh -xv
После этого, при запуске программы, вы будете видеть на экране последовательно все
действия, которые она выполняет.
39
5.05. Справочник по командам и конфигурационным файлам
Работа в сети
ifconfig Вывести или настроить параметры сетевых интерфейсов
route Создать маршрут в таблице маршрутизации
ping Отправить тестовые пакеты и проверить соединение с хостом по сети
t rase route Вывести маршрут к удалённому хосту
netstat Вывести текущую таблицу маршрутизации
nslookup Обработать dns-запрос
dig Обработать dns-запрос
ipfw Вывести или задать правила системы ipfw
trafshow Вывести активные соединения через интерфейс
tcpdump Вывести информацию о трафике через ipfw
ssh Подключиться к виртуальной консоли удалённого хоста
scp Копировать файлы и каталоги между хостами по сети по ssh
41
6. Заключение
Итак, вы установили свой собственный Интернет-сервер на базе ОС FreeBSD, с чем
вас сердечно поздравляем. Вы так же познакомились вкратце с основными инструментами,
которые могут вам пригодиться во время работы с вашими серверами. Что теперь? А
теперь, что касается FreeBSD, вам открыта дорога в любом направлении:
1.55. Вот именно теперь самое время купить новую книгу более высокого уровня -
какую-нибудь «Энциклопедию системного администратора FreeBSD». Эффект от её
прочтения теперь будет гораздо выше - вы ведь уже поработали со своим сервером
и знаете, чего можно ожидать и требовать от FreeBSD и, наверняка уже
вынашиваете какие-то идеи - осталось только их реализовать.
1.56. Именно теперь вы сможете намного более эффективно искать нужную
информацию и нужные программы для FreeBSD в сети Интернет.
1.57. Именно теперь вы перестали бояться UNIX. Всем пользователям Windows
становится немного не по себе, глядя на то, как работает системный администратор
UNIX. Но теперь вы - один из нас. :)
42