Tutorials - Ein sicheres Linux System aufsetzen Teil 1.0 - Security Enhanced Linux: Installation

Sprachenübersicht/Betriebssysteme/Linux/Security

Ein sicheres Linux System aufsetzen Teil 1.0 - Security Enhanced Linux: Installation

Diese Seite wurde 8834 mal aufgerufen.

Dieser Artikel wurde in einem Wikiweb System geschrieben, das heißt, Sie können die Artikel jederzeit editieren, wenn Sie einen Fehler gefunden haben, oder etwas hinzufügen wollen.

Editieren Versionen Linkpartnerschaft Bottom Printversion

Keywords: SELinux, SE Linux, Installieren, sicher, Linux

Inhaltsverzeichnis



Vorwort Top



Diese Tutorialserie beschäftigt sich damit, ein sicheres Linux-System aufzusetzen. Dazu werden wir den NSA Linux Sub-Kernel, SELinux verwenden, der im Kernel 2.6 enthalten ist.

In diesem Teil geht es nur darum SELinux zu installieren; wie man es konfiguriert wird im zweiten Teil beschrieben.

Hilfe Top



Fragen zum Tutorial können im SELinux Forum gerne gestellt werden. Wenn Sie sonst irgendwelche Anmerkungen, Kommentare, oder Verbesserungsvorschläge haben, scheuen Sie sich bitte nicht sie im Forum vorzubringen.

Tutorials in dieser Artikelserie Top








Einführung in SELinux Top



Security Enhanced Linux, das auch als SELinux bezeichnet wird ist eine Sammlung von Programmen, Programmpatches, und einer Kernelerweiterung, die ein Linux-System sicherer machen soll. Die Haupterweiterung ist ein erweitertes Privilegien-System, ein Mandatory Access Controll (MAC) Systen, das eine stärkere Einschränkung von Benutzern erlaubt. Dadurch können Programme so eingeschränkt werden, das sie nur noch auf Dinge zugreifen können die sie auch wirklich benötigen. Diese Programme können dann nur noch Daten oder Programme lesen, schreiben oder verändern die sie brauchen. Sie können nicht mehr mit anderen Prozessen kommunizieren, auf Netzwerkdevices zugreifen, ...

Durch dieses System können Dienste, die kompromittiert wurden so eingeschränkt werden, dass sie keinen Schaden am System anrichten, was ein nützliches Mittel gegen 0-days ist.

Wir werden in diesem Teil die Installation von SELinux besprechen. Als erstes kompilieren wir uns einen Kernel, der SELinux unterstützt. Anschließend werden wir die Tools für SELinux installieren und dann die benötigten Patches für weitere Programme einspielen.

Die Installation, die ich hier beschreibe ist für Debian stable: sarge, ohne X Server, und mit der Kernelversion 2.6. Bei anderen Betriebssystemen sieht die Installation anders aus, einige Betriebssysteme haben keine Unterstützung für SELinux. Auf google.com finden Sie mehr dazu.

Unterstützung für lfs finden sie hier: www.blankersfamily.com/lfs/selinux.

Der Inhalt von SELinux Top



Damit wir SELinux benutzen wollen, müssen wir die folgenden Pakete installieren:

  • libsepol

    libsepol stellt die Schnittstelle zum Zugriff auf die binäre policy dar.



  • libselinux

    libselinux ist die Schnittstelle zu sicherheitsbewussten Applikationen.



  • libsemanage

    libsemanage ist die libary, die die Schnittstelle zum SELinux Management darstellt.



  • checkpolicy

    checkpolicy beinhaltet den checkpolicy policy compiler, der die policy in ein binäres Format kompiliert, das vom Kernel benutzt wird.



  • policycoreutils

    policycoreutils beinhaltet die core-Elemente der policy, unter anderem load_policy, newrole, setfiles, und run_init.



  • policy

    policy beinhaltet eine Beispiel policy, die Flask files, und Konfigurations-Dateien.

    Früher wurde die policy von der NSA verbreitet, heute ist sie nur noch im Archiv, die Firma Tresys kümmert sich heute darum.



  • Kernel

    Der Kernel wird verändert, damit SELinux benutzt werden kann. Seit der Version 2.6 ist SELinux standardmäßig im Kernel integriert.



  • Ausserdem werden noch folgende Programme modifiziert:

    cp, mv, install, ls und andere Standardprogramme

    wird modifiziert damit die file labels benutzt werden können.

    id

    wird modifiziert, damit die Benutzer Rechte angezeigt werden können.

    ps

    kann nach der Modifikation die neuen Rechte der Prozesse anzeigen.

    Weitere Programme die modifiziert werden:

    cron, ssh, login, logrotate, pam, andere Programme die /etc/passwd, oder /etc/shadow benutzen



