Härdad Gentoo
Härdad Gentoo (Gentoo Hardened) är ett Gentoo-projekt som tillhandahåller ytterligare säkerhetstjänster ovanpå den välkända Gentoo Linux-installationen. Fastän varje alternativ kan väljas separat, möjliggör Gentoo Hardened för flera riskreducerande alternativ i verktygskedjan, som PaX, grSecurity, SELinux, TPE och mer.
Vare sig du kör en Internetriktad server eller en flexibel arbetsstation, när du hanterar flera säkerhetshot kommer du vilja härda ditt system ytterligare än att bara tillämpa de senaste programfixar. Härdandet av ett system betyder att du tar fler åtgärder gentemot attacker och andra risker och är ofta ett flertal aktiveteter du utför på ett system.
Inom Gentoo Hardened finns flera aktiva projekt som hjälper till att härda ett Gentoo-system genom att:
- Möjliggöra specifika alternativ i verktygskedjan (kompilator, länkare...), exempelvis att tvinga positionsoberoende körbara filer (eng: position-independent executables (PIE)), buffer-överflöde och buffertkontroller vid kompilering.
- Möjliggöra PaX-tillägg i Linux-kärnan, som erbjuder ytterligare skyddsåtgärder som slumpmässig layout av adressutrymme (eng: address space layout randomization) och icke-körbart minne.
- Möjliggöra grSecurity-tillägg i Linux-kärnan, därigenom ytterligare chroot-restriktioner, revisioner, processbegränsningar osv.
- Möjiggöra SELinux-tillägget i Linux-kärnan som erbjuder Mandatory Access Control-system som höjer standarden för Linux-tillståndsbegränsningar.
- Möjliggöra Integrity-relaterade teknologier, exempelvis Integrity Measurement Architecture för att göra system uthålliga mot manipulering.
Detta inkluderar givetvis de nödvändiga userspace-verktygen för att hantera dessa tillägg.
Växla till en Hardened-profil
Read relevant documentation before performing any profile changes.
Välj en härdad profil så att pakethantering görs på ett härdat vis.
root #
eselect profile list
root #
eselect profile set [den härdade profilens nummer]
root #
source /etc/profile
Genom att välja en härdad profil kan vissa inställningar för pakethantering (maskar, USE-flaggor osv.) bli standard för ditt system. Detta gäller för många paket, inklusive verktygskedjan. Verktygskedjan används för att bygga/kompilera dina program, och omfattar: GNU Compiler Collection (GCC), binutils (länkare osv.), och GNU C-biblioteket (glibc). Genom att omkompilera verktyskedjan, kommer de nya standarder att appliceras på verktyskedjan, som gör att all framtida paketkompilering görs på ett härdat sätt.
root #
emerge --oneshot gcc
root #
emerge --oneshot binutils virtual/libc
De ovanstående kommandon bygger om GCC, som nu kan användas för att kompilera härdad programvara. Se till att hardened-alternativet har valts för GCC.
root #
gcc-config -l
[1] i686-pc-linux-gnu-4.5.3 * [2] i686-pc-linux-gnu-4.5.3-hardenednopie [3] i686-pc-linux-gnu-4.5.3-hardenednopiessp [4] i686-pc-linux-gnu-4.5.3-hardenednossp [5] i686-pc-linux-gnu-4.5.3-vanilla
Finally source the new profile settings:
root #
source /etc/profile
If using the "prelink" package, remove it, since it isn't compatible with the hardened profile:
root #
emerge --depclean prelink
Now reinstall all packages with the new hardened toolchain:
root #
emerge --emptytree --verbose @world
Install kernel sources:
root #
emerge --ask gentoo-sources
Now configure/compile the sources and add the new kernel to the boot manager (e.g. GRUB).
Tips and tricks
Disable hardening settings on a per package basis
This method is not supported by Gentoo and is extremely unlikely to be necessary nowadays. All major distributions ship with PIE by default now.
To disable protections per-package, use C(XX)FLAGS via package.env. Create the file /etc/portage/env/nossp and add to that:
CFLAGS="${CFLAGS} -fno-stack-protector"
CXXFLAGS="${CXXFLAGS} -fno-stack-protector"
To allow for disabling PIE, create and add to /etc/portage/env/nopie:
CFLAGS="${CFLAGS} -no-pie"
CXXFLAGS="${CXXFLAGS} -no-pie"
LDFLAGS="${LDFLAGS} -no-pie"
Finally for the package concerned, add either PIE or SSP for to /etc/portage/package.env and the relevant /etc/portage/env/<filename>, for this example sys-libs/zlib is used here:
sys-libs/zlib nopie
See also
For more information, check out the following resources: