Linux Zertifizierungen LPIC

pingi
Lernziele und Unterlagen für das LPIC-1 Zertifikat, bestehend aus den Serien
.) LPI 101 und
.) LPI 102.
Die LPI Level 1 Prüfung 101 prüft die Grundfertigkeiten in folgenden Bereichen, zu denen auch jeweils Artikel vorliegen:
1.101 – Hardware und Systemarchitektur
1.102 – Installation von Linux und Paketmanagement
1.103 – GNU und Unix Kommandos
1.104 – Gerätedateien, Linux Dateisysteme, Filesystem Hierarchy Standard
1.110 – Das X-Window-System
Die LPI Level 1 Prüfung 102, Grundfertigkeiten in folgenden Bereichen:
106 Booten, Initialisierung, Shutdown, Runlevels
107 Drucken
108 Dokumentation
109 Shells, Scripting, Programmierung und Kompilieren
110 Administrative Tätigkeiten
111 Netzwerkgrundlagen
112 Netzwerkdienste
113 Sicherheit
Das Linux Professional Institute (LPI) gilt als weltweit führendes professionelles Zertifizierungsprogramm der Linux-Gemeinschaft. Das LPI entwickelt professionelle Zertifizierungen für das Betriebssystem GNU/Linux, unabhängig von Software- oder Schulungsanbietern (also weitgehend distributionsunabhängig). Bisher wird ein Zertifizierungsprogramm, Linux Professional Institute Certification (kurz LPIC), angeboten, das sich an Systemadministratoren richtet. Über weitere Zertifizierungsprogramme, etwa für Anwender oder Entwickler, wird nachgedacht.

Alle Artikel zur LPIC unterliegen der GNU Free Documentation License.

Quellen, Weblinks:
LPI Literatur und Lernmedien
LPIC-1
Exam 101: Detailed Objectives
Exam 102: Detailed Objectives
LPIC Level1 Study-Guides
Linux-Praxis.de
Debian GNU/LInux Anwenderhandbuch
LPIe.V. German
Linux Professional Institute
Linux
LPIC-3 300 Objectives V1
Junior Level Administration (LPIC-1)
Linux Professional Institute Wikipedia
Überblick zu den Linux Zertifizierungen LPI
Prüfung LPI 101: Detaillierte Lernziele
Prüfung LPI 102: Detaillierte Lernziele
GNU/Linux Administration Manuals
The LPIC-2 Exam Prep
Die Einsteiger-Zertifizierung des LPI pdf
LPI Academy

1.114.3 – Sicherheit auf Benutzerebene

zurück zu Linux Zertifizierungen LPIC
1.114.3 – Einrichten von Sicherheit auf Benutzerebene
Prüfungskandidaten sollten in der Lage sein, Sicherheit auf Benutzerebene zu implementieren. Die Tätigkeiten beinhalten das Verwalten von Beschränkungen auf Benutzerlogins, Prozesse und Speichernutzung.

Die wichtigsten Dateien, Bezeichnungen und Anwendungen:

* quota
* usermod

Die Verwaltung von Einschränkungen einzelner Useraccounts ist ein vielfältiger Bereich, der in einzelnen Fällen schon in anderen Abschnitten beschrieben wurde. Die Haupt-Möglichkeiten der Einschränkungen liegen in einer durchdachten Organisation der Dateien und Programme hinsichtlich ihrer Gruppenzugehörigkeit. Sind bestimmte Programme nur von Mitgliedern einer bestimmten Gruppe ausführbar, so kann z.B. die Einstellung, welcher User ein solches Programm ausführen darf einfach über die Gruppenmitgliedschaft des Users verwaltet werden. Diese Techniken sind im Abschnit 1.111.1 bereits beschrieben worden.

Auch die Möglichkeit, die Gültigkeit eines Accounts und andere einen User betreffende Einstellungen mit usermod zu verändern wurde dort bereits ausführlich besprochen.