Slat, und setools und SELinux Policy Editor werden in diesem Tutorial nicht benutzt, können aber hilfreich sein:

  • slat

    Eine Sammlung von policy Tools, von Tresys Technology.


  • SELinux Policy Editor 2.0

    SELinux Policy Editor 2.0 ist ein GUI-Programm das hilfreich bei der editierung der policy file ist. Wir werden es in diesem Tutorial nicht näher erläutern.


  • setools

    Eine Sammlung von Tools, die für die Analyse der policy, und das Management der Benutzer zuständig ist.

    Dazu zählen:

    - SeAudit

    Ein GUI Tool, für die Analyse von log Einträgen.

    - Apol

    Ein Tool zur analyse der policy.conf.

    - SeCmds

    Eine Sammlung von nicht-GUI Tools für die Analyse der policy.conf.

    -SePCuT

    Ein GUI Tool, das das komfortable Browsen und Editieren von SELinux policy file ermöglicht.

    - SeUser

    Eine GUI und ein nicht-GUI Tool, das bei der Verwaltung von SELinux, und Linux-Benutzerkonten hilft.



Kernel builden Top



Als erstes kompilieren wir uns den Kernel so, das er selinux unterstützt. Wir ziehen uns den neuesten Kernel, der von Selinux untersützt wird, auf der NSA Selinux Seite finden wir den neusten Download: www.nsa.gov/selinux/code/download5.cfm.

In meinem Fall ist es 2.6.14. Wir laden den Kernel von www.kernel.org, und den Kernelpatch von der NSA Seite herunter.

Damit wir make menuconfig machen können, müssen wir libncurses5-dev installieren:

Code:

selinux:/opt# apt-get install libncurses5-dev patch bzip2



Als nächstes entpacken wir den Kernel, patchen, und konfigurieren ihn:

Code:


selinux:/opt# cd /usr/src
selinux:/usr/src# tar jvxf linux-2.6.14.tar.bz2
selinux:/usr/src# gunzip -d 2.6.14-selinux1.patch.gz
selinux:/usr/src/linux-2.6.14# cd linux-2.6.14.tar.bz2
selinux:/usr/src/linux-2.6.14# mv ../2.6.14-selinux1.patch ./
selinux:/usr/src/linux-2.6.14# patch -s -p 1 < 2.6.14-selinux1.patch
selinux:/usr/src/linux-2.6.14# make menuconfig



Jetzt schmeissen wir alles raus, was wir nicht brauchen, beachten aber, dass wir folgende einkompilieren:

Unter Code Maturity muss folgendes aktiviert sein:

Prompt for development and/or incomplete code/drivers

Unter Devices Drivers -> Character Devices:

Unix98 PTY aktivieren
Legacy (BSD) PTY support nicht aktivieren

Unter File systems:

Second extended fs support
Ext2 extended attributes
Ext2 security labels
Ext3 journaling file system support
Ext3 extended attributes
Ext3 security labels


Aktivieren Sie nicht POSIX access controll lists für ext2 oder ext3.

Unter Pseudo filesystems:

/dev/pts Extended Attributes
/dev/pts Secrutiy labels


Wählen Sie nicht /dev/file system support aus.

Zum Schluss wählen wir noch folgendes unter Security Options aus:


Enable different security models
Socket and networking security hocks
Default Linux capabilities
NSA SELinux
NSA SELinux boot parameter
NSA SELinux Development support


Ich muss bei mir noch unter Device Drivers->Parallel port support Parallel port support einkompilieren, und dann unter Device Drivers->Block devices: Parallel port IDE device support und unter Device Drivers->ATA/ATAPI/MFM/RLL support:


