Думаю, будет нагляднее всего привести настройки так, как они выглядят в make menuconfig — это за одно позволит оценить «на глаз» возможности PaX и GrSecurity тем, кто с ними до сих пор не сталкивался.
Между разными версиями ядра они немного меняются, но не значительно.
PaX ---> . [*] Enable various PaX features ....... PaX Control ---> ......... [ ] Support soft mode ......... [*] Use legacy ELF header marking ......... [*] Use ELF program header marking ............. MAC system integration (none) ---> ....... Non-executable pages ---> ......... [*] Enforce non-executable pages ......... [*] . Segmentation based non-executable pages ......... [ ] Emulate trampolines ......... [*] Restrict mprotect() ......... [ ] . Disallow ELF text relocations ......... [ ] Enforce non-executable kernel pages ....... Address Space Layout Randomization ---> ......... [*] Address Space Layout Randomization ......... [*] . Randomize kernel stack base ......... [*] . Randomize user stack base ......... [*] . Randomize mmap() base ..... Miscellaneous hardening features ---> ....... [ ] Sanitize all freed memory ....... [*] Prevent invalid userland pointer dereference Grsecurity ---> . Security Level (Custom) ---> . Address Space Protection ---> ... [*] Deny writing to /dev/kmem, /dev/mem, and /dev/port ... [ ] Disable privileged I/O ... [*] Remove addresses from /proc/<pid>/[smaps|maps|stat] ... [*] Deter exploit bruteforcing ... [*] Runtime module disabling ... [*] Hide kernel symbols . Role Based Access Control Options ---> ... [*] Hide kernel processes ... (3) Maximum tries before password lockout ... (30) Time to wait after max password tries, in seconds . Filesystem Protections ---> ... [*] Proc restrictions ... [*] . Restrict /proc to user only ... [*] Additional restrictions ... [*] Linking restrictions ... [*] FIFO restrictions ... [*] Chroot jail restrictions ... [*] . Deny mounts ... [*] . Deny double-chroots ... [*] . Deny pivot_root in chroot ... [*] . Enforce chdir("/") on all chroots ... [*] . Deny (f)chmod +s ... [*] . Deny fchdir out of chroot ... [*] . Deny mknod ... [*] . Deny shmat() out of chroot ... [*] . Deny access to abstract AF_UNIX sockets out of chroot ... [*] . Protect outside processes ... [*] . Restrict priority changes ... [*] . Deny sysctl writes ... [*] . Capability restrictions . Kernel Auditing ---> ... [ ] Single group for auditing ... [ ] Exec logging ... [*] Resource logging ... [ ] Log execs within chroot ... [ ] Chdir logging ... [*] (Un)Mount logging ... [ ] IPC logging ... [*] Signal logging ... [*] Fork failure logging ... [ ] Time change logging ... [*] /proc/<pid>/ipaddr support ... [ ] ELF text relocations logging (READ HELP) . Executable Protections ---> ... [*] Enforce RLIMIT_NPROC on execs ... [*] Destroy unused shared memory ... [*] Dmesg(8) restriction ... [ ] Trusted Path Execution (TPE) . Network Protections ---> ... [*] Larger entropy pools ... [ ] Socket restrictions . Sysctl support ---> ... [*] Sysctl support ... [*] . Turn on features by default . Logging Options ---> ... (10) Seconds in between log messages (minimum) ... (4) Number of messages in a burst (maximum) [ ] Enable access key retention support [ ] Enable different security models
Абсолютное большинство этих фич работает прозрачно для пользователя. Но есть пара, которые вы можете заметить: во-первых обычные пользователи перестанут видеть процессы других пользователей, а во-вторых они потеряют доступ к некоторым файлам в /proc/, из-за чего вывод команд ifconfig, route, etc. запущенных обычными пользователями станет значительно скромнее.
Надо отметить, что большая часть этих фич может управляться через sysctl. Что, как правило, плохо. А что хорошего в том, что хакер ломает систему наполовину, получает возможность отключить эти защиты через sysctl, после чего доламывает её уже окончательно? К счастью, есть возможность заблокировать изменение настроек GrSecurity через sysctl. Для этого нужно добавить в /etc/sysctl.conf:
kernel.grsecurity.disable_modules = 1 kernel.grsecurity.grsec_lock = 1
Где первая команда запрещает подгрузку модулей ядра (лучше всего на серверах поддержку модулей даже не включать в ядре, но если это не возможно, то теперь есть выход: подгрузить нужные модули при загрузке системы, а потом с помощью kernel.grsecurity.disable_modules запретить подгрузку модулей — чтобы никто случайно руткит не подгрузил :)), а вторая запрещает изменение любых настроек GrSecurity.
Недостаток этого в том, что если вам нужно будет таки подгрузить модуль или отключить часть фич GrSecurity (например, защиту chroot для сборки нового Gentoo), то придётся редактировать /etc/sysctl.conf и перегружаться.
Собственно, настройка на этом окончена.
В качестве резюме, приведу полный набор команд, которые отконвертируют ваш Gentoo в Hardened:
emerge hardened-sources # Теперь настройте это ядро (пока не включая фичи # hardened), скомпилируйте и перегрузитесь в него. ln -snf ../usr/portage/profiles/hardened/x86/2.6/ /etc/make.profile # Уберите все флаги оптимизации из CFLAGS в /etc/make.conf # и установите -O2. # Пример: CFLAGS="-march=pentium-m -O2 -pipe" # Очистите ваш $PKGDIR (обычно /usr/portage/packages/) для # ускорения времени пересборки системы используя # опции -b и -k команды emerge. emerge -C linux-headers emerge linux-headers glibc binutils gcc-config gcc # Проделайте все дополнительные операции, которые могут # требоваться при обновлении gcc (см. <a href="http://www.gentoo.org/doc/en/gcc-upgrading.xml">GCC Upgrade Guide</a>). emerge -b glibc binutils gcc portage emerge -bke system emerge -ke world glsa-check -l | grep '\[N\]' # Ручками обновите пакеты, которые мог выдать glsa-check. emerge -a --depclean emerge -uDNa world emerge paxtest paxctl gradm revdep-rebuild dispatch-conf # Теперь включите в ядре все фичи Hardened, # соберите его и перегрузитесь.
Начало. Вторая часть. Окончание следует...