L  i  n  u  x    P  a  r  k
при поддержке ВебКлуба
Назад Оглавление Вперед

Глава 3 Общая системная безопасность (Часть 2)

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

Это очень важно. Выключите все ненужные специальные бюджеты пользователей, которые созданы по умолчанию в вашей системе (Это необходимо проделывать после каждого обновления). 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 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 на место.

Переместите 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

Настройка 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.

Файл ⌠/etc/lilo.conf■.

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

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

  1. Добавьте: timeout=00
    Эта опция контролирует как долго (в десятых долях секунды) LILO ждет ввода информации от пользователя перед тем как продолжит загрузку ⌠по умолчанию■. Одним из требований уровня безопасности C2 является возможность установки интервала равного 0. Установите эту опцию в 0, если у вас нет необходимости в различных вариантах загрузки.
  2. Добавьте: restricted
    Эта опция ослабляет парольную защиту, так как она требует введение пароля только если были определены параметры загрузки (например, linux single). Она может использоваться только совместно с опцией ⌠password■. Убедитесь, что вы используете эту опцию с каждым образом.
  3. Добавьте: 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

Запрещение перезагрузки системы по комбинации клавиш 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

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

Один из важнейших аспектов защиты √ это целостность лог файлов, расположенных в /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/, то не забудьте проверить и при необходимости изменить права доступа к ним.

Файл ⌠/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■, так как он при каждой перезагрузке пересоздает эти файлы.


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