Die Einschränkungen des Festplattenplatzes, den einzelne User zur Verfügung haben mittels diskquotas wurde bereits bei der Vorbereitung auf die Prüfung LPI101 im Abschnitt 1.104.4 ausführlich besprochen und wird daher hier nicht weiter behandelt.

Einschränkungen mit ulimit
Eine Sache, die noch keine Beschreibung erfahren hat, für userbezogene Einstellungen aber sehr wichtig ist, ist der Umgang mit dem Shellbefehl ulimit. Es handelt sich hier um ein eingebautes (internes) Shellkommando, das der Shell selbst Einschränkungen hinsichtlich der von ihr benötigten Ressourcen macht. In der Regel werden diese Einstellungen in systemweiten Startdateien der Shell (wie etwa /etc/profile) gemacht. Einstellungen in usereigenen Startdateien sind in der Regel sinnlos, weil jeder User diese Einschränkungen selbst wieder aufheben könnte.

ulimit kennt verschiedene Möglichkeiten für Beschränkungen von Ressourcen, die für die Shell und alle Prozesse, die von ihr gestartet werden gelten. Die Syntax ist:

ulimit [-SHacdflmnpstuv [Limit]]

Die Optionen -H und -S spezifizieren jeweils den Hard- bzw. Softlimit einer Ressource. Ein Hardlimit kann nicht mehr erhöht werden, sobald er einmal gesetzt ist. Ein Softlimit kann bis zum Wert des Hardlimits erhöht werden. Werden beide Angaben weggelassen, so werden sowohl Hard-, als auch Softlimit gesetzt.

Die Angabe des Limit kann entweder eine Zahl sein, in der für die angegebene Ressource gültigen Einheit, oder einer der Spezialwerte hard, soft oder unlimited. Diese Spezialwerte bezeichnen die für diese Ressource eingestellten Hard- und Softlimits bzw. keinen Limit.

Ist kein Limit angegeben, so wird der gegenwärtige Wert des Softlimits der entsprechenden Ressource ausgegeben. Ist zusätzlich ein -H angegeben, so wird stattdessen der Hardlimit angezeigt.

Die einzelnen Ressourcen werden über Parameter eingestellt und haben die folgenden Bedeutungen:

-a
Alle aktuellen Limits werden dargestellt
-c
Stellt die maximale Größe von Core-Dateien ein. Das sind Dateien, die erstellt werden, wenn ein Programm abstürzt. Diese Dateien enthalten dann den Daten- und Programmbereich des abgestürzten Programms für die Fehlersuche mit einem Debugger. Ein Wert von 0 schaltet Core-Files grundsätzlich ab.
-d
Die maximale Größe des Datensegments eines Prozesses.
-f
Die maximale Größe von Dateien, die die Shell anlegt.
-l
Die maximale Speichergröße, die gesperrt werden darf
-m
Die maximale Größe von residentem Speicher
-n
Die maximale Anzahl gleichzeitig geöffneter Dateien
-p
Die Größe von Pipes in 512 Byte Blöcken
-s
Die maximale Stack-Größe
-t
Der maximale Wert von CPU-Zeit in Sekunden
-u
Die maximale Anzahl von Prozessen für einen einzelnen User
-v
Die maximale Größe von virtuellem Speicher, der für die Shell verfügbar ist.

Ist Limit angegeben, so bezeichnet er den neuen Wert für die angegebene Ressource (außer bei -a, das nur Ausgaben macht). Wird keine Ressource angegeben, so wird -f angenommen. Die Werte beziehen sich in der Regel auf 1024 Byte Blöcke, außer bei der Angabe von -t (Sekunden), -p (512-Byte Blöcke) und -n und -u, die keinen Multiplikator haben sondern genau so gewertet werden, wie angegeben.

Ein typischer Eintrag in /etc/profile wäre z.B.

