железобетонный сервер _MIF_ (ROOT@SECURITYLAB.CO.IL) Спецвыпуск: Хакер, номер #068, стр. 068-052-3 # Сколько процессов может запускать пользователь :maxproc=64:\ # Пускать юзера в систему только если его домашняя дира существует и доступна # юзеру :requirehome:true\ # Время устаревания пароля :passwordtime=90d:\ # Остальное берем из профиля default :tc=default: Здесь я указал лишь основные параметры. Список всех параметров и их описание можно найти в Handbook (см. врезку) [Hard] Теперь к вопросу о файловой системе. Самый важный файл настроек в данном случае - /etc/fstab. Он применяется при загрузке, и указывает системе, как работать с тем или иным разделом файловой системы, что с ним может делать пользователь, а что - нет. Открываем /etc/fstab и приводим его примерно в такой вид: /dev/ad1s1b none swap sw 0 0 /dev/ad1s1a / ufs rw 1 1 /dev/ad1s1e /tmp ufs rw,noexec 2 2 /dev/ad1s1f /usr ufs rw 2 2 /dev/ad1s1g /usr/home ufs rw,nosuid,nodev 2 2 /dev/ad1s1d /var ufs rw,nodev 2 2 /dev/acd0 /cdrom cd9660 ro,noauto 0 0 Очень важно поставить параметр noexec на /tmp. Данная опция запрещает запускать что-либо на файловой системе, даже если на файле установлен chmod 777. Я лично видел очень много взломов отлично защищенных серверов именно из-за этой ошибки, которую, почему-то, очень многие допускают. Нельзя забывать, что в /tmp может писать почти любой процесс в системе. Опция nosuid говорит системе игнорировать suid-биты файлов, а nodev запрещает создание/существование в разделе специальных устройств. [System::sysctl.] Теперь перейдем к тюнингу самой операционной системы. Открываем /etc/sysctl.conf и пишем туда следующее: Листинг файла /etc/sysctl.conf # Запрещает юзерам видеть процессы соседа, и, разумеется рутовые. security.bsd.see_other_uids=0 # Пускаем запросы на закрытые порты в черные дыры net.inet.tcp.blackhole=2 net.inet.udp.blackhole=1 # Указываем размер очереди сокета kern.ipc.somaxconn=1024 # Отрубаем ip-редиректы net.inet.icmp.drop_redirect=1 net.inet.icmp.log_redirect=1 net.inet.ip.redirect=0 # Назначаем размеры буфера для TCP-подключений. Если на сервер ожидается большая # нагрузка, и у него много памяти – лучше поставить 65535. Значение выше 65535 # не рекомендуется. net.inet.tcp.sendspace=32768 net.inet.tcp.recvspace=32768 # Обновляем ARP-таблицу каждые 20 минут net.link.ether.inet.max_age=1200 # Запрещаем отвечать на все лишние запросы. net.inet.icmp.maskrepl=0 net.inet.ip.sourceroute=0 net.inet.ip.accept_sourceroute=0 net.inet.icmp.bmcastecho=0 Конечно же здесь указаны не все параметры sysctl. Для полного описания всех возможностей не хватило бы и журнала, поэтому я указал самые основные и необходимые. Многие параметры для sysctl можно изменять и динамически: sysctl <параметр>=<значение> Например: sysctl kern.maxprocperuid=1000 Теперь необходимо продублировать часть настроек в /etc/rc.conf: # Дублируем настройки sysctl icmp_drop_redirect="YES" icmp_log_redirect="YES" icmp_bmcastecho="NO" tcp_drop_synfin="YES" [логи.] Очень важным аспектом системного администрирования является слежение за поведением сервера. Для этого существует отличная утилита logcheck. Устанавливаем: |