ATA/ATAPI/MFM/RLL support
Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support
Include IDE/ATA-2 DISK support
generic/default IDE chipset support


einkompilieren einstellen.

Meine .config Datei kann hier heruntergeladen werden.

Jetzt können wir den Kernel kompilieren, und Grub konfigurieren:

Code:


selinux:/usr/src/linux-2.6.14# make bzImage
selinux:/usr/src/linux-2.6.14# make modules 
selinux:/usr/src/linux-2.6.14# make install && make modules_install
selinux:/usr/src/linux-2.6.14# cp arch/i386/boot/bzImage /boot
selinux:/usr/src/linux-2.6.14# apt-get remove kernel-image-2.6.8-2-386
Yes
selinux:/usr/src/linux-2.6.14# nano /boot/grub/menu.lst



Unter Grub fügen wir jetzt die folgenden Zeilen hinzu, und löschen die alten:

Code:


title      Debian GNU/Linux, Kernel 2.6.14-selinux1 Permissive
root     (hd0,0)
kernel     /boot/vmlinuz root=/dev/hda1 ro
savedefault
boot

title      Debian GNU/Linux, Kernel 2.6.14-selinux1 Enforcing
root     (hd0,0)
kernel     /boot/vmlinuz root=/dev/hda1 enforcing=1 ro
savedefault
boot



nach einem reboot sollte der Kernel laufen.

Jetzt haben wir die Wahl zwischen vom Backport installieren (nächstes Kapitel), und von den sources installieren (übernächstes Kapitel).

