Несколько простых советов помогающих избежать головной боли в работе линукс сервера.

Linux
Многие наивно полагают, что линукс систему поломать невозможно, поверьте брехня полная, ломается достаточно легко, а грохот от взлома в итоге вам может дорого стоить.
Итак на что надо обратить внимание:
отключаем все ненужное и удаляем все неиспользуемое — типовой linux-сервер, установленный неопытным администратором: установлены: gcc, nfs и прочее из коробки, вопрос — «ЗАЧЕМ?» Ответ — по-дефолту из коробки, убрать лень. Результат: хацкер через кривой скрипт, запущенный на сервере, получает права пользователя nobody, теперь ничего не мешает при установленном gcc собрать либо трояна, либо использовать другую уязвимость.

сядьте и прошерстите систему на работающие процессы и сервисы, исправность установленных пакетов: на что смотреть в первую очередь — процесс init должен быть один в системе и занимать Pid=1. «У вас несколько несколько процессов init?» — надо серьезно задуматься. Проверьте с какими зависимостями запускаются службы и сервисы. Как у вас настроена ротация логов, по-умолчанию? Вы уверены что вам не нужно более глубокое журналирование? Как у вас настроен syslogd, вы используете отправку уведомление из syslogd на другую машину? Вы проверяли с помощью rpm целостность установленных у вас программ? rpm -V <имя пакета>. Как настроен SSH — как настроены у вас в конфигурационном файле sshd такие директивы, как ListenAddress и PermitRootLogin? Используя Apache и подключая к нему модули, вы включили только нужный вам набор модулей или подключали все подряд, лишь бы заработало, вполне возможно что вы включили лишнее — н-р fast_cgi или в настройках php5 для Apache забыли настроить safe_dir. Правильное понимае настроек спасет вас от взлома вашего сервера — для того чтобы скрыть основные дыры в Apache/PHP нужно примерно 15-20 минут, еще минут 5 и у вас MySQL или PostreSQL принимает данные только на своем unix socket, а не решето открытое всем из мира. Вооружившись интернетом и потратив час-полтора на настройку безопасности сервера вы сбережете себе не мало нервов.

используйте встроенную защиту — линукс система появилась достаточно давно и является средой многопользовательской, поэтому не лишне в работе использовать давно зарекомендовавшие себя функции chroot и ulimit, не логиниться в систему от имени root, а использовать sudo для привелигированных пользователей. Не лишне пользоваться атрибутами файловой системы nosuid, noexec и nodev.

настройте сетевой файервол — внимательно посмотрите на то какие порты открыты у вас в мир, все они нужны? Как правило нужны 22(ssh — если удаленно админите сервак), 25(smtp — если используется почта), 53(dns), 80(www), 123(ntp), все остально как правило можно закрыть наглухо. Если у вас чисто WEB-сервер, а админите вы его из локальной сети, закройте в мир все кроме 80(www) — этим вы резко усложните жизнь взломщика. Хорошим тоном является использование IDS (активного определения вторжений) — хорошим примером для использвания является настройка iptables силами утилиты vuurmuur в связке со snort, не поленитесь прикрутить уведомление на e-mail или sms администратору о вторжении. Программа очень удобна в работа, имеет русский интерфейс, позволяет управлять шейпером канала.

наблюдайте за важными системными файлами — например за /etc/passwd — файл хранящий пароли пользователей, во FreeBSD делается ежедневный diff на изменения этого файла и приходит уведомление администратору на почту. В линукс тоже можно сделать такую слежку силами diff — копируем файл в некую папку, н-р /var/lib/mysql, периодически выполняемая команда diff /etc/passwd /var/lib/mysql/passwd при обнаружении выдаст нам уведомление о строках добавленных или измененных в файле, добавьте такую обработку в cron от имени root, а лучше запишите команду в виде скрипта, положите его например в /bin и запускайте по cron, а уведомление об изменении будут приходит администратору, в результате вы получите труднообнаруживаемую ловушку — взломщик вряд ли будет разбираться что там запускается по cron. Применение таких примитивных ловушек существенно облегчить жизнь, да и за вашими действиями над этими файлами они тоже будут следить.

настройте резервное копирование — очень полезный момент — наличие резервных копий, дампов баз данных и прочее-прочее, правильный архив, сделанный силами tar-gzip (tar zcvf <имя архива>.tgz <имя каталога> — скрутит в архив файлы с атрибутами — то есть архив можно будут раскрутить в том же месте, где вы его делали, поверх существующих файлов и исходными атрибутами прав.
обновляйтесь — кто внимательно смотрел фильм Матрица, помнит как благодаря уязвимости в ssh была взломана система. А что творилось когда была обнаружена уязвимость в named? Если хорошо порыться в интернет, то можно увидеть кучу дыр в том или ином системном и прикладном ПО. Совет в целом тривиальный, но спасает от многих бед.

ЗЫ: к чему я это все? Во-первых: половина ваших проблем — в ваших настройках по-дефолту, из коробки и прочих наводняющих интернет советов и идей — нажми на кнопку — получишь результат. Увы, по истечении некоторого времени получите серьезный геморрой, если не пройдетесь ручками. Во-вторых: лень в обновлении ПО (есть отдельные программы которые капризничают при апгрейде, но они как правило специфичны и редко обновляются, при необходимости их можно исключить из апгрейда с помощью dselect и используйте apt-get -u dselect-upgrade)

8 комментариев

avatar
Неплохая заметка!
avatar
Золотые слова
avatar
Много раз видел ленивых: разрешен root на ssh и ftp, пароль root на ssh, phpmyadmin, mysql, PostreSQL, ftp — один и тот же. No comments
avatar
«У вас несколько несколько процессов init?»
Да, у меня несколько процессов init. И это нормально, потому что LXC-контейнеры :)
avatar
дык речь идет о единичных системах, а не о средах виртуализации, когда патчиться ядро, а для изоляции используются уже имеющиеся в ядре namespaces, а для управления ресурсами CG (группы управления) — тут будет отдельная песня. В этом я предпочитаю минимальную прослойку — ESXi — до 32 Gb / 16 CPU — бесплатно, среднему офису под 3-4 сервака, без PDC — более чем не надо ;)