Назад Оглавление Вперед

Часть IV Рекомендации связанные с программным обеспечением

В этой части
Функциональные возможности компилятора
Глава 10 Программы обеспечения безопасности (Утилиты контроля)
Программы обеспечения безопасности (Сетевые сервисы)
Программы обеспечения безопасности (Целостность системы)
Программы обеспечения безопасности (Управление и ограничения)
Серверное программное обеспечение (BIND/Сервис DNS)
Серверное программное обеспечение (Почтовый сервис)
Серверное программное обеспечение (Сетевой сервис шифрования)
Серверное программное обеспечение (Сервис баз данных)
Серверное программное обеспечение (Прокси сервис)
Серверное программное обеспечение (Веб сервис)
Опциональные компоненты устанавливаемые с веб-сервером Apache
Серверное программное обеспечение (Файловый сервис)

Глава 9 Функциональные возможности компилятора

В этой главе
Необходимые пакеты
Почему мы выбираем использование тарболов?
Компиляция программного обеспечения на вашей системе
Создание и инсталляция программ на вашей системе
Редактирование файлов с vi
Некоторые последние комментарии

Общий обзор.

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

Необходимые пакеты.

Следующие пакеты нужны, чтобы осуществлять компиляцию на вашей системе после создания нового ядра. Эти пакеты находятся на Red Hat Linux 6.1 или 6.2 Part 1 CD-ROM в каталоге RedHat/RPMS:

Red Hat 6.1 Red Hat 6.2
autoconf-2.13-5.noarch.rpm
m4-1.4-12.i386.rpm
automake-1.4-5.noarch.rpm
dev86-0.14.9-1.i386.rpm
bison-1.28-1.i386.rpm
byacc-1.9-11.i386.rpm
cdecl-2.5-9.i386.rpm
cpp-1.1.2-24.i386.rpm
cproto-4.6-2.i386.rpm
ctags-3.2-1.i386.rpm
egcs-1.1.2-24.i386.rpm
ElectricFence-2.1-1.i386.rpm
flex-2.5.4a-7.i386.rpm
gdb-4.18-4.i386.rpm
kernel-headers-2.2.12-20.i386.rpm
glibc-devel-2.1.2-11.i386.rpm
make-3.77-6.i386.rpm
patch-2.5-9.i386.rpm
autoconf-2.13-5.noarch.rpm
m4-1.4-12.i386.rpm
automake-1.4-6.noarch.rpm
dev86-0.15.0-2.i386.rpm
bison-1.28-2.i386.rpm
byacc-1.9-12.i386.rpm
cdecl-2.5-10.i386.rpm
cpp-1.1.2-30.i386.rpm
cproto-4.6-3.i386.rpm
ctags-3.4-1.i386.rpm
egcs-1.1.2-30.i386.rpm
ElectricFence-2.1-3.i386.rpm
flex-2.5.4a-9.i386.rpm
gdb-4.18-11.i386.rpm
kernel-headers-2.2.14-5.0.i386.rpm
glibc-devel-2.1.3-15.i386.rpm
make-3.78.1-4.i386.rpm
patch-2.5-10.i386.rpm

ЗАМЕЧАНИЕ. Лучше все программы описанные выше инсталлировать одновременно, чтобы избежать сообщений об ошибках зависимостей от RPM. Если вы следовали по всем шагам, описанным в главе 2 "Инсталляция вашего Linux сервера", то все эти пакеты уже проинсталлированы в вашей системе и вам нет необходимости заново их переинсталлировать.

RPM команда для инсталляции пакета:

[root@deep /]# rpm -Uvh foo-1.0-2.i386.rpm

RPM команда для проверки, инсталлирован ли пакет или нет:

[root@deep /]# rpm -q foo

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

Для перемещения rpm на дискету:

[root@deep /]# mount /dev/fd0 /mnt/floppy/
[root@deep /]# mv /bin/rpm /mnt/floppy
[root@deep /]# umount /mnt/floppy/

Для возврата rpm в оригинальный каталог:

