Обновляйтесь. Самый тривиальный и часто даваемый совет. К сожалению, так же часто не выполняемый. Ведь программа, в которой обнаружена ошибка, является практически открытыми воротами для взломщика. Но обновляйтесь только в том случае, если это действительно необходимо. Содержать самые последние версии только ради того, "что бы были" - это несерьезно. Самый яркий пример - это уязвимость в ssh. Ей уже куча времени, ее даже успели показать в "матрице", а тем не менее серверов с уязвимым sshd еще очень много. А какой был бум взломов через уязвимый named ... Наверняка, если хорошо порыться, можно найти очень много подобных серверов в современной сети.
Разбирайтесь в операционной системе и в составе ее сервисов. Вам стоит знать, что процесс init в системе должен быть один и у него должен быть pid равный единице. И то, что демона irqd не существует, тоже должно являться для вас непреложным фактом. Вы должны прекрасно знать, что и на каком этапе работает в системе - как запускаются сервисы, как узнать, откуда он был запущен и почему он был запущен именно так. А журналирование действий пользователя в системе ... с чей-то легкой руки время сохранения файлов логов в многих дистрибутивах поставлено на 4 недели. Всего лишь один месяц. А это очень короткий срок в современном мире. А вы в курсе, что syslogd может отправлять приходящие сообщения на другую машину? А вы знаете о том, что rpm может проверить целостность всех программ, установленных у вас в системе? А вы это используете? Если ответы "да", то я рад за вас.
Отключите ненужное, а неиспользуемое удалите. Возьмем к примеру обычный linux сервер, установленный неопытным администратором. Поглядите на него и задайтесь вопросом: "а зачем там стоит gcc, nfs и cdparanoia?" Опять хотите пример? Пожалуйста - их есть у меня. Взломщик через ssh или кривой скрипт, запущенный на сервере, получает права пользователя nobody. При установленном gcc ему не составит труда собрать либо трояна, либо использовать другую уязвимость (к примеру, та же проблема с ptrace).
Разберитесь c работающими сервисами и отключите у них "лишние" возможности. Задайтесь вопросом, зачем в конфигурационном файле sshd существуют такие директивы, как ListenAddress и PermitRootLogin? Затем обратите внимание на стоящий apache и узнайте, нужны ли ему модули mod_cgi или mod_rewrite? А ведь каждый лишний модуль - потенциальная лазейка для взломщиков. У вас стоит PHP? Здорово. А вы в курсе, что в файле php.ini существует целая секция, посвященная безопасности? Поищите по слову safe_dir - уверяю, в окрестностях этой директивы можете найти много интересного. Ведь необходимо потратить буквально 10 минут и никакой злой PHP скрипт не сможет прочитать содержимое конфигурационных файлов в каталоге /etc. 5 минут сверху - и MySQL больше не принимает пакеты со всего мира, а мирно работает только через unix socket. Буквально час времени необходимо потратить, что бы даже открытые всему миру сервисы не представляли большой проблемы. А кто из вас потратил этот час?
Пользуйтесь встроенными средствами защиты операционной системы. Вспомните, что Linux, как и все остальные unix'ы, изначально многопользовательский. Прочитайте про действие команд chroot и ulimit. А флаги для файловой системы? Ведь nosuid, noexec и nodev появились не на пустом месте. А про команду sudo и механизм ее работы вы в курсе?
Используйте сетевые средства защиты. Упредить взлом - значит практически предотвратить его. Возьмем опять же наш любимый www сервер. Зачем ему торчащий во внешний мир sshd? А зачем ему возможность установить соединение с любого порта? Возьмите встроенный файрволл и запретите на нужном интерфейсе прием и передачу пакетов со всех портов, кроме 80го. Теперь даже если в машину закачают троян, он не сможет соединиться со своим владельцем. Мелочь, а взломщику она резко усложнит задачу. Но это пассивная защита. А ведь еще существуют и "активные" варианты, которые работают в тесной связке с IDS, своевременно предупреждая администратора о потенциальных атаках.
Напишите что-нибудь свое. Любой грамотный администратор сможет написать нужный ему скрипт на 2-3 языках. Так почему бы не потратить лишние 10 минут и не написать примитивную ловушку для взломщика? К примеру, в любой системе есть скрипты, которые обслуживают систему - воспользуйтесь ими. Скопируйте /etc/passwd в какой-нибудь малоприметный файлик в недрах рабочих каталогов скриптов и вставьте одну (!) команду в работающий скрипт вот она:
diff /etc/passwd /path/to/saved/passwd
Все. Самая примитивная ловушка готова. В обычном режиме никаких видимых изменений не произойдет. Однако когда взломщик поменяет содержимое /etc/passwd, то diff выдаст те строчки, которыми различаются файлы. А так как скрипты выполняются из-под crond, то последний переадресует эти различия администратору. Просто? Просто! Ловушка примитивна до безобразия, но очень тяжело обнаруживаемая. Однако из двух-трех подобных ловушек при взломе одна обязательно сработает. Не хотите хранить файл passwd - кто мешает считать для него контрольную сумму по алгоритму md5? А чем плох подсчет контрольной суммы программы ps? Эти ловушки хороши имено своим примитивизмом. Даже то, что их приходится периодически "взводить" при обновлении системы или заведении пользователя, хорошо - автоматом вы проверяете их работоспособность.
В общем, не надо надеяться на то, что "linux - это вроде как unix и его поломать невозможно". Ломается все. Главное - за какое время и с каким шумом.