Debian Sarge Top



  • SELinux per Backport installieren

    Jetzt installieren wir SELinux, wir verwenden dazu einen inoffiziellen Backport, selinux.alioth.debian.org/.

    Hinweis:


    Für Debian gibt es noch einen anderen Backport von Faye Coker, der allerdings zum Zeitpunkt recherchen für den Artikel nicht verfügbar war.

    deb http://www.coker.com.au/newselinux/ ./



    Mit nano /etc/apt/sources.list öffnen wir die Datei für die backports, und fügen die folgende Zeile hinzu:

    deb http://selinux.alioth.debian.org/sesarge ./

    Jetzt müssen wir noch apt updaten:

    Code:


    selinux:/opt# apt-get update
    selinux:/opt# apt-get autoclean



    Als nächstes installieren wir die folgenden Pakete:

    Code:


    selinux:/opt#  apt-get install checkpolicy \
    coreutils \
    cron \
    dpkg \
    fileutils \
    initscripts \
    libpam0g \
    libpam0g-dev \
    libpam-cracklib \
    libpam-doc \
    libpam-modules \
    libpam-runtime \
    libselinux1 \
    logrotate \
    policycoreutils \
    procps \
    selinux-doc \
    selinux-basics \
    selinux-policy-default \
    selinux-utils \
    shellutils \
    strace \
    sysvinit \
    sysv-rc \
    textutils \
    python2.4-semanage



    Jetzt sollte SELinux installiert sein, als letztes müssen wir noch ein paar Schritte durchführen:

    Code:


    selinux:/opt# mkdir /selinux
    selinux:/opt# nano /etc/fstab



    Wir fügen den folgende Zeile in /etc/fstab ein:

    Code:


    none    /selinux    selinuxfs    0    0



    Ich habe ausserdem noch die root Partition /dev/hda1 per 0 0 so eingestellt, das sie nicht mehr überprüft wird.

    Zuletzt fügen wir noch folgende Zeile in /etc/pam.d/login, und /etc/pam.d/ssh ein:

    Code:


    session required pam_selinux.so



    und kompilieren noch die policy:

    Code:


    selinux:/opt# cd /etc/selinux
    selinux:/etc/selinux# make policy
    selinux:/etc/selinux# make relabel



    Als nächstes editieren wir die Datei /etc/selinux/config:

    Code:


    # This file controls the state of SELinux on the system.
    # SELINUX= can take one of these three values:
    #       enforcing - SELinux security policy is enforced.
    #       permissive - SELinux prints warnings instead of enforcing.
    #       disabled - No SELinux policy is loaded.
    # SELINUXTYPE= can take one of these two values:
    #       targeted - Only targeted network daemons are protected.
    #       strict - Full SELinux protection.
    SELINUXTYPE=./



    SELINUXTYPE={TYPE} stellt ein, das SELinux die policy von /etc/selinux/{TYPE} ladet.

    Anzeigen



    Damit ist die Installation abgeschlossen. Nach einem neustart sollte das Dateisystem automatisch nochmal gerelabelt werden.



  • Alternative Installation mit den NSA Sources

    Ich beschreibe hier noch einen alternativen Weg, den ich gerne benutze. Ich kompiliere die SELinux-Sources direkt von der NSA, und benutzte die veränderten Programme vom Backport. Wenn Sie lieber alles per Source installieren, finden Sie hier einen Hint für Linux From Scratch, der auch für Debian funktionieren sollte: www.blankersfamily.com/lfs/selinux/.

    Als erstes laden wir uns die Tarballs von der NSA-Seite herunter: www.nsa.gov/selinux/code/download5.cfm.

    Ausserdem brauchen wir die policy von Tresys.

    Jetzt bereiten wir uns vor. Sie sollten ein installiertes gawk, python2.4, python2.4-dev, gcc-3.4 und g++-3.4 haben, beachten Sie das bei der Installation vom gcc nur /usr/bin/gcc-3.4 angelegt wird, allerdings gcc noch einen softlink auf gcc-3.3 hat, mit rm gcc && ln -s gcc-3.4 gcc können Sie einen link erzeugen. Das gleiche gilt für g++ und python.

    Kopieren Sie die Dateien nach /opt/selinux, nachdem Sie sie heruntergeladen haben. slat, und setools lassen wir vorläufig weg, die brauchen wir im moment nicht.

    Jetzt entpacken wir libsepol-1.10.tgz, und kompilieren es:

    Code:


    selinux:/opt/selinux# tar zvxf libsepol-1.10.tgz
    selinux:/opt/selinux# rm libsepol-1.10.tgz 
    selinux:/opt/selinuxt# cd llibsepol-1.10
    selinux:/opt/selinuxt/libsepol-1.10# make all && make install 



    Jetzt entpacken wir libselinux-1.28.tgz, und kompilieren es:

    Code:


    selinux:/opt/selinux# tar zvxf libselinux-1.28.tgz
    selinux:/opt/selinux# rm libselinux-1.28.tgz 
    selinux:/opt/selinux# cd libselinux-1.28
    selinux:/opt/selinux/libselinux-1.28# make all && make install



    Als nächstes entpacken wir den Tarball libsemanage-1.4.tgz, und kompilieren es:

    Code:


    selinux:/opt/selinux# tar zvxf libsemanage-1.4.tgz
    selinux:/opt/selinux# rm libsemanage-1.4.tgz 
    selinux:/opt/selinux# cd libsemanage-1.4
    selinux:/opt/selinux/libsemanage-1.4# make all && make install && make install-pywrap



    Und checkpolicy-1.28.tgz:

    Code:


    selinux:/opt/selinux# tar zvxf checkpolicy-1.28.tgz
    selinux:/opt/selinux# rm checkpolicy-1.28.tgz
    selinux:/opt/selinux# cd checkpolicy-1.28
    selinux:/opt/selinux/checkpolicy-1.28# make all && make install



    Als nächstes installieren wir policycoreutils-1.28.tgz, dazu müssen wir aber zuerst libpam0g-dev und gettext installieren.

    Da wir jetzt die modifizierte Version von libpam0g-dev brauchen, kommen jetzt die Sources ins Spiel, wir installieren sie mit apt-get.

    Mit nano /etc/apt/sources.list öffnen wir die Datei für die Backports und fügen die folgende Zeile hinzu:

    deb http://selinux.alioth.debian.org/sesarge ./

    Jetzt müssen wir noch apt updaten, und die Pakete installieren:

    Code:


    selinux:/opt# apt-get update
    selinux:/opt# apt-get autoclean



    Code:


    apt-get install fileutils initscripts libpam-doc libpam-modules libpam-cracklib logrotate procps shellutils strace sysvinit sysv-rc textutils coreutils gettext libpam0g libpam0g-dev libpam-runtime python2.4-semanage



    Dabei wird auch libsepol1, und libselinux1 installiert, da wir die neusten haben, gehen wir nochmal in die beiden Verzeichnisse zurück und fahren mit make install nochmal drüber. Zur Sicherheit auch noch über libsemanage[/]

    Jetzt gehen wir zurück in das policy-coreutils Verzeichniss, entpacken, und installieren es:

    Code:


    selinux:# cd /opt/selinux
    selinux:/opt/selinux# tar zvxf policy-coreutils-1.28.tgz
    selinux:/opt/selinux# rm policy-coreutils-1.28.tgz
    selinux:/opt/selinux# cd policy-coreutils-1.28
    selinux:/opt/selinux/policy-coreutils-1.28# make all && make install



    Jetzt haben wir alles, bis auf die policy installiert.

    Die installieren wir jetzt:

    Code:


    selinux:/opt/selinux# tar jvxf refpolicy-20060307.tar.bz2
    selinux:/opt/selinux# rm refpolicy-20060307.tar.bz2
    selinux:/opt/selinux# cd refpolicy



    Jetzt fügen wir mit dem folgenden Befehl eine Zeile zu /etc/fstab hinzu:

    Code:


    cat >> /etc/fstab << EOF

    none    /selinux        selinuxfs defaults 0 0
    EOF



    und ändern die root partition auf 0 0, damit sie nicht überprüft wird.

    [note]
    Achten Sie darauf das das einfügen der Zeilen in /etc/pam.d nicht schon von einem Debian mirror gemacht wurde.
    [/note]

    Zuletzt fügen wir noch folgende Zeile in [i]/etc/pam.d/login und /etc/pam.d/ssh ein:

    Code:


    cat >> /etc/pam.d/ssh << EOF

    session required pam_selinux.so
    EOF

    cat >> /etc/pam.d/login << EOF

    session required pam_selinux.so
    EOF



    Jetzt mounten wir das /selinux pseudofilesystem, installieren die policy, und relabeln das Dateisystem:

    Code:


    selinux:/opt/selinux/refpolicy# mkdir /selinux
    selinux:/opt/selinux/refpolicy# mount /selinux



    Als nächstes müssen wir noch in der build.conf von /opt/selinux/refpolicy Type von strict auf targeted umstellen, und die Distribution einstellen, ausserdem sollte NAME mit # auskommentiert werden.

    Jetzt können wir die policy installieren:

    Code:


    selinux:/opt/selinux/refpolicy# make  policy && make install-src && make install
    selinux:/opt/selinux/refpolicy# cd /etc/selinux/targeted/src/policy
    selinux:/etc/selinux/targeted/src/policy# make policy && make install
    selinux:/etc/selinux/targeted/src/policy# make relabel



    Als nächstes editieren wir die Datei /etc/selinux/config:

    Code:


    # This file controls the state of SELinux on the system.
    # SELINUX= can take one of these three values:
    #       enforcing - SELinux security policy is enforced.
    #       permissive - SELinux prints warnings instead of enforcing.
    #       disabled - No SELinux policy is loaded.
    # SELINUXTYPE= can take one of these two values:
    #       targeted - Only targeted network daemons are protected.
    #       strict - Full SELinux protection.
    SELINUXTYPE=targeted



    SELINUXTYPE={TYPE} stellt ein, das SELinux die policy von /etc/selinux/{TYPE} ladet.

    Nach einem neustart sollte das Dateisystem nochmal gerelabelt werden:

    Code:


    selinux:/etc/selinux/targeted/src/policy# make policy && make install
    selinux:/etc/selinux/targeted/src/policy# make relabel



    setools Top



    Wir haben setools nicht installiert, da das Tutorial bis jetzt nur die Installation ohne X beschreibt.

    Hier ist noch eine kurzte Beschreibung, falls Sie die policy tools für X benutzen wollen.

    Als erstes brauchen wir ein paar Programme, welche wir mit den folgenden Befehlen installieren:

    Code:


    selinux:/# apt-get install python2.4-libxml2
    selinux:/# apt-get install libxml2 libxml2-dev
    selinux:/# apt-get install apt-get install libgtk2.0-0
    selinux:/# apt-get install tcl8.4 tcl8.4-dev tk8.4-dev tk8.4
    selinux:/# apt-get install pkg-config



    Jetzt haben wir noch ein Problem. Die Header von tcl8.4 und tk8.4 liegen in /usr/include/tcl8.4, SELinux vermutet die Dateien aber, wie in anderen Distributionen üblich in /usr/include.

    Deshalb müssen Sie entweder die Quellcode Dateien von setools ändern, oder die Header Dateien als Softlink in /usr/include erzeugen.

    Dies geschieht mit ln -s tcl8.4/datei datei.

    Wenn das erledigt ist, können Sie setools installieren.

    Code:


    selinux:# make all && make install



