EasyLFS Projektthread

Anbei mal eben ein grösseres Update, das auf EasyLFS wartet:

zum ersten habe ich eine funktionierende referencepolicy (refpolicy) gebaut, die zumindest im target-modus ohne kernelaudits im logfile stabil läuft, erhältlich auf meiner Webseite unter http://www.3-seiten.com/patches unter refpolicy-easylfs.patch.
Was genau musstest Du denn an der Policy aendern? Und was fuer Probleme gab es ohne die Aenderungen?

zum zweiten habe ich udev dazu gebracht, mir alles im richtigen Security-Context zu installieren, wenn neue Geräte im Kernel gefunden werden - das Update dazu kommt am Sonntag (10.03.2007) -der nächste Schritt ist dann die Installation von automount, um USB-Sticks gleich zu mounten :)

Der im aktuellen EasyLFS enthaltene UDev 105 sollte auch schon mit SELinux klarkommen. Zumindest hab ich im Script eine Option welche die Nutzung dessen aktiviert.
Hab aber auch schon 106 runtergeladen der dann in der naechsten Version eingeflanscht wird. Viel geaendert haben duerfte sich dort aber nicht denk ich.

Zum dritten lädt init nun fehlerfrei SELinux ins System und läuft im richtigen Kontext (die Änderungen in den Init-Scripten sind damit hinfällig und müssen entfernt werden), auch dazu gibt es einen Patch unter http://www.3-seiten.com/patches

Den Patch von Red Hat hab ich mir gestern auch mal besorgt, angepasst und gleich im Script verbaut.

Zum vierten ist das Useradd-Problem ebenfalls in shadow behoben, den Patch dafür gibt es ebenfalls bei mir genauso wie ein Paar Patches für SELinux in den Coreutils und util-linux.

Die Patches fuer Shadow, die CoreUtils und Util-Linux sind im aktuellen EasyLFS auch mit drin sodass es hier auch keine Probleme geben duerfte.

Sooo, ich hoffe, dass ich am Sonntag meine Webseiten aktualisiert bekomme, damit meine Arbeit auch bei Euch umgesetzt werden kann :)
Auf jeden Fall echt gute Arbeit. Jedoch befuerchte ich, dass nicht viele die EasyLFS-Version nutzen die Du nun so erfolgreich manipuliert hast.
Aber Deine Arbeit ist ja bereits in die neue Version eingeflossen sodass dort nun erstmals SELinux-Support existiert, in der naechsten Version kommt dann die verbesserte Variante mit dem gepatchten Init.

Du sagst weiter oben, dass nun die Anpassung der Init-Scripts hinfaellig ist, betrifft das auch das mounten von /selinux?

Ich hab die Nacht ein Testsystem mit SELinux, inklusive dem Patch fuer SysVInit, bauen lassen und werd mich nach der Arbeit noch etwas damit beschaeftigen.
Den Aufruf von load_policy hab ich schon auskommentiert eben in der Hoffnung, dass das von Init selbst geregelt wird.
Jetzt stell ich mir nur noch folgende Frage: Zum Zeitpunkt wo Init aufgerufen ist ist ja /selinux noch nicht gemountet, geschieht das dann auch automatisch durch Init?
Also ich denk mal, dass mein Mount-Aufruf fuer /selinux nun auch ueberfluessig sein duerfte, denn fuer das Laden der Policy kommt er ja dann eh zu spaet.
 
Also: SELinux wird nun wie folgt ins System geladen:

init lädt mit dem Patch (hab ihn von gentoo, müssen nur mals was darüber ausdisktieren, wassinn macht) die komplette Policy ins System, nachdem procfs kurz geladen wurde um an die cmdline vom kernel zu kommen.proc wird dann wieder aus dem System entfernt und /selinux wird gemounted, wenn selinuxfs in /proc/filesystems vorhanden war.

Nach erfolgreichem mounten von selinux wird die Policy geladen und startet sich selbst neu und nun im richtigen Kontext, da SELinux das bereits übernimmt (anhand der Policy).

Somit ist ein direktes mounten im init-Script nicht mehr notwendig, auchnicht "load_policy". Was dahingehend geändert werden muss ist, dass in der /etc/fstab nun nicht mehr selinux auf default stehen darf, da es sonst gemounted wird, sondern auf noauto. Da selinuxfs ein tmpfs ist, wird es beim system-(halt, neustart) eh rausgeworfen.

Nachdem rootfs im rw-mode gemounted ist, kann udev die Geräte anlegen (nicht wie in deinem Script kopieren) und mit restorecon wird nur noch der Kontext des tmpfs, das auf /dev liegt bereinigt und auf system_u:object_r:device_t gesetzt.