[root@deep /]# mount /dev/fd0 /mnt/floppy/
[root@deep /]# cp /mnt/floppy/rpm /bin/
[root@deep /]# umount /mnt/floppy/

ЗАМЕЧАНИЕ. Никогда не деинсталлируйте пакет RPM полностью с вашего сервера, иначе вы не сможете проинсталлировать его по новой, потому что для инсталляции любого rpm пакета требуется наличие программы rpm.

Почему мы выбираем использование тарболов?

Все дистрибьюции Red Hat поставляются в RPM файлах, которые известны также как "пакеты". Этот способ поставки программ характеризуется упрощением процесса их инсталляции, обновления и удаления. Однако, в мире UNIX, стандартом де-факто для пакетов программ является тарбол. Тарбол это просто сжатые файлы, которые могут быть прочитаны и раскрыты при помощи утилиты tar. Инсталляция программ из тарбола более тяжелый процесс, чем из rpm. Так почему мы будем использовать тарболы?

  1. К сожалению требуется несколько недель, чтобы вышел rpm пакет новой версии программы, так как разработчики выпускают их обычно в тарболе.
  2. Когда разработчики и поставщики выпускают rpm пакет, они включают в них много разных опций, часто не нужных. Эти организации и компании не знают какие опции вам нужны, а какие нет, поэтому включают наиболее часто используемые.
  3. Часто RPM не оптимизированы под определенный процессор; компании подобные Red Hat создают пакет базирующийся на стандартном PC. Это позволяет инсталлировать программы на всех компьютерах, начиная с i386.
  4. Иногда, вы скачиваете и инсталлируете RPM, которые другие люди создали и сделали доступным для ваших целей. В зависимости от того, как создавался пакет, могут возникать множество разных проблем, таких как ошибки, проблемы с безопасностью и прочие, описанные выше.

Компиляция программного обеспечения на вашей системе

Программы - это то, что компьютер может выполнять. Изначально, кто-то написал "исходные коды" на языке программирования который он/она знает (например, C, C++ и т.д.). Исходные коды обрабатываются компилятором, который преобразует инструкции в двоичные коды, подходящие под требуемый процессор (например, 386). Современным форматом исполняемых фалов является elf. Программист передает исходные коды компилятору и получает исполняемые файлы. Часто процесс компиляции завершается ошибкой или полученная программа не работает как надо. Половину времени процесса программирования составляет отслеживание и исправление этих проблем.

Для начинающих имеется много аспектов и новых терминов, относящихся к компиляции, которые вы должны знать. Ниже описаны некоторые из них:

Multiple Files
Программы, состоящие из одного файла встречаются редко. Обычно в него входит несколько файлов (скажем, *.c, *.cpp и т.д.), каждый из которых компилируется в объектные коды, а затем они компонуются в исполняемый файл. Компилятор обычно используется для компоновки и вызывает в заключение программу ld.

Makefiles
Makefiles предназначен, чтобы помочь вам при формировании программы, проходить один и тот же путь. Она также сокращает время работы над программой. Программа "make" использует зависимости, описанные в Makefiles, чтобы решить, какие части программы надо перекомпилировать. Если вы измените один файл из пятидесяти, вам потребуется выполнить одну компиляцию и одну компоновку, вместо выполнения полного процесса сначала.

Библиотеки (Libraries).
Программы могут компоноваться не только в объектные файлы, но в библиотеки, которые содержат наборы таких файлов. Существует две формы компоновки библиотек: статическая, когда коды встраиваются в исполняемые файлы, и динамическая, когда коды собираются в момент запуска программы.

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

Ошибки при компиляции и компоновке.
Ошибки при компиляции и компоновке часто возникают из-за недосмотра и неправильного использования языка. Проверьте, что для функций, которые вы вызываете используются правильные заголовочные файлы. Неупомянутые символы (Unreferenced symbols) являются признаком незавершенности шага компоновки. Также проверьте, все ли необходимые библиотеки (GLIBC) и утилиты (GCC, DEV86, AUTOMAKE и т.д.) установлены на вашей системе.

