Безопасность и оптимизация Linux.Редакция для Red Hat

         

Часть I Рекомендации связанные с инсталляция


В этой части


Введение в Linux


Инсталляция вашего Linux сервера



Что такое Linux?


Linux это операционная система, которая изначально была создана как хобби молодого студента Линуса Торвальдса из Хельсинского университета в Финляндии. Линус интересовался Minix, небольшим вариантом UNIX, и решил разработать систему превосходящую Minix стандарт. Он начал свои работы в 1991 году, выпустив версию 0.02, и постоянно работал над ней до 1994 года, когда вышла версия 1.0 ядра Linux. Текущей версией ядра является 2.2 (выпущено 25 января 1999 года).

Linux распространяется под GNU General Public License и его исходные коды свободно доступны для всех желающих. Linux может использоваться как сетевая платформа, платформа для разработчиков и платформа для конечных пользователей. Linux часто считается как прекрасная и недорогая альтернатива других более дорогих операционных систем.



Несколько причин использовать Linux.


За него не надо выплачивать лицензионных или авторских отчислений. Даже если бы Линус Торвальдс и владел правом на торговую марку Linux, то ядро и сопутствующее ему программное обеспечение все равно бы распространялось под GNU General Public License. Это значит, что вы можете модифицировать исходные коды и продавать свои программы, но вы все равно должны предоставлять их исходные коды.

Хотя Linux наиболее популярен на платформе Intel, но он может запускаться на большем числе процессоров и различных платформах, чем другие ОС. Тенденции развития программного и аппаратного обеспечения в последнее время заставляют пользователей покупать компьютеры со все большим объемом памяти и размерами жесткого диска. Linux не следует этой тенденции и прекрасно работает на 486 машинах с ограниченным объемом RAM. Linux – это истинная многозадачная система, подобная своему брату UNIX. Она использует сложный, современный метод управления памятью для контроля за всеми системными процессами. Это означает, что если в какой-нибудь программе произойдет сбой, то вы ее просто “убьете” и продолжите работать дальше, как ни в чем не бывало.

Дополнительное преимуществом является то, что Linux свободен от огромного количества вирусов присущих другим ОС. Благодаря GNU GPL и Open Source, практически все программное обеспечение поставляется с исходными кодами.



Позвольте рассеять несколько опасений и сомнений относительно Linux.


Linux – это игрушка.

Linux все больше и больше используется для работы в компаниях входящих в список Fortune 500, в правительственных учреждениях и у других пользователей как чрезвычайно рентабельное решение. Спросите об этом у IBM, Compaq, Dell, Apple Computer, Burlington Coat Factory, Amtrak, Virginia Power, NASA и миллиона пользователей во всем мире.
Отсутствие поддержки.

Хотя и говорится, что Linux распространяется без поддержки, но в состав любого дистрибутива входит более 12 000 страниц документации. Коммерческие дистрибутивы Linux, такие как Red Hat Linux, Caldera, SuSE и OpenLinux, предлагают поддержку для зарегистрированных пользователей. Вам не придется по шесть месяцев ждать выхода исправлений. Большинство серьезных ошибок (в том числе связанных с проблемами безопасности) исправляются online сообществом Linux в течение часа.





Инсталляция вашего Linux сервера (Часть 2)


В этой главе


 

Описания программ, которые должны быть деинсталлированы из соображений безопасности

Ниже приводится список программ и краткие описания их использования. Для улучшения безопасности мы должны деинсталлировать их. Для получения большей информации и пояснений об их особенностях и использовании читайте руководство пользователя Red Hat или инсталлировав пакет дайте команду “rpm -qi foo”. По ней вы получите краткое описание пакета. Не забудьте потом деисталлировать этот пакет.

Applications/File:
(All) GIT (GNU Interactive Tools) предоставляет расширяемый броузер файловой системы, с ASCII/hexadecimal программой просмотра, программой просмотра/уничтожения процессов, и другими утилитами и shell-скриптами (ненужный пакет).

