WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
UNIX-системы настолько безопасны, насколько безопасными их сделает
администратор. Чем больше сервисов у Вас установлено, тем больше шансов, что
в них будет найдена дыра. Когда Вы инсталлируете Linux, Вы должны
устанавливать минимум пакетов, а затем добавлять только необходимые элементы,
уменьшая шансы установить приложение с ошибкой, нарушающей его безопасность.
В этой главе мы обсудим общие принципы обеспечения безопасности сервера.
Также здесь мы опишем ряд возможностей, которые можно использовать для
предотвращения вторжения как снаружи, так и изнутри. Отмените возможность загрузки компьютера с дискеты, установите пароль на
доступ к настройкам BIOS. Запрет загрузки с дискет не позволит
злоумышленникам загрузить компьютер с дискеты и получить доступ к системе, а
установка пароля на доступ к BIOS не позволит включить загрузку с дискеты.
Вы не сможете правильно реализовать безопасность системы пока не выясните,
что Вы хотите защищать и от кого. Для того, чтобы принимать решения,
относящиеся к защите, Вам нужно выработать политику безопасности, список
того, что Вы хотите разрешить, а что хотите запретить. Политика также должна
определять Ваши ответные действия на нарушения безопасности. Приведенные
ниже вопросы должны помочь Вам в выработке стратегии:
Этот список короткий, и Вы при выработке стратегии можете охватить более
широкий круг вопросов. Любая политика безопасности базируется на некотором
уровне паранойи: решите насколько Вы доверяете людям, как внутри организации,
так и снаружи. Стратегия должна балансировать между разрешением пользователям
доступа к необходимой им информации и запрещением доступа к определенным
видам данных. Точка, где эти линии пересекаются, и определит Вашу стратегию.
Исходной точкой Вашего тура в безопасность Linux является пароль. Многие
люди используют единственный пароль всю жизнь, доверяя ему защиту всех своих
данных. Вопреки популярной вере, не взламываемых паролей не существует. Любой
из них поддается либо социальной разработке, либо грубой силе. Социальная разработка паролей сервера наиболее простой и популярный способ
получения доступа к логинам пользователей и серверам. Часто, какое-либо
простое действие, наподобие выдачи себя за руководителя или крика о правах
человека, приносит очень хорошие результаты, часто давая даже
полный доступ к системе. Неплохой идеей будет еженедельно проверять файл с паролями с помощью
программы-взломщика. Это поможет найти пароли, которые легко подбираются, и
которые необходимо срочно заменить. Также механизм проверки должен работать и
в момент определения паролей, чтобы отклонить заведомо слабый пароль при его
начальном задании или переопределении. Строки символов, которые представляют
собой простые слова, или находятся в одном регистре, или не содержат цифр и
специальных знаков, должны быть отклонены. Я рекомендую использовать
следующие правила создания эффективных паролей:
Минимально допустимая длина пароля, задаваемая по умолчанию в Linux, 5
символов. Это значит, что когда новому пользователю разрешается доступ на
сервер, то длина строки, представляющей собой пароль, должна быть минимум 5
букв, цифр или специальных знаков. Кроме того, она должна быть не больше 8
символов. Чтобы нерадивые пользователи не использовали пароли длиной 5
символов, можно увеличить его минимальный размер до 8, отредактировав файл
/etc/login.defs. Редактируйте файл login.defs (vi /etc/login.defs) изменив строку:
Этот файл является конфигурационным для программы login. Здесь Вы можете
изменить и другие параметры, чтобы они соответствовали Вашей стратегии защиты
(время действия пароля, длина пароля и многое другое). Логин root является самым привилегированным в UNIX-системах. На него
нельзя наложить никакие ограничения по безопасности. Это значит, что система
считает, что Вы знаете, что делаете и никаких вопросов задавать не будет.
Поэтому очень легко, ошибившись в команде, уничтожить важную системную
информацию. При использовании этой учетной записи надо быть максимально
осторожным. Из соображений безопасности никогда не подключайтесь к системе
как пользователь root, если только Вы абсолютно не уверены в том, что делаете.
Часто бывает, что администратор войдя в систему под пользователем root
забывает выйти, и его сессия остается открытой. Решением этой проблемы может
быть переменная TMOUT в BASH, которая определяет время, через которое
пользователь автоматически отключается от системы, если он не активен. Она
содержит время в секундах до отключения. Редактируйте файл /etc/profile и добавьте следующую строку сразу
после строки с HISTFILESIZE=:
Мы определяем значение для TMOUT равное 2 часам (60*60*2). Следует
отметить, что если Вы добавили эту строку в файл /etc/profile, то переменная
определяется для любого подключаемого пользователя, а не только для root.
Чтобы установить ее для конкретного пользователя измените файл .bashrc в
его домашнем каталоге. Если Вы экспортируете свои файловые системы с использованием NFS, то
необходимо сконфигурировать файл /etc/exports с максимально возможными
ограничениями. В нем не следует использовать групповые символы (?, *), нельзя
позволять доступ для записи пользователю root и следует монтировать в режиме
"только для чтения" все, что только возможно. Отредактируйте файл /etc/exports, добавив в него:
Где dir/to/export задает каталог для экспортирования, host1.mydomain.com
имя машины, с которой разрешается доступ, ro монтирование только для чтения,
root_squash не позволять пользователю root доступа с правом на запись. Чтобы изменения вступили в действие, необходимо выполнить команду:
Замечание. Использование NFS-сервера увеличивает риск нарушения
безопасности Вашей системы. Лучше его не использовать. Одной из самых простых и необходимых настроек является блокирование
консольно-эквивалентного доступа к программам halt и shutdown. Чтобы
это сделать выполните:
где servicename имя программы, к которой Вы хотите запретить
консольно-эквивалентный доступ. Если Вы не используете xdm, будьте
внимательны, не удалите файл xserver, иначе никто, кроме пользователя root,
не сможет запустить X-сервер (если Вы всегда используете xdm для запуска
X-сервера, и только пользователь root должен запускать X-сервер, то тогда
можно подумать об удалении файла xserver). Пример:
В результате будет запрещен консольно-эквивалентный доступ к программам
halt, shutdown, reboot и poweroff. Программа xserver используется, если у
Вас установлен X Window. Замечание. Если Вы инсталлировали систему как описано в этой книге,
то X Window у Вас не установлен, и файлы, описанные выше, в каталоге
/etc/security не появятся, поэтому Вы этот шаг можете пропустить. Чтобы блокировать весь консольный доступ, включая программу и файл
доступа в каталоге /etc/pam.d, закомментируйте все строки, в которых
вызывается pam_console.so. Этот шаг является продолжением предыдущего.
Нижеприведенный скрипт сделает это автоматически за Вас. Создайте файл
disabling.sh (touch disabling.sh) и внесите в него следующие строки:
Сделайте его исполняемым:
Он будет комментировать все строки, ссылающиеся на pam_console.so во всех
файлах в каталоге /etc/pam.d. После того, как скрипт выполнит свою работу,
удалите его из системы. Inetd называется суперсервером, который запускает другие демоны по
запросам из сети. Inetd.conf говорит inetd, какие порты слушать и какие
сервисы запускать для каждого порта. Как только Вы подключаете Вашу систему к
сети, подумайте, какие сервисы Вам нужны. Ненужные сервисы надо отключить, а лучше деинсталлировать, чтобы у Вас
стало меньше головной боли, а у атакующего меньше шансов найти лазейку в Вашу
систему. Просмотрите файл /etc/inetd.conf, и Вы увидите, какие сервисы он
предлагает. Закомментируйте строки (# в начале строки) с ненужными сервисами,
а затем пошлите процессу inetd сигнал SIGHUP. Шаг 1. Измените права доступа к файлу на 600:
Шаг 2. Удостоверьтесь, что владельцем файла является root:
Шаг 3. Редактируйте файл inetd.conf (vi /etc/inetd.conf) и отключите следующие
сервисы: ftp, telnet, shell, login, exec, talk, ntalk, imap, pop-2, pop-3,
finger, auth и т. д. пока Вы не планируете их использовать. Чем меньше
сервисов включено, тем меньше риск для системы:
Замечание. Не забудьте послать сигнал SIGHUP процессу inetd (killall -HUP
inetd) после редактирования файла /etc/inetd.conf:
Шаг 4. Для большего улучшения безопасности, Вы можете сделать файл inetd.conf
неизменным, используя команду chattr:
Файл с атрибутом i не может быть модифицирован, его нельзя удалить или
переименовать, к нему нельзя создать ссылки, и никакие данные не могут быть
дописаны в файл. Только суперпользователь может установить или снять этот
атрибут. Если Вы захотите модифицировать файл inetd.conf, то
дайте следующую команду:
По умолчанию Red Hat отвечает на все запросы к имеющимся сервисам.
Используя TCP_Wrappers, Вы легко сможете оградить сервер от внешних вторжений
когда это нужно. Запретите все хосты, добавив ALL: ALL@ALL, PARANOID в
/etc/hosts.deny, и определите список тех, кому доступ разрешен в файле
/etc/host.allow: это самая безопасная конфигурация. TCP_Wrappers
контролируется двумя файлами. Поиск завершается при первом совпадении. Шаг 1. Редактируйте файл hosts.deny (vi /etc/hosts.deny) добавив следующие
строки. По умолчанию доступ запрещен:
Это значит, что доступ ко всем службам со всех компьютеров запрещен, если
нет явного разрешения в файле host.allow. Замечание. Для параметра PARANOID. Если Вы хотите запускать telnet
и ftp-сервисы на сервере, то не забудьте добавить адрес клиентской машины и
IP-адрес в файл /etc/hosts на сервере, иначе будьте готовы ждать несколько
минут, пока DNS lookup не завершится по таймауту, до получения строки login.
Шаг 2. Отредактируйте файл hosts.allow и добавьте в него, к
примеру, следующие строки:
Машина с IP-адресом 208.164.186.1 и именем gate.openarch.com является
одним из клиентов сервиса sshd. Шаг 4. Программа tcpdchk занимается проверкой правильности конфигурационного
файла TCP_Wrapper. Она выдает сообщения о потенциальных и реальных проблемах.
После того, как конфигурирование завершено, запустите программу tcpdchk:
Замечание. Ошибка может выглядеть следующим образом: Если Вы получили подобное сообщение, то проверьте Ваш конфигурационный
файл DNS-сервера на наличие в нем этого имени компьютера. Если Вы не хотите, чтобы файл issue выводился на экран, когда удаленный
пользователь подключается к серверу, измените опцию telnetd в файле
/etc/inetd.conf:
Флаг -h говорит демону не выводить любую системную информацию,
ограничиться только запросом login:. Эту возможность необходимо
использовать только, когда на сервере запускается демон telnet (вместо него я
рекомендую использовать ssh). Linux использует библиотеку resolver для преобразования IP=адресов в имена
машин. Файл /etc/host.conf определяет порядок работы этой библиотеки. Он
говорит, какой сервис и в каком порядке использовать
для преобразования адресов. Редактируйте файл host.conf (vi /etc/host.conf) и
добавьте следующие строки:
Опция order определяет порядок использования сервисов. Для
улучшения производительности и повышения безопасности рекомендуется настроить
библиотеку определителей так, чтобы вначале использовался DNS, а затем файл
/etc/hosts. Конечно, DNS должен быть предварительно настроен. Опция multi говорит, что компьютеры, описанные в файле /etc/hosts,
могут иметь несколько IP-адресов (несколько интерфейсов ethN). Например, шлюз
всегда имеет несколько адресов, и у них эта опция должна быть
всегда определена в ON. Опция nospoof: не разрешать подмену адресов. IP-Spoofing это способ
атаки при котором удаленный компьютер представляется кем-то, кем он не
является. При этом виде нападения удаленный компьютер представляется как
законный сервер, а затем использует установленные соединения для
взаимодействия с другими компонентами сети. Эта опция должна быть установлена
в ON на всех типах серверов. Файл /etc/securetty позволяет Вам определить, с каких TTY-устройств может
входить в систему пользователь root. Этот файл читается программой login
(/bin/login). Он имеет очень простой формат. В каждой строке перечислены
имена tty-устройств, с которых root может входить в систему, а с остальных
доступ ему будет запрещен. Отключите любые tty, которые Вам не нужны, закомментировав их
(знак # в начале строки):
В результате root сможет входить в систему только с терминала tty1. С
остальных терминалов Вы сможете переключаться на root, используя команду su.
Это очень важно. Выключите все ненужные специальные логины пользователей,
которые созданы по умолчанию в Вашей системе (это необходимо проделывать
после каждого обновления). Linux использует их для выполнения различных
операций, которые Вам скорее всего не нужны. Если Вы не нуждаетесь в
каких-либо логинах, то удалите их. Чем больше у Вас заведено пользователей,
тем легче проникнуть в систему. Мы предполагаем, что Вы используете механизм теневых паролей. Если это не
так, то установите Shadow password suite это улучшит безопасность сервера.
Если Вы следовали нашим инструкциям при инсталляции системы и отметили в
разделе "Authentication Configuration" пункт "Enable Shadow Passwords", то в
системе активизирован механизм теневых паролей. Для удаления пользователей используйте команду:
Для удаления группы используйте команду:
Шаг 1. Введите следующие команды на терминале для
удаления специальных пользователей:
Шаг 2. Удалите ненужные группы пользователей:
Шаг 3. Добавьте необходимых Вам пользователей. Чтобы добавить нового
пользователя используйте команду:
Для добавления или изменения пароля для пользователя используйте команду:
Например:
На экране должен появиться следующий текст:
Шаг 4. Бит постоянства может быть использован для предотвращения случайного
удаления или переписывания файлов, которые должны быть защищены. Они также
могут быть защищены от создания символических ссылок, которые могут быть
использованы для атак на файлы /etc/passwd, /etc/shadow, /etc/group
или /etc/gshadow. Для установки бита постоянства на файлы /etc/passwd, /etc/shadow,
/etc/group и /etc/gshadow выполните следующие команды:
Замечание. Если в будущем Вам надо будет добавить новых
пользователей или изменить пароли, то снимите бит постоянства с этих файлов.
Также снять этот атрибут может потребоваться при инсталляции новых
RPM-пакетов, которые автоматически добавляют новых пользователей
или новые группы. Если Вы не хотите, чтобы кто-нибудь выполнял команду su root или хотите
ограничить пользователей, которые могут пользоваться этой командой, то
добавьте следующие две строки в начало файла конфигурации su, расположенного
в каталоге /etc/pam.d. Я настоятельно рекомендую ограничить пользователей,
которые могут выполнять команду su. Шаг 1. Редактируйте файл su (vi /etc/pam.d/su) и добавьте в него две строки:
После добавления этих строк файл /etc/pam.d/su должен выглядеть так:
Который говорит, что только члены группы wheel могут использовать команду
su root, и все действия будут регистрироваться. Заметим, что группа wheel
является специальным логином, который используется для этой цели. Подобное
ограничение пользователей, способных выполнять команду su root совместно с
ограничением терминалов, с которых root может входить в систему, существенно
увеличит безопасность сервера. Шаг 2. После того, как Вы изменили файл /etc/pam.d/su, самое время определить
пользователей, которые могут выполнять su root. Например, если Вы хотите
чтобы admin был членом группы wheel введите следующую команду:
Здесь опцией G определяется список цифровых значений групп, в которые
входит пользователь admin. В данном случае группе wheel соответствует 10.
Используйте приведенную выше команду для всех пользователей, которым
будет разрешено переходить к root. Замечание. Если Вы не можете выполнить команду su в терминале
GNOME, то это потому, что Вы используете неправильный терминал. Файл limits.conf, находящийся в каталоге /etc/securitty, может быть
использован для ограничения ресурсов, потребляемых пользователями Вашей
системы. Ограничьте ресурсы всем пользователям, чтобы они не смогли
осуществить DoS-атаки (количество процессов, объем памяти и т. д.). Эти
ограничения будут накладываться на пользователей как только они будут входить
в систему. Для примера, ограничьте пользователей так, как это описано здесь.
Шаг 1. Редактируйте файл limits.conf (vi /etc/security/limits.conf) и добавьте в
него следующие строки:
Он говорит, что необходимо запретить создание core-файлов (core 0),
ограничить число процессов не более 20 (nproc 20) и объем используемой памяти
не более 5М (rss 5000) для всех пользователей, кроме root. Все вышесказанное
относится только к пользователям, которые могут подключаться к системе через
login. Символ "*" означает всех пользователей, имеющих доступ
на данный сервер. Шаг 2. Вы должны отредактировать файл /etc/pam.d/login и добавить в его
конец следующие строки:
После этого файл должен выглядеть так:
Вы можете получить больший контроль над смонтированными файловыми
системами (например, /home и /tmp), используя опции noexec, nodev и nosuid.
Они могут быть определены в файле /etc/fstab, который содержит описания
каждой монтируемой файловой системой. Для получения большей информации об
этих опциях читайте man страницу о mount (8). Опции, связанные с безопасностью, используемые в /etc/fstab: Редактируйте файл fstab (vi /etc/fstab) и измените то, что Вам нужно:
Должны теперь читаться: nodev указывает не интерпретировать символьные и блочный специальные
устройства на файловой системе, nosuid предписывает не позволять работать
биту смены идентификатора пользователя и идентификатора группы, noexec не
позволяет выполнять любые двоичные файлы на файловой системе. Замечание: для нашего примера, устройство /dev/sda11 представляется
как /tmp и dev/sda6 как /home на нашей системе. Конечно, у Вас это будет
выглядеть по-другому, в зависимости от того, как разбит диск, и диски какого
типа Вы используете (IDE: hda, hdb, hdc и т.д или SCSI: sda, sdb, sdc и т.д.).
После того, как Вы проинсталлировали все программы, которые нужны на
сервере, хорошей идеей будет переместить программу RPM в безопасное место,
например, на флоппи-диск. Если кто-то получит доступ к серверу и решит
установить враждебное программное обеспечение, то это у него не получится.
Конечно, если в будущем захотите проинсталлировать что-то новое, то Вам
потребуется вернуть RPM на место. Переместите RPM на флоппи-диск:
Замечание. Никогда не деинсталлируйте RPM полностью. Также можно изменить права доступа к RPM c 755 на 700. В этом случае
никто, кроме пользователя root, не сможет использовать эту программу. Измените права доступа к файлу /bin/rpm:
Чтобы сделать легким повторный ввод длинных команд, bash shell может
запоминать до 500 команд в файле ~/.bash_history (где ~/ Ваш домашний
каталог). Каждый пользователь, который имеет shell-доступ в систему, имеет
такой .bash_history файл в своем домашнем каталоге. Уменьшая количество
команд, запоминаемых в этом файле, Вы защищаете систему. Когда пользователь
случайно ввел в командной строке свой пароль, то он еще долгое время будет
хранится в файле .bash_history. Строки HISTFILESIZE и HISTSIZE в файле /etc/profile определяют количество
старых команд, запоминаемых в .bash_history. Для всех пользователей я
рекомендую выбрать значения этих переменных поменьше, например, 20. Редактируйте файл profile (vi /etc/profile) и измените следующие строки:
В данном случае определено, что будет запоминаться не более 20 старых
команд. Теперь, если хакер будет искать пароль в файле .bash_profile, то
шансы там его обнаружить сократятся. Шаг 2. Администратор должен добавить в файл /etc/skel/.bash_logout строку
rm -f $HOME/.bash_history. В результате, каждый раз, когда пользователь
выходит из системы, его файл .bash_history будет удаляться. Поэтому хакер не
сможет получить к нему доступ, когда пользователь не подключен к серверу.
Редактируйте файл .bash_logout (vi /etc/skel/.bash_logout) и
добавьте следующую строку:
Замечание. Приведенная выше операция будет действовать только на
вновь заводимых пользователей. Для уже существующих необходимо вручную
отредактировать их файлы .bash_logout. LILO это универсальный загрузчик для Linux. Он не зависит от файловой
системы и может загружать ядро Linux как с гибкого диска, так и с жесткого
диска. Кроме того, LILO может служить загрузчиком других операционных систем.
LILO очень важен для Linux, и поэтому мы должны защитить его как можно
лучше. Наиболее важным конфигурационным файлом является /etc/lilo.conf. С его
помощью Вы можете настраивать и улучшать безопасность LILO и всей системы.
Следующие три опции чрезвычайно важны для улучшения безопасности. Ниже приведена процедура защиты LILO. Шаг 1. Измените файл /etc/lilo.conf:
Шаг 2. Сделайте этот файл доступным для чтения только пользователем root (в файле
хранится пароль в незашифрованном виде):
Шаг 3. Выполните следующую команду, чтобы все изменения вошли в силу:
Шаг 4. Защитите файл от изменения и удаления установив на
него атрибут неизменчивости:
Теперь, чтобы внести в /etc/lilo.conf какие-нибудь изменения, этот
атрибут надо снять:
Если Вы закомментируете строку, описанную ниже, в файле /etc/inittab, то
будет отключена возможность использования комбинации клавиш ctrl-alt-del для
перезагрузки компьютера. Это чрезвычайно важно, если Вы не можете обеспечить
полную физическую безопасность Вашего сервера. Редактируйте файл inittab (vi /etc/inittab) и измените строку:
на: Для того, чтобы система восприняла внесенные изменения,
дайте следующую команду:
Один из важнейших аспектов защиты это целостность лог-файлов,
расположенных в /var/log. Если взломщик преодолел все Ваши оборонительные
редуты, то вся Ваша надежда остается на них. Поэтому очень важно продумать
методы, которые позволят Вам контролировать целостность лог-файлов. Если на
Вашем сервере установлен сервер печати или подобный сервер есть в сети, то
можно создавать твердые копии всех, на Ваш взгляд, важных логов. Это легко
осуществить, имея принтер с непрерывной подачей бумаги и перенаправляя все
сообщения syslog в /dev/lp0. Взломщик может изменить на сервере любые файлы и
программы, но он ничего не сможет поделать с бумагой. Пример: Регистрация всех telnet, почтовых, ssh-соединений и загрузочных сообщений
с Вашего сервера на принтере, подключенном к нему. Редактируйте файл syslog.conf (vi /etc/syslog.conf) и добавьте в его
конец следующую строку:
Перезагрузите демон syslogd, чтобы изменения вступили в силу:
Пример: Регистрация всех telnet, почтовых, ssh-соединений и загрузочных сообщений
с Вашего сервера на принтере удаленного сервера, находящегося в Вашей сети.
Если Вы не имеете принтера в Вашей сети, то можно перенаправлять все
syslogd-сообщения на удаленный сервер. Для этого, во-первых, добавьте в файл
syslogd.conf вышеприведеднную строку, только замените в ней /dev/lp0 на имя
или адрес удаленного сервера. Во-вторых, запустите на удаленном сервере демон
syslogd с опцией -r. Используя этот метод, Вы легко можете собирать все логи
на одной машине, что существенно облегчает администрирование. Редктируйте
файл syslog.conf (vi /etc/syslog.conf) на удаленном сервере (например, на
mail.openarch.com) и добавьте в его конец следующую строку:
По умолчанию, демон syslogd не принимает сообщения от удаленных
компьютеров. Для включения этого добавьте опцию -r при запуске syslogd:
Вместо используйте: Перезапустите демон syslogd, чтобы изменения вступили в силу:
Если на удаленном сервере настроен брандмауэр, то необходимо добавить в
него следующее правило:
где,
EXTERNAL_INTERFACE="eth0" в файле настроек firewall. Сейчас перезагрузите firewall на удаленном сервере, чтобы сделанные
изменения вступили в силу. Это правило разрешает удаленному серверу принимать сообщения от клиента
на порт 514 (порт сервиса syslog). Для получения большей информации о
firewall читайте главу 7 "Сетевой брандмауэр". В заключение, редактируйте файл /etc/syslog.conf Вашего локального
сервера, добавив в его конец следующую строку:
где mail имя удаленного сервера. Теперь, если взломщик сотрет все
лог-файлы Вашего сервера, у Вас останутся их копии на другой машине. По ним
Вы сможете отследить, кто и какие действия предпринял. Перезагрузите демон syslog, чтобы изменения вступили в силу:
Так же как и на удаленном сервере, Вам надо добавить новое правило
для firewall и на локальной машине:
где Перезагрузите брандмауэр, чтобы изменения вступили в силу:
Это правило разрешает прохождение исходящих пакетов к удаленному серверу
на порт 514 (порт сервиса syslog). Для получения большей информации о firewall читайте главу 7
"Сетевой брандмауэр". Замечание: никогда не используйте в качестве syslog-сервера
маршрутизирующие сервера. При использовании программы sysklogd существует
множество опций. Для получения более подробной информации читайте man к
sysklogd (8), syslog(2), и syslog.conf(5). Установка прав доступа к скриптам запуска сервисов, расположенных в
каталоге /etc/rc.d/init.d. Установите права доступа к скриптам, которые отвечают за
запуск и остановку сервисов:
Только пользователю root позволено читать, записывать и запускать эти
скрипты. Я не думаю, что обычным пользователям необходимо знать
об их содержании. Замечание. Если Вы устанавливаете новую программу или обновляете
существующую, которая использует инициализационные скрипты System V,
расположенные в /etc/rc.d/init.d, то не забудьте проверить и при
необходимости изменить права доступа к ним. По умолчанию, когда Вы подключаетесь к Linux-системе, Вам выдается
сообщение об имени дистрибутива, его версии, версии ядра и имени сервера.
Это совершенно не нужно, так как дает много информации злоумышленнику. Вы
должны оставить только запрос "Login:". Шаг 1. Чтобы сделать это, закомментируйте следующие строки в файле
/etc/rc.d/rc.local:
Шаг 2. Удалите файлы issue.net и issue в каталоге /etc:
Замечание. Файл /etc/issue.net содержит информации, которая выдается
всякий раз, когда осуществляется сетевое подключение к серверу (например,
через telnet или ssh). Он может быть найден в каталоге /etc, также как и файл
issue, содержащий аналогичную информацию для локальных пользователей. Это
простые текстовые файлы, и Вы можете их легко настраивать под свои нужды,
но при этом необходимо изменить скрипт /etc/rc.d/rc.local, так как он при
каждой перезагрузке пересоздает эти файлы. Все программы и файлы на Вашем компьютере с символом s в поле режима
доступа имеют включенным бит SUID (-rwsr-xr-x) или SGID (-r-xr-sr-x). Так как
эти программы дают особые привилегии пользователям, которые их выполняют, то
важно удалить бит s с программ, владельцем которых является root и которым
не нужны подобные возможности. Это осуществляется выполнением команды chmod
a-s с именем файла в качестве аргумента. К таким программам относятся:
Мы поместили знак * рядом с программами, для которых бит s должен быть
снят. Помните, что для корректной работы системы необходимы
некоторые suid-программы. Для нахождения всех файлов имеющих бит s, владельцами которых является
root используйте команду:
Для отключения бита s введите следующие команды:
Если Вы хотите узнать, что делает каждая из программ используйте
руководство man. Например,
В новой версии Red Hat 6.2 все параметры ядра, доступные через /proc/sys
могут быть настроены при запуске. Вы можете использовать для этого новый файл
/etc/sysctl.conf. Он читается и загружается каждый раз при загрузке системы.
Все изменения в /proc/sys должны осуществляться через /etc/sysctl.conf, так
как он загружается раньше rc.local и других пользовательских скриптов. Ниже
мы опишем все опции, связанные с сетевой безопасностью, которые Вы должны
настроить для Вашего сервера Red Hat 6.1 и Red Hat 6.2. Предохранение Вашей системы от ответов на ping-запросы существенно улучшит
сетевую безопасность Вашей системы, так как никто не сможет послать к Вам
ping и получить на него ответ. Протокол TCP/IP имеет ряд слабых мест, которые
позволяют нападающим использовать в своих целях внешне благоприятные пакеты.
Защита сервера от ping может уменьшить эту проблему. Под Red Hat 6.1 Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась
каждый раз при загрузке компьютера. Невосприимчивость к ping спасет Вас от
многих хакеров, потому что они даже не узнают о Вашем существовании. Для
восстановления способности отвечать на ping введите следующую команду:
Под Red Hat 6.2 Редактируйте файл /etc/sysctl.conf и добавьте следующую строку:
Вы должны перезагрузить сетевые устройства, чтобы
изменения вступили в силу.
Так же как и ping-запросы, необходимо отключить и широковещательные
сообщения. Когда IP-пакет отправляется на широковещательный адрес (например,
192.168.1.255), он принимается всеми машинами в сети. Затем все машины
отвечают на него ICMP эхо-ответом, в результате может возникнуть перегрузка в
сети или полный выход из строя (DoS-атака). Для получения большей
информации читайте RFC 2644. Под Red Hat 6.1 Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась
каждый раз при загрузке компьютера. Под Red Hat 6.2 Редактируйте файл /etc/sysctl.conf и добавьте следующую строку:
Вы должны перезагрузить Ваши сетевые устройства, чтобы
изменения вступили в силу.
Маршрутизация и протоколы маршрутизации могут создавать ряд проблем. При
IP-маршрутизации от источника сообщений, информация о маршруте хранится в
IP-пакете и, согласно RFC 1122, ответ должен возвращаться по тому же
маршруту. Если нападающий сможет послать пакет в Вашу сеть, то он сможет
перехватывать ответы и заставлять думать Ваш сервер, что обмен данными
происходит с доверенным хостом. Я рекомендую блокировать IP-маршрутизацию от
источника, чтобы закрыть эту дыру. Чтобы заблокировать IP-маршрутизацию от источника
введите следующую команду:
Под Red Hat 6.1 Добавьте эти строки в файл /etc/rc.d/rc.local, чтобы они выполнялись при
каждой загрузке компьютера. Под Red Hat 6.2 Редактируйте файл "/etc/sysctl.conf" и добавьте следующую строку:
Вы должны перезагрузить Ваши сетевые устройства, чтобы
изменения вступили в силу.
Замечание. Введенные выше команды будет отключать маршрутизацию от
источника для всех интерфейсов (lo, ethN, pppN и т. д.). SYN Attack относится к классу атак "Отказ в обслуживании", которая
отбирает на себя все ресурсы сервера и вызывает его перезагрузку. DoS-атаки
(нападения, которые выводят сервер из строя из-за большого трафика к серверу,
в результате чего сервер не может ответить на поступающие запросы) легко
осуществляются из внутренней сети и Интернета. В ядрах 2.1 появилась опция,
которая позволяет защитить компьютер от подобной атаки, но по умолчанию она
не включена. Для ее включения сделайте следующее:
Под Red Hat 6.1 Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась
каждый раз при загрузке компьютера. Под Red Hat 6.2 Редактируйте файл /etc/sysctl.conf и добавьте следующую строку:
Вы должны перезагрузить Ваши сетевые устройства, чтобы
изменения вступили в силу.
Замечание. Если при выполнении вышеприведенной команды Вы получили
сообщение об ошибке, то проверьте, включена ли у Вас в ядре опция TCP
syncookies. (IP: TCP syncookie support (not enabled per default)
(CONFIG_SYN_COOKIES) [Y/n/?]). Когда хост использует неоптимальный или "умерший" маршрут к адресату,
маршрутизатор отправляет ему ICMP redirect-пакет, который информирует о
необходимости изменить маршрут. Если атакующий сможет подделать этот пакет,
то он сможет изменить таблицу маршрутизации на компьютере и нарушить его
защиту, вызвав отправку информации по неправильному маршруту. Под Red Hat 6.1 Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась
каждый раз при загрузке компьютера. Под Red Hat 6.2 Редактируйте файл /etc/sysctl.conf и добавьте следующую строку:
Вы должны перезагрузить Ваши сетевые устройства, чтобы
изменения вступили в силу.
Замечание. Введенные выше команды будет отключать прием ICMP
redirect-пакетов для всех интерфейсов (lo, ethN, pppN и т. д.). Эта защиту необходимо включить, если Вы используете Linux-сервер как шлюз
с маскарадингом трафика (IP Masquerading). Под Red Hat 6.1 Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась
каждый раз при загрузке компьютера. Под Red Hat 6.2 Редактируйте файл /etc/sysctl.conf и добавьте следующую строку:
Вы должны перезагрузить Ваши сетевые устройства, чтобы
изменения вступили в силу.
Эта опция будет предупреждать Вас обо все неправильных
сообщениях об ошибке. Под Red Hat 6.1 Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась
каждый раз при загрузке компьютера. Под Red Hat 6.2 Редактируйте файл /etc/sysctl.conf и добавьте следующую строку:
Вы должны перезагрузить Ваши сетевые устройства, чтобы
изменения вступили в силу.
Защита от IP-spoofing предупреждает Вашу сеть от взаимодействия с ложными
источниками сообщений, которые часто используются в DoS-атаках. Под Red Hat 6.1 Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась
каждый раз при загрузке компьютера. Под Red Hat 6.2 Редактируйте файл /etc/sysctl.conf и добавьте следующую строку:
Вы должны перезагрузить Ваши сетевые устройства, чтобы
изменения вступили в силу.
Эта защита будет фиксировать все пакеты с поддельными адресами (spoof),
пакеты с маршрутизацией от источника и Redirect-пакеты в Ваших лог-файлах.
Под Red Hat 6.1 Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась
каждый раз при загрузке компьютера. Под Red Hat 6.2 Редактируйте файл /etc/sysctl.conf и добавьте следующую строку:
Вы должны перезагрузить Ваши сетевые устройства, чтобы
изменения вступили в силу.
Проверьте Вашу систему на наличие странных или скрытых файлов (файлы,
которые запускаются периодически и не показываются командой ls), поскольку
они могут использоваться для скрытия утилит и информации (программы взлома
паролей, парольные файлы из других систем и др.). Обычной методикой в
UNIX-системах является расположение скрытых каталогов с необычными именами в
пользовательских логинах, например, ".", ".. " (точка точка пробел) или
"..^G" (точка точка ctrl-G). Программа find может быть использована для
поиска таких программ. Например:
Также часто используются файлы с именами подобными .mail или .xx. SUID и SGID-файлы являются потенциальными источниками нарушения
безопасности, потому что дают особые привилегии пользователям, которые их
выполняют, и поэтому должны быть внимательно проверены и
по возможности отключены. Любимым трюком взломщиков является exploit SUID root программ, чтобы в
дальнейшем использовать их как скрытый вход в систему. Поэтому Вам
необходимо находить и внимательно следить за всеми SUID/SGID-программами,
чтобы вовремя заметить изменения, внесенные кем-то в них. Используйте
следующую команду для поиска всех SUID/SGID-программ на сервере:
Замечание. Читайте в этой книге главу 10 "Программное обеспечение
обеспечения безопасности (утилиты слежения)", где приведена информация о
программе sXid, которая поможет автоматизировать подобные задачи и будет
высылать отчеты по электронной почте. Некоторые системные файлы могут предстать как дыра в безопасности, если
хакер получит доступ к системе и сможет модифицировать их. Кроме того,
дополнительную опасность представляют каталоги полностью открытые для
записи. В них нарушитель легко может записывать и удалять файлы. В нормальном
состоянии системы существует несколько файлов открытых для записи, включая
несколько в каталоге /dev. Для нахождения файлов и каталогов полностью открытых для записи
используйте следующие команды:
Замечание. Для облегчения регулярного поиска и проверки подобных
файлов и каталогов можно использовать специализированное программное
обеспечение, например, Tripwire. Большую информацию об этом программном
продукте можно прочитать в главе 12 "Программы
обеспечения безопасности (целостность системы)". Наличие файлов не имеющих владельцев может указывать на вторжение в
систему. Никогда не принимайте подобные файлы. Если Вы нашли файлы и каталоги
не имеющие владельцев в Вашей системе, то внимательно проверьте их, и если с
ними все в порядке, определите владельца. Иногда Вы можете деинсталлировать
некоторые программы, и в результате останутся файлы и каталоги без владельца,
в этом случае спокойно удалите их. Для поиска файлов и каталогов не имеющих владельца используйте команду:
Замечание. Файлы, найденные в каталоге /dev, не считаются неправильными.
Файлы .rhosts являются частью постоянной работы системного администратора,
так как этим файлам не должно найтись места на Вашей системе. Помните, что
нарушителю нужен только один небезопасный логин пользователя, чтобы в будущем
получить доступ в Вашу сеть. Вы можете найти файлы .rhosts, используя команду:
Можно использовать задания cron, чтобы регулярно искать, проверять и
удалять файлы $HOME/.rhosts. Не забудьте предупредить
пользователей о подобной проверке. Чтобы использовать cron для периодической проверки и отсылки отчетов через
электронную почту о наличие всех .rhosts-файлов сделайте следующее:
Создайте от пользователя root скрипт find_rhosts_files в каталоге
/etc/cron.daily (touch /etc/cron.daily/find_rhosts_files) и внесите
в него следующие строки:
Сделайте этот скрипт исполняемым и проверьте, чтобы пользователем и
группой, владеющими этим файлом, были root:
Каждый день по почте пользователю root будут поступать письма с темой:
"Content of .rhosts file audit report", содержащие список
найденных файлов .rhosts. Если Вы поняли, что Ваша система была взломана, то взаимодействуйте с CERT
Coordination Center или с Вашим представителем в FIRST (Forum of Incident
Response and Security Teams).
Часть II. Безопасность и оптимизация
Глава 3. Общая системная безопасность
Обзор
Безопасность BIOS, установка пароля на загрузку
Политика безопасности
Выбор правильного пароля
Длина пароля
PASS_MIN_LEN 5
на:
PASS_MIN_LEN 8
Логин пользователя root
Установка таймаута подключения для root
TMOUT=7200
Файл /etc/exports
/dir/to/export host1.mydomain.com (ro,root_squash)
/dir/to/export host2.mydomain.com (ro,root_squash)
/usr/sbin/exportfs -a
Отключение доступа к консольным программам
[root@deep]# rm -f /etc/security/console.apps/servicename
[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).
Отключение всего консольного доступа
# !/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
Файл /etc/inetd.conf
[root@deep]# chmod 600 /etc/inetd.conf
[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)
# Чтобы изменения вошли в силу дайте команду 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
[root@deep /root]# killall -HUP inetd
[root@deep]# chattr +i /etc/inetd.conf
[root@deep]# chattr -i /etc/inetd.conf
TCP_WRAPPERS
/etc/hosts.allow
/etc/hosts.deny
# Запрещаем доступ для всех.
ALL: ALL@ALL, PARANOID # Соответствует любому компьютеру, чье имя
# не соответствует адресу.
# Список серверов которым разрешен доступ.
sshd: 208.164.186.1 gate.openarch.com
[root@deep]# tcpdchk
warning: /etc/hosts.allow, line 6: can't verify hostname:
gethostbyname(win.openna.com) failed.
Не позволяйте системе выводить файл issue
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h
Файл /etc/host.conf
# Вначале использовать lookup через DNS, а затем файл /etc/hosts.
order bind,hosts
# Мы имеем компьютеры с несколькими IP-адресами.
multi on
# Осуществлять проверку подмены IP-адресов.
nospoof on
Файл /etc/securetty
tty1
#tty2
#tty3
#tty4
#tty5
#tty6
#tty7
#tty8
Специальные пользователи
[root@deep]# userdel username
[root@deep]# groupdel username
[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).
[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
[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
[root@deep]# chattr +i /etc/passwd
[root@deep]# chattr +i /etc/shadow
[root@deep]# chattr +i /etc/group
[root@deep]# chattr +i /etc/gshadow
Блокирование выполнения команды su root от других пользователей
auth sufficient /lib/security/pam_rootok.so debug
auth required /lib/security/pam_wheel.so group=wheel
#%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
[root@deep]# usermod -G10 admin
Ограничение ресурсов
* hard core 0
* hard rss 5000
* hard nproc 20
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
Больший контроль над монтируемыми файловыми системами
Defaults позволяет все (quota, read-write и suid) на этом разделе.
Noquota не использовать квоты пользователей на этом разделе.
nosuid не использовать SUID/SGID-доступ на этом разделе.
nodev нет символьных и специальных устройств на этом разделе.
noexec нет исполняемых программ на этом разделе.
quota пользовательские квоты действуют на этом разделе.
ro позволять доступ только для чтения к этому разделу.
rw позволять доступ на чтение/запись к этому разделу.
suid позволять SUID/SGID-доступ на этом разделе.
/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
Перемещение программы RPM и изменение прав доступа к ней
[root@deep]# mount /dev/fd0 /mnt/floppy
[root@deep]# mv /bin/rpm /mnt/floppy
[root@deep]# umount /mnt/floppy
[root@deep]# chmod 700 /bin/rpm
Настройка shell
HISTFILESIZE=20
HISTSIZE=20
rm -f $HOME/.bash_history
Файл /etc/lilo.conf
Эта опция контролирует, как долго (в десятых долях секунды) LILO ждет ввода
информации от пользователя перед тем, как продолжит загрузку по умолчанию.
Одним из требований уровня безопасности C2 является возможность установки
интервала, равного 0. Установите эту опцию в 0, если у Вас нет необходимости
в различных вариантах загрузки.
Эта опция ослабляет парольную защиту, так как она требует введение пароля
только, если были определены параметры загрузки (например, linux single). Она
может использоваться только совместно с опцией "password". Убедитесь, что Вы
используете эту опцию с каждым образом.
Это опция требует запроса пароля у пользователя, если он загружает linux в
однопользовательском режиме. Пароль является зависимым от регистра.
Обязательно проверьте, чтобы файл /etc/lilo.conf мог читать
только пользователь root.
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
[root@deep]# chmod 600 /etc/lilo.conf
[root@deep]# /sbin/lilo -v
[root@deep]# chattr +i /etc/lilo.conf
[root@deep]# chattr -i /etc/lilo.conf
Запрещение перезагрузки системы по комбинации клавиш
Control-Alt-Delete
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now
[root@deep]# /sbin/init q
Физические твердые копии всех важных файлов регистрации
authpriv.*;mail.*;local7.*;auth.*;daemon.info /dev/lp0
[root@deep]# /etc/rc.d/init.d/syslog restart
authpriv.*;mail.*;local7.*;auth.*;daemon.info /dev/lp0
daemon syslogd -m 0
daemon syslogd -r -m 0
[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
IPADDR="208.164.186.2" в файле настроек firewall.
SYSLOG_CLIENT="208.164.168.0/24" в файле настроек firewall.
authpriv.*;mail.*;local7.*;auth.*;daemon.info @mail
[root@deep]# /etc/rc.d/init.d/syslog restart
ipchains -A output -i $EXTERNAL_INTERFACE -p udp -s $IPADDR 514 \
-d $SYSLOG_SERVER 514 -j ACCEPT
EXTERNAL_INTERFACE="eth0" в файле настроек firewall.
IPADDR="208.164.186.1" в файле настроек firewall.
SYSLOG_SERVER="mail.openarch.com" в файле настроек firewall.
[root@deep]# /etc/rc.d/init.d/firewall restart
[root@deep]# chmod -R 700 /etc/rc.d/init.d/*
Файл /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
[root@deep]# rm -f /etc/issue
[root@deep]# rm -f /etc/issue.net
Биты программ, подчиненных пользователю 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
[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
[root@deep]# man netreport
Параметры, настраиваемые в ядре
Предохранение Вашей системы от ответов на ping-запросы
[root@deep /]# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
[root@deep /]# echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
# 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 ]
Предохранение Вашей системы от ответов на широковещательные запросы
[root@deep /]# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# 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 ]
Протоколы маршрутизации
[root@deep /]# for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do
> echo 0 > $f
> done
# 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 ]
Включение защиты от TCP SYN Cookie
[root@deep]# echo 1 > /proc/sys/net/ipv4/tcp_syncookies
# 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 ]
Запрещение приема ICMP redirect-пакетов
[root@deep /]# for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do
> echo 0 > $f
> done
# 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 ]
Включение always-defragging защиты
[root@deep /]# echo 1 > /proc/sys/net/ipv4/ip_always_defrag
# 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 ]
Включение защиты от неправильных сообщениях об ошибках
[root@deep /]# echo 1>/proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
# 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 ]
Включение защиты от IP-spoofing
[root@deep /]# for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
> echo 1 > $f
> done
# 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 ]
Фиксирование пакетов с поддельными адресами (spoof), пакетов с
маршрутизацией от источника и Redirect-пакетов
[root@deep /]# for f in /proc/sys/net/ipv4/conf/*/log_martians; do
> echo 1 > $f
> done
# 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 ]
<
Странные или скрытые файлы
[root@deep]# find / -name ".. " -print -xdev
[root@deep]# find / -name ".*" -print -xdev | cat -v
Поиск всех файлов с включенными битами SUID/SGID
[root@deep]# find / -type f \( -perm -04000 -o -perm -02000 \) \
-exec ls -lg {} \;
Поиск программ и каталогов, в которые разрешена запись для группы и
всех остальных пользователей
[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 {} \;
Файлы, не имеющие владельцев
[root@deep]# find / -nouser -o -nogroup
Поиск .rhosts-файлов
[root@deep]# find /home -name .rhosts
#!/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@deep]# chmod 755 /etc/cron.daily/find_rhosts_files
[root@deep]# chown 0.0 /etc/cron.daily/find_rhosts_files
Система была взломана
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)) по рабочим дным, в критических ситуациях можно звонить в
выходные и праздничные дни.
Найди своих коллег! |