Debian Etch Top



Als erstes installieren wir die SELinux Pakete:

Code:


selinux:/# apt-get install gcc \
g++ \
m4 \
gawk \
python2.4-dev \
python2.4 \
libncurses5-dev \
selinux-basics \
selinux-doc \
selinux-utils \
python2.4-semanage \
python2.4-selinux \
libsepol1 \
libsemanage1 \
libsemanage1-dev \
libselinux1 \
libselinux1-dev \
checkpolicy
policycoreutils



Als nächstes fügen wir mit dem folgenden Befehl eine Zeile zu /etc/fstab hinzu:

Code:


cat >> /etc/fstab << EOF

none    /selinux        selinuxfs defaults 0 0
EOF



und ändern die root partition auf 0 0, damit sie nicht überprüft wird.

[note]
Achten Sie darauf das das einfügen der Zeilen in /etc/pam.d nicht schon von einem Debian mirror gemacht wurde.
[/note]

Zuletzt fügen wir noch folgende Zeile in /etc/pam.d/login und /etc/pam.d/ssh ein:

Code:


selinux:/# cat >> /etc/pam.d/ssh << EOF

session required pam_selinux.so
EOF

selinux:/# cat >> /etc/pam.d/login << EOF

session required pam_selinux.so
EOF



Da ich mit der Policy vom aktuellen Etch-testing release noch keine gute Erfahrung gemacht habe, kompilieren wir uns unsere eigene policy.