Applications/Internet:
(All) Finger это утилита, которая позволяет пользователям получить информацию о пользователях системы (регистрационное имя, домашний каталог, как долго он подключен к системе и т.д. (Риск для безопасности).
(All) В пакет ftp входит стандартный консольный UNIX-овый ftp-клиент. FTP это протокол пересылки файлов который широко используется в Интернет для пересылки и архивирования файлов. (Риск для безопасности).
(All) Программа fwhois позволяет пользователям организовывать запросы к базам данных whois. (Риск для безопасности)
(All) Ncftp это улучшенный ftp-клиент. Среди улучшений можно выделить редактирование командной строки, истории команд, рекурсивное закачивание файлов, автоматическое подключение к системе как анонимный пользователь и др. (Риск для безопасности, ненужный пакет).
(All) Пакет rsh включает комплект программ, которые позволяют пользователям выполнять команды на удаленной машине, присоединяться к удаленным машинам и копировать файлы между компьютерами (Риск для безопасности).
(All) Пакет ntalk содержит клиентскую программу и демон для организации чатов между пользователями с использованием протокола Internet talk. (Риск для безопасности).
(All) Telnet – это популярная программа для подключения к удаленным системам через Интернет. (Риск для безопасности).

Applications/Publishing:
(All) Ghostscript это набор программного обеспечения , которое предоставляет интерпретатор PostScript(TM), набор C подпрограмм (библиотека Ghostscript, которая обеспечивает графическую совместимость в интерпретаторе PostScript) и интерпретатор Portable Document Format (PDF) файлов. (Ненужный пакет)
(All) ghostscript-fonts могут использоваться интерпретатором GhostScript во время визуализации текста. Они идут в дополнение к общим шрифтам GhostScript и X11. (ненужный пакет).
(All) Утилита mpage получает на вход текстовый или PostScript файл, изменяет размер текста и печатает файл на PostScript принтере, умещая на одной странице несколько страниц текста. (Ненужный пакет, нет принтеров установленных на сервере).
(All) Пакет rhs-printfilters содержит комплект фильтров печати, которые первоначально предназначались для Red Hat printtool. (Не нужный пакет, нет принтеров установленных на сервере).
(6.2) Пакет groff-perl содержит набор команд и фильтр печати используемого в среде принтера (Ненужный пакет, нет принтеров проинсталлированных на сервере).
(6.2) Пакет pnm2ppa содержит драйвер цветной печати для принтера HP PPA. (Не нужный пакет, нет принтеров установленных на сервере).

Applications/System:
(All) Пакет arpwatch включает две программы arpwatch и arpsnmp. Эти обе утилиты предназначены для мониторинга сети. Они следят за сетевым трафиком в Ethernet или FDDI сетях, ведут базу данных участников соединений и могут пересылать отчеты об определенных изменениях по почте. (Не нужный пакет).
(All) Bind-utils – это набор утилит, предназначенных для организации запросов к DNS серверам и поиска информации об Интернет хостах. (Мы будем компилировать их позже).
(6.1) knfsd-clients пакет содержит программу showmount. Showmount запрашивает демон монтирования на удаленной машине информацию о NFS сервере. (Риск для безопасности).
(6.1) Команда procinfo берет информацию из каталога /proc, форматирует ее и отображает на стандартном устройстве вывода. Вы можете получать информацию о вашей системе. (Ненужный пакет, существуют другие методы получения информации).
(All) Утилита rdate получает информацию о дате и времени от удаленной машины в сети по протоколу описанному в RFC 868. (Риск для безопасности).
(All) Программа rdist управляет идентичностью копий файлов на разных компьютерах. Если возможно, rdist будет хранить данные о владельце файла, группе, правах доступа и времени модификации, и она может обновить программу если она существует. (риск для безопасности).
(All) Пакет ucd-snmp содержит различные утилиты, которые можно использовать с проектом сетевого управления UCD-SNMP (Ненужный пакет. Риск для безопасности).
(All) Утилита screen позволяет вам иметь несколько соединений на одном терминале. Она полезна тем пользователям, которые присоединяются telnet-ом к удаленной машине или используют “тупой” терминал, но хотят иметь более одного входа в систему (Ненужный пакет).

Documentation:
(All) Пакет indexhtml включает HTML страницы и графические изображения для страниц с приглашениями в вашем веб-броузере, которые вы видите после полной инсталляции Red Hat Linux. (Ненужный пакет).

System Environment/Base:
(All) Chkfontpath это простая терминальная программа для добавления, удаления и просмотра каталогов включенных в поисковые пути для шрифтов X сервера. (ненужный пакет).
(All) Network Information Service (NIS) – это система, которая предоставляет сетевую информацию (регистрационное имя, пароль, имя домашнего каталога, информацию о группах) всем компьютерам в сети. (Риск для безопасности).

System Environment/Daemons:
(All) XFree86-xfs – это сервер шрифтов для Xfree86. Вы можете предоставлять шрифты другим удаленным X серверам и они смогут использовать все шрифты которые есть у вас на сервере, даже если их нет у них на компьютере. (Ненужный пакет).
(All) Пакет lpr предоставляет базовую системную утилиту для управления сервисом печати (Ненужный пакет).
(All) Пакет pidentd включает демон ident, который реализует сервер идентификации, описанный в RFC1413. Identd смотрит за определенными TCP/IP соединениями и возвращает оба имени пользователей и другую информацию о процессах, которые владеют соединением. (Ненужный пакет. Многие машины в сети не имеют подобного демона или выключают его.)
(All) Программа portmapper – это защитная утилита, которая предупреждает кражу из NIS (YP), NFS важной информации через portmapper. Portmapper управляет RPC соединениями, которые используются такими протоколами как NFS и NIS. (Ненужный пакет. Риск для безопасности).
(6.1) Routed – это демон маршрутизации, который обрабатывает входящий RIP трафик и широковещательный исходящий RIP трафик о сетевых маршрутах, согласно таблицам маршрутизации. Эти таблицы очень важны для сетевого компьютера, по ним он определяет куда надо посылать пакеты. (Ненужный пакет. Риск для безопасности).
(All) Программа rusers позволяет пользователям узнавать кто присоединен к удаленным компьютерам в сети. Она выдает результаты подобные команду who, но для определенного списка компьютеров или для всех машин в локальной сети (Риск для безопасности).
(All) Программа rwho выводит результаты подобно команде who, но для всех компьютеров в локальной сети на которых запущен демон rwho. (Риск для безопасности).
(6.1) Trivial File Transfer Protocol (TFTP) обычно используется для загрузки бездисковых рабочих станций. Пакет tftp предоставляет пользовательский интерфейс к TFTP, который позволяет пересылать файлы с или на удаленную машину (Риск для безопасности, ненужный пакет).
(All) SNMP (Simple Network Management Protocol) это протокл используемый для сетевого управления. (Ненужный пакет, риск для безопасности).
(6.2) пакет finger-server содержит демон finger, который запускается из /etc/inetd.conf и позволяет удаленным пользователям получать информацию о пользователях на сервере. (риск для безопасности).
(6.2) Пакет nfs-utils предоставляет утилиты и демон для корневого сервера NFS. Он должен быть проинсталлирован если вы планируете предоставлять NFS сервис. (риск для безопасности, NFS сервис не инсталлирован на сервере).
(6.2) Пакет rsh-server содержит сервер нужный для работы rsh, rlogin, rcp, которые предоставляют доступ к командам на удаленной машине. (риск для безопасности).
(6.2) Пакет rusers-server содержит сервер, который принимает пользовательские запросы и позволяет им узнать кто подключен к серверу (риск для безопасности)
(6.2) Пакет rwall-server содержит демон, который позволяет принимать сообщения от удаленных пользователей (Риск для безопасности)
(6.2) Пакет talk-server содержит демон, который позволяет вам беседовать (chat) из терминала с пользователями из удаленных UNIX систем (риск для безопасности).
(6.2) Пакет telnet-server содержит демон который реализует telnet протокол на вашем сервере (риск для безопасности)
(6.2) Пакет tftp-server содержит демон реализующий TFTP сервер на вашем компьютере, который позволяет пересылать файлы на или с удаленных машин (риск для безопасности)
(6.2) Пакет ypserv это NIS (Network Information Service) сервер, который предоставляет сетевую информацию (NIS) всем машинам в сети (риск для безопасности, мы не используем его на нашем сервере).

System Environment/Libraries:
(All) XFree86-libs включает общие библиотеки, которые могут использовать большинство программ, запускаемых под X (Ненужный пакет).
(All) Пакет libpng включает библиотеку функций для создания и манипулирования PNG (Portable Network Graphics) изображениями. PNG это растровый графический формат подобный GIF. (Ненужный пакет).

User Interface/X:
(6.1) XFree86-75dpi-fonts включает 75 dpi шрифты используемые на большинстве X Window Systems. (ненужный пакет).
(All) urw-fonts включает свободные версии 35 PostScript шрифтов. (Ненужный пакет).

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



В этой главе

 

Программное обеспечение, которое должно быть установлены после инсталляции сервера.
Чтобы иметь возможность компилировать программы нужные вашему серверу вы должны проинсталлировать ряд RPM пакетов. Эта часть инсталляции очень важна и вы должны обязательно установить все программное обеспечение описанное ниже. Эти пакеты находятся на Red Hat Part 1 CD-ROM в каталоге RedHat/RPMS.
Шаг 1.
Мы монтируем CDROM и перемещаемся в каталог RPMS:
[root@deep]# mount /dev/cdrom /mnt/cdrom/

[root@deep]# cd /mnt/cdrom/RedHat/RPMS/

Это минимальное количество программного обеспечения необходимого для компиляции большинства программ нужных вашему серверу. Если у вас возникают проблему с компиляцией каких-либо программ, внимательно прочитайте файл README, чтобы выяснить, что должно быть установлено до компиляции.
 
(6.1) (6.2)
autoconf-2.13-5.noarch.rpm autoconf-2.13-5.noarch.rpm
m4-1.4-12.i386.rpm m4-1.4-12.i386.rpm
automake-1.4-5.noarch.rpm automake-1.4-6.noarch.rpm
dev86-0.14.9-1.i386.rpm dev86-0.15.0-2.i386.rpm
bison-1.28-1.i386.rpm bison-1.28-2.i386.rpm
byacc-1.9-11.i386.rpm byacc-1.9-12.i386.rpm
cdecl-2.5-9.i386.rpm cdecl-2.5-10.i386.rpm
cpp-1.1.2-24.i386.rpm cpp-1.1.2-30.i386.rpm
cproto-4.6-2.i386.rpm cproto-4.6-3.i386.rpm
ctags-3.2-1.i386.rpm ctags-3.4-1.i386.rpm
egcs-1.1.2-24.i386.rpm egcs-1.1.2-30.i386.rpm
ElectricFence-2.1-1.i386.rpm ElectricFence-2.1-3.i386.rpm
flex-2.5.4a-7.i386.rpm flex-2.5.4a-9.i386.rpm
gdb-4.18-4.i386.rpm gdb-4.18-11.i386.rpm
kernel-headers-2.2.12-20.i386.rpm kernel-headers-2.2.14-5.0.i386.rpm
glibc-devel-2.1.2-11.i386.rpm glibc-devel-2.1.3-15.i386.rpm
make-3.77-6.i386.rpm make-3.78.1-4.i386.rpm
patch-2.5-9.i386.rpm patch-2.5-10.i386.rpm

Шаг 2.
(6.1) Инсталлируем все пакеты описанные выше при помощи одной команды.
[root@deep RPMS]# rpm -Uvh 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


Эта секция включает обзор основных режимов используемых в RPM для инсталляции, деинсталляции, обновления, организации запросов, просмотра описаний, проверки и создания RPM пакетов на вашей Linux системе. Вы должны быть с этими командами “на ты”, потому что дальше они будут часто использоваться в этой книге.
Для инсталляции RPM пакетов используйте команду:
[root@deep]# rpm -ivh foo-1.0-2.i386.rpm

RPM пакеты имеют имена файлов подобные следущему foo-1.0-2.i386.rpm, которое включает следующие составляющие: имя пакета (foo), версия (1.0), релиз (2) и архитектура (i386).
Для удаления RPM пакета используйте команду:
[root@deep]# rpm -e foo

Заметим, что мы используем имя пакета “foo”, а не оригинальное имя пакета “foo-1.0-2.i386.rpm”.
Для обновления RPM пакета, используйте команду:
[root@deep]# rpm -Uvh foo-1.0-2.i386.rpm

RPM автоматически деинсталлирует старую версию пакета foo и инсталлирует новую. Всегда используйте “rpm -Uvh” для инсталляции, так как это работает хорошо даже когда предыдущая версия не установлена.
Вопрос о RPM пакете:
[root@deep]# rpm -q foo

Эта команда будет выводить имя пакета, версию и номер релиза установленного пакета. Используйте эту команду для проверки установлен ли у вас пакет или нет.
Для получения информации о пакетет используйте команду:
[root@deep]# rpm -qi foo

Эта команда выводит информацию о пакете, включая имя, версию и описание установленной программы.
Для получения списка файлов в пакете:
[root@deep]# rpm -ql foo

Эта команда выдаст список всех файлов в инсталлированом пакете.
Для проверки сигнетуры пакета используйте команду:
[root@deep]# rpm --checksig foo

Эта команды проверяет PGP сигнатуру пакета foo, сравнивая оригинальную и интегрированную. Конфигурационная информация PGP читается из конфигурационного файла. Всегда используйте эту команду до инсталляции пакета в вашей системе. До использования этой команды у вас должно быть проинсталлирована программное GnuPG или Pgp.
Для инсталляции пакета из исходных файлов используйте команду:
[root@deep]# rpm -ivh --rebuild foo.src.rpm



Приведенная выше команда будет конфигурировать и компилировать пакет "foo", создавая двоичный RPM файл в каталоге "/usr/src/redhat/RPMS/i386/". Затем вы можете проинсталлировать пакет так, как вы это делаете обычно.
Запуск и останов сервисных демонов.
После загрузки, ядро запускает процесс Init, а он уже запускает все остальные процессы необходимые для работы системы (демон Apache, все сетевые демоны и все то, что вы хотите запустить).
Как же init запускает и останавливает процессы? Каждый из скриптов, находящихся в каталоге “/etc/rc.d/init.d/”, может принять несколько аргументов, в том числе “start” и “stop”. Вы можете запустить эти скрипты и в ручную.
Например:
Для старта httpd Веб сервера вручную
[root@deep]# /etc/rc.d/init.d/httpd start

Starting httpd:      [ OK ]
Для остановки httpd Веб сервера вручную.
[root@deep]# /etc/rc.d/init.d/httpd stop

Shutting down http:      [ OK ]
Для перезагрузки httpd Веб сервера вручную.
[root@deep /]# /etc/rc.d/init.d/httpd restart

Shutting down http:      [ OK ]

Starting httpd:      [ OK ]
Просмотрите содержимое каталога“/etc/rc.d/init.d/”, чтобы узнать какие сервисы доступны и используйте команды start|stop для работы с ними.
Программное обеспечение, которое должно быть деинсталировано после установки сервера
Red Hat Linux инсталлирует ряд программ в вашей системе от которых вы не можете отказаться в процессе установки. Из-за этого вы должны удалить эти программы вручную после инсталляции сервера.
 
(6.1) (6.2)
pump pump
mt-st mt-st
eject eject
mailcap mailcap
apmd apmd
kernel-pcmcia-cs  kernel-pcmcia-cs 
linuxconf linuxconf
getty_ps getty_ps
setconsole
isapnptools isapnptools
setserial setserial
kudzu kudzu
raidtools raidtools
gnupg gnupg
redhat-logos redhat-logos
redhat-release redhat-release
gd gd
pciutils pciutils
rmt rmt
<


Используйте следующие команды RPM для удаления этих программ
rpm -e softwarenames

где “softwarenames” это имя программы для деинсталляции, например foo. Программы подобные apmd, kudzu и sendmail являются демонами, которые запускаются как процессы. Лучше остановить эти процессы прежде чем удалять их.
Для остановки этих процессов используйте следующие команды:
[root@deep]# /etc/rc.d/init.d/apmd stop

[root@deep]# /etc/rc.d/init.d/sendmail stop

[root@deep]# /etc/rc.d/init.d/kudzu stop
Сейчас вы можете спокойно деисталлировать их и другие программы как описано ниже:
Шаг 1
(6.1) Удаление определенных программ.
[root@deep /]# rpm -e --nodeps pump mt-st eject mailcap apmd kernel-pcmcia-cs linuxconf getty_ps setconsole isapnptools setserial kudzu raidtools gnupg redhat- logos redhat-release gd pciutils rmt
(6.2) Удаление определенных программ.
[root@deep /]# rpm -e --nodeps pump mt-st eject mailcap apmd kernel-pcmcia- cs linuxconf getty_ps isapnptools setserial kudzu raidtools gnupg redhat-logos redhat-release gd pciutils rmt
Шаг 2
(All) Ручное удаление файла linux.conf-installed.
[root@deep]# rm -f /etc/conf.linuxconf-installed

Заметим, что конфигурационный файл связанный с linuxconf должен быть удален вручную.
Программа hdparm необходима для IDE дисков, но не нужна для SCSI. Если у вас IDE диски вам нужно оставить эту программу иначе можете смело ее удалять.
[root@deep /]# rpm -e hdparm
Программы kbdconfig, mouseconfig и timeconfig необходимы для настройки клавиатуры, мыши и временной зоны. После того как все настроено, навряд ли придется, что-либо менять, поэтому можно удалять эти программы. Если в дальнейшем вам потребуется изменить настройки системы, то можно будет проинсталлировать их с CDROM.
[root@deep /]# rpm -e kbdconfig mouseconfig timeconfig authconfig ntsysv setuptool
Даже если ваша машина не будет выступать в роли почтового сервера все равно программа sendmail всегда будет нужна ей для отправки сообщений пользователю root от различного программного обеспечения. Sendmail это полнофункциональный почтовый агент доставки (Mail Transport Agent (MTA)), который занимается пересылкой почты с одной машины на другую. В Интернет sendmail занимается пересылкой почты из одной сети в другую. Sendmail может быть настроен для выполнения различных функций, как агент доставки почты к центральному почтовому узлу, как центральный почтовый хаб или просто как независимо существующий MTA. В зависимости от того, что вы хотите получить от sendmail, вы можете настроить его на выполнение различных задач. Из этих соображений вам надо удалить sendmail с вашего сервера и установить его так, как будет описано ниже в этой книге.
[root@deep /]# rpm -e sendmail



Описание программы, которые должны быть удалены после инсталляции Сервера
(All) DHCP (Dynamic Host Configuration Protocol) и BOOTP (Boot Protocol) являются протоколами, которые позволяют отдельным устройствам в IP-сетях получать конфигурационную информацию (ip-адрес, сетевая маска, широковещательный адрес и т.д.) от серверов. (Ненужный пакет).
(All) Пакет mt-st включает программное обеспечения для управления устройствами чтения с магнитных лент. Mt (для устройств magnetic tape devices) и st (для SCSI tape devices) может контролировать перемотку и вытаскивание ленты, пропуск файлов, блоков и пр. (Ненужный пакет).
(All) Программа eject позволяет пользователям извлекать преносимые утсройства информации (обычно это CDROM, гибкие диски или диски Iomega Jaz и Zip) используя программные средства. (ненужный пакет).
(All) Файл mailcap используется программой metamail, которая использует этот файл, чтобы определить как должны быть выведены нетекстовые и мультимедиа материалы (Ненужный пакет).
(All) Apmd – это демон расширенного управления питания и сопутствующие ему утилиты. Он может следить за батареями вашего ноутбука и предупредить всех пользователей если они почти разрядились (Ненужный пакет).
(All) Пакет kernel-pcmcia-cs для лаптоп компьютеров (и некоторые не-лаптоп), которые поддерживают PCMCI-карты расширения. (Ненужный пакет).
(All) Linuxconf это чрезвычайно удобная утилита для настройки системы. Она предоставляет вам четыре вида интерфейса: текстовый, в виде текстовых меню, графический для X11 и веб-интерфейс. (Ненужная программа, содержащая много ошибок).
(All) Пакет getty_ps содержит программы getty и uugetty, базовые программы для выполнения процесса login на Red Hat системе. Getty и uugetty используется для приемы входов в систему с консоли или терминала. (ненужный пакет).
(6.1) Setconsole базовая системная утилита для установки файлов /etc/inittab, /dev/systty и /dev/console для манипулирования новыми консолями. Консолью может быть любой локальный терминал (т.е напрямую присоединенный через видео карту) или последовательный терминал. (ненужный пакет).
(All) Пакет isapnptools включает утилиты для настройки ISA Plug-and-Play (PnP) карт и плат, которые совместимы со спецификацией ISA Plug-and-Play v.1.0a. (ненужный пакета).
(All) Setserial – это базовая системная утилита для просмотра и установки информации о последовательных портах. Setserial может находить и позволяет вам изменить I/O порт и IRQ, которые использует последовательное устройство. (Ненужный пакет).
(All) Kudzu – это утилита для автоматического определения аппаратного обеспечения. Во время загрузки, она может определить какие устройства были добавлены и удалены из вашей системы. (ненужный пакет).
(All) Пакет raidtools включает утилиты, которые нужны для установки и управления программных RAID устройств (использование комбинации из двух и более дисковых накопителей для защиты информации от ошибок и улучшения производительности). (В зависимости от того нужен вам RAID или нет).
(All) GnuPG – это GNU утилита для безопасного общения и хранения данных. Вы можете использовать ее для шифрования данных и создания цифровых ключей. Она включает расширенную систему управления ключами и совместима с предлагаемым OpenPGP Интернет стандартом описанном в RFC2440. (Мы установим этот пакет позже).
(All) Пакет redhat-logos включает файлы из Red Hat "Shadow Man" logo и RPM logo ("Logos"). (Ненужный пакет).
(All) redhat-release содержит Red Hat рели файлы. (Ненужный пакет).
(All) Gd – это графическая библиотека для создангия .gif файлов. Gd позволяет ваши программам быстро рисовать (линии, дуги, текст, цвета и вставки из других изображений) и записывать результаты в .gif файлы.(ненужный пакет).
(All) Этот пакет (pciutils) содержит программы необходимые для контроля и установки устройств подключенных к шине PCI (Ненужный пакет).
(All) Утилита rmt предоставляет удаленный доступ для резервного копирования (риск для безопасности, так как работа rmt зависит от rsh).



 
autoconf ##################################################
m4 ##################################################
automake ##################################################
dev86 ##################################################
bison ##################################################
byacc ##################################################
cdecl ##################################################
cpp ##################################################
cproto ##################################################
ctags ##################################################
egcs ##################################################
ElectricFence ##################################################
Flex ##################################################
Gdb ##################################################
kernel-headers  ##################################################
glibc-devel ##################################################
make ##################################################
patch ##################################################

(6.2) Инсталлируем все пакеты описанные выше при помощи одной команды.
[root@deep RPMS]# rpm -Uvh 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

autoconf ##################################################
m4 ##################################################
automake ##################################################
dev86 ##################################################
bison ##################################################
byacc ##################################################
cdecl ##################################################
cpp ##################################################
cproto ##################################################
ctags ##################################################
egcs ##################################################
ElectricFence ##################################################
flex ##################################################
gdb ##################################################
kernel-headers  ##################################################
glibc-devel ##################################################
make ##################################################
patch ##################################################
<


Шаг 3.
Выходим из системы и снова входим в нее, чтобы все изменения сработали.
[root@deep]# exit
После инсталляции и компиляции всех необходимых программ будет хорошей идеей удалить компиляторы и подобные им программы. В основном это делается для того, чтобы злоумышленник, проникший на ваш сервер, не смог скомпилировать или модифицировать необходимые ему программы. Также освободиться место на диске и уменьшиться количество файлов, которые будет необходимо регулярно проверять.
Когда вы включаете сервер вы запускаете на выполнение много задач. Вы никогда не должны помещать все сервисы на одну машину или вы потеряете в быстродействии (все ресурсы будут разделяться между всеми процессами) и ухудшите безопасность системы.
Создание разных серверов для разных задач упрощает процесс администрирования, управления (вы точно знаете какие задачи, что делают, какие сервисы доступны, какие порты открыты для доступа клиентов и какие закрыты, и знаете, что вы должны увидеть в лог файлах) и дает больший контроль и гибкость для каждого из них (сервер обрабатывающий почту, веб- страницы, базы данных и т.д.).
Итак, наличие, например, специализированного сервера для разработки и тестирования, позволит вам не устанавливать компиляторы на других серверах каждый раз когда вы хотите обновить программное обеспечение. Для получения большей информации смотрите “Возможности компилятора”.
Программы установленные на вашем сервере.
Шаг 1.
Итак, если вы выбрали пользовательский метод инсталляции, то ниже перечислены все программы, которые должны быть установлены на сервере. Этот список должен в точности совпадать с файлом install.log, находящимся в “/tmp”. Не забудьте установить все программы о которых было написано в разделе “ Программное обеспечение которое должно быть проинсталлировано после установки сервера”.
(6.1)

Installing setup. Installing gzip. Installing sendmail.
Installing filesystem. Installing gpm. Installing setconsole.
Installing basesystem. Installing groff. Installing setserial.
Installing ldconfig. Installing hdparm. Installing setuptool.
Installing glibc. Installing initscripts. Installing shapecfg.
Installing shadow-utils. Installing ipchains. Installing slang.
Installing mktemp. Installing isapnptools. Installing slocate.
Installing termcap. Installing kbdconfig. Installing stat.
Installing libtermcap. Installing kernel. Installing sysklogd.
Installing bash. Installing kernel-pcmcia-cs. Installing tar.
Installing MAKEDEV. Installing kudzu. Installing tcp_wrappers.
Installing SysVinit. Installing ld.so. Installing tcpdump.
Installing XFree86-Mach64. Installing less. Installing tcsh.
Installing chkconfig. Installing libc. Installing time.
Installing apmd. Installing libstdc++. Installing timeconfig.
Installing ncurses. Installing lilo. Installing timed.
Installing info. Installing pwdb. Installing tmpwatch.
Installing fileutils. Installing pam. Installing traceroute.
Installing grep. Installing sh-utils. Installing utempter.
Installing ash. Installing redhat-release. Installing util-linux.
Installing at. Installing linuxconf. Installing vim-common.
Installing authconfig. Installing logrotate. Installing vim-minimal.
Installing bc. Installing losetup. Installing vixie-cron.
Installing bdflush. Installing lsof. Installing which.
Installing binutils. Installing mailcap. Installing zlib.
Installing bzip2. Installing mailx.
Installing sed. Installing man.
Installing console-tools. Installing mingetty.
Installing e2fsprogs. Installing mkbootdisk.
Installing rmt. Installing mkinitrd.
Installing cpio. Installing modutils.
Installing cracklib. Installing mount.
Installing cracklib-dicts. Installing mouseconfig.
Installing crontabs. Installing mt-st.
Installing textutils. Installing ncompress.
Installing dev. Installing net-tools.
Installing diffutils. Installing netkit-base.
Installing dump. Installing newt.
Installing ed. Installing ntsysv.
Installing eject. Installing passwd.
Installing etcskel. Installing pciutils.
Installing file. Installing perl.
Installing findutils. Installing procmail.
Installing gawk. Installing procps.
Installing gd. Installing psmisc.
Installing gdbm. Installing pump.
Installing getty_ps. Installing python.
Installing glib. Installing quota.
Installing gmp. Installing raidtools.
Installing gnupg. Installing readline.
Installing redhat-logos. Installing rootfiles.
Installing rpm. Installing sash.
<


(6.2)

Installing setup. Installing filesystem. Installing basesystem.
Installing ldconfig. Installing glibc. Installing shadow-utils.
Installing mktemp. Installing termcap. Installing libtermcap.
Installing bash. Installing MAKEDEV. Installing SysVinit.
Installing XFree86-Mach64. Installing anacron. Installing chkconfig.
Installing apmd. Installing ncurses. Installing info.
Installing fileutils. Installing grep. Installing ash.
Installing at. Installing authconfig. Installing bc.
Installing bdflush. Installing binutils. Installing bzip2.
Installing sed. Installing console-tools. Installing e2fsprogs.
Installing rmt. Installing cpio. Installing cracklib.
Installing cracklib-dicts. Installing crontabs. Installing textutils.
Installing dev. Installing diffutils. Installing dump.
Installing ed. Installing eject. Installing etcskel.
Installing file. Installing findutils. Installing gawk.
Installing gd. Installing gdbm. Installing getty_ps.
Installing glib. Installing gmp. Installing gnupg.
Installing gpm. Installing groff. Installing gzip.
Installing hdparm. Installing inetd. Installing initscripts.
Installing ipchains. Installing iputils. Installing isapnptools.
Installing kbdconfig. Installing kernel. Installing kernel-pcmcia-cs.
Installing kernel-utils. Installing kudzu. Installing ld.so.
Installing less. Installing libc. Installing libstdc++.
Installing lilo. Installing pwdb. Installing pam.
Installing sh-utils. Installing redhat-release. Installing linuxconf.
Installing logrotate. Installing losetup. Installing lsof.
Installing mailcap. Installing mailx. Installing man.
Installing mingetty. Installing mkbootdisk. Installing mkinitrd.
Installing modutils. Installing mount. Installing mouseconfig.
Installing mt-st. Installing ncompress. Installing net-tools.
Installing newt. Installing ntsysv. Installing passwd.
Installing pciutils. Installing perl. Installing popt.
Installing procmail. Installing procps. Installing psmisc.
Installing pump. Installing quota. Installing raidtools.
Installing readline. Installing redhat-logos. Installing rootfiles.
Installing rpm. Installing sash. Installing sendmail.
Installing setserial. Installing setuptool. Installing shapecfg.
Installing slang. Installing slocate. Installing stat.
Installing sysklogd. Installing tar. Installing tcp_wrappers.
Installing tcpdump. Installing tcsh. Installing time.
Installing timeconfig. Installing tmpwatch. Installing traceroute.
Installing utempter. Installing util-linux. Installing vim-common.
Installing vim-minimal. Installing which.
Installing zlib. Installing vixie-cron.
<


Шаг 2.
После того как вы деинсталлировали все программы, которые должны быть удалены после установки сервера, и после установки дополнительных пакетов необходимых для компиляции программ на сервере мы должны проверить список вех инсталлированных RPM пакетов при помощи команды
[root@deep /]# rpm -qa > installed_rpm

опции –qa выводят список всех проинсталлированных программ и знак “>” перенаправляет этот список в файл installed_rpm.
(6.1) Содержимое файла installed_rpm должно выглядеть так:
 
setup-2.0.5-1 filesystem-1.3.5-1 basesystem-6.0-4
ldconfig-1.9.5-15 glibc-2.1.2-11 shadow-utils-19990827-2
mktemp-1.5-1 termcap-9.12.6-15 libtermcap-2.0.8-18
bash-1.14.7-16 MAKEDEV-2.5-2 SysVinit-2.77-2
chkconfig-1.0.7-2 ncurses-4.2-25 info-3.12h-2
fileutils-4.0-8 grep-2.3-2 ash-0.2-18
at-3.1.7-11 m4-1.4-12 bdflush-1.5-10
binutils-2.9.1.0.23-6 bzip2-0.9.5c-1 sed-3.02-4
console-tools-19990302-17 e2fsprogs-1.15-3 byacc-1.9-11
cpio-2.4.2-13 cracklib-2.7-5 cracklib-dicts-2.7-5
crontabs-1.7-7 textutils-2.0-2 dev-2.7.10-2
diffutils-2.7-16 dump-0.4b4-11 ed-0.2-12
bison-1.28-1 etcskel-2.0-1 file-3.27-3
findutils-4.1-32 gawk-3.0.4-1 cdecl-2.5-9
gdbm-1.8.0-2 autoconf-2.13-5 glib-1.2.5-1
gmp-2.0.2-10 cpp-1.1.2-24 gpm-1.17.9-3
groff-1.11a-9 gzip-1.2.4-14 initscripts-4.48-1
ipchains-1.3.9-3 cproto-4.6-2 ElectricFence-2.1-1
kernel-2.2.12-20 patch-2.5-9 ld.so-1.9.5-11
less-340-1 libc-5.3.12-31 libstdc++-2.9.0-24
lilo-0.21-10 pwdb-0.60-1 pam-0.68-7
sh-utils-2.0-1 automake-1.4-5 logrotate-3.3-1
losetup-2.9u-4 lsof-4.45-1 mailx-8.1.1-9
man-1.5g-6 mingetty-0.9.4-10 mkbootdisk-1.2.2-1
mkinitrd-2.3-1 modutils-2.1.121-14 mount-2.9u-4
ctags-3.2-1 ncompress-4.2.4-14 net-tools-1.53-1
netkit-base-0.10-37 newt-0.50-13 passwd-0.63-1
perl-5.00503-6 flex-2.5.4a-7 procps-2.0.4-2
psmisc-18-3 python-1.5.2-7 quota-1.66-8
gdb-4.18-4 readline-2.2.1-5 glibc-devel-2.1.2-11
rootfiles-5.2-5 rpm-3.0.3-2 sash-3.3-1
make-3.77-6 shapecfg-2.2.12-2 slang-1.2.2-4
slocate-2.0-3 stat-1.5-11 sysklogd-1.3.31-12
tar-1.13.11-1 tcp_wrappers-7.6-9 tcpdump-3.4-16
tcsh-6.08.00-6 time-1.7-9 timed-0.10-23
tmpwatch-2.0-1 traceroute-1.4a5-16 utempter-0.5.1-2
util-linux-2.9w-24 vim-common-5.4-2 vim-minimal-5.4-2
vixie-cron-3.0.1-39 which-2.8-1 zlib-1.1.3-5
dev86-0.14.9-1 egcs-1.1.2-24 kernel-headers-2.2.12-20
<


(6.2) Содержимое файла installed_rpm должно выглядеть так:
 
setup-2.1.8-1 filesystem-1.3.5-1 basesystem-6.0-4
ldconfig-1.9.5-16 glibc-2.1.3-15 shadow-utils-19990827-10
mktemp-1.5-2 termcap-10.2.7-9 libtermcap-2.0.8-20
bash-1.14.7-22 MAKEDEV-2.5.2-1 SysVinit-2.78-5
anacron-2.1-6 chkconfig-1.1.2-1 m4-1.4-12
ncurses-5.0-11 info-4.0-5 fileutils-4.0-21
grep-2.4-3 ash-0.2-20 at-3.1.7-14
byacc-1.9-12 bc-1.05a-5 bdflush-1.5-11
binutils-2.9.5.0.22-6 bzip2-0.9.5d-2 sed-3.02-6
console-tools-19990829-10 e2fsprogs-1.18-5 cpio-2.4.2-16
cracklib-2.7-5 cracklib-dicts-2.7-5 crontabs-1.7-7
textutils-2.0a-2 dev-2.7.18-3 diffutils-2.7-17
dump-0.4b15-1 ed-0.2-13 cdecl-2.5-10
etcskel-2.3-1 file-3.28-2 findutils-4.1-34
gawk-3.0.4-2 patch-2.5-10 gdbm-1.8.0-3
bison-1.28-2 glib-1.2.6-3 gmp-2.0.2-13
autoconf-2.13-5 gpm-1.18.1-7 groff-1.15-8
gzip-1.2.4a-2 inetd-0.16-4 initscripts-5.00-1
ipchains-1.3.9-5 iputils-20000121-2 cpp-1.1.2-30
cproto-4.6-3 kernel-2.2.14-5.0 ctags-3.4-1
kernel-utils-2.2.14-5.0 ElectricFence-2.1-3 ld.so-1.9.5-13
less-346-2 libc-5.3.12-31 libstdc++-2.9.0-30
lilo-0.21-15 pwdb-0.61-0 pam-0.72-6
sh-utils-2.0-5 automake-1.4-6 logrotate-3.3.2-1
losetup-2.10f-1 lsof-4.47-2 mailx-8.1.1-10
man-1.5h1-1 mingetty-0.9.4-11 mkbootdisk-1.2.5-3
mkinitrd-2.4.1-2 modutils-2.3.9-6 mount-2.10f-1
flex-2.5.4a-9 ncompress-4.2.4-15 net-tools-1.54-4
newt-0.50.8-2 passwd-0.64.1-1 perl-5.00503-10
popt-1.5-0.48 procmail-3.14-2 procps-2.0.6-5
psmisc-19-2 quota-2.00pre3-2 gdb-4.18-11
readline-2.2.1-6 make-3.78.1-4 rootfiles-5.2-5
rpm-3.0.4-0.48 sash-3.4-2 shapecfg-2.2.12-2
slang-1.2.2-5 slocate-2.1-2 stat-1.5-12
sysklogd-1.3.31-16 tar-1.13.17-3 tcp_wrappers-7.6-10
tcpdump-3.4-19 tcsh-6.09-4 time-1.7-9
tmpwatch-2.2-1 traceroute-1.4a5-18 utempter-0.5.2-2
util-linux-2.10f-7 vim-common-5.6-11 vim-minimal-5.6-11
vixie-cron-3.0.1-40 which-2.9-2 zlib-1.1.3-6
dev86-0.15.0-2 egcs-1.1.2-30
kernel-headers-2.2.14-5.0 glibc-devel-2.1.3-15
<


Второй шаг необходим, чтобы вы не забыли удалить некоторые ненужные пакеты и установить необходимые. Если ваш файл installed_rpm выглядит так же как и приведенный здесь, значит ваш сервер установлен правильно.
Добавление цветов на ваш терминал
(6.1) Добавив цвета на ваш терминал вы сможете легче различать файлы, папки, архивы, устройства, символические ссылки и исполняемые файлы. На мой взгляд, наличие цветов уменьшает количество ошибок и ускоряет процесс навигации по системе. Описанную ниже процедуру нужно выполнить для Red Hat Linux version 6.1 (Cartman) и более старых версий. В Red Hat 6.2 они включены по умолчанию.
Отредактируйте файл profile (vi /etc/profile) и добавьте в него следующие строки:
# Enable Colour ls

eval `dircolors /etc/DIR_COLORS -b`

export LS_OPTIONS=’-s -F -T 0 --color=yes’
Отредактируйте файл bashrc (vi /etc/bashrc) добавив следующие строки:
alias ls=’ls --color=auto’
Выйдите и вновь войдите на сервер, чтобы новые переменные окружения вступили в силу.
Обновление программ до их последних версий.
Обновляйте все программное обеспечение на более новые версии, просматривайте список ошибок для дистрибутива Red Hat, который находится по адресу . Страница ошибок, возможно, является лучшим ресурсом для решения 90% проблем в Red Hat Linux.
Следующие программы должны проверяться на наличие ошибок и новых версий в первую очередь.
(6.1)

groff-1_15-1_i386.rpm
sysklogd-1_3_31-14_i386.rpm
initscripts-4_70-1_i386.rpm
e2fsprogs-1.17-1.i386.rpm
pam-0_68-10_i386.rpm
gpm-1.19.1-1.i386.rpm
Linux kernel 2.2.14 (linux-2_2_14_tar.gz)
(6.2)

gpm-1.19.1-1.i386.rpm
Замечание: ядро linux очень важно, и должно регулярно обновляться. Читайте ниже о создании ядер для определенных систем.
Вы можете проверить, установлен ли пакет на вашей системе перед обновлением , дав следующую команду:
[root@deep]# rpm -q <softwarename>
где softwarename – имя пакета, которое вы хотите проверить, например, telnet, XFree86 и т.д.

Инсталляция вашего Linux сервера (Часть1)


В этой главе


 

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

Время от времени Red Hat обновляет свою операционную систему на новые версии и добавляет, удаляет и модифицирует некоторые пакеты, изменяет их месторасположения, содержимое и возможности. Недавно Red Hat выпустила версию 6.2 своей операционной системы, которая представляет собой незначительное обновление 6.1. В этой главе мы пытаемся рассмотреть вопросы инсталляции как версии 6.1 так и 6.2. Все разделы в этой секции которые относятся к Red Hat 6.1 будут обозначаться (6.1), разделы относящиеся к Red Hat 6.2 (6.2), а общие для обеих версиях – (All).
Определите ваше аппаратное обеспечение.

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

Сколько у вас установлено жестких дисков?

Каков объем каждого из них?

Если у вас несколько жестких дисков, то какой из них первичный?

Какого типа диски у вас установлены (IDE, SCSI)?

Сколько оперативной памяти установлено у вас?

Имеете ли вы SCSI адаптеры? Если есть, то кто их производитель и какой они модели?

Есть ли у вас RAID система? Если есть, то кто ее производитель и какой она модели?

Мышь какого типа у вас установлена (Microsoft, Logitech, PS/2)?

Как много в ней кнопок (2/3)?

Если у вас “серийная” мышь, то к какому порту она подключена (COM1)?

Кто производитель и какая модель у вашего видеоадаптера? Как много в нем видеопамяти?

Какой у вас монитор (производитель и модель)?

Будете ли вы подключены к сети. Если да, то выясните следующее:

Ваш IP

Какова сетевая маска.

Адрес “шлюза по умолчанию”

IP адрес DNS сервера

Ваше доменное имя

Имя вашего компьютера

Какие сетевые карты у вас установлены (производитель и модель)


Создайте загрузочный и корневой диски
(All) Первое о чем надо подумать это создание инсталляционной дискеты, известной также как загрузочная. Если вы купили официальный Red Hat Linux CD-ROM, то вы найдете ее в коробке и вам не нужно ее создавать. Она называется “Boot Diskette”. Время от времени можно столкнуться с проблемой, что ваша инсталляция начатая со стандартной дискеты завершается ошибкой, тогда вам потребуется специальная загрузочная дискета. Образ который можно найти на CD-ROM и на веб-странице Red Hat Linux Errata ().
Шаг 1.
Перед тем как сделать загрузочный диск вставьте Official Red Hat Linux CD- ROM часть1 в ваш дисковод. Когда программа спросит имя файла – ответьте boot.img. Чтобы сделать загрузочный диск под MSDOS вам нужно ввести следующие команды (принимаем, что CDROM это диск D:, и в него вставлен Official Red Hat Linux CD-ROM).
C:\> d:

D:\> cd \dosutils

D:\dosutils> rawrite

Enter disk image source file name: ..\images\boot.img

Enter target diskette drive: a:

Please insert a formatted diskette into drive A: and press --ENTER-- :

D:\dosutils>
Программа rawrite.exe запрашивает имя образа. Введите boot.img и вставьте дискету в дисковод. Затем программа спрашивает на какой диск записать образ. Ответьте a:. После завершения процедуры подпишите дискету, например “Red Hat boot disk”.
Шаг 2.
Если мы запускаем инсталляцию не напрямую с CD-ROM, то загружайтесь с дискеты. Вставьте дискету, которую вы создали, в дисковод A:, на компьютере, где вы собираетесь установить Linux и перезагрузите его. После появления приглашения к загрузке нажмите Enter для продолжения и выполните три следующих действия:
Выберите язык
Выберите тип клавиатуры
Выберите тип мыши
Классы и методы инсталляции
Red Hat Linux 6.1 и 6.2 включает четыре предопределенных типа инсталляции:
рабочая станция с GNOME
рабочая станция с KDE
Сервер
Пользовательская
Первые три класса (рабочая станция с GNOME, рабочая станция с KDE и Сервер) даны для упрощения процесса установки, но при этом теряется гибкость настройки, которую бы нам хотелось иметь. По этой причине мы настоятельно рекомендуем использовать опцию Custom, чтобы вы могли точно знать какие сервисы установлены и на какие разделы разбиты диски.
Идея состоит в том, чтобы проинсталлировать минимальное количество пакетов. Меньшее количество программного обеспечение, уменьшает количество потенциальных проблем с безопасностью. Выберите “Custom” и нажмите Next.
Разбиение диска (Disk Druid)


(All) Мы принимаем, что вы устанавливаете Linux на новый диск, на котором нет никаких файловых или операционных систем. Хорошая стратегия разбития диска, это разделение его на отдельные разделы для каждой важной файловой системы.
Разбиение дика на несколько разделов дает следующие преимущества:
Защита от DoS (Denial of Service) атак
Защита от SUID программ
Более быстрая загрузка
Облегчение процедуры резервного копирования и обновления
Улучшенный контроль над смонтированными файловыми системами
Ограничение для каждой файловой системы возможности роста
Внимание. Если на вашем компьютере есть файловые системы, мы настоятельно рекомендуем сделать резервную копию вашей системы перед разбиением диска.
Шаг 1.
Исходя из соображений стабильности и безопасности мы рекомендуем разбить диск согласно принципам описанным ниже. Мы исходили из того, что у вас есть SCSI диск объемом 3.2 GB. Конечно, вы можете изменить размеры разделов, исходя из размеров вашего диска и личных нужд.
Разделы которые необходимо создать на вашем диске.
 
/boot 5MB Образы ядер находятся здесь.
/usr 512MB Должен быть большим. Все двоичные файлы Linux хранятся здесь.
/home 1146MB  Пропорционально числу пользователей (например, 10MB на пользователя * число пользователей 114 = 1140MB).
/chroot  256MB Если вы будете использовать программы с CHROOT (например DNS).
/cache 256MB Кэш раздел для прокси сервера (например, Squid).
/var 256MB Содержит файлы которые изменяются при нормальной работе системы (например, логфайлы).
<Swap> 128MB swap раздел. Виртуальная память Linux.
/tmp 256MB Раздел для временных файлов.
/ 256MB Корневой раздел.



Все основные файловые системы на отдельных раздела.
Мы создаем два специальных раздела /chroot и /cache. /chroot – для программ умеющий менять корневую файловую систему (chroot). К ним относятся DNS- сервер, Apache веб-сервер и ряд других программ. Раздел /cache предназначен для кэширующего прокси сервера Squid. Если вы не хотите использовать Squid, то вы можете не создавать его.
Расположите /tmp и /home на отдельных разделах, особенно если пользователи вашего сервера имеют shell-доступ к нему. Также хорошей идеей будет разместить на независимых разделах /var и /usr. Отделение /var защитит ваш корневой раздел от переполнения.
В нашей конфигурации мы зарезервировали 256 MB под /chroot. Это связано с тем, что на нем будут располагаться файлы из Apache DocumentRoot и другие исполняемые файлы, связанные с Apache. Заметим, что размер каталога Apache на /chroot зависит от общего объема занимаемого файлами из “DocumentRoot”. Если вы не планируете использовать Apache, то можете уменьшить размер этого раздела до 10 MB. Этого должно хватить для DNS-сервера.
Минимальные размеры разделов.


Ниже приведены минимальные размеры разделов при которых система корректно функционирует. Это действительно самые минимальные цифры. Они взяты исходя из размеров старых жестких дисков – 512 MB.
 
/ 35MB
/boot 5MB
/chroot  10MB
/home 100MB
/tmp 30MB
/usr 232MB
/var 25MB

Disk Druid.
Disk Druid – это утилита, которая облегчает процедуру разбиения диска на разделы. Выберите “Add” для создания нового раздела, “Edit”
для редактирования раздела, “Delete” для удаления раздела и “Reset”
сбросить последние изменения в исходное состояние. Когда вы создаете новый раздел перед вами появляется новый экран, в котором вы должны определить ряд параметров.
Точка монтирования (Mount Point): место в файловой системе куда будет монтироваться данный раздел.
Size (Megs): размер нового раздела в мегабайтах.
Partition Type: Тип раздела: Linux native для файловой системы Linux и Swap для Linux Swap раздела.
Если у вас SCSI диск, то устройство называется “/dev/sda”, а если IDE диск, то “/dev/hda”. Если вы стремитесь к высокой производительности и стабильности, то используйте SCSI диски.
Для описания дисков в Linux используется комбинация из букв и цифр.
Первые две буквы – первые две буквы из названия устройства. Например, “hd” (для IDE дисков) или “sd” (для SCSI дисков).
Следующая буква – Эта буква показывает порядок подключения устройств к интерфейсу.Например, “/dev/hda” (первый IDE диск) и “/dev/hdb”
(второй IDE диск).
A swap partition
Swap раздел используется для поддержки виртуальной памяти. Если ваш компьютер имеет 16 MB памяти или меньше, то swap раздел вам просто необходим. Если памяти у вас много больше, то его все равно рекомендуется создавать. Минимальный размер swap-раздела должен быть равен объему RAM, но не меньше 16 MB. Наибольший его размер 1 GB (столько поддерживает ядра серии 2.2). Вы можете создать и использовать более одного swap-раздела. Swap-раздел лучше располагать в начале диска. Физически начало диска находится на внешней части цилиндра, поэтому головка за один оборот охватывает большую поверхность.
Ниже приведен пример разбиения диска при помощи утилиты Disk Druid:
Add



Mount Point: /boot - ваш /boot каталог.

Size (Megs): 5

Partition Type: Linux Native

Ok

Add

Mount Point: /usr - ваш /usr каталог.

Size (Megs): 512

Partition Type: Linux Native

Ok

Add

Mount Point: /home - ваш /home каталог.

Size (Megs): 1146

Partition Type: Linux Native

Ok

Add

Mount Point: /chroot - ваш /chroot каталог.

Size (Megs): 256

Partition Type: Linux Native

Ok

Add

Mount Point: /cache - ваш /cache каталог.

Size (Megs): 256

Partition Type: Linux Native

Ok

Add

Mount Point: /var - ваш /var каталог.

Size (Megs): 256

Partition Type: Linux Native

Ok

Add

Mount Point: - ваш /Swap раздел ( не имеет точки монтирования на вашей файловой системе).

Size (Megs): 128

Partition Type: Linux Swap

Ok

Add

Mount Point: /tmp - ваш /tmp каталог.

Size (Megs): 256

Partition Type: Linux Native

Ok

Add

Mount Point: - ваш корневой каталог.

Size (Megs): 256

Partition Type: Linux Native

Ok

 
По окончании процедуры разбиения диска у вас должна получиться следующее:
 
Точка монтирования Устройство Объем требуемый Объем выделенный Тип файловой системы
/boot Sda1 5M 5M Linux Native
/usr Sda5 512M 512M Linux Native
/home Sda6 1146M 1146M Linux Native
/chroot Sda7 256M 256M Linux Native
/cache Sda8 256M 256M Linux Native
/var Sda9 256M 256M Linux Native
<Swap> Sda10 128M 128M Linux Swap
/tmp Sda11 256M 256M Linux Native
/ Sda12 256M 256M Linux Native


Drive  Geom [C/H/S]  Total (M)  Free (M)  Used (M)  Used (%) 
sda [3079/64/32] 3079M 1M 3078M 99%

Сейчас, когда вы разбили диск и определили точки монтирования для разделов, нажмите Next для продолжения. После того, как новые разделы созданы, вам будет предложено отформатировать их. Выберите раздел для инициализации, поставьте “галочку” напротив “проверить диски на плохие блоки” и нажмите Next. Раздел будет отформатирован и станет доступен для использования под Linux.
На следующем экране вам будет предложено выбрать конфигурацию LILO, где вы сможете выбрать куда вы ее хотите проинсталлировать.


В Master Boot Record (MBR)
В первый сектор загрузочного раздела.
Обычно, если Linux будет единственной ОС на вашей машине, то LILO устанавливают в MBR. После этого вам будет предложено настроить сеть и часы. Когда часы будут установлены, нужно выбрать пароль пользователя root и определить конфигурацию идентификации. Для нее не забудьте выбрать:
Включить MD5 пароли
Включить теневые пароли
Включать NIS не надо, так как мы не будем настраивать NIS сервис на нашем сервере.
Компоненты инсталляции (Выбор пакетов для инсталляции)
(All) После того, как вы разбили диск и отформатировали разделы наступает пора выбирать пакеты для инсталляции. По умолчанию, Linux является полнофункциональной системой с большим количеством запущенных сервисов. Большинство из них не нужны и могут нанести вред безопасности сервера. Идеально, когда каждый из сервисов работает на отдельной машине. Многие дистрибутивы Linux сконфигурированы по умолчанию на обслуживание широкого спектра сервисов, так что вам надо сконфигурировать сервер так, чтобы отключить ненужные службы. Предложение использовать важнейшие сервисы на отдельных компьютерах улучшает сетевую безопасность по следующим причинам:
нет других служб, которые можно использовать для атаки
различные сервисы могут обслуживать разные администраторы. Разнесение их по отдельным машинам сократит количество конфликтных ситуаций между администраторами.
Отдельная машина может быть лучше сконфигурирована для выполнения определенных задач. Разные сервисы требуют разное аппаратное обеспечение и программную конфигурацию.
При уменьшении количество сервисов уменьшается количество сообщений в лог файлах, которые следует исследовать на предмет нестандартных ситуаций.
Правильная инсталляция Linux – первый шаг к стабильной и безопасной системе. Сначала выберите какие компоненты системы вы хотите проинсталлировать, а затем войдите в каждый из компонентов, чтобы отметить какие пакеты надо устанавливать, а какие нет (Select individual packages). Так как мы инсталлируем сервер, мы не будем устанавливать графический интерфейс (Xfree86). Он на сервере не нужен, меньше процессов, меньше загрузка процессора, меньше загрузка памяти, меньше риск нарушить безопасность системы и т.д. Графический интерфейс обычно используется на рабочих станциях. Выберите следующие компоненты для инсталляции.


Networked Workstation
Network Management Workstation
Utilities
Теперь можете выбрать пакеты внутри каждого компонента.
Замечание: Выбрать эту опцию (Select individual packages) очень важно до продолжения процедуры инсталляции.
Выбор индивидуальных пакетов
Инсталляционная программа представит список доступных групп с пакетами, выберите необходимую группу для проверки. Пакеты перечисленные ниже должны быть удалены из соображений безопасности, оптимизации и ряда других причин.
(6.1)

Applications/File: git
Applications/Internet finger, ftp, fwhois, ncftp, rsh, rsync, talk, telnet
Applications/Publishing ghostscript, ghostscript-fonts, mpage, rhs- printfilters
Applications/System arpwatch, bind-utils, knfsd-clients, procinfo, rdate, rdist, screen, ucd-snmp-utils
Documentation indexhtml
System Environment/Base chkfontpath, yp-tools
System Environment/Daemons XFree86-xfs, lpr, pidentd, portmap, routed, rusers, rwho, tftp, ucd-snmp, ypbind
System Environment/Libraries XFree86-libs, libpng
User Interface/X XFree86-75dpi-fonts, urw-fonts

(6.2)

Applications/File: git
Applications/Internet finger, ftp, fwhois, ncftp, rsh, rsync, talk, telnet
Applications/Publishing ghostscript, ghostscript-fonts, groff-perl, pnm2ppa, mpage, rhs-printfilters
Applications/System arpwatch, bind-utils, rdate, rdist, screen, ucd-snmp-utils
Documentation indexhtml
System Environment/Base chkfontpath, yp-tools
System Environment/Daemons XFree86-xfs, lpr, pidentd, portmap, routed, rusers, rwho, tftp, ucd-snmp, ypbind, finger-server, nfs-utils, pidentd, portmap, rsh- server, rusers-server, rwall-server, talk-server, telnet-server, tftp-server, ypserv
System Environment/Libraries XFree86-libs, libpng
User Interface/X urw-fonts

Далее мы приведем описание каждой программы которые мы хотим деинсталлировать. Кто-нибудь может спросить, почему мы удаляем finger, ftp, fwhois и telnet на сервере? Первое, это то, что все эти программы по своей сути небезопасны. Представьте, что хакер имеет доступ на ваш новый сервер, тогда он сможет использовать finger, ftp, fwhois и telnet для доступа к другим компьютерам в вашей сети. Если этих программ нет на сервере, то ему придется использовать их в другом месте или попытаться проинсталлировать их у вас, а это легко можно отследить, например, при помощи Tripwire. Хотя такие сервисы как telnet, finger, talk, rsh, rusers, rwall и tftp в Red Hat 6.2 разделены на серверные и клиентские пакеты, мы все равно рекомендуем деинсталлировать их из соображений повышения безопасности.

Безопасность BIOS, установка пароля на загрузку.


Отмените возможность загрузки компьютера с дискеты, установите пароль на доступа к настройкам BIOS. Запрет загрузки с дискет не позволит злоумышленникам загрузить компьютер с дискеты и получить доступ к системе, а установка пароля на доступ к BIOS не позволит включить загрузку с дискеты.



Биты программ подчиненных пользователю root.


Все программы и файлы в вашем компьютере с символом “s” в поле режима доступа имеют включенным бит SUID (-rwsr-xr-x) или SGID (-r-xr-sr-x). Так как эти программы дают особые привилегии пользователям которые их выполняют, то важно удалить бит “s” с программ владельцем которых является root и которым не нужны подобные возможности. Это осуществляется выполнением команды 'chmod a-s' с именем файла(ов) в качестве аргумента.

К таким программам относятся:

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

Программы, которые должен запускать только root.

Программы используемые редко и которые могут использоваться через механизм su root

Мы поместили знак * рядом с программами для которых , бит s должен быть снят. Помните, что для корректной работы системы необходимы некоторые suid-ные программы.

Для нахождения всех файлов имеющих бит “s” и владельцами которых является root используйте команду:
[root@deep]# find / -type f \( -perm -04000 -o -perm -02000 \) \-exec ls –lg {} \;

*-rwsr-xr-x 1 root root 35168 Sep 22 23:35 /usr/bin/chage *-rwsr-xr-x 1 root root 36756 Sep 22 23:35 /usr/bin/gpasswd *-r-xr-sr-x 1 root tty 6788 Sep 6 18:17 /usr/bin/wall -rwsr-xr-x 1 root root 33152 Aug 16 16:35 /usr/bin/at -rwxr-sr-x 1 root man 34656 Sep 13 20:26 /usr/bin/man -r-s--x--x 1 root root 22312 Sep 25 11:52 /usr/bin/passwd -rws--x--x 2 root root 518140 Aug 30 23:12 /usr/bin/suidperl -rws--x--x 2 root root 518140 Aug 30 23:12 /usr/bin/sperl5.00503 -rwxr-sr-x 1 root slocate 24744 Sep 20 10:29 /usr/bin/slocate *-rws--x--x 1 root root 14024 Sep 9 01:01 /usr/bin/chfn *-rws--x--x 1 root root 13768 Sep 9 01:01 /usr/bin/chsh *-rws--x--x 1 root root 5576 Sep 9 01:01 /usr/bin/newgrp *-rwxr-sr-x 1 root tty 8328 Sep 9 01:01 /usr/bin/write -rwsr-xr-x 1 root root 21816 Sep 10 16:03 /usr/bin/crontab *-rwsr-xr-x 1 root root 5896 Nov 23 21:59 /usr/sbin/usernetctl *-rwsr-xr-x 1 root bin 16488 Jul 2 10:21 /usr/sbin/traceroute -rwxr-sr-x 1 root utmp 6096 Sep 13 20:11 /usr/sbin/utempter -rwsr-xr-x 1 root root 14124 Aug 17 22:31 /bin/su *-rwsr-xr-x 1 root root 53620 Sep 13 20:26 /bin/mount *-rwsr-xr-x 1 root root 26700 Sep 13 20:26 /bin/umount *-rwsr-xr-x 1 root root 18228 Sep 10 16:04 /bin/ping *-rwxr-sr-x 1 root root 3860 Nov 23 21:59 /sbin/netreport -r-sr-xr-x 1 root root 26309 Oct 11 20:48 /sbin/pwdb_chkpwd

Для отключения бита “s” введите следующие команды:
[root@deep]# chmod a-s /usr/bin/chage


[root@deep]# chmod a-s /usr/bin/gpasswd


[root@deep]# chmod a-s /usr/bin/wall


[root@deep]# chmod a-s /usr/bin/chfn


[root@deep]# chmod a-s /usr/bin/chsh


[root@deep]# chmod a-s /usr/bin/newgrp


[root@deep]# chmod a-s /usr/bin/write


[root@deep]# chmod a-s /usr/sbin/usernetctl


[root@deep]# chmod a-s /usr/sbin/traceroute


[root@deep]# chmod a-s /bin/mount


[root@deep]# chmod a-s /bin/umount


[root@deep]# chmod a-s /bin/ping


[root@deep]# chmod a-s /sbin/netreport

Если вы хотите узнать, что делает каждая из программ используйте руководство man. Например,
[root@deep]# man netreport



Бюджет пользователя root.


Бюджет “root” является самым привилегированным на UNIX системах. На него нельзя наложить никакие ограничения по безопасности. Это значит, что система считает, что вы знаете что делаете и никаких вопросов задавать не будет. Поэтому очень легко, ошибшись в команде, уничтожить важную системную информацию. При использовании этой учетной записи надо быть максимально осторожным. Из соображений безопасности никогда не подключайтесь к системе как пользователь root, если только вы абсолютно не уверены в том, что делаете.



Блокирование выполнения команды su root от других пользователей.


Если вы не хотите, чтобы кто-нибудь выполнял команду su root или хотите ограничить пользователей которые могут пользоваться этой командой, то добавьте следующие две строки в начало файла конфигурации su, расположенного в каталоге “/etc/pam.d/”. Я настоятельно рекомендую ограничить пользователей, которые могут выполнять команду su.

Шаг 1.

Редактируйте файл su (vi /etc/pam.d/su) и добавьте в него две строки:
auth sufficient /lib/security/pam_rootok.so debug


auth required /lib/security/pam_wheel.so group=wheel

После добавления этих строк ваш файл “/etc/pam.d/su” должен выглядеть так: #%PAM-1.0 auth sufficient       /lib/security/pam_rootok.so   debug auth          required        /lib/security/pam_wheel.so    group=wheel auth           required         /lib/security/pam_pwdb.so       shadow nullok account      required        /lib/security/pam_pwdb.so password   required        /lib/security/pam_cracklib.so password   required        /lib/security/pam_pwdb.so        shadow  use_authtok nullok session       required        /lib/security/pam_pwdb.so session       optional        /lib/security/pam_xauth.so

Который говорит, что только члены группы wheel могут использовать команду su root и все действия будут регистрироваться. Заметим, что группа wheel является специальным бюджетом, который используется для этой цели. Подобное ограничение пользователей способных выполнять команду su root совместно с ограничением терминалов с которых root может входить в систему существенно увеличит безопасность сервера.

Шаг 2.

После того как вы изменили файл “/etc/pam.d/su” самое время определит пользователей, которые могут выполнять su root. Например, если вы хотите чтобы admin был членом группы wheel введите следующую команду:
[root@deep]# usermod -G10 admin

где опцией G определяется список цифровых значений групп в которые входит пользователь admin. В данном случае группе wheel соответствует 10. Используйте приведенную выше команду для всех пользователей, которым будет разрешено переходить к root.

Замечание. Если вы не можете выполнить команду su в терминале GNOME, то это потому, что вы используете неправильный терминал.



Больший контроль над монтируемыми файловыми системами.


Вы можете получить больший контроль над смонтированными файловыми системами (например, “/home” и “/tmp”) используя опции noexec, nodev и nosuid. Они могут быть определены в файле “/etc/fstab”, который содержит описания каждой монтируемой файловой системой. Для получения большей информации об этих опциях читайте man страницу о mount (8).

Опции, связанные с безопасностью, используемы в /etc/fstab:
Defaults – позволяет все (quota, read-write и suid) на этом разделе;
Noquota – не использовать квот пользователей на этом разделе;
nosuid – не использовать SUID/SGID доступ на этом разделе
nodev – нет символьный и специальных устройств на этом разделе
noexec – нет исполняемых программ на этом разделе.
quota – пользовательские квоты действуют на этом разделе.
ro - позволять доступ только для чтения к этому разделу.
rw – позволять доступ на чтение/запись к этому разделу.
suid – позволять SUID/SGID доступ на этом разделе.

Редактируйте файл fstab (vi /etc/fstab) и измените то, что вам нужно: /dev/sda11 /tmp ext2 defaults 1 2 /dev/sda6 /home ext2 defaults 1 2

должны читаться: /dev/sda11 /tmp ext2 defaults,nosuid,nodev,noexec 1 2 /dev/sda6 /home ext2 defaults,nosuid,nodev 1 2

<nodev> - не интерпретировать символьные и блочный специальные устройства на файловой системе, <nosuid> - не позволять работать биту смены идентификатора пользователя и идентификатора группы, <noexec> - не позволять выполнять любые двоичные файлы на файловой системе.

Замечание: для нашего примера, устройство “/dev/sda11” представляется как “/tmp” и “dev/sda6” как “/home” на нашей системе. Конечно, у вас это будет выглядеть по-другому, в зависимости от того как разбит диск и диски какого типа вы используете (IDE – hda, hdb, hdc и т.д или SCSI – sda, sdb, sdc и т.д.).



Часть II Безопасность и оптимизация


В этой части


Общая системная безопасность


Общая системная оптимизация


Конфигурирование и создание оптимизированных, безопасных ядер



Длина пароля.


Минимально допустимая длина пароля задаваемая по умолчанию в Linux – 5 символов. Это значит, что когда новому пользователю разрешается доступ на сервер, то длина строки представляющей собой пароль должна быть минимум 5 букв, цифр или специальных знаков. Кроме того она должна быть не больше 8 символов. Чтобы нерадивые пользователи не использовали пароли длиной 5 символов можно увеличить его минимальный размер до 8, отредактировав файл “/etc/login.defs”.

Редактируйте файл login.defs (vi /etc/login.defs) изменив строку

PASS_MIN_LEN 5


в
PASS_MIN_LEN 8

Этот файл является конфигурационным для программы login. Здесь вы можете изменить и другие параметры, чтобы они соответствовали вашей стратегии защиты (время действия пароля, длина пароля и др.).



Файл “/etc/exports”.


Если вы экспортируете свои файловые системы с использованием NFS, то необходимо сконфигурировать файл “/etc/exports” с максимально возможными ограничениями. В нем не следует использовать групповые символы (?, *), нельзя позволять доступ для записи пользователю root и следует монтировать “только для чтения” все, что только возможно.

Отредактируйте файл /etc/exports, добавив в него:
/dir/to/export host1.mydomain.com (ro,root_squash)


/dir/to/export host2.mydomain.com (ro,root_squash)

Где dir/to/export – каталог для экспортирования, host1.mydomain.com – имя машины с которой разрешается доступ, <ro> - монтирование “только для чтения”, <root_squash> - не позволять пользователю root доступа с правом на запись.

Чтобы изменения вступили в дейтсвие вам необходимо выполнить команду
/usr/sbin/exportfs –a

Замечание. Использование NFS сервера увеличивает риск нарушения безопасности вашей системы. Лучше его не использовать.



Файл “/etc/host.conf”.


Linux использует библиотеку resolver для преобразования IP адресов в имена машин. Файл “/etc/host.conf” определяет порядок работы этой библиотеки. Он говорит какой сервис и в каком порядке использовать для преобразования адресов.

Редактируйте файл host.conf (vi /etc/host.conf) и добавьте следующие строки:
# Вначале использовать lookup черз DNS, а затем файл/etc/hosts.


order bind,hosts


# Мы имеем компьютеры с несколькими IP адресами.


multi on


# Осуществлять проверку подмены IP адресов.


nospoof on

Опция order определяет порядок использования сервисов. Для улучшения производительности и повышения безопасности рекомендуется настроить библиотеку определителей так, чтобы вначале использовался DNS, а затем файл “/etc/hosts”. Конечно, DNS должен быть предварительно настроен.

Опция multi говорит, что компьютеры, описанные в файле /etc/hosts, могут иметь несколько IP адресов (несколько интерфейсов ethN). Например, шлюз всегда имеет несколько адресов и у них эта опция должна быть всегда определена в ON.

Опция nospoof не разрешать подмену адресов. IP-Spoofing – это способ атаки при котором удаленный компьютер представляется кем-то, кем он не является. При этом виде нападения удаленный компьютер представляется как законный сервер, а затем использует установленные соединения для взаимодействия с другими компонентами сети. Эта опция должна быть установлена в ON на всех типах серверов.



Файл “/etc/inetd.conf”.


Inetd называется “супер сервером”, который запускает другие демоны по запросам из сети. Inetd.conf говорит inetd какие порты слушать и какие сервисы запускать для каждого порта. Как только вы подключаете вашу систему к сети, подумайте какие сервисы вам нужны.

Ненужные сервисы надо отключить, а лучше деинсталлировать, чтобы у вас стало меньше головной боли, а у атакующего меньше шансов найти лазейку в вашу систему. Просмотрите файл /etc/inetd.conf и вы увидите, какие сервисы он предлагает. Закомментируйте строки (# в начале строки) с ненужными сервисами, а затем пошлите процессу inetd сигнал SIGHUP.

Шаг 1.

Измените права доступа к файлу на 600:
[root@deep]# chmod 600 /etc/inetd.conf

Шаг 2.

Удостоверьтесь, что владельцем файла является root
[root@deep]# stat /etc/inetd.conf


File: "/etc/inetd.conf"


Size: 2869 Filetype: Regular File


Mode: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)


Device: 8,6 Inode: 18219 Links: 1


Access: Wed Sep 22 16:24:16 1999(00000.00:10:44)


Modify: Mon Sep 20 10:22:44 1999(00002.06:12:16)


Change: Mon Sep 20 10:22:44 1999(00002.06:12:16)

Шаг 3.

Редактируйте файл inetd.conf (vi /etc/inetd.conf) и отключите следующие сервисы: ftp, telnet, shell, login, exec, talk, ntalk, imap, pop-2, pop-3, finger, auth и т.д. пока вы не планируете их использовать. Чем меньше сервисов включено, тем меньше риск для системы. # Чтобы изменения вошли в силу дайте команду 'killall -HUP inetd' # #echo    stream       tcp        nowait      root          internal #echo    dgram       udp       wait          root           internal #discard stream      tcp        nowait      root           internal #discard dgram      udp       wait          root           internal #daytime stream     tcp       nowait      root           internal #daytime dgram     udp       wait         root           internal #chargen stream     tcp        nowait     root           internal #chargen dgram     udp       wait         root            internal #time      stream      tcp        nowait     root           internal #time      dgram      udp       wait         root           internal # # Это стандартные сервисы # #ftp      stream        tcp        nowait        root        /usr/sbin/tcpd in.ftpd -l -a #telnet stream        tcp        nowait        root        /usr/sbin/tcpd in.telnetd # # Shell, login, exec, comsat и talk являются протоколами BSD. # #shell      stream      tcp      nowait       root       /usr/sbin/tcpd in.rshd #login     stream      tcp      nowait       root       /usr/sbin/tcpd in.rlogind #exec      stream       tcp       nowait        root       /usr/sbin/tcpd in.rexecd #comsat dgram        udp       wait           root        /usr/sbin/tcpd in.comsat #talk      dgram       udp      wait          root        /usr/sbin/tcpd in.talkd #ntalk    dgram       udp      wait          root        /usr/sbin/tcpd in.ntalkd #dtalk     stream       tcp        wait           nobody    /usr/sbin/tcpd in.dtalkd # # Почтовые Pop и imap сервисы # #pop-2    stream      tcp        nowait      root       /usr/sbin/tcpd ipop2d #pop-3    stream      tcp        nowait      root       /usr/sbin/tcpd ipop3d #imap      stream     tcp        nowait       root       /usr/sbin/tcpd imapd # #  Internet UUCP сервис. # #uucp     stream     tcp     nowait       uucp        /usr/sbin/tcpd /usr/lib/uucp/uucico -l # # Сервис Tftp предоставляется в первую очередь для удаленной загрузки. # В большинстве случаев, он используется только на "серверах загрузки” # Не удаляйте символы комментариев, если вы не уверены, что это вам нужно. # #tftp      dgram      udp       wait       root          /usr/sbin/tcpd in.tftpd #bootps dgram      udp       wait       root          /usr/sbin/tcpd bootpd # # Finger, systat и netstat дают информацию внешним пользователям, которая # может быть использована для взлома системы. На многих серверах # некоторые или все из них отключены с целью улучшения безопасности. # #finger   stream      tcp      nowait      root         /usr/sbin/tcpd in.fingerd #cfinger  stream       tcp       nowait      root          /usr/sbin/tcpd in.cfingerd #systat    stream       tcp       nowait      guest        /usr/sbin/tcpd /bin/ps -auwwx #netstat   stream       tcp       nowait      guest        /usr/sbin/tcpd /bin/netstat -f inet # # Аутентификация # #auth    stream    tcp    nowait    nobody     /usr/sbin/in.identd in.identd -l -e -o # # Конец inetd.conf

Замечание. Не забудьте послать сигнал SIGHUP процессу inetd (killall -HUP inetd) после редактирования файла /etc/inetd.conf.
[root@deep /root]# killall -HUP inetd

Шаг 4.

Для большего улучшения безопасности, вы можете сделать файл “inetd.conf” неизменным, используя команду chattr:
[root@deep]# chattr +i /etc/inetd.conf

Файл с атрибутом “i” не может быть модифицирован, его нельзя удалить или переименовать, к нему нельзя создать ссылки и никакие данные не могут быть дописаны в файл. Только суперпользователь может установить или снять этот атрибут. Если вы захотите модифицировать файл “inetd.conf”, то дайте следующую команду:
[root@deep]# chattr -i /etc/inetd.conf



Файл “/etc/lilo.conf”.


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

LILO очень важен для Linux и поэтому мы должны защитить его как можно лучше. Наиболее важным конфигурационным файлом является “/etc/lilo.conf”. С его помощью вы можете настраивать и улучшать безопасность LILO и всей системы. Следующие три опции чрезвычайно важны для улучшения безопасности.

Добавьте: timeout=00


Эта опция контролирует как долго (в десятых долях секунды) LILO ждет ввода информации от пользователя перед тем как продолжит загрузку “по умолчанию”. Одним из требований уровня безопасности C2 является возможность установки интервала равного 0. Установите эту опцию в 0, если у вас нет необходимости в различных вариантах загрузки.

Добавьте: restricted


Эта опция ослабляет парольную защиту, так как она требует введение пароля только если были определены параметры загрузки (например, linux single). Она может использоваться только совместно с опцией “password”. Убедитесь, что вы используете эту опцию с каждым образом.

Добавьте: password=<password>


Это опция требует запроса пароля у пользователя если он загружает linux в однопользовательском режиме. Пароль является зависимым от регистра. Обязательно проверьте, чтобы файл “/etc/lilo.conf” мог читать только пользователь root.

Ниже приведена процедура защиты LILO

Шаг 1.

Измените файл “/etc/lilo.conf”
boot=/dev/sda


map=/boot/map


install=/boot/boot.b


prompt


timeout=00


Default=linux


restricted


password=<password> определите свой пароль


image=/boot/vmlinuz-2.2.12-20


label=linux


initrd=/boot/initrd-2.2.12-10.img


root=/dev/sda6


read-only

Шаг 2.

Сделайте этот файл доступным для чтения только пользователем root (в файле хранится пароль в незашифрованном виде).
[root@deep]# chmod 600 /etc/lilo.conf

Шаг 3.

Выполните следующую команду, чтобы все изменения вошли в силу:
[root@deep]# /sbin/lilo –v

Шаг 4.

Защитите файл от изменения и удаления установив на него атрибут “не изменчивости”
[root@deep]# chattr +i /etc/lilo.conf

Теперь, чтобы внести в “/etc/lilo.conf” какие-нибудь изменения, этот атрибут надо снять:
[root@deep]# chattr -i /etc/lilo.conf



Файл “/etc/rc.d/rc.local”.


По умолчанию, когда вы подключаетесь к Linux системе, вам выдается сообщение об имени дистрибутива, его версии, версии ядра и имени сервера. Это совершенно не нужно, так как дает много информации злоумышленнику. Вы должны оставить только запрос “Login:”.

Шаг 1.

Чтобы сделать это, закомментируйте следующие строки в файле "/etc/rc.d/rc.local": # Эти строки будут заменять содержимое файла /etc/issue при каждой  # перезагрузке. #echo "" > /etc/issue #echo "$R" >> /etc/issue #echo "Kernel $(uname -r) on $a $(uname -m)" >> /etc/issue # #cp -f /etc/issue /etc/issue.net #echo >> /etc/issue

Шаг 2.

Удалите файлы “issue.net” и “issue” в каталоге “/etc”:
[root@deep]# rm -f /etc/issue


[root@deep]# rm -f /etc/issue.net

Замечание. Файл /etc/issue.net содержит информации, которая выдается всякий раз когда осуществляется сетевое подключение к серверу (например, через telnet или ssh). Он может быть найден в каталоге /etc, также как и файл issue, содержащий аналогичную информацию для локальных пользователей. Это простые текстовые файлы и вы можете их легко настраивать под свои нужды, но при этом необходимо изменить скрипт “/etc/rc.d/rc.local”, так как он при каждой перезагрузке пересоздает эти файлы.



Файл “/etc/securetty”.


Файл “/etc/securetty” позволяет вам определить с каких TTY устройств может входить в систему пользователь root. Этот файл читается программой login (“/bin/login”). Он имеет очень простой формат. В каждой строке перечислены имена tty устройств с которых root может входить в систему, а с остальных доступ ему будет запрещен.

Отключите любые tty, которые вам не нужны, закомментировав их (знак # в начале строки).
tty1


#tty2


#tty3


#tty4


#tty5


#tty6


#tty7


#tty8

В результате root сможет входить в систему только с терминала tty1. С остальных терминалов вы сможете переключаться на root используя команду su.



Файлы не имеющие владельцев.


Наличие файлов не имеющих владельцев может указывать на вторжение в систему. Никогда не принимайте подобные файлы. Если вы нашли файлы и каталоги не имеющие владельцев на вашей системе, то внимательно проверьте их и если с ними все в порядке – определите владельца. Иногда, вы можете деинсталлировать некоторые программы и в результате останутся файлы и каталоги без владельца, в этом случае спокойно удалите их.

Для поиска файлов и каталогов не имеющих владельца используйте команду:
[root@deep]# find / -nouser -o –nogroup

Замечание. Файлы найденные в каталоге /dev не считаются неправильными.



Фиксирование пакетов с поддельными


Эта защита будет фиксировать все пакеты с поддельными адресами (spoof), пакеты с маршрутизацией от источника, Redirect пакеты в ваших лог файлах.

Под Red Hat 6.1


[root@deep /]# for f in /proc/sys/net/ipv4/conf/*/log_martians; do


> echo 1 > $f


> done


[root@deep /]#

Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.

Под Red Hat 6.2

Редактируйте файл “/etc/sysctl.conf” и добавьте следующую строку:
# Log Spoofed Packets, Source Routed Packets, Redirect Packets


net.ipv4.conf.all.log_martians = 1

Вы должны перезагрузить ваши сетевые устройства, чтобы изменения вступили в силу.
[root@deep /]# /etc/rc.d/init.d/network restart

Setting network parameters [ OK ] Bringing up interface lo        [ OK ] Bringing up interface eth0      [ OK ] Bringing up interface eth1      [ OK ]



Физические твердые копии всех важных файлов регистрации


Один из важнейших аспектов защиты – это целостность лог файлов, расположенных в /var/log. Если взломщик преодолел все ваши оборонительные редуты, то вся ваша надежда остается на них. Поэтому очень важно продумать методы, которые позволят вам контролировать целостность лог файлов. Если на вашем сервере установлен сервер печати или подобный сервер есть в сети, то можно создавать твердые копии всех, на ваш взгляд, важных логов. Это легко осуществить имея принтер с непрерывной подачей бумаги и пере направляя все сообщения syslog в /dev/lp0. Взломщик может изменить на сервере любые файлы, программы, но он ничего не сможет поделать с бумагой.

Пример:

Регистрация всех telnet, почтовых, ssh соединений и загрузочных сообщений с вашего сервера на принтере подключенном к нему.

Редактируйте файл syslog.conf (vi /etc/syslog.conf) и добавьте в его конец следующую строку:
authpriv.*;mail.*;local7.*;auth.*;daemon.info /dev/lp0

И перезагрузите syslogd демон, чтобы изменения вступили в силу:
[root@deep]# /etc/rc.d/init.d/syslog restart

Пример:

Регистрация всех telnet, почтовых, ssh соединений и загрузочных сообщений с вашего сервера на принтере удаленного сервера, находящегося в вашей сети.

Если вы не имеете принтера в вашей сети, то можно перенаправлять все syslogd- сообщения на удаленный сервер. Для этого, во-первых, добавьте в файл syslogd.conf вышеприведеднную строку, только замените в ней /dev/lp0 на имя или адрес удаленного сервера. Во-вторых, запустите на удаленном сервере демон syslogd с опцией –r. Используя этот метод вы легко можете собирать все логи на одной машине, что существенно облегчает администрированием. Редктируйте файл syslog.conf (vi /etc/syslog.conf) на удаленном сервере (например, mail.openarch.com) и добавьте в его конец следующую строку:
authpriv.*;mail.*;local7.*;auth.*;daemon.info /dev/lp0

По умолчанию, syslogd демон не принимает сообщения от удаленных компьютеров. Для включения этого добавьте опцию –r при запуске syslogd:

Вместо
daemon syslogd -m 0


Используйте:
daemon syslogd -r -m 0

Перезапустите syslogd демон, чтобы изменения вступили в силу:
[root@mail]# /etc/rc.d/init.d/syslog restart

Если на удаленном сервере настроен брандмауэр, то необходимо добавить в него следующее правило: ipchains -A input -i $EXTERNAL_INTERFACE -p udp \ -s $SYSLOG_CLIENT \ -d $IPADDR 514 -j ACCEPT

где,
EXTERNAL_INTERFACE="eth0" в файле настроек firewall-а.
IPADDR="208.164.186.2" в файле настроек firewall-а.
SYSLOG_CLIENT=”208.164.168.0/24" в файле настроек firewall-а.

Сейчас перезагрузите firewall на удаленном сервере, чтобы сделанные изменения вступили в силу.

Это правило разрешает удаленному серверу принимать сообщения от клиента на порт 514 (порт сервиса syslog). Для получения большей информации о firewall-е читайте главу 7 .

В заключение, редактируйте файл /etc/syslog.conf вашего локального сервера, добавив в его конец следующую строку:
authpriv.*;mail.*;local7.*;auth.*;daemon.info @mail

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

Перезагрузите syslog демон, чтобы изменения вступили в силу:
[root@deep]# /etc/rc.d/init.d/syslog restart

Так же ка и на удаленном сервере, вам надо добавить новое правило для fireall-а и на локальной машине: ipchains -A output -i $EXTERNAL_INTERFACE -p udp \ -s $IPADDR 514 \ -d $SYSLOG_SERVER 514 -j ACCEPT

где
EXTERNAL_INTERFACE="eth0" в файле настроек firewall-а.
Where IPADDR="208.164.186.1" в файле настроек firewall-а.
Where SYSLOG_SERVER="mail.openarch.com" в файле настроек firewall-а.

Перезагрузите брандмауэр, чтобы изменения вступили в силу:
[root@deep]# /etc/rc.d/init.d/firewall restart

Это правило разрешает прохождение исходящих пакетов к удаленному серверу на порт 514 (порт syslog сервиса).

Для получения большей информации о firewall-е читайте главу 7 .

Замечание: никогда не используйте в качестве syslog сервера маршрутизирующие сервера. При использование sysklogd программы существует множество опций. Для получения более подробной информации читайте man-ы к sysklogd (8), syslog(2 и syslog.conf(5).

Установка прав доступа к скриптам запуска сервисов, расположенных в каталоге “/etc/rc.d/init.d”.

Установите права доступа к скриптам, которые отвечают за запуск и остановку сервисов:
[root@deep]# chmod -R 700 /etc/rc.d/init.d/*

Только пользователю root позволено читать, записывать и запускать эти скрипты. Я не думаю, что обычным пользователям необходимо знать об их содержании.

Замечание. Если вы устанавливаете новую программу или обновляете существующую, которая использует инициализационные скрипты System V, расположенные в /etc/rc.d/init.d/, то не забудьте проверить и при необходимости изменить права доступа к ним.


Настройка shell.


Чтобы сделать легким повторный ввод длинных команд, bash shell может запоминать до 500 команд в файле “~/.bash_history” (где “~/” – ваш домашний каталог). Каждый пользователь, который имеет shell-доступ в систему, имеет такой .bash_history файл в своем домашнем каталоге. Уменьшая количество команд запоминаемых в этом файле, вы защищаете систему. Когда пользователь случайно ввел в командной строке свой пароль, то он еще долгое время будет хранится в файле “.bash_history”.

Строки HISTFILESIZE и HISTSIZE в файле “/etc/profile” определяют количество старых команд запоминаемых в .bash_history. Для всех бюджетов пользователей я рекомендую выбрать значения этих переменных поменьше, например 20.

Редактируйте файл profile (vi /etc/profile) и измените следующие строки:
HISTFILESIZE=20


HISTSIZE=20

В данном случае определено, что будет запоминаться не более 20 старых команд. Теперь, если хакер будет искать пароль в файле “.bash_profile”, то шансы там его обнаружить сократятся.

Шаг 2.

Администратор должен добавить в файл “/etc/skel/.bash_logout” строку “rm -f $HOME/.bash_history”. В результате, каждый раз когда пользователь выходит из системы, его файл .bash_history будет удаляться. Поэтому хакер не сможет получить к нему доступ, когда пользователь не подключен к серверу. Редактируйте файл .bash_logout (vi /etc/skel/.bash_logout) и добавьте следующую строку:
rm -f $HOME/.bash_history

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



Не позволяйте системе выводить файл issue.


Если вы не хотите, чтобы файл issue выводился на экран, когда удаленный пользователь подключается к серверу, измените опцию telnetd в файле /etc/inetd.conf:
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd –h

Флаг “-h” говорит демону не выводить любую системную информацию, ограничиться только запросом “login:”. Эту возможность необходимо использовать только, когда на сервере запускается демон telnet (вместо него я рекомендую использовать ssh).



Обзор


UNIX системы настолько безопасны, насколько безопасными их сделает администратор. Чем больше сервисов у вас установлено, тем больше шансов, что в них будет найдена “дыра”. Когда вы инсталлируете Linux, вы должны устанавливать минимум пакетов, а затем добавлять только необходимые элементы, уменьшая шансы установить приложение с ошибкой, нарушающей его безопасность. В этой главе мы обсудим общие принципы обеспечения безопасности сервера. Также здесь мы опишем ряд возможностей, которые можно использовать для предотвращения вторжения как снаружи, так и из внутри.



Ограничение ресурсов.


Файл limits.conf, находящийся в каталоге /etc/securitty, может быть использован для ограничения ресурсов потребляемых пользователями вашей системы. Ограничьте ресурсы всем пользователям, чтобы они не смогли осуществить DoS атаки (кол-во процессов, объем памяти и т.д.). Эти ограничения будут накладываться на пользователей как только они будут входить в систему. Для примера, ограничьте пользователей так, как это описано здесь.

Шаг 1.

Редактируйте файл limits.conf file (vi /etc/security/limits.conf) и добавьте в него следующие строки: *       hard        core           0 *       hard        rss             5000 *       hard        nproc         20

Он говорит, что необходимо запретить создание core файлов (core 0); ограничить число процессов не более 20 (nproc 20) и объем используемой памяти не более 5М (rss 5000) для всех пользователей, кроме root. Все вышесказанное относится только к пользователям, которые могут подключаться к системе через login. Символ “*” означает всех пользователей имеющих доступ на данный сервер.

Шаг 2.

Вы должны редактировать файл “/etc/pam.d/login” и добавить в его конец следующие строки:
session required /lib/security/pam_limits.so

После этого файл должен выглядеть так: #%PAM-1.0 auth required /lib/security/pam_securetty.so auth required /lib/security/pam_pwdb.so shadow nullok auth required /lib/security/pam_nologin.so account required /lib/security/pam_pwdb.so password required /lib/security/pam_cracklib.so password required /lib/security/pam_pwdb.so nullok use_authtok md5 shadow session required /lib/security/pam_pwdb.so session required /lib/security/pam_limits.so #session optional /lib/security/pam_console.so



Отключение доступа к консольным программам.


Одной из самых простых и необходимых настроек является блокирование консольно-эквивалентного доступа к программам halt и shutdown. Чтобы это сделать выполните:
[root@deep]# rm -f /etc/security/console.apps/servicename

где servicename имя программы к которой вы хотите запретить консольно- эквивалентный доступ. Если вы не используете xdm, будьте внимательны, не удалите файл xserver, иначе никто кроме пользователя root, не сможет запустить X сервер (если вы всегда используете xdm для запуска X сервера, и только пользователь root должен запускать X сервер, то тогда можно подумать об удалении файла xserver).

Пример:
[root@deep]# rm -f /etc/security/console.apps/halt


[root@deep]# rm -f /etc/security/console.apps/poweroff


[root@deep]# rm -f /etc/security/console.apps/reboot


[root@deep]# rm -f /etc/security/console.apps/shutdown


[root@deep]# rm -f /etc/security/console.apps/xserver (если удалите, то только root сможет запустить X).

В результате будет запрещен консольно-эквивалентный доступ к программам halt, shutdown, reboot и poweroff. Программа xserver используется если у вас установлен X Window.

Замечание. Если вы инсталлировали систему как описано в этой книге, то X Window у вас не установлен и файлы описанные выше в каталоге /etc/security не появятся, поэтому вы этот шаг можете пропустить.



Отключение всего консольного доступа.


Чтобы блокировать весь консольный доступ, включая программу и файл доступа, в каталоге /etc/pam.d/, закомментируйте все строки, в которых вызывается pam_console.so. Этот шаг является продолжением предыдущего. Нижеприведенный скрипт сделает это автоматически за вас. Создайте файл disabling.sh (touch disabling.sh) и внесите в него следующие строки:
# !/bin/sh


cd /etc/pam.d


for i in * ; do


sed '/[^#].*pam_console.so/s/^/#/' < $i > foo && mv foo $i


done

И сделайте его испольняемым:
[root@deep]# chmod 700 disabling.sh


[root@deep]# ./disabling.sh

Он будет комментировать все строки ссылающиеся на pam_console.so во всех файлах в каталоге /etc/pam.d. После того, как скрипт выполнит свою работу, удалите его из системы.



Параметры настраиваемые в ядре.


В новой версии Red Hat 6.2 все параметры ядра доступные через “/proc/sys” могут быть настроены при запуске. Вы можете использовать для этого новый файл “/etc/sysctl.conf”. Он читается и загружается каждый раз при загрузке системы. Все изменения в /proc/sys должны осуществляться через “/etc/sysctl.conf”, так как он загружается раньше rc.local и других пользовательских скриптов. Ниже мы опишем все опции связанные с сетевой безопасностью, которые вы должны настроить для вашего сервера Red Hat 6.1 и Red Hat 6.2.



Перемещение программы RPM и изменение прав доступа к ней.


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

Переместите RPM на флоппи-диск.
[root@deep]# mount /dev/fd0 /mnt/floppy/


[root@deep]# mv /bin/rpm /mnt/floppy/


[root@deep]# umount /mnt/floppy

Замечание. Никогда не деинсталлируйте RPM полностью.

Также можно изменить права доступа к RPM c 755 до 700. В этом случае никто кроме пользователя root не сможет использовать эту программу.

Измените права доступа к файлу “/bin/rpm”:
[root@deep]# chmod 700 /bin/rpm



Поиск программ и каталогов, в которые разрешена запись для группы и всех остальных пользователей.


Некоторые системные файлы могут предстать как дыра в безопасности, если хакер получит доступ к системе и сможет модифицировать их. Кроме того, дополнительную опасность представляют каталоги полностью открытые для записи. В них нарушитель легко может записывать и удалять файлы. В нормальном состоянии системы существует несколько файлов открытых для записи, включая несколько в каталоге /dev.

Для нахождения файлов и каталогов полностью открытых для записи используйте следующие команды:
[root@deep]# find / -type f \( -perm -2 -o -perm -20 \) -exec ls -lg {} \;


[root@deep]# find / -type d \( -perm -2 -o -perm -20 \) -exec ls -ldg {} \;

Замечание. Для облегчения регулярного поиска и проверки подобных файлов и каталогов можно использовать специализированное программное обеспечение, например, Tripwire. Большую информацию об этом программном продукте можно прочитать в главе 12 ,



Поиск “.rhosts” файлов.


Файлы “.rhosts” являются частью постоянной работы системного администратора, так как этим файлам не должно найтись места на вашей системе. Помните, что нарушителю нужен только один небезопасный бюджет пользователя, чтобы в будущем получить доступ в вашу сеть. Вы можете найти файлы “.rhosts” используя команду:
[root@deep]# find /home -name .rhosts

Можно использовать задания cron, чтобы регулярно искать, проверять и удалять файлы $HOME/.rhosts. Не забудьте предупредить пользователей о подобной проверке.

Чтобы использовать cron для периодической проверке и отсылке отчетов через электронную почту о наличие всех .rhosts файлах сделайте следующее: Создайте от пользователя root скрипт find_rhosts_files в каталоге “/etc/cron.daily” (touch /etc/cron.daily/find_rhosts_files) и внесите в него следующие строки:
#!/bin/sh


/usr/bin/find /home -name .rhosts | (cat <<EOF


This is an automated report of possible existent “.rhosts” files on the server


deep.openarch.com, generated by the find utility command.


New detected “.rhosts” files under the “/home” directory include:


EOF


cat


) | /bin/mail -s "Content of .rhosts file audit report" root

Сделайте этот скрипт исполняемым и проверьте чтобы пользователем и группой владеющими этим файлом были root.
[root@deep]# chmod 755 /etc/cron.daily/find_rhosts_files


[root@deep]# chown 0.0 /etc/cron.daily/find_rhosts_files

Каждый день по почте пользователю root будут поступать письма с темой: “Content of .rhosts file audit report” и содержащие список найденных файлов .rhosts.



Поиск всех файлов с включенными битами SUID/SGID.


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

Любимым трюком взломщиков является exploit SUID "root" программ, чтобы в дальнейшем использовать их как скрытый вход в систему. Поэтому вам необходимо находить и внимательно следить за всеми SUID/SGID программами, чтобы вовремя заметить изменения внесенные кем-то в них. Используйте следующую команду для поиска всех SUID/SGID программ на сервере.
[root@deep]# find / -type f \( -perm -04000 -o -perm -02000 \) \-exec ls -lg {} \;

Замечание. Читайте в этой книге главу 10 “ Программное обеспечение обеспечения безопасности (Утилиты слежения)”, где приведена информация о программе sXid, которая поможет автоматизировать подобные задачи и будет высылать вам отчеты по электронной почте.



Политика безопасности.


Вы не сможете правильно реализовать безопасность системы пока не выясните, что вы хотите защищать и от кого. Для того, чтобы принимать решения относящиеся к защите вам нужно выработать политику безопасности, список того, что вы хотите разрешить и что хотите запретить. Политика также должна определять ваши ответные действия на нарушения безопасности. Приведенные ниже вопросы должны помочь вам в выработке стратегии:

Как вы определяете конфиденциальную и важную информацию?

Нужен ли удаленным пользователям доступ к вашей системе?

Находится ли на сервере конфиденциальная или важная информация?

Обеспечивают ли пароли или шифрование достаточную защиту?

Нужен ли вам доступ в Интернет?

Как много доступа вы хотите разрешить из Интернета?

Какие действия нужно предпринять в случае нарушения защиты?

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



Предохранение вашей системы от ответов на широковещательные запросы.


Так же как и ping запросы, необходимо отключить и широковещательные сообщения. Когда IP пакет отправляется на широковещательный адрес (например, 192.168.1.255) он принимается всеми машинами в сети. Затем все машины отвечают на него ICMP эхо ответом, в результате может возникнуть перегрузка в сети или полный выход из строя (DoS атака). Для получения большей информации читайте RFC 2644.

Под Red Hat 6.1


[root@deep /]# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.

Под Red Hat 6.2

Редактируйте файл “/etc/sysctl.conf” и добавьте следующую строку:
# Enable ignoring broadcasts request


net.ipv4.icmp_echo_ignore_broadcasts = 1

Вы должны перезагрузить ваши сетевые устройства, чтобы изменения вступили в силу.
[root@deep /]# /etc/rc.d/init.d/network restart

Setting network parameters      [ OK ] Bringing up interface lo        [ OK ] Bringing up interface eth0      [ OK ] Bringing up interface eth1      [ OK ]



Предохранение вашей системы от ответов на ping запросы.


Предохранение вашей системы от ответов на ping запросы существенно улучшит сетевую безопасность вашей системы, так как никто не сможет послать к вам ping и получить на него ответ. Протокол TCP/IP имеет ряд слабых мест, которые позволяют нападающим использовать в своих целях внешне благоприятные пакеты. Защита сервера от ping может уменьшить эту проблему.

Под Red Hat 6.1


[root@deep /]# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера. Невосприимчивость к ping спасет вас от многих хакеров, потому что они даже не узнают о вашем существовании. Для восстановления способности отвечать на ping введите следующую команду:
[root@deep /]# echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

Под Red Hat 6.2

Редактируйте файл “/etc/sysctl.conf” и добавьте следующую строку:
# Enable ignoring ping request


net.ipv4.icmp_echo_ignore_all = 1

Вы должны перезагрузить ваши сетевые устройства, чтобы изменения вступили в силу.
[root@deep /]# /etc/rc.d/init.d/network restart

Setting network parameters [ OK ] Bringing up interface lo        [ OK ]



Протоколы маршрутизации.


Маршрутизация и протоколы маршрутизации могут создавать ряд проблем. При IP маршрутизации от источника сообщений, информация о маршруте хранится в IP пакете и согласно RFC 1122 ответ должен возвращаться по тому же маршруту. Если нападающий сможет послать пакет в вашу сеть, то он сможет перехватывать ответы и заставлять думать ваш сервер, что обмен данными происходит с доверенным хостом. Я рекомендую блокировать IP маршрутизацию от источника, чтобы закрыть эту дыру.

Чтобы заблокировать IP маршрутизацию от источника введите следующую команду:

Под Red Hat 6.1


[root@deep /]# for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do


> echo 0 > $f


> done


[root@deep /]#

Добавьте эти строки в файл “/etc/rc.d/rc.local”. чтобы они выполнялись при каждой загрузке компьютера.

Под Red Hat 6.2

Редактируйте файл “/etc/sysctl.conf” и добавьте следующую строку:
# Disables IP source routing


net.ipv4.conf.all.accept_source_route = 0

Вы должны перезагрузить ваши сетевые устройства, чтобы изменения вступили в силу.
[root@deep /]# /etc/rc.d/init.d/network restart

Setting network parameters [ OK ] Bringing up interface lo        [ OK ] Bringing up interface eth0      [ OK ] Bringing up interface eth1      [ OK ]

Замечание. Введенные выше команды будет отключать маршрутизацию от источника для всех интерфейсов (lo, ethN, pppN и т.д.).



Система была взломана.


Если вы поняли, что ваша система была взломана, то взаимодействуйте с CERT ® Coordination Center или с вашим представителем в FIRST (Forum of Incident Response and Security Teams).
Internet Email: cert@cert.org
CERT Hotline: (+1) 412-268-7090
Facsimile: (+1) 412-268-6989
CERT/CC отвечает на личные вопросы 8:00 a.m. – 8:00 p.m. EST (GMT –5)/EDT (GMT –4)) по рабочим дным; в критических ситуациях можно звонить и в выходные и праздничные дни.



Специальные пользователи.


Это очень важно. Выключите все ненужные специальные бюджеты пользователей, которые созданы по умолчанию в вашей системе (Это необходимо проделывать после каждого обновления). Linux использует их для выполнения различных операций, которые вам скорее всего не нужны. Если вы не нуждаетесь в каких-либо бюджетах – удалите их. Чем больше у вас заведено пользователей, тем легче проникнуть в систему.

Мы предполагаем, что вы используете механизм теневых паролей. Если это не так, то установите Shadow password suite – это улучшит безопасность сервера. Если вы следовали нашим инструкциям при инсталляции системы и отметили в разделе “Authentication Configuration” пункт “Enable Shadow Passwords”, то в системе активизирован механизм теневых паролей.

Для удаления пользователей используйте команду
[root@deep]# userdel username

Для удаления группы используйте команду
[root@deep]# groupdel username

Шаг 1.

Введите следующие команды на терминале для удаления специальных пользователей:
[root@deep]# userdel adm


[root@deep]# userdel lp


[root@deep]# userdel sync


[root@deep]# userdel shutdown


[root@deep]# userdel halt


[root@deep]# userdel news


[root@deep]# userdel uucp


[root@deep]# userdel operator


[root@deep]# userdel games (удалите это пользователя если вы не используете X Window).


[root@deep]# userdel gopher


[root@deep]# userdel ftp (удалите если не используете анонимный ftp).

Шаг 2.

Удалите ненужные группы пользователей.
[root@deep]# groupdel adm


[root@deep]# groupdel lp


[root@deep]# groupdel news


[root@deep]# groupdel uucp


[root@deep]# groupdel games (удалите если не используете X Window).


[root@deep]# groupdel dip


[root@deep]# groupdel pppusers


[root@deep]# groupdel popusers (удалите если не используете POP сервер).


[root@deep]# groupdel slipusers

Шаг 3.

Добавьте необходимых вам пользователей.
Чтобы добавить нового пользователя используйте команду:
[root@deep]# useradd username

Для добавления или изменения пароля для пользователя используйте команду:
[root@deep]# passwd username


Например:
[root@deep]# useradd admin

[root@deep]# passwd admin

На экране должен появиться следующий текст:
Changing password for user admin

New UNIX password: somepasswd

passwd: all authentication tokens updated successfully

Шаг 4.

Бит постоянства может быть использован для предотвращения случайного удаления или переписывания файлов, которые должны быть защищены. Они также могут быть защищены от создания символических ссылок, которые могут быть использованы для атак на файлы “/etc/passwd”, “/etc/shadow”, “/etc/group” или “/etc/gshadow”.

Для установки бита постоянства на файлы “/etc/passwd”, “/etc/shadow”, “/etc/group” и “/etc/gshadow” выполните следующие команды:
[root@deep]# chattr +i /etc/passwd

[root@deep]# chattr +i /etc/shadow

[root@deep]# chattr +i /etc/group

[root@deep]# chattr +i /etc/gshadow

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


Странные или скрытые файлы.


Проверьте вашу систему на наличие странных или скрытых файлов (файлы которые запускаются периодически и не показываются командой ls), поскольку они могут использоваться для скрытия утилит и информации (программы взлома паролей, парольные файлы из других систем и др.). Обычной методикой на UNIX системах является расположение скрытых каталогов с необычными именами в пользовательских бюджетах, например, “…”, “.. “ (точка точка пробел) или “..^G” (точка точка ctrl-G). Программа “find” может быть использована для поиска таких программ. Например,
[root@deep]# find / -name ".. " -print -xdev


[root@deep]# find / -name ".*" -print -xdev | cat -v

Также, часто используются файлы с именами подобными “.mail” или “.xx”



TCP_WRAPPERS.


По умолчанию, Red Hat отвечает на все запросы к имеющимся сервисам. Используя TCP_Wrappers, вы легко сможете оградить ваш сервер от внешних вторжений когда это нужно. Запретите все хосты, добавив “ALL: ALL@ALL, PARANOID” в “/etc/hosts.deny”, и определите список тех кому доступ разрешен в файле “/etc/host.allow” – это самая безопасная конфигурация. TCP_Wrappers контролируется двумя файлами. Поиск завершается при первом совпадении.
/etc/hosts.allow


/etc/hosts.deny

Доступ будет разрешен если пара (клиент, демон) найдена в файле /etc/host.allow

Доступ будет запрещен если пара (клиент, демон) найдена в файле /etc/host.deny

Если пары (клиент, демон) не найдена ни в одном из файлов (/etc/host.allow, /etc/host.deny), то доступ будет разрешен.

Шаг 1.

Редактируйте файл hosts.deny (vi /etc/hosts.deny) добавив следующие строки: По умолчанию доступ запрещен.
# Запрещаем доступ для всех.


ALL: ALL@ALL, PARANOID #Соответствует любому компьютеры, чье имя не соответствует адресу.

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

Замечание. Для параметра PARANOID. Если вы хотите запускать telnet и ftp сервисы на сервере, то не забудьте добавить адрес клиентской машины и IP адрес в файл “/etc/hosts” на сервере, иначе будьте готовы ждать несколько минут, пока DNS lookup не завершится по таймауту, до получения строки login.

Шаг 2.

Отредактируйте файл hosts.allow и добавьте в него, к примеру, следующие строки:
# Список серверов которым разрешен доступ.


sshd: 208.164.186.1 gate.openarch.com

Машина с IP адресом 208.164.186.1 и именем gate.openarch.com является одним из клиентов сервиса sshd.

Шаг 4.

Программа tcpdchk занимается проверкой правильности конфигурационного файла TCP_Wrapper. Она выдает сообщения о потенциальных и реальных проблемах.

После того, как конфигурирование завершено, запустите программу tcpdchk:
[root@deep]# tcpdchk

Замечание. Ошибка может выглядеть следующим образом:
warning: /etc/hosts.allow, line 6: can't verify hostname: gethostbyname(win.openna.com) failed


Если вы получили подобное сообщение, то проверьте ваш конфигурационный файл DNS сервера, на наличие в нем этого имени компьютера.



Установка таймаута подключения для root


Часто бывает, что администратор войдя в систему под пользователем root забывает выйти и его сессия остается открытой. Решением этой проблемы может быть переменная “TMOUT” в BASH, которая определяет время, через которое пользователь автоматически отключается от системы, если он не активен. Она содержит время в секундах до отключения.

Редактируйте файл “/etc/profile” и добавьте следующую строку сразу после строки с “HISTFILESIZE=”:
TMOUT=7200

Мы определяем значение для TMOUT равное 2 часам (60*60*2). Следует отметить, что если вы добавили эту строку в файл /etc/profile, то переменная определяется для любого подключаемого пользователя, а не только root. Чтобы установить ее для конкретного пользователя измените файл “.bashrc” в его домашнем каталоге.



Включение always-defragging защиты


Эта защиту необходимо включить если вы используете Linux сервер как шлюз с маскарадингом трафика (IP Masquerading).

Под Red Hat 6.1


[root@deep /]# echo 1 > /proc/sys/net/ipv4/ip_always_defrag

Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.

Под Red Hat 6.2

Редактируйте файл “/etc/sysctl.conf” и добавьте следующую строку:
# Enable always defragging Protection


net.ipv4.ip_always_defrag = 1

Вы должны перезагрузить ваши сетевые устройства, чтобы изменения вступили в силу.
[root@deep /]# /etc/rc.d/init.d/network restart

Setting network parameters      [ OK ] Bringing up interface lo        [ OK ] Bringing up interface eth0      [ OK ] Bringing up interface eth1      [ OK

]



Включение защиты от IP spoofing.


Защита от IP spoofing предупреждает вашу сеть от взаимодействия с ложными источниками сообщений, которые часто используются в DoS атаках.

Под Red Hat 6.1


[root@deep /]# for f in /proc/sys/net/ipv4/conf/*/rp_filter; do


> echo 1 > $f


> done


[root@deep /]#

Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.

Под Red Hat 6.2

Редактируйте файл “/etc/sysctl.conf” и добавьте следующую строку:
# Enable IP spoofing protection, turn on Source Address Verification


net.ipv4.conf.all.rp_filter = 1

Вы должны перезагрузить ваши сетевые устройства, чтобы изменения вступили в силу.
[root@deep /]# /etc/rc.d/init.d/network restart

Setting network parameters      [ OK ] Bringing up interface lo        [ OK ] Bringing up interface eth0      [ OK ] Bringing up interface eth1      [ OK ]



Включение защиты от неправильных сообщениях об ошибках.


Эта опция будет предупреждать вас обо все неправильных сообщениях об ошибке.

Под Red Hat 6.1


[root@deep /]# echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.

Под Red Hat 6.2

Редактируйте файл “/etc/sysctl.conf” и добавьте следующую строку:
# Enable bad error message Protection


net.ipv4.icmp_ignore_bogus_error_responses = 1

Вы должны перезагрузить ваши сетевые устройства, чтобы изменения вступили в силу.
[root@deep /]# /etc/rc.d/init.d/network restart

Setting network parameters [ OK ] Bringing up interface lo        [ OK ] Bringing up interface eth0      [ OK ] Bringing up interface eth1      [ OK ]



Включение защиты от TCP SYN Cookie.


"SYN Attack" относится к классу атак “Отказ в обслуживании”, которая отбирает на себя все ресурсы сервера и вызывает его перезагрузку. DoS атаки (нападения, которые выводят сервер из строя из-за большого трафика к серверу, в результате чего сервер не может ответить на поступающие запросы) легко осуществляются из внутренней сети и Интернета. В ядрах 2.1 появилась опция, которая позволяет защитить компьютер от подобной атаки, но по умолчанию он не включена. Для ее включениясделайте следующее:

Под Red Hat 6.1


[root@deep]# echo 1 > /proc/sys/net/ipv4/tcp_syncookies

Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.

Под Red Hat 6.2

Редактируйте файл “/etc/sysctl.conf” и добавьте следующую строку:
# Enable TCP SYN Cookie Protection


net.ipv4.tcp_syncookies = 1

Вы должны перезагрузить ваши сетевые устройства, чтобы изменения вступили в силу.
[root@deep /]# /etc/rc.d/init.d/network restart

Setting network parameters      [ OK ] Bringing up interface lo        [ OK ] Bringing up interface eth0      [ OK ] Bringing up interface eth1      [ OK ]

Замечание. Если при выполнении вышеприведенной команды вы получили сообщение об ошибке, то проверьте включена ли у вас в ядре опция TCP syncookies. (IP: TCP syncookie support (not enabled per default) (CONFIG_SYN_COOKIES) [Y/n/?]).



Выбор правильного пароля.


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

Социальная разработка паролей сервера – наиболее простой и популярный способ получения доступа к бюджетам пользователей и серверам. Часто, какое- либо простое действие наподобие выдачи себя за руководителя или крика о правах человека, приносит очень хорошие результаты, часто давая даже полный доступ к системе.

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

пароль должен иметь не менее шести символов в длину и содержать не менее 1 цифры или специального знака;

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

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

он должен отменяться и сбрасываться после заданного числа в подряд неправильных попыток ввода;



Запрещение перезагрузки системы по комбинации клавиш Control-Alt- Delete.


Если вы закомментируете строку описанную ниже в файле /etc/inittab, то будет отключена возможность использования комбинации клавиш ctrl-alt-del для перезагрузки компьютера. Это чрезвычайно важно, если вы не можете обеспечить полную физическую безопасность вашего сервера.

Редактируйте файл inittab (vi /etc/inittab) и измените стоку
ca::ctrlaltdel:/sbin/shutdown -t3 -r now

на:
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now

Для того, чтобы система восприняла внесенные изменения, дайте следующую команду:
[root@deep]# /sbin/init q



Запрещение приема ICMP redirect пакетов


Когда хост использует неоптимальный или “умерший” маршрут к адресату, маршрутизатор отправляет ему ICMP redirect пакет, который информирует о необходимости изменить маршрут. Если атакующий сможет подделать этот пакет, то он или она сможет изменить таблицу маршрутизации на компьютере и нарушить его защиту, вызвав отправку информации по неправильному маршруту.

Под Red Hat 6.1


[root@deep /]# for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do


> echo 0 > $f


> done


[root@deep /]#

Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.

Под Red Hat 6.2

Редактируйте файл “/etc/sysctl.conf” и добавьте следующую строку:
# Disable ICMP Redirect Acceptance


net.ipv4.conf.all.accept_redirects = 0

Вы должны перезагрузить ваши сетевые устройства, чтобы изменения вступили в силу.
[root@deep /]# /etc/rc.d/init.d/network restart

Setting network parameters [ OK ] Bringing up interface lo        [ OK ] Bringing up interface eth0      [ OK ] Bringing up interface eth1      [ OK ]

Замечание. Введенные выше команды будет отключать прием ICMP redirect пакетов для всех интерфейсов (lo, ethN, pppN и т.д.).