ulimit -Sc 0 # Der Soft-Limit für Core-Dateien wird
# auf 0 gesetzt
# Es werden also keine Corefiles angelegt.
ulimit -d 15000 # Hard- und Softlimit für die Datengröße
# eines Programmes werden auf 15 MByte
# gesetzt (15000*1024)
ulimit -s 15000 # Hard- und Softlimit für die Stack-Größe
# eines Programmes werden auf 15 MByte
# gesetzt.

# Die folgende Konstruktion gilt nur für den User hans.
# Er darf nicht mehr als 10 Prozesse gleichzeitig laufen haben.
if [ $LOGNAME = „hans“ ]
then
ulimit -u 10
fi

Mit diesen Einstellungen ist es möglich, die einzelnen User in ihrem Ressourcenverbrauch einzuschränken. Diese Ressourcen beziehen sich aber nur auf eingeloggte User, nicht auf Netzwerkdienste. Genau besehen sind es ja Einstellungen der Shell. Also greifen diese Einstellungen nur da, wo die Shell aktiv ist.

1.114.2 – Einrichten von Host-Security

zurück zu Linux Zertifizierungen LPIC
Prüfungskandidaten sollten über das Einrichten einer grundlegenden Host-Security Bescheid wissen. Diese Tätigkeiten enthalten die Konfiguration von syslog, Shadow-Paßwörter, das Einrichten eines Mail-Alias für die Mails von root und das Abdrehen der nicht verwendeten Netzwerkdienste.

Die wichtigsten Dateien, Bezeichnungen und Anwendungen:

* /etc/inetd.conf oder /etc/init.d/*
* /etc/nologin
* /etc/passwd
* /etc/shadow
* /etc/syslog.conf

Auch für dieses Kapitel gilt, daß die meisten der hier geforderten Techniken bereits an anderer Stelle beschrieben wurden. Aus diesem Grund werden neben den Verweisen auf die bereits besprochenen Techniken nur noch einige Details geklärt.

Syslog Konfigurieren
Die Konfiguration des Syslog-Daemons wurde im Abschnitt 1.111.3 bereits ausführlich beschrieben. Sicherheitsrelevante Systemmeldungen können mit Hilfe dieser Technik in eine spezielle Datei geschrieben werden, die dann entsprechend beobachtet werden muß.

Typische Herkünfte von sicherheitsrelevanten Meldungen sind:

kern
Meldungen der Firewalls
auth und authpriv
Meldungen und vertrauliche Meldungen des Sicherheitsdienstes. Hier sind die logins verzeichnet.

Neben der Ausgabe in Dateien sei hier auch nochmal an die Möglichkeit erinnert, die Meldungen auch auf das Terminal bestimmter User (vorzugsweise des root-Users) zu schreiben.

Shadow-Passwörter
Alle modernen Linux-Distributionen arbeiten heute standardmäßig mit den Shadow-Passwörtern. Die genauen Beschreibungen der Formate der Shadow-Dateien sind in Abschnitt 1.111.1 nachlesbar.

Um ein System mit dem alten Passwortsystem in ein Shadow-Passwort-System zu konvertieren, existieren die Programme pwconv und grpconv. Umgekehrt können moderne Shadow-Systeme mit pwunconv und grpunconv wieder zurück in das alte Format verwandelt werden.

Logins zeitweise verbieten
Wenn der Systemverwalter für eine bestimmte Zeit verbieten will, daß sich User auf dem Rechner einloggen, so kann er einfach eine Datei /etc/nologin anlegen. Diese Datei kann einen kurzen Text enthalten, der erklärt, warum gerade kein Login möglich ist.

Sowohl das Programm login, als auch Netzwerkdienste wie ssh, telnet, rlogin oder rsh verweigern den Login, wenn diese Datei existiert. Statt dessen zeigen sie dem User den Inhalt der Datei /etc/nologin an.

Diese Beschränkung gilt nicht für den root-User.

Mail Alias von root
Normalerweise sollte der Systemverwalter nicht immer unter seinem root-login arbeiten, außer er arbeitet tatsächlich an der Verwaltung. Wenn er jedoch normale Arbeiten am Computer erledigt, sollte er mit einem Normallogin arbeiten, wie alle anderen auch. Das hat mehrere Gründe. Zum einen können fatale Fehler im Normalbetrieb nicht stattfinden, weil ein Normaluser diese Fehler nicht machen kann. Will ein User etwa ein Verzeichnis löschen und vertippt sich, so daß ein Leerzeichen in die Befehlszeile rutscht:

rm -r / foo
^
/|
|
unbeabsichtigtes Leerzeichen

so wäre das der Befehl, das Wurzelverzeichnis und alle darunterliegenden Verzeichnisse zu löschen. Das kann aber nur der Systemverwalter (root). Arbeitet root ständig mit seinem Systemverwalter-Account, so gibt es keine Instanz, die ihn hindern würde, solche Fehler zu machen. Arbeitet er als Normaluser, so werden solche Fehler mangels Berechtigung nicht ausgeführt.

Damit aber root trotzdem seine Mails bekommt, die an root@localhost gesendet wurden, kann er einen Mailalias einrichten. Diese Technik wurde bereits im Abschnitt 1.113.2 besprochen. Der Eintrag in /etc/aliases müsste z.B. lauten:

root: hans

Nach dieser Veränderung müßte der Befehl

newaliases

ausgeführt werden, damit sendmail den Alias benutzen kann.

Eine andere Möglichkeit wäre die Weiterleitung der Mails von root an einen anderen User über die Benutzung der Datei ~/.forward im Heimatverzeichnis von root

Nicht benötigte Netzwerkdienste abschalten
Netzwerkdienste können unter Linux grundsätzlich auf zwei verschiedene Arten gestartet werden. Entweder sie sind grundsätzlich schon im Arbeitsspeicher geladen und warten auf Aufträge, die sie abarbeiten sollen, oder sie werden – jeweils wenn sie gebraucht werden – vom inetd aufgerufen. Beide Techniken haben ihre Vor- und Nachteile die Fall für Fall abgewogen werden sollten, um zu entscheiden, auf welche Weise ein bestimmter Dienst gestartet werden soll. Meist ist die Voreinstellung der Distributionen ein guter Anhaltspunkt, um zu entscheiden, ob ein Dienst als Stand-Alone oder inetdbasierter Dienst laufen soll.

Die Voreinstellungen der verschiedenen Distributionen ermöglichen oft Zugriffe, die in der Praxis nicht gewünscht sind. Um solche Dienste abzuschalten, muß entsprechend erstmal klar sein, wie er gestartet wird. Die beiden folgenden Abschnitte gehen die beiden möglichen Methoden durch und zeigen Möglichkeiten der Abschaltung.

Inetd-basierte Dienste abschalten
Wenn ein Dienst über den inetd (siehe auch Abschnitt 1.113.1) gestartet wird, so ist er in der Datei /etc/inetd.conf eingetragen. Wurde stattdessen der xinetd benutzt, liegen die Einstellungen in /etc/xinetd.conf. Einträge in diesen Dateien können einfach auskommentiert werden, indem ihnen ein Kommentarzeichen am Zeilenanfang vorangestellt wird.

Das alleinige Auskommentieren dieser Zeile reicht aber nicht aus, denn der inetd ließt diese Datei nur beim Start. Um einem laufenden inetd diese Veränderungen bekannt zu geben, wird ihm ein HUP-Signal geschickt.

In vielen Fällen ist es überhaupt nicht erwünscht, daß der inetd läuft. Sollte das der Fall sein, so kann dafür gesorgt werden, daß dieser Dienst selbst gar nicht gestartet wird. Der inetd selbst ist ein Stand-Alone-Dienst, dessen Abschaltung im nächsten Abschnitt beschrieben wird.

Stand-Alone Dienste abschalten
Stand-Alone Dienste werden in den modernen Linux-Distributionen alle auf eine gemeinsame Art und Weise gestartet. Im Verzeichnis /etc/init.d liegen Shellscripts, die die einzelnen Dienste starten und stoppen. Diese sogenannten Init-Scripts verstehen jeweils mindestens die Parameter start und stop. Häufig gibt es noch weitere Parameter wie status (gibt eine Ausgabe aus, ob der entsprechende Dienst läuft oder nicht), reload (zwingt den Dienst seine Konfigurationsdatei neu einzulesen) oder restart (Kombination aus stop und anschließendem start).

Jedesmal, wenn ein neuer Dienst installiert wird, installiert er ein entsprechendes Init-Script in das Verzeichnis /etc/init.d. Jeder Dienst kann jetzt mit Hilfe dieser Scripts gestartet werden. Installieren wir den Dienst foo, dann existiert also in diesem Verzeichnis ein Script, wahrscheinlich ebenfalls mit dem Namen /etc/init.d/foo. Um den Dienst von Hand zu starten, wird dieses Script mit dem Parameter start aufgerufen:

/etc/init.d/foo start

entsprechend kann ein laufender Dienst mit dem Script wieder heruntergefahren werden:

/etc/init.d/foo stop

Die alleinige Existenz dieser Scripte legt aber noch nicht fest, daß diese Dienste auch automatisch gestartet werden. Für diese Einstellungen sind die sogenannten Runlevel-Verzeichnisse gedacht.

Im Verzeichnis /etc (manchmal auch in /etc/init.d liegen für jeden Runlevel ein weiteres Verzeichnis. Diese Runlevelverzeichnisse haben immer die Namen

rcRunlevelnummer.d

also etwa rc0.d, rc1.d, rc2.d oder rcS.d (Single User Mode). Innerhalb dieser Verzeichnisse finden sich symbolische Links auf die Init-Scripts, die in dem jeweiligen Runlevel ausgeführt werden sollen. Der Namen dieser Links beginnt entweder mit einem S (Start) oder mit einem K (Kill). Dem folgt eine zweistellige Nummer, die angibt, in welcher Reihenfolge die Scripts ausgeführt werden sollen. Anschließend folgt der Name des Scripts. Die Nummer ist kein absoluter Wert, sondern nur eine Hilfe für die alphabetische Sortierung der Scriptnamen für die Ausführung.

Um unser foo-Script in /etc/init.d automatisch im Runlevel 5 zu starten, genügt also die Erstellung eines symbolischen Links im Verzeichnis /etc/rc5.d in der Form:

lrwxrwxrwx 1 root root 13 5. Sep 17:22 S20foo -> ../init.d/foo

Die 20 bedeutet nicht, daß dieser Dienst an 20. Stelle gestartet wird. Alle Links in diesem Verzeichnis, die mit einem S beginnen, werden beim Eintritt in diesen Runlevel alphabetisch sortiert ausgeführt. Die Nummer dient also dazu, die Reihenfolge anzugeben, nicht die absolute Position. Es ist ohne Problem möglich, daß mehrere Links mit der selben Nummer arbeiten, sie werden dann hintereinander (S20bar vor S20foo) aufgerufen. Wird ein Script durch einen Link aufgerufen, dessen Namen mit einem S beginnt, so wird das entsprechende Script mit dem Parameter start aufgerufen

Analog dazu werden die Scripts, deren Namen mit K beginnen, beim Verlassen des Runlevels ausgeführt, wieder in alphabetischer Reihenfolge. Nur diesmal wird das Script, auf das sie verweisen mit dem Parameter stop aufgerufen.

Um also Dienste grundsätzlich abzuschalten und zu verhindern, daß diese Dienste bei einem Neustart wieder automatisch geladen werden, muß im entsprechenden Runlevelverzeichnis der entsprechende Link einfach gelöscht werden.