Глава 3 Общая системная безопасность (Часть 2)
Обзор Безопасность BIOS, установка пароля на
загрузку Политика безопасности Выбор правильного пароля Длина пароля Бюджет пользователя root Установка таймаута подключения для root Файл “/etc/exports” Отключение доступа к консольным
программам Отключение всего консольного
доступа Файл “/etc/inetd.conf” TCP_WRAPPERS Не позволяйте системе выводить файл
issue Файл “/etc/host.conf” Файл “/etc/securetty” Специальные пользователи Блокирование выполнения команды su root от других
пользователей Ограничение
ресурсов Больший контроль над
монтируемыми файловыми системами Перемещение программы RPM и изменение прав доступа
к ней Настройка shell Файл “/etc/lilo.conf”. Запрещение перезагрузки системы по комбинации
клавиш Control-Alt-Delete Физические
твердые копии всех важных файлов регистрации Файл “/etc/rc.d/rc.local” Биты программ подчиненных пользователю
root Параметры настраиваемые в
ядре Предохранение вашей системы от
ответов на ping запросы Предохранение
вашей системы от ответов на широковещательные запросы Протоколы маршрутизации Включение защиты от TCP SYN Cookie Запрещение приема ICMP redirect пакетов Включение always-defragging защиты Включение защиты от неправильных сообщениях об
ошибках Включение защиты от IP
spoofing Фиксирование пакетов с
поддельными адресами (spoof), пакетов с маршрутизацией от источника, Redirect
пакетов Странные или скрытые
файлы Поиск всех файлов с включенными
битами SUID/SGID Поиск программ и
каталогов, в которые разрешена запись для группы и всех остальных
пользователей Файлы не имеющие
владельцев Поиск “.rhosts”
файлов Система была взломана
Это очень важно. Выключите все ненужные специальные бюджеты
пользователей, которые созданы по умолчанию в вашей системе (Это
необходимо проделывать после каждого обновления). 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 пакетов, которые
автоматически добавляют новых пользователей или новые группы.
Если вы не хотите, чтобы кто-нибудь выполнял команду 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, то
это потому, что вы используете неправильный терминал.
Файл 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
Вы можете получить больший контроль над смонтированными файловыми
системами (например, “/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 и т.д.).
После того, как вы проинсталлировали все программы, которые нужны на
сервере, хорошей идеей будет переместить программу 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
Чтобы сделать легким повторный ввод длинных команд, 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.
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/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
Один из важнейших аспектов защиты – это целостность лог файлов,
расположенных в /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/, то не забудьте проверить и при необходимости
изменить права доступа к ним.
По умолчанию, когда вы подключаетесь к 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”, так как он при
каждой перезагрузке пересоздает эти файлы.
|