Отладка.
Отладка - это отдельная большая тема. При отладке в код помещаются инструкции, которые сообщают вам о происходящем. Чтобы не утонуть в огромном количестве выводимой информации, вы можете распечатать только первые три прохода в цикле. Также она помогает проверить, что все переменные корректно передаются между модулями. Получше ознакомьтесь с вашими средствами отладки.

Создание и инсталляция программ на вашей системе

С 10 по 20 главы вы увидите, что мы используем много разных команд компиляции для создания и инсталляции программ на сервере. Эти команды совместимы с UNIX и используются на всех вариантах *nix систем для компиляции и инсталляции программного обеспечения.

Ниже приводятся шаги необходимые для компиляции и инсталляции программного обеспечения из тарбола.

1. Вы должны скачать тарбол с сервера, которому доверяете. Обычно, это основной сервер программы

2. После того как тарбол скачен, перейдите в каталог /vat/tmp (заметим, что другой путь также возможен, это решать вам) и раскройте архив (как root), обычно, следующей командой:

[root@deep /]# tar xzpf foo.tar.gz

Вышеприведенная команда извлечет все файлы из архива foo.tar.gz и поместит их в новый каталог с именем этой программы, который создаст автоматически в месте, где вы сейчас расположены.

Опция "x" говорит tar извлечь все файлы из архива.
Опция "z" говорит, что tar архив был сжат при помощи gzip.
Опция "p" сохраняет оригинал и права доступа к файлам в том виде, каком они существовали при создании архива.
Опция "f" говорит tar, что следующий аргумент это имя файла.

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

./configure
make
make install

configure - будет конфигурировать программное обеспечение, чтобы гарантировать, что ваша система имеет функциональные возможности и библиотеки необходимые для успешной компиляции пакета. "make" будет компилировать все исходные файлы в исполняемые. "make install" - инсталлирует исполняемые и все сопутствующие файлы в определенное место.

Другие специальные команды, которые вы встретите в этой книге:

make depend
strip
chown

"make depand" будет создавать необходимые зависимости для различных файлов. "strip" будет удалять все символы из объектных файлов. В результате все исполняемые файлы будут меньшего размера. Это улучшит производительность программы, так как системе будет необходимо читать меньше строк при исполнении данного двоичного файла. "chown" будет устанавливать правильных владельцев файлов и разрешения для групп.

Редактирование файлов с vi

Текстовый редактор vi может быть использован для редактирования любых текстовых файлов. В процессе инсталляции программ, пользователь должен часто редактировать текстовые файлы, подобные Makefiles, или конфигурационные файлы. Ниже представлено несколько наиболее важных ключевых строк, необходимых для работы с vi:

i - говорить vi вставить текст перед курсором.
a - говорить vi добавить текст после курсора.
dd - говорить vi удалить текущую строку.
x - говорить vi удалить текущий символ.
Esc - говорить vi выйти из режима вставки или добавления.
u - говорить vi отменить действие последней команды.
Ctrl+f - прокрутить текст на одну страницу вверх.
Ctrl+b - прокрутить текст на одну страницу вниз.
/string - искать строку.
:f - вывести имя файла и текущий номер строки
:q - закончить редактирование
:q! - выйти из редактора без записи изменений
:wq - записать изменения и выйти из редактора

Некоторые последние комментарии

Перед переходом к чтению следующей части книги мне бы хотелось отметить, что в тексте подразумевается расположение некоторых файлов в определенных каталогах. Для соглашения, мы принимаем, что они расположены там, где это определено в дистрибутиве Red Hat. Если вы используете другой дистрибутив Linux или эти файлы расположены у вас в других местах, то будьте очень внимательны при копировании примеров из текста книги.

В этой части книги, все программное обеспечение перечисленное в главах с 10 по 21 необязательно, и зависит от того, что необходимо вашему серверу (например, какие задачи будет решать ваш сервер и для какой части Интернет/Интранет). Хотя некоторые программы могут быть очень важны для вас. Полезно заменить telnet на ssh для более безопасного удаленного администрирования сервера. Другая интересная программа - Tripware, которая помогает следить за целостностью определенных программ.


Назад Оглавление Вперед