Die installieren wir jetzt:

Code:


selinux:/opt/selinux# tar jvxf refpolicy-20060307.tar.bz2
selinux:/opt/selinux# rm refpolicy-20060307.tar.bz2
selinux:/opt/selinux# cd refpolicy



Als nächstes müssen wir noch in der build.conf den Type von strict auf targeted umstellen, und die Distribution einstellen, ausserdem müssen wir den policy name auf targeted(policy wird mit make install-src in /etc/selinux/targeted kopiert) setzen.

Code:


#eventuell make install-src und make policy 2 mal laufen lassen, da Verzeichnisse noch nicht erstellt wurden
selinux:/opt/selinux/refpolicy# make policy && mkdir /etc/selinux/targeted && make install-src && make install
selinux:/opt/selinux/refpolicy# cd /etc/selinux/targeted/src/policy
selinux:/etc/selinux/targeted/src/policy# make clean && make policy && make install
selinux:/etc/selinux/targeted/src/policy# make relabel



Als nächstes editieren wir die Datei /etc/selinux/config:

Code:


# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#       enforcing - SELinux security policy is enforced.
#       permissive - SELinux prints warnings instead of enforcing.
#       disabled - No SELinux policy is loaded.
# SELINUXTYPE= can take one of these two values:
#       targeted - Only targeted network daemons are protected.
#       strict - Full SELinux protection.
SELINUXTYPE=targeted



SELINUXTYPE={TYPE} stellt ein, das SELinux die policy von /etc/selinux/{TYPE} ladet.

Jetzt können wir neustarten, es sollte automatisch nochmal gerelabelt werden.

Weblinks Top













Schlusswort Top



In diesem Kapitel haben Sie, was SELinux ist, und wie man es installiert. Das nächste Kapitel wird beschrieben wie man SELinux konfiguriert.

Gibt es noch irgendwelche Fragen, oder wollen Sie über den Artikel diskutieren?





Editieren Versionen Linkpartnerschaft Top Printversion

Haben Sie einen Fehler gefunden? Dann klicken Sie doch auf Editieren, und beheben den Fehler, keine Angst, Sie können nichts zerstören, das Tutorial kann wiederhergestellt werden

Sprachenübersicht/Betriebssysteme/Linux/Security/Ein sicheres Linux System aufsetzen Teil 1.0 - Security Enhanced Linux: Installation