L i n u x P a r k при поддержке ВебКлуба |
Назад | Оглавление | Вперед |
В этой главе Общие вопросы безопасности Linux |
UNIX системы настолько безопасны, насколько безопасными их сделает администратор. Чем больше сервисов у вас установлено, тем больше шансов, что в них будет найдена ⌠дыра■. Когда вы инсталлируете Linux, вы должны устанавливать минимум пакетов, а затем добавлять только необходимые элементы, уменьшая шансы установить приложение с ошибкой, нарушающей его безопасность. В этой главе мы обсудим общие принципы обеспечения безопасности сервера. Также здесь мы опишем ряд возможностей, которые можно использовать для предотвращения вторжения как снаружи, так и из внутри.
Отмените возможность загрузки компьютера с дискеты, установите пароль на доступа к настройкам BIOS. Запрет загрузки с дискет не позволит злоумышленникам загрузить компьютер с дискеты и получить доступ к системе, а установка пароля на доступ к BIOS не позволит включить загрузку с дискеты.
Вы не сможете правильно реализовать безопасность системы пока не выясните, что вы хотите защищать и от кого. Для того, чтобы принимать решения относящиеся к защите вам нужно выработать политику безопасности, список того, что вы хотите разрешить и что хотите запретить. Политика также должна определять ваши ответные действия на нарушения безопасности. Приведенные ниже вопросы должны помочь вам в выработке стратегии:
Этот список короткий и вы при выработке стратегии можете охватить более широкий круг вопросов. Любая политика безопасности базируется на некотором уровне паранойи; решите насколько вы доверяете людям, как внутри организации, так и с наружи. Стратегия должна балансировать между разрешением пользователям доступа к необходимой им информации и запрещением доступа к определенным видам данных. Точка, где эти линии пересекаются и определит вашу стратегию.
Исходной точкой вашего тура в безопасность Linux является пароль. Многие люди используют единственный пароль всю жизнь доверяя ему защиту всех своих данных. Вопреки популярной вере, не взламываемых паролей не существует. Любой из них поддается либо социальной разработке, либо грубой силе.
Социальная разработка паролей сервера √ наиболее простой и популярный способ получения доступа к бюджетам пользователей и серверам. Часто, какое- либо простое действие наподобие выдачи себя за руководителя или крика о правах человека, приносит очень хорошие результаты, часто давая даже полный доступ к системе.
Неплохой идеей будет еженедельно проверять файл с паролями с помощью программы-взломщика. Это поможет найти пароли, которые легко подбираются и которые необходимо срочно заменить. Также механизм проверки должен работать и в момент определения паролей, чтобы отклонить заведомо слабый пароль при его начальной задании или переопределении. Строки символов, которые представляют собой простые слова, или находятся в одном регистре, или не содержат цифр и специальных знаков, должны быть отклонены. Я рекомендую использовать следующие правила для создания эффективных паролей:
Минимально допустимая длина пароля задаваемая по умолчанию в Linux √ 5 символов. Это значит, что когда новому пользователю разрешается доступ на сервер, то длина строки представляющей собой пароль должна быть минимум 5 букв, цифр или специальных знаков. Кроме того она должна быть не больше 8 символов. Чтобы нерадивые пользователи не использовали пароли длиной 5 символов можно увеличить его минимальный размер до 8, отредактировав файл ⌠/etc/login.defs■.
Редактируйте файл login.defs (vi /etc/login.defs) изменив строку
PASS_MIN_LEN 5
в
PASS_MIN_LEN 8
Этот файл является конфигурационным для программы login. Здесь вы можете изменить и другие параметры, чтобы они соответствовали вашей стратегии защиты (время действия пароля, длина пароля и др.).
Бюджет ⌠root■ является самым привилегированным на UNIX системах. На него нельзя наложить никакие ограничения по безопасности. Это значит, что система считает, что вы знаете что делаете и никаких вопросов задавать не будет. Поэтому очень легко, ошибшись в команде, уничтожить важную системную информацию. При использовании этой учетной записи надо быть максимально осторожным. Из соображений безопасности никогда не подключайтесь к системе как пользователь root, если только вы абсолютно не уверены в том, что делаете.
Часто бывает, что администратор войдя в систему под пользователем root забывает выйти и его сессия остается открытой. Решением этой проблемы может быть переменная ⌠TMOUT■ в BASH, которая определяет время, через которое пользователь автоматически отключается от системы, если он не активен. Она содержит время в секундах до отключения.
Редактируйте файл ⌠/etc/profile■ и добавьте следующую строку сразу после строки с ⌠HISTFILESIZE=■:
TMOUT=7200Мы определяем значение для TMOUT равное 2 часам (60*60*2). Следует отметить, что если вы добавили эту строку в файл /etc/profile, то переменная определяется для любого подключаемого пользователя, а не только root. Чтобы установить ее для конкретного пользователя измените файл ⌠.bashrc■ в его домашнем каталоге.
Если вы экспортируете свои файловые системы с использованием NFS, то необходимо сконфигурировать файл ⌠/etc/exports■ с максимально возможными ограничениями. В нем не следует использовать групповые символы (?, *), нельзя позволять доступ для записи пользователю root и следует монтировать ⌠только для чтения■ все, что только возможно.
Отредактируйте файл /etc/exports, добавив в него:
/dir/to/export host1.mydomain.com (ro,root_squash)Где dir/to/export √ каталог для экспортирования, host1.mydomain.com √ имя машины с которой разрешается доступ, <ro> - монтирование ⌠только для чтения■, <root_squash> - не позволять пользователю root доступа с правом на запись.
Чтобы изменения вступили в дейтсвие вам необходимо выполнить команду
/usr/sbin/exportfs √aЗамечание. Использование NFS сервера увеличивает риск нарушения безопасности вашей системы. Лучше его не использовать.
Одной из самых простых и необходимых настроек является блокирование консольно-эквивалентного доступа к программам halt и shutdown. Чтобы это сделать выполните:
[root@deep]# rm -f /etc/security/console.apps/servicenameгде servicename имя программы к которой вы хотите запретить консольно- эквивалентный доступ. Если вы не используете xdm, будьте внимательны, не удалите файл xserver, иначе никто кроме пользователя root, не сможет запустить X сервер (если вы всегда используете xdm для запуска X сервера, и только пользователь root должен запускать X сервер, то тогда можно подумать об удалении файла xserver).
Пример:
[root@deep]# rm -f /etc/security/console.apps/haltВ результате будет запрещен консольно-эквивалентный доступ к программам halt, shutdown, reboot и poweroff. Программа xserver используется если у вас установлен X Window.
Замечание. Если вы инсталлировали систему как описано в этой книге, то X Window у вас не установлен и файлы описанные выше в каталоге /etc/security не появятся, поэтому вы этот шаг можете пропустить.
Чтобы блокировать весь консольный доступ, включая программу и файл доступа, в каталоге /etc/pam.d/, закомментируйте все строки, в которых вызывается pam_console.so. Этот шаг является продолжением предыдущего. Нижеприведенный скрипт сделает это автоматически за вас. Создайте файл disabling.sh (touch disabling.sh) и внесите в него следующие строки:
# !/bin/shИ сделайте его испольняемым:
[root@deep]# chmod 700 disabling.shОн будет комментировать все строки ссылающиеся на pam_console.so во всех файлах в каталоге /etc/pam.d. После того, как скрипт выполнит свою работу, удалите его из системы.
Inetd называется ⌠супер сервером■, который запускает другие демоны по запросам из сети. Inetd.conf говорит inetd какие порты слушать и какие сервисы запускать для каждого порта. Как только вы подключаете вашу систему к сети, подумайте какие сервисы вам нужны.
Ненужные сервисы надо отключить, а лучше деинсталлировать, чтобы у вас стало меньше головной боли, а у атакующего меньше шансов найти лазейку в вашу систему. Просмотрите файл /etc/inetd.conf и вы увидите, какие сервисы он предлагает. Закомментируйте строки (# в начале строки) с ненужными сервисами, а затем пошлите процессу inetd сигнал SIGHUP.
Шаг 1.
Измените права доступа к файлу на 600:
[root@deep]# chmod 600 /etc/inetd.confШаг 2.
Удостоверьтесь, что владельцем файла является root
[root@deep]# stat /etc/inetd.confШаг 3.
Редактируйте файл inetd.conf (vi /etc/inetd.conf) и отключите следующие сервисы: ftp, telnet, shell, login, exec, talk, ntalk, imap, pop-2, pop-3, finger, auth и т.д. пока вы не планируете их использовать. Чем меньше сервисов включено, тем меньше риск для системы.
# Чтобы изменения вошли в силу дайте команду 'killall -HUP inetd' # #echo stream tcp nowait root internal #echo dgram udp wait root internal #discard stream tcp nowait root internal #discard dgram udp wait root internal #daytime stream tcp nowait root internal #daytime dgram udp wait root internal #chargen stream tcp nowait root internal #chargen dgram udp wait root internal #time stream tcp nowait root internal #time dgram udp wait root internal # # Это стандартные сервисы # #ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a #telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd # # Shell, login, exec, comsat и talk являются протоколами BSD. # #shell stream tcp nowait root /usr/sbin/tcpd in.rshd #login stream tcp nowait root /usr/sbin/tcpd in.rlogind #exec stream tcp nowait root /usr/sbin/tcpd in.rexecd #comsat dgram udp wait root /usr/sbin/tcpd in.comsat #talk dgram udp wait root /usr/sbin/tcpd in.talkd #ntalk dgram udp wait root /usr/sbin/tcpd in.ntalkd #dtalk stream tcp wait nobody /usr/sbin/tcpd in.dtalkd # # Почтовые Pop и imap сервисы # #pop-2 stream tcp nowait root /usr/sbin/tcpd ipop2d #pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d #imap stream tcp nowait root /usr/sbin/tcpd imapd # # Internet UUCP сервис. # #uucp stream tcp nowait uucp /usr/sbin/tcpd /usr/lib/uucp/uucico -l # # Сервис Tftp предоставляется в первую очередь для удаленной загрузки. # В большинстве случаев, он используется только на "серверах загрузки■ # Не удаляйте символы комментариев, если вы не уверены, что это вам нужно. # #tftp dgram udp wait root /usr/sbin/tcpd in.tftpd #bootps dgram udp wait root /usr/sbin/tcpd bootpd # # Finger, systat и netstat дают информацию внешним пользователям, которая # может быть использована для взлома системы. На многих серверах # некоторые или все из них отключены с целью улучшения безопасности. # #finger stream tcp nowait root /usr/sbin/tcpd in.fingerd #cfinger stream tcp nowait root /usr/sbin/tcpd in.cfingerd #systat stream tcp nowait guest /usr/sbin/tcpd /bin/ps -auwwx #netstat stream tcp nowait guest /usr/sbin/tcpd /bin/netstat -f inet # # Аутентификация # #auth stream tcp nowait nobody /usr/sbin/in.identd in.identd -l -e -o # # Конец inetd.conf
Замечание. Не забудьте послать сигнал SIGHUP процессу inetd (killall -HUP inetd) после редактирования файла /etc/inetd.conf.
[root@deep /root]# killall -HUP inetdШаг 4.
Для большего улучшения безопасности, вы можете сделать файл ⌠inetd.conf■ неизменным, используя команду chattr:
[root@deep]# chattr +i /etc/inetd.confФайл с атрибутом ⌠i■ не может быть модифицирован, его нельзя удалить или переименовать, к нему нельзя создать ссылки и никакие данные не могут быть дописаны в файл. Только суперпользователь может установить или снять этот атрибут. Если вы захотите модифицировать файл ⌠inetd.conf■, то дайте следующую команду:
[root@deep]# chattr -i /etc/inetd.confПо умолчанию, Red Hat отвечает на все запросы к имеющимся сервисам. Используя TCP_Wrappers, вы легко сможете оградить ваш сервер от внешних вторжений когда это нужно. Запретите все хосты, добавив ⌠ALL: ALL@ALL, PARANOID■ в ⌠/etc/hosts.deny■, и определите список тех кому доступ разрешен в файле ⌠/etc/host.allow■ √ это самая безопасная конфигурация. TCP_Wrappers контролируется двумя файлами. Поиск завершается при первом совпадении.
/etc/hosts.allowШаг 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:
[root@deep]# tcpdchkЗамечание. Ошибка может выглядеть следующим образом:
warning: /etc/hosts.allow, line 6: can't verify hostname: gethostbyname(win.openna.com) failed
Если вы получили подобное сообщение, то проверьте ваш конфигурационный
файл DNS сервера, на наличие в нем этого имени компьютера.
Если вы не хотите, чтобы файл issue выводился на экран, когда удаленный пользователь подключается к серверу, измените опцию telnetd в файле /etc/inetd.conf:
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd √hФлаг ⌠-h■ говорит демону не выводить любую системную информацию, ограничиться только запросом ⌠login:■. Эту возможность необходимо использовать только, когда на сервере запускается демон telnet (вместо него я рекомендую использовать ssh).
Linux использует библиотеку resolver для преобразования IP адресов в имена машин. Файл ⌠/etc/host.conf■ определяет порядок работы этой библиотеки. Он говорит какой сервис и в каком порядке использовать для преобразования адресов.
Редактируйте файл host.conf (vi /etc/host.conf) и добавьте следующие строки:
# Вначале использовать lookup черз DNS, а затем файл/etc/hosts.Опция 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, которые вам не нужны, закомментировав их (знак # в начале строки).
tty1В результате root сможет входить в систему только с терминала tty1. С остальных терминалов вы сможете переключаться на root используя команду su.
Назад | Оглавление | Вперед |