Was ich an der Policy ändern musste sind grösstenteils Regeln, die das ausgeben von Kommentaren von swapon,hostname und ip sowie mount, restorecon und restorecond auf /dev/console erlauben und habe noch /bin/mountpoint und /sbin/udevsettle verfügbar gemacht, dass da keine audits im Kernel-Log kommen.
Desweiteren habe ich die init-verzeichnisse angepasst und die Rechte darauf verlegt
(in der Policy)

Was udev betrifft:
SELinux ist nur nebensächlich, habe das init-script umgebaut, dass udev allesselbst finden kann und anlegt, ohne waszu kopieren ;)
 
Anbei mal mein udev aus den init-scripts. Habe es so angepasst, dass es alle Geräte automatisch installiert, und unter SELinux den richtigen Kontext setzt:

Code:
#!/bin/sh
########################################################################
# Begin $rc_base/init.d/udev
#
# Description : Udev cold-plugging script
#
# Authors     : Zack Winkles, Alexander E. Patrakov
#
# Version     : 00.02
#
# Notes       :
#
########################################################################

. /etc/sysconfig/rc
. ${rc_functions}

case "${1}" in
	start)
		boot_mesg "Populating /dev with device nodes..."
		if ! grep -q '[[:space:]]sysfs' /proc/mounts; then
			echo_failure
			boot_mesg -n "FAILURE:\n\nUnable to create" ${FAILURE}
			boot_mesg -n " devices without a SysFS filesystem"
			boot_mesg -n "\n\nAfter you press Enter, this system"
			boot_mesg -n " will be halted and powered off."
			boot_mesg -n "\n\nPress Enter to continue..." ${INFO}
			boot_mesg "" ${NORMAL}
			read ENTER
			/etc/rc.d/init.d/halt stop
		fi

		mount -nt tmpfs tmpfs /dev -o mode=755,exec,nosuid

		if [ ${?} != 0 ]; then
			echo_failure
			boot_mesg -n "FAILURE:\n\nCannot mount a tmpfs" ${FAILURE}
			boot_mesg -n " onto /dev, this system will be halted."
			boot_mesg -n "\n\nAfter you press Enter, this system"
			boot_mesg -n " will be halted and powered off."
			boot_mesg -n "\n\nPress Enter to continue..." ${INFO}
			boot_mesg "" ${NORMAL}
			read ENTER
			/etc/rc.d/init.d/halt stop
		fi
		
		echo "/sbin/udevsend" > /proc/sys/kernel/hotplug

		mkdir -p /dev/pts
		mkdir -p /dev/shm
		restorecon /dev/pts
                  restorecon /dev/shm

		/sbin/udevd --daemon		
		/sbin/udevtrigger
		/sbin/udevsettle --timeout=60

		evaluate_retval
		;;

	*)
		echo "Usage ${0} {start}"
		exit 1
		;;
esac

# End $rc_base/init.d/udev
 
Anbei noch mal ein Paar sinnvolescripts,die das mounten von USB-Sticks vereinfachen:

10-udev-mount.rules ist das File, dass die Regel zu USB-Sticks (NUR Speichermedien und USB-MP3-Player) beschreibt.

mountudev ist ein Shell-Script, dass nach /bin kopiert werden muss (der Dateiname ist deshalb so gewählt, um mit refpolicy keinen Konflit zu erzeugen) und mountet bei einem udev-event im USB Bus mit root-rechten den USB-Stick nach /media, wenn das Gerät Blockorientiert ist. Es erstellt davor in /media ein Verzeichnis, dass dem des Gerätes gleich steht (z.B. /media/uba1) und mountet es dorthin.

umountudev wird von udev aufgerufen, wenn der Stick entfernt wurde.

die fstab muss noch etwas geändert werden, um die Geräte einzubinden:
Code:
echo "/dev/uba1  /media/uba1  auto  sync,noauto,user,exec 0 0" >> /etc/fstab
echo "/dev/uba2  /media/uba2  auto  sync,noauto,user,exec 0 0" >> /etc/fstab
echo "/dev/uba3  /media/uba3  auto  sync,noauto,user,exec 0 0" >> /etc/fstab
echo "/dev/uba4  /media/uba4  auto  sync,noauto,user,exec 0 0" >> /etc/fstab

Sinn und zweck: Der User benötigt zum Mounten von USB-Speichermedien keine Root-Rechte und muss sich um das mounten/umounten nicht kümmern, auch ein "vergessen" des umount-Befehls ist egal :)

Filelink: http://www.3-seiten.com/udev-files.tar.gz

LG
Andy
 
Zuletzt bearbeitet:
Das WE ist vorbei, und ich kann nun wie versprochen eine Aktualisierung meiner Seiten vorweisen. Das Changelog ist nicht allzu gross ausgefallen, da die Zeit zum grössten Teil mit patchen und fixen von Problemen draufgegangen ist, jedoch kann ich stolz verkünden, dass die Integration von SELinux vorerst abgeschlossen ist,und nun mehr die Arbeit im Detail liegt.

Hier die wichtigsten Änderungen:
- Der Downloadbereich ist nun öffentlich verfügbar, auf dem ich Patches bereit stelle
- Aktualisierung auf Kernel 2.6.20.1
- Linux-PAM, Coreutils, Shadow und Sysvinit wurden (neu) integriert
- Installationen wurden überarbeitet und div. Patches wurden hinzugefügt
- Konfiguration der Init-Scripte ist wieder online

Hier nochmal der Link zum Projekt easyLFS: Integration SELinux

LG
Andy

PS: Das Forum auf meinen Seiten ist auch dazu da, wenn jemand eine Frage zum Projekt hat - traut Euch :)
 
Zuletzt bearbeitet:
So, nach ein paar Tagen Ruhe im Thread mal wieder ein Update.

Zum Einen arbeite ich grad an der Dokumentation zu EasyLFS, damit das Projekt auch mal ein Dokument bekommt welches ueber Installation, Optionen und die Hintergruende des Projekts informiert.
Zum Anderen wurde mir von unserem grosszuegigen Sponsor Azi, welcher ja auch bereits die Images hostet, angeboten ein Wiki einzurichten welches sich dann mit EasyLFS beschaeftigen wird.
 
So, ich freue mich bekanntgeben zu duerfen, dass nun offiziell und allgemein die Version 0.2.6 von EasyLFS zum Download bereitsteht.
Und zwar hier: http://easylfs.aquanasoft.de/easylfs-0.2.6.iso (ca. 450MB)

Neuerungen wurden zwar schon ausfuehrlich hier im Thread behandelt, und in diesem Post findet sich auch eine Liste der enthaltenen Software, aber trotzdem moechte ich noch ein paar kurze Highlights anfuehren.

Mit der Version 0.2.6 ist nun erstmals eine brauchbare Integration von SELinux verfuegbar, inklusive der Reference-Policy.
Leider haben wir dort noch einen kleinen Fehler sodass alles und jeder im Kontext des Kernels arbeitet. Dies sollte aber kein Sicherheitsproblem darstellen, die normalen Schutzmechanismen von Linux greifen weiterhin, SELinux wird dadurch mehr oder weniger unwirksam.
Das Problem ist fuer die naechste Version (0.3) auf jeden Fall schon behoben.

Es gibt jetzt auch Midnight Commander, fuer etwas komfortablere Arbeit mit Dateien und Verzeichnissen, und auch Programme wie NcFTP und OpenSSH sind mit dabei.

Der eingesetzte Kernel ist 2.6.20.

Eine Installationsanleitung findet Ihr in diesem Post.
 
So, nachdem nun wieder ein wenig Zeit vergangen ist mal wieder ein kleines Update.

Viel habe ich die letzten Tage nicht gemacht. Da ich nun mit meiner Frau und ihren Kindern zusammen lebe ist die Zeit etwas knapper geworden.
Ich hab in den letzten Tagen ein wenig was an der Resumefaehigkeit der Scripts gearbeitet und ein klein wenig schonmal in das EasyLFS Wiki eingetragen.
Ansonsten hab ich eben einige Zeit damit verbracht unseren Umzug mal langsam zu einem Ende kommen zu lassen (und trotzdem steht noch so viel Kram rum) und den Kindern bei den Hausaufgaben zu helfen.
Ausserdem hab ich vor knapp einer Woche mal wieder mit Ultima 9 angefangen, in der Hoffnung jetzt doch endlich mal bis zum Ende dabei zu bleiben. Immerhin hab ich schon 3 Schreine wiederhergestellt und bin jetzt im Dungeon Wrong um meine Weggefaehrtin Raven zu befreien.

Aber es gibt auch Gutes, nicht nur Verzoegerungen. So hab ich z.B. gestern ein neues Buch erhalten welches mir bei der Arbeit an EasyLFS durchaus helfen koennte: Classic Shell Scripting

Dieses Wochenende will ich schauen dass ich mal wieder etwas mehr Zeit fuer die Arbeit an EasyLFS finde, und auch noch was mehr in das Wiki eintrage (z.B. fehlt die Installationsanleitung noch), und auch noch was bei Ultima weiter komme. ;)
Mal schauen wie sich das alles untereinander und mit der Familie arrangieren laesst.
 
...
Aber es gibt auch Gutes, nicht nur Verzoegerungen. So hab ich z.B. gestern ein neues Buch erhalten welches mir bei der Arbeit an EasyLFS durchaus helfen koennte: Classic Shell Scripting
....
Für alle die der englischen Sprache nicht sehr mächtig sind, oder welche gern ein Buch in deutscher Muttersprache in den Händen halten, gibt es folgende Ausgabe Klassische Shellprogrammierung
(Aktuelle Auflage: 1.Januar 2006)

Schönen Tag noch, man liest sich. :)
Euer Jens Ornot alias Webstar
 
Zurück