Linux Professional Institute Learning Logo.
Weiter zum Inhalt
  • Home
    • Alle Ressourcen
    • LPI Lernmaterialien
    • Mitmachen
    • Publishing Partner
    • Publishing Partner werden
    • Über uns
    • FAQ
    • Mitwirkende
    • Roadmap
    • Kontakt
  • LPI.org
110.1 Lektion 1
Thema 105: Shells und Shell-Skripte
105.1 Die Shell-Umgebung anpassen und verwenden
  • 105.1 Lektion 1
  • 105.1 Lektion 2
  • 105.1 Lektion 3
105.2 Einfache Skripte anpassen oder schreiben
  • 105.2 Lektion 1
  • 105.2 Lektion 2
Thema 106: Benutzerschnittstellen und Desktops
106.1 X11 installieren und konfigurieren
  • 106.1 Lektion 1
106.2 Grafische Desktops
  • 106.2 Lektion 1
106.3 Barrierefreiheit
  • 106.3 Lektion 1
Thema 107: Administrative Aufgaben
107.1 Benutzer- und Gruppenkonten und dazugehörige Systemdateien verwalten
  • 107.1 Lektion 1
  • 107.1 Lektion 2
107.2 Systemadministrationsaufgaben durch Einplanen von Jobs automatisieren
  • 107.2 Lektion 1
  • 107.2 Lektion 2
107.3 Lokalisierung und Internationalisierung
  • 107.3 Lektion 1
Thema 108: Grundlegende Systemdienste
108.1 Die Systemzeit verwalten
  • 108.1 Lektion 1
  • 108.1 Lektion 2
108.2 Systemprotokollierung
  • 108.2 Lektion 1
  • 108.2 Lektion 2
108.3 Grundlagen von Mail Transfer Agents (MTA)
  • 108.3 Lektion 1
108.4 Drucker und Druckvorgänge verwalten
  • 108.4 Lektion 1
Thema 109: Netzwerkgrundlagen
109.1 Grundlagen von Internetprotokollen
  • 109.1 Lektion 1
  • 109.1 Lektion 2
109.2 Persistente Netzwerkkonfiguration
  • 109.2 Lektion 1
  • 109.2 Lektion 2
109.3 Grundlegende Netzwerkfehlerbehebung
  • 109.3 Lektion 1
  • 109.3 Lektion 2
109.4 Clientseitiges DNS konfigurieren
  • 109.4 Lektion 1
Thema 110: Sicherheit
110.1 Administrationsaufgaben für Sicherheit durchführen
  • 110.1 Lektion 1
110.2 Einen Rechner absichern
  • 110.2 Lektion 1
110.3 Daten durch Verschlüsselung schützen
  • 110.3 Lektion 1
  • 110.3 Lektion 2
How to get certified
  1. Thema 110: Sicherheit
  2. 110.1 Administrationsaufgaben für Sicherheit durchführen
  3. 110.1 Lektion 1

110.1 Lektion 1

Zertifikat:

LPIC-1

Version:

5.0

Thema:

110 Sicherheit

Lernziel:

110.1 Administrationsaufgaben für Sicherheit durchführen

Lektion:

1 von 1

Einführung

Sicherheit ist ein Muss der Systemadministration. Als guter Linux-Systemadministrator müssen Sie eine Reihe von Dingen im Auge behalten, wie etwa spezielle Berechtigungen für Dateien, das Ablaufen von Benutzerpasswörtern, offene Ports und Sockets, die Beschränkung der Nutzung von Systemressourcen, den Umgang mit angemeldeten Benutzern und die Ausweitung von Rechten durch su und sudo. In dieser Lektion behandeln wir eben diese Themen.

Mit dem SUID- und SGID-Satz nach Dateien suchen

Neben den traditionellen Berechtigungen Lesen, Schreiben und Ausführen können Dateien in einem Linux-System auch spezielle Berechtigungen wie die SUID oder die SGID Bits haben.

Das SUID-Bit sorgt für die Ausführung der Datei mit den Rechten des Eigentümers. Es wird numerisch durch 4000 und symbolisch entweder durch s oder S auf dem Bit der Ausführungsberechtigung des Besitzers dargestellt. Ein klassisches Beispiel für eine ausführbare Datei mit gesetzter SUID-Berechtigung ist passwd:

carol@debian:~$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 63736 jul 27  2018 /usr/bin/passwd

Das kleine s in rws zeigt das gesetzte SUID-Bit auf der Datei an — zusammen mit der Ausführungsberechtigung. Ein großes S stattdessen (rwS) würde bedeuten, dass die zugrundeliegende Ausführungsberechtigung nicht gesetzt ist.

Note

passwd behandeln wir im nächsten Abschnitt. Das Dienstprogramm wird meist von root benutzt, um die Benutzerpasswörter zu setzen oder zu ändern (z.B.: passwd carol). Normale Benutzer ändern darüber ihre eigenen Passwörter. Darum hat es den SUID-Satz.

Das SGID-Bit kann sowohl für Dateien als auch für Verzeichnisse gesetzt werden. Bei Dateien entspricht sein Verhalten dem von SUID, aber die Rechte sind die der Gruppe. Ist es jedoch für ein Verzeichnis gesetzt, erben alle darin erstellten Dateien die Eigentumsrechte der Gruppe des Verzeichnisses. Wie SUID wird auch SGID symbolisch durch s oder S auf dem Bit der Ausführungsberechtigung der Gruppe dargestellt — numerisch durch 2000. Sie setzen das SGID in einem Verzeichnis mit chmod, indem Sie 2 (SGID) zu den traditionellen Berechtigungen hinzufügen (in unserem Fall 755):

carol@debian:~$ ls -ld shared_directory
drwxr-xr-x 2 carol carol 4096 may 30 23:55 shared_directory
carol@debian:~$ sudo chmod 2755 shared_directory/
carol@debian:~$ ls -ld shared_directory
drwxr-sr-x 2 carol carol 4096 may 30 23:55 shared_directory

Um Dateien mit einem oder beiden SUID- und SGID-Sätzen zu finden, nutzen Sie den Befehl find mit der Option -perm und geben numerische oder symbolische Werte an. Die Werte übergeben Sie einzeln oder mit einem vorangestellten Trenn- (-) oder Schrägstrich (/). Die Bedeutung ist jeweils die:

-perm numerischer Wert oder -perm symbolischer Wert

findet Dateien ausschließlich mit der speziellen Berechtigung.

-perm -numerischer Wert oder -perm -symbolischer Wert

findet Dateien mit der speziellen Berechtigung und anderen Berechtigungen.

-perm /numerischer Wert oder -perm /symbolischer Wert

findet Dateien, die eines der beiden speziellen Rechte (und andere Rechte) haben.

Um beispielsweise Dateien zu finden, für die im aktuellen Arbeitsverzeichnis nur SUID gesetzt ist, verwenden Sie den folgenden Befehl:

carol@debian:~$ find . -perm 4000
carol@debian:~$ touch file
carol@debian:~$ chmod 4000 file
carol@debian:~$ find . -perm 4000
./file

Da es keine Dateien mit ausschließlich gesetztem SUID gab, haben wir für das Beispiel zuvor eine solche Datei erstellt, un eine Ausgabe zu erhalten. Sie können denselben Befehl mit symbolischer Notation ausführen:

carol@debian:~$ find . -perm u+s
./file

Um Dateien mit SUID (unabhängig von anderen Berechtigungen) im Verzeichnis /usr/bin/ zu finden, führen Sie den folgenden Befehl aus:

carol@debian:~$ sudo find /usr/bin -perm -4000
/usr/bin/umount
/usr/bin/newgrp
/usr/bin/gpasswd
/usr/bin/chfn
/usr/bin/mount
/usr/bin/passwd
/usr/bin/chsh
/usr/bin/sudo
/usr/bin/su
carol@debian:~$ sudo find /usr/bin -perm -u+s
/usr/bin/umount
/usr/bin/newgrp
/usr/bin/gpasswd
/usr/bin/chfn
/usr/bin/mount
/usr/bin/passwd
/usr/bin/chsh
/usr/bin/sudo
/usr/bin/su

Wenn Sie nach Dateien im selben Verzeichnis mit gesetztem SGID-Bit suchen, führen Sie find /usr/bin/ -perm -2000 oder find /usr/bin/ -perm -g+s aus.

Um schließlich Dateien mit einem der beiden Sonderrechte zu finden, fügen Sie 4 und 2 hinzu und verwenden /:

carol@debian:~$ sudo find /usr/bin -perm /6000
/usr/bin/dotlock.mailutils
/usr/bin/umount
/usr/bin/newgrp
/usr/bin/wall
/usr/bin/ssh-agent
/usr/bin/chage
/usr/bin/dotlockfile
/usr/bin/gpasswd
/usr/bin/chfn
/usr/bin/mount
/usr/bin/passwd
/usr/bin/chsh
/usr/bin/expiry
/usr/bin/sudo
/usr/bin/bsd-write
/usr/bin/crontab
/usr/bin/su

Passwortverwaltung und -alterung

Wie bereits erwähnt, ändern Sie als normaler Benutzer mit passwd Ihr eigenes Passwort. Die Option -S oder --status liefert Ihnen Statusinformationen über Ihr Konto:

carol@debian:~$ passwd -S
carol P 12/07/2019 0 99999 7 -1

Hier eine Aufschlüsselung der sieben Felder dieser Ausgabe:

carol

Anmeldename des Benutzers.

P

Zeigt an, dass der Benutzer ein gültiges Passwort hat (P) — andere mögliche Werte sind L (gesperrtes Passwort) und NP (kein Passwort).

12/07/2019

Datum der letzten Passwortänderung.

0

Mindestalter in Tagen, d.h. die Mindestanzahl von Tagen zwischen Passwortänderungen. Ein Wert von 0 bedeutet, dass das Passwort jederzeit geändert werden kann.

99999

Maximales Alter in Tagen, d.h. die maximale Anzahl von Tagen, die das Passwort gültig ist. Der Wert 99999 deaktiviert das Ablaufen des Passworts.

7

Warnzeitraum in Tagen, d.h. die Anzahl der Tage, die der Benutzer vor Ablauf des Passworts gewarnt wird.

-1

Passwortinaktivitätszeitraum in Tagen, d.h. die Anzahl der inaktiven Tage nach Ablauf des Passworts, bevor das Konto gesperrt wird. Der Wert -1 hebt die Inaktivität eines Kontos auf.

Abgesehen von den Berichten über den Kontostatus nutzen Sie den Befehl passwd als root für einige grundlegende Aufgaben der Kontoverwaltung. Mit den Optionen -l, -u, -e und -d sperren und entsperren Sie Konten, zwingen einen Benutzer zur Passwortänderung bei der nächsten Anmeldung und löschen das Passwort eines Benutzers.

Bevor wir diese Optionen testen, befassen wir uns kurz mit dem Befehl su, mit dem Sie während einer Sitzung den Benutzer wechseln. Lassen Sie uns also zum Beispiel passwd als root nutzen, um das Passwort von carol zu sperren. Anschließend wechseln wir zu carol und überprüfen unseren Kontostatus, um sicherzustellen, dass das Passwort tatsächlich gesperrt wurde (L) und nicht geändert werden kann. Schließlich kehren wir zum Root-Benutzer zurück und entsperren das Passwort von carol:

root@debian:~# passwd -l carol
passwd: password expiry information changed.
root@debian:~# su - carol
carol@debian:~$ passwd -S
carol L 05/31/2020 0 99999 7 -1
carol@debian:~$ passwd
Changing password for carol.
Current password:
passwd: Authentication token manipulation error
passwd: password unchanged
carol@debian:~$ exit
logout
root@debian:~# passwd -u carol
passwd: password expiry information changed.

Alternativ sperren/entsperren Sie das Passwort eines Benutzers auch mit dem Befehl usermod:

Passwort für Benutzer carol sperren

usermod -L carol oder usermod --lock carol

Passwort für Benutzer carol entsperren

usermod -U carol oder usermod --unlock carol

Note

Mit den Optionen -f oder --inactive können Sie usermod auch dazu verwenden, die Anzahl der Tage festzulegen, bevor ein Konto mit einem abgelaufenen Passwort deaktiviert wird (z.B.: usermod -f 3 carol).

Abgesehen von passwd und usermod ist chage (“change age”) der direkteste Befehl, um die Alterung von Passwörtern und Konten zu verwalten. Nutzen Sie als root chage mit der Option -l (oder --list), gefolgt von einem Benutzernamen, um das aktuelle Passwort und die Informationen zum Ablauf des Kontos dieses Benutzers anzuzeigen — als normaler Benutzer erhalten Sie Auskunft über Ihr eigenes Konto:

carol@debian:~$ chage -l carol
Last password change					: Aug 06, 2019
Password expires					: never
Password inactive					: never
Account expires						: never
Minimum number of days between password change		: 0
Maximum number of days between password change		: 99999
Number of days of warning before password expires	: 7

Ohne Optionen und nur mit Angabe eines Benutzernamens verhält sich chage interaktiv:

root@debian:~# chage carol
Changing the aging information for carol
Enter the new value, or press ENTER for the default

	Minimum Password Age [0]:
	Maximum Password Age [99999]:
	Last Password Change (YYYY-MM-DD) [2020-06-01]:
	Password Expiration Warning [7]:
	Password Inactive [-1]:
	Account Expiration Date (YYYY-MM-DD) [-1]:

Mit folgenden Optionen ändern Sie die verschiedenen Einstellungen von chage:

-m days username oder --mindays days username

Gibt die Mindestanzahl von Tagen zwischen Passwortänderungen an (z.B.: chage -m 5 carol). Der Wert 0 erlaubt es dem Benutzer, sein Passwort jederzeit zu ändern.

-M days username oder --maxdays days username

Gibt die maximale Anzahl von Tagen an, die das Passwort gültig sein soll (z.B.: chage -M 30 carol). Um den Ablauf des Passwortes zu deaktivieren, ist der Wert 99999 üblich.

-d days username oder --lastday days username

Gibt die Anzahl der Tage seit der letzten Passwortänderung an (z.B.: chage -d 10 carol). Der Wert 0 zwingt den Benutzer, sein Passwort bei der nächsten Anmeldung zu ändern.

-W days username oder --warndays days username

Gibt die Anzahl der Tage an, nach denen der Benutzer daran erinnert wird, dass sein Passwort abgelaufen ist.

-I days username oder --inactive days username

Gibt die Anzahl der inaktiven Tage nach Ablauf des Passworts an (z.B.: chage -I 10 carol) — das Gleiche wie usermod -f oder usermod --inactive. Sobald diese Anzahl von Tagen verstrichen ist, wird das Konto gesperrt. Bei einem Wert von 0 wird das Konto jedoch nicht gesperrt.

-E date username oder --expiredate date username

Gibt das Datum (oder die Anzahl der Tage seit Epoche , also dem 1. Januar 1970) an, an dem das Konto gesperrt werden soll — normalerweise im Format YYYY-MM-DD angegeben (z.B.: chage -E 2050-12-13 carol).

Note

In den Manpages zu passwd, usermod und chage erfahren Sie mehr über die Befehle und deren Optionen.

Offene Ports entdecken

Wenn es darum geht, offene Ports im Auge zu behalten, stehen auf den meisten Linux-Systemen vier leistungsfähige Dienstprogramme zur Verfügung: lsof, fuser, netstat und nmap. Wir werden diese im Folgenden behandeln.

lsof steht für “list open files”, was keine Kleinigkeit ist, wenn man bedenkt, dass — unter Linux — alles eine Datei ist. Wenn Sie lsof im Terminal eingeben, erhalten Sie eine umfangreiche Liste regulärer Dateien, Gerätedateien, Sockets usw. In dieser Lektion konzentrieren wir uns auf Ports. Für eine Liste aller “Internet”-Netzwerkdateien führen Sie lsof mit der Option -i aus:

root@debian:~# lsof -i
COMMAND  PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
dhclient 357     root    7u  IPv4  13493      0t0  UDP *:bootpc
sshd     389     root    3u  IPv4  13689      0t0  TCP *:ssh (LISTEN)
sshd     389     root    4u  IPv6  13700      0t0  TCP *:ssh (LISTEN)
apache2  399     root    3u  IPv6  13826      0t0  TCP *:http (LISTEN)
apache2  401 www-data    3u  IPv6  13826      0t0  TCP *:http (LISTEN)
apache2  402 www-data    3u  IPv6  13826      0t0  TCP *:http (LISTEN)
sshd     557     root    3u  IPv4  14701      0t0  TCP 192.168.1.7:ssh->192.168.1.4:60510 (ESTABLISHED)
sshd     569    carol    3u  IPv4  14701      0t0  TCP 192.168.1.7:ssh->192.168.1.4:60510 (ESTABLISHED)

Abgesehen von bootpc, von DHCP genutzt, zeigt die Ausgabe zwei Dienste, die auf Verbindungen warten — ssh und den Apache Webserver (http) — sowie zwei bestehende SSH-Verbindungen. Mit der Notation @ip-address geben Sie einen bestimmten Host an, um nach dessen Verbindungen zu suchen:

root@debian:~# lsof -i@192.168.1.7
COMMAND PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    557  root    3u  IPv4  14701      0t0  TCP 192.168.1.7:ssh->192.168.1.4:60510 (ESTABLISHED)
sshd    569 carol    3u  IPv4  14701      0t0  TCP 192.168.1.7:ssh->192.168.1.4:60510 (ESTABLISHED)
Note

Um nur IPv4- und IPv6-Netzwerkdateien anzuzeigen, verwenden Sie die Optionen -i4 bzw. -i6.

Ebenso filtern Sie nach dem Port, indem Sie die Option -i (oder -i@ip-address) dem Argument :port übergeben:

root@debian:~# lsof -i :22
COMMAND PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    389  root    3u  IPv4  13689      0t0  TCP *:ssh (LISTEN)
sshd    389  root    4u  IPv6  13700      0t0  TCP *:ssh (LISTEN)
sshd    557  root    3u  IPv4  14701      0t0  TCP 192.168.1.7:ssh->192.168.1.4:60510 (ESTABLISHED)
sshd    569 carol    3u  IPv4  14701      0t0  TCP 192.168.1.7:ssh->192.168.1.4:60510 (ESTABLISHED)

Mehrere Ports trennen Sie durch Kommata, Bereiche geben Sie per Bindestrich an:

root@debian:~# lsof -i@192.168.1.7:22,80
COMMAND PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    705  root    3u  IPv4  13960      0t0  TCP 192.168.1.7:ssh->192.168.1.4:44766 (ESTABLISHED)
sshd    718 carol    3u  IPv4  13960      0t0  TCP 192.168.1.7:ssh->192.168.1.4:44766 (ESTABLISHED)
Note

Die Anzahl der Optionen, die lsof zur Verfügung stehen, ist sehr umfangreich. Mehr darüber erfahren Sie in den Manpages.

Der nächste Befehl in unserer Liste der Netzwerkbefehle ist fuser, mit dem Sie den “Benutzer einer Datei” ermitteln — was einschließt, welche Prozesse auf welche Dateien zugreifen. Der Befehl liefert weitere Informationen, wie etwa die Art des Zugriffs. Um zum Beispiel das aktuelle Arbeitsverzeichnis zu überprüfen, reicht es aus, fuser auszuführen. Für ausführlichere Informationen gibt es die Option -v oder --verbose:

root@debian:~# fuser .
/root:                 580c
root@debian:~# fuser -v .
                     USER        PID ACCESS COMMAND
/root:               root        580 ..c.. bash

Hier die Aufschlüsselung der Ausgabe:

Datei

Datei, über die wir Informationen erhalten (/root).

USER

Eigentümer der Datei (root).

PID

Prozesskennung (580).

ACCESS

Art des Zugriffs (..c..) — ein Wert von folgenden:

c

Aktuelles Verzeichnis.

e

Laufende ausführbare Datei.

f

Geöffnete Datei (fehlt im Standardanzeigemodus).

F

Zum Schreiben geöffnete Datei (fehlt im Standardanzeigemodus).

r

Root-Verzeichnis.

m

Datei ist mmap’ed oder Shared Library.

.

Platzhalter (fehlt im Standardanzeigemodus).

COMMAND

Mit der Datei verknüpfter Befehl (bash).

Die Option -n (oder --namespace) findet Informationen über Netzwerk-Ports/Sockets. Sie müssen auch das Netzwerkprotokoll und die Portnummer angeben — hier ein Beispiel für den Apache Webserver:

root@debian:~# fuser -vn tcp 80
                     USER        PID ACCESS COMMAND
80/tcp:              root        402 F.... apache2
                     www-data    404 F.... apache2
                     www-data    405 F.... apache2
Note

Mit fuser können Sie kann die Prozesse, die auf die Datei zugreifen, mit den Schaltern -k oder --kill beenden (z.B. fuser -k 80/tcp). Ausführlichere Informationen finden Sie in der Manpage.

Wenden wir uns nun netstat zu, ein sehr vielseitiges Netzwerktool insbesondere zur Ausgabe von “Netzwerkstatistiken”.

Ohne Optionen ausgeführt, zeigt netstat sowohl aktive Internetverbindungen als auch Unix-Sockets an. Wegen der Größe der Liste sollte Sie die Ausgabe durch less leiten:

carol@debian:~$ netstat |less
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 192.168.1.7:ssh         192.168.1.4:55444       ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ]         DGRAM                    10509    /run/systemd/journal/syslog
unix  3      [ ]         DGRAM                    10123    /run/systemd/notify
(...)

Um nur “lauschende” Ports und Sockets aufzulisten, nutzen Sie die Optionen -l oder --listening. Mit den Optionen -t/--tcp und -u/--udp filtern Sie nach dem TCP- bzw. UDP-Protokoll (auch im selben Befehl kombinierbar). Mit -e/--extend erhalten Sie ausführlichere Informationen:

carol@debian:~$ netstat -lu
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
udp        0      0 0.0.0.0:bootpc          0.0.0.0:*
carol@debian:~$ netstat -lt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN
tcp        0      0 localhost:smtp          0.0.0.0:*               LISTEN
tcp6       0      0 [::]:http               [::]:*                  LISTEN
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN
tcp6       0      0 localhost:smtp          [::]:*                  LISTEN
carol@debian:~$ netstat -lute
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN      root       13729
tcp        0      0 localhost:smtp          0.0.0.0:*               LISTEN      root       14372
tcp6       0      0 [::]:http               [::]:*                  LISTEN      root       14159
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      root       13740
tcp6       0      0 localhost:smtp          [::]:*                  LISTEN      root       14374
udp        0      0 0.0.0.0:bootpc          0.0.0.0:*                           root       13604

Ohne die Option -l erscheinen nur bestehende Verbindungen:

carol@debian:~$ netstat -ute
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode
tcp        0      0 192.168.1.7:ssh         192.168.1.4:39144       ESTABLISHED root       15103

Benötigen Sie nur numerische Informationen über Ports und Hosts, hilft die Option -n oder --numeric, die nur Portnummern und IP-Adressen ausgibt. Beachten Sie die 22 (statt ssh), wenn Sie -n zum obigen Befehl hinzufügen:

carol@debian:~$ netstat -uten
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode
tcp        0      0 192.168.1.7:22          192.168.1.4:39144       ESTABLISHED 0          15103

Durch die Kombination von Optionen sind sehr nützliche und produktive netstat-Befehle möglich — mehr dazu in den Manpages.

Werfen wir nun abschließend einen Blick auf nmap, den “Network Mapper”. Dieser leistungsfähige Portscanner wird mit der Angabe einer IP-Adresse oder eines Hostnamens ausgeführt:

root@debian:~# nmap localhost
Starting Nmap 7.70 ( https://nmap.org ) at 2020-06-04 19:29 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000040s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 998 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 1.58 seconds

Neben einem einzelnen Host scannt nmap auch Listen/Bereiche:

Mehrere Hosts

Leerzeichen (z.B. nmap localhost 192.168.1.7).

Host-Bereiche

Bindestrich (z.B. nmap 192.168.1.3-20).

Subnetze

Platzhalter oder CIDR-Notation (z.B. nmap 192.168.1.* oder nmap 192.168.1.0/24). Sie können bestimmte Hosts ausschließen (z.B. nmap 192.168.1.0/24 --exclude 192.168.1.7).

Um einen bestimmten Port zu scannen, verwenden Sie den Schalter -p, gefolgt von der Portnummer oder dem Namen des Dienstes (nmap -p 22 und nmap -p ssh liefern die gleiche Ausgabe):

root@debian:~# nmap -p 22 localhost
Starting Nmap 7.70 ( https://nmap.org ) at 2020-06-04 19:54 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000024s latency).
Other addresses for localhost (not scanned): ::1

PORT   STATE SERVICE
22/tcp open  ssh

Nmap done: 1 IP address (1 host up) scanned in 0.22 seconds

Mit Kommata und Bindetrichen scannen Sie mehrere Ports oder Portbereiche:

root@debian:~# nmap -p ssh,80 localhost
Starting Nmap 7.70 ( https://nmap.org ) at 2020-06-04 19:58 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000051s latency).
Other addresses for localhost (not scanned): ::1

PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 0.22 seconds
root@debian:~# nmap -p 22-80 localhost
Starting Nmap 7.70 ( https://nmap.org ) at 2020-06-04 19:58 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000011s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 57 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 1.47 seconds

Zwei weitere wichtige nmap-Optionen lauten:

-F

Führt einen schnellen Scan der 100 wichtigsten Ports durch.

-v

Ausführliche Ausgabe (-vv gibt noch mehr Informationen aus).

Note

Mit Hilfe von Scan-Typen führt nmap sehr komplexe Abfragen aus. Dieses Thema ist jedoch nicht prüfungsrelevant.

Logins, Prozesse und Speicherverbrauch begrenzen

Die Ressourcen eines Linux-Systems sind nicht unbegrenzt, so dass Sie als Systemadministrator für ein gutes Gleichgewicht zwischen deren Begrenzung für den Benutzer und dem ordnungsgemäßen Funktionieren des Betriebssystems Sorge zu tragen haben. ulimit hilft Ihnen dabei.

ulimit kennt weiche und harte Limits — angegeben durch die Optionen -S bzw. -H. Ohne Optionen oder Argumente ausgeführt, zeigt ulimit die weichen Dateiblöcke des aktuellen Benutzers an:

carol@debian:~$ ulimit
unlimited

Mit der Option -a zeigt ulimit alle aktuellen Softlimits an (entspricht -Sa) — um alle aktuellen Hardlimits anzuzeigen, verwenden Sie -Ha:

carol@debian:~$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
(...)
carol@debian:~$ ulimit -Ha
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
(...)

Die verfügbaren Shell-Ressourcen geben die folgenden Optionen an:

-b

Maximale Größe des Socket Buffers.

-f

Maximale Größe der von der Shell und ihren Kindern geschriebenen Dateien.

-l

Maximale Größe des Locked Memory.

-m

Maximale Resident Set Size (RSS) — der aktuelle Anteil des Speichers, den ein Prozess im Hauptspeicher (RAM) hält.

-v

Maximale Menge an virtuellem Speicher.

-u

Maximale Anzahl von Prozessen, die einem einzelnen Benutzer zur Verfügung stehen.

Um Grenzwerte anzuzeigen, verwenden Sie also ulimit, gefolgt von entweder -S (soft) oder -H (hard) und der Option der gewünschten Ressource. Ist weder -S noch -H angegeben, werden die Softlimits angezeigt:

carol@debian:~$ ulimit -u
10000
carol@debian:~$ ulimit -Su
10000
carol@debian:~$ ulimit -Hu
15672

Um neue Grenzwerte für eine bestimmte Ressource zu setzen, geben Sie entweder -S oder -H an, gefolgt von der entsprechenden Ressourcen-Option und dem neuen Wert. Der Wert kann eine Zahl oder eines der speziellen Wörter soft (aktuelles weiches Limit), hard (aktuelles hartes Limit) oder unlimited (kein Limit) sein. Ist weder -S noch -H angegeben, werden beide Grenzwerte gesetzt. Im Beispiel lesen wir zuerst den aktuellen Wert für die maximale Größe von Dateien aus, die von der Shell und ihren Kindern geschrieben werden können:

root@debian:~# ulimit -Sf
unlimited
root@debian:~# ulimit -Hf
unlimited

Nun ändern wir den Wert von ulimit auf 500 Blöcke, ohne -S oder -H anzugeben. Beachten Sie, dass sich sowohl die weichen als auch die harten Grenzen ändern:

root@debian:~# ulimit -f 500
root@debian:~# ulimit -Sf
500
root@debian:~# ulimit -Hf
500

Schließlich senken wir nur das Softlimit auf 200 Blöcke:

root@debian:~# ulimit -Sf 200
root@debian:~# ulimit -Sf
200
root@debian:~# ulimit -Hf
500

Harte Limits darf nur der Root-Benutzer erhöhen. Normale Benutzer hingegen können harte Limits senken und weiche Limits bis zum Wert der harten Limits erhöhen. Damit neue Grenzwerte über Neustarts hinweg bestehen bleiben, tragen Sie diese in der Datei /etc/security/limits.conf ein. Hier vermerken Sie auch Beschränkungen für bestimmte Benutzer.

Note

Es gibt keine eigentliche Manpage für ulimit, da es sich um ein Bash-Builtin handelt. Gegebenenfalls müssen Sie die Dokumentation von Bash zu Rate ziehen, um mehr zu erfahren.

Umgang mit eingeloggten Benutzern

Zu Ihren Aufgaben als Systemadministrator gehört es auch, den Überblick über die angemeldeten Benutzer zu behalten. Drei Dienstprogramme helfen Ihnen bei dieser Aufgabe: last, who und w.

last gibt eine Liste der zuletzt angemeldeten Benutzer aus, wobei die aktuellsten Informationen oben stehen:

root@debian:~# last
carol    pts/0        192.168.1.4      Sat Jun  6 14:25   still logged in
reboot   system boot  4.19.0-9-amd64   Sat Jun  6 14:24   still running
mimi     pts/0        192.168.1.4      Sat Jun  6 12:07 - 14:24  (02:16)
reboot   system boot  4.19.0-9-amd64   Sat Jun  6 12:07 - 14:24  (02:17)
(...)
wtmp begins Sun May 31 14:14:58 2020

Die gekürzte Ausgabe im Beispiel liefert Informationen über die letzten beiden Benutzer im System. Die ersten beiden Zeilen informieren uns über den Benutzer carol, die nächsten beiden Zeilen über den Benutzer mimi — sie haben die folgende Bedeutung:

  1. Der Benutzer carol am Terminal pts/0 von Host 192.168.1.4 startete seine Sitzung am Sat Jun 6 um 14:25 und ist immer noch eingeloggt (still logged in). Das System — mit Kernel 4.19.0-9-amd64 — wurde am Sat Jun 6 um 14:24 gestartet (reboot system boot) und läuft immer noch.

  2. Der Benutzer mimi am Terminal pts/0 von Host 192.168.1.4 startete seine Sitzung am Sat Jun 6 um 12:07 und meldete sich um 14:24 ab (die Sitzung dauerte insgesamt (02:16) Stunden). Das System — mit Kernel 4.19.0-9-amd64 — wurde am Sat Jun 6 um 12:07 gestartet (reboot system boot) und um 14:24 ausgeschaltet (und war für (02:17) Stunden in Betrieb).

Note

Die Zeile wtmp begins Sun May 31 14:14:58 2020 bezieht sich auf /var/log/wtmp, das ist die spezielle Logdatei, aus der last die Informationen bezieht.

Geben Sie last einen Benutzernamen mit, um nur Einträge für diesen Benutzer anzeigen zu lassen:

root@debian:~# last carol
carol    pts/0        192.168.1.4      Sat Jun  6 14:25   still logged in
carol    pts/0        192.168.1.4      Sat Jun  6 12:07 - 14:24  (02:16)
carol    pts/0        192.168.1.4      Fri Jun  5 00:48 - 01:28  (00:39)
(...)

In der zweiten Spalte (Terminal) steht pts für Pseudo Terminal Slave — im Gegensatz zu einem richtigen TeleTYpewriter oder tty Terminal. 0 bezieht sich auf das erste Terminal (die Zählung beginnt bei Null).

Note

Um zu prüfen, ob ein Anmeldeversuch fehlgeschlagen ist, führen Sie lastb anstelle von last aus.

Die Dienstprogramme who und w konzentrieren sich auf die aktuell angemeldeten Benutzer: who zeigt an, wer angemeldet ist, während w auch Informationen darüber liefert, was der Benutzer jeweils gerade macht.

Ohne die Angabe von Optionen zeigt who vier Spalten an, die dem angemeldeten Benutzer, dem Terminal, dem Datum und der Uhrzeit sowie dem Hostnamen entsprechen:

root@debian:~# who
carol    pts/0        2020-06-06 17:16 (192.168.1.4)
mimi     pts/1        2020-06-06 17:28 (192.168.1.4)

who akzeptiert eine Reihe von Optionen, von denen die folgenden hier hervorgehoben seien:

-b,--boot

Zeit des letzten Systemstarts anzeigen.

-r,--runlevel

Akuellen Runlevel anzeigen.

-H,--heading

Spaltenüberschriften anzeigen.

Im Vergleich zu who erzeugt w eine etwas ausführlichere Ausgabe:

root@debian:~# w
 17:56:12 up 40 min,  2 users,  load average: 0.04, 0.12, 0.09
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
carol    pts/0    192.168.1.4    17:16    1.00s  0.15s  0.05s sshd: carol [priv]
mimi     pts/1    192.168.1.4    17:28   15:08   0.05s  0.05s -bash

In der obersten Zeile finden Sie Informationen über die aktuelle Uhrzeit (17:56:12), wie lange das System bereits läuft (up 40 min), die Anzahl der derzeit angemeldeten Benutzer (2 users) und die Durchschnittswerte der Auslastung (load average: 0.04, 0.12, 0.09). Diese Werte beziehen sich auf die Anzahl der Aufträge in der Warteschlange, gemittelt über die letzten 1, 5 bzw. 15 Minuten.

Dann folgen acht Spalten:

USER

Anmeldename des Benutzers.

TTY

Name des Terminals, an dem sich der Benutzer befindet.

FROM

Entfernter Host, von dem aus sich der Benutzer angemeldet hat.

LOGIN@

Anmeldezeit.

IDLE

Leerlaufzeit.

JCPU

Zeit, die von allen Prozessen verbraucht wurde, die mit dem tty verbunden sind (einschließlich der aktuell laufenden Hintergrundprozesse).

PCPU

Zeit, die vom aktuellen Prozess verbraucht wurde (der unter WHAT angezeigt wird).

WHAT

Kommandozeile des aktuellen Prozesses.

Wie bei who können Sie auch w Benutzernamen übergeben:

root@debian:~# w mimi
 18:23:15 up  1:07,  2 users,  load average: 0.00, 0.02, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
mimi     pts/1    192.168.1.4      17:28    9:23   0.06s  0.06s -bash

sudo konfigurieren und einsetzen

Wie bereits erwähnt, wechseln Sie mit su zu jedem anderen Benutzer im System, sofern Sie das Passwort des Zielbenutzers angeben. Im Fall des Benutzers Root ist es sehr schlechte Sicherheitspraxis, das Passwort an (viele) Benutzer weiterzugeben und das System auf diese Weise zu gefährden. Die grundlegende Verwendung von su ist su - Zielbenutzername — wenn Sie zu root wechseln, ist der Zielbenutzername optional:

carol@debian:~$ su - root
Password:
root@debian:~# exit
logout
carol@debian:~$ su -
Password:
root@debian:~#

Der Bindestrich (-) stellt sicher, dass die Umgebung des Zielbenutzers geladen wird — ohne ihn die Umgebung des alten Benutzers:

carol@debian:~$ su
Password:
root@debian:/home/carol#

Darüber hinaus gibt es den Befehl sudo, mit Sie einen Befehl als Benutzer Root ausführen — oder auch als jeder andere Benutzer. Aus der Sicherheitsperspektive ist sudo die weitaus bessere Option als su:

  1. Um einen Befehl als Root auszuführen, benötigen Sie nicht dessen Passwort, sondern nur das des aufrufenden Benutzers in Übereinstimmung mit einer Sicherheitsrichtlinie. Die Standardsicherheitsrichtlinie ist sudoers, wie in /etc/sudoers und /etc/sudoers.d/* spezifiziert.

  2. Mit sudo können Sie einzelne Befehle mit erweiterten Rechten ausführen statt eine neue Subshell für root zu starten, wie su das tut.

Die grundlegende Verwendung von sudo ist sudo -u Zielbenutzername Befehl. Um einen Befehl als Benutzer root auszuführen, ist die Option -u Zielbenutzername jedoch nicht zwingend:

carol@debian:~$ sudo -u mimi whoami
mimi
carol@debian:~$ sudo whoami
root
Note

sudoers verwendet einen Zeitstempel pro Benutzer (und pro Terminal) für die Zwischenspeicherung der Anmeldedaten, so dass sudo ohne Passwort für einen Standardzeitraum von fünfzehn Minuten verwendet werden kann. Sie ändern diesen Standardwert, indem Sie die Option timestamp_timeout als Defaults-Einstellung in /etc/sudoers hinzufügen (z.B. setzt Defaults timestamp_timeout=1 die Zeitüberschreitung für das Zwischenspeichern von Anmeldeinformationen auf eine Minute).

Die Datei /etc/sudoers

Die Hauptkonfigurationsdatei von sudo ist /etc/sudoers (es gibt auch das Verzeichnis /etc/sudoers.d). Hier sind die sudo-Rechte der Benutzer definiert. d.h. wer welche Befehle als welcher Benutzer auf welchen Rechnern ausführen darf — sowie andere Einstellungen. Die Syntax lautet:

carol@debian:~$ sudo less /etc/sudoers
(...)
# User privilege specification
root    ALL=(ALL:ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL
(...)

Die Angabe zu den Rechten für den Benutzer root ist ALL=(ALL:ALL) ALL. Das bedeutet: Der Benutzer root (root) kann sich von allen Rechnern aus anmelden (ALL), als beliebiger Benutzer einer beliebigen Gruppe ((ALL:ALL)), und alle Befehle ausführen (ALL). Das gleiche gilt für Mitglieder der Gruppe sudo — beachten Sie, dass Gruppennamen durch ein vorangestelltes Prozentzeichen (%) markiert sind.

Um also den Benutzer carol in die Lage zu versetzen, den apache2-Status von jedem Rechner aus als beliebiger Benutzer einer beliebigen Gruppe zu überprüfen, fügen Sie die folgende Zeile in die Datei sudoers ein:

carol   ALL=(ALL:ALL) /usr/bin/systemctl status apache2

Vielleicht möchten Sie carol ersparen, das Passwort einzugeben, um den Befehl systemctl status apache2 auszuführen. Zu diesem Zweck ändern Sie die Zeile wie folgt:

carol   ALL=(ALL:ALL) NOPASSWD: /usr/bin/systemctl status apache2

Wollen Sie Ihre Hosts auf 192.168.1.7 beschränken und carol ermöglichen, systemctl status apache2 als Benutzer mimi auszuführen, wäre die Zeile wie folgt zu ändern:

carol   192.168.1.7=(mimi) /usr/bin/systemctl status apache2

Jetzt können Sie den Status des Apache-Webservers als Benutzer mimi überprüfen:

carol@debian:~$ sudo -u mimi systemctl status apache2
● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2020-06-09 13:12:19 CEST; 29min ago
(...)

Wollen Sie carol zum Systemadministrator mit allen Rechten machen, ist es am einfachsten, den Benutzer mit usermod und der Option -G in die spezielle Gruppe sudo aufzunehmen — gegebenenfalls mit der Option -a, die sicherstellt, dass der Benutzer nicht aus anderen Gruppen entfernt wird, zu denen er vielleicht gehört:

root@debian:~# sudo useradd -aG sudo carol
Note

In der Red Hat-Distributionsfamilie ist die Gruppe wheel das Pendant zur speziellen administrativen sudo-Gruppe auf Debian-Systemen.

Statt /etc/sudoers direkt zu bearbeiten, sollten Sie den Befehl visudo als root nutzen, der /etc/sudoers mit dem vordefinierten Texteditor öffnet. Um den Standardeditor zu ändern, ergänzen Sie die Option editor als Defaults-Einstellung in /etc/sudoers. Um zum Beispiel den Editor auf nano zu ändern, fügen Sie die folgende Zeile ein:

Defaults	editor=/usr/bin/nano
Note

Alternativ geben Sie den Texteditor über die Umgebungsvariable EDITOR beim Aufruf von visudo an, z.B. EDITOR=/usr/bin/nano visudo.

Abgesehen von Benutzern und Gruppen sind auch Aliasse in /etc/sudoers möglich. Es gibt drei Hauptkategorien von Aliassen, die Sie definieren können: Host Alias (Host_Alias), User Alias (User_Alias) und Command Alias (Cmnd_Alias). Hier ist ein Beispiel:

# Host alias specification

Host_Alias SERVERS = 192.168.1.7, server1, server2

# User alias specification

User_Alias REGULAR_USERS = john, mary, alex

User_Alias PRIVILEGED_USERS = mimi, alex

User_Alias ADMINS = carol, %sudo, PRIVILEGED_USERS, !REGULAR_USERS

# Cmnd alias specification

Cmnd_Alias SERVICES = /usr/bin/systemctl *

# User privilege specification
root    ALL=(ALL:ALL) ALL
ADMINS  SERVERS=SERVICES

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

Anhand dieser Beispieldatei sudoers sehen wir uns die drei Arten von Aliassen etwas genauer an:

Host Aliasse

Enthalten eine durch Komma getrennte Liste von Hostnamen, IP-Adressen sowie Netzwerken und Netzgruppen (mit vorangestelltem +). Netzmasken können Sie ebenfalls angeben. Der Host Alias SERVERS enthält eine IP-Adresse und zwei Hostnamen:

Host_Alias SERVERS = 192.168.1.7, server1, server2
User Aliasse

Enthalten eine durch Komma getrennte Liste von Benutzern, die Sie als Benutzernamen, Gruppen (mit vorangestelltem %) und Netzgruppen (mit vorangestelltem +) angeben. Mit ! schließen Sie bestimmte Benutzer aus. Der User Alias ADMINS schließt zum Beispiel den Benutzer carol, die Mitglieder der Gruppe sudo und die Mitglieder des User Alias PRIVILEGE_USERS ein, die nicht zum Uder Alias REGULAR_USERS gehören:

User_Alias ADMINS = carol, %sudo, PRIVILEGED_USERS, !REGULAR_USERS
Command Aliasse

Enthalten eine durch Komma getrennte Liste von Befehlen und Verzeichnissen. Bei einem Verzeichnis wird jede Datei in diesem Verzeichnis einbezogen — Unterverzeichnisse werden jedoch ignoriert. Der Command Alias SERVICES enthält einen einzelnen Befehl mit all seinen Unterbefehlen, markiert durch das Sternchen (*):

Cmnd_Alias SERVICES = /usr/bin/systemctl *

Gemäß den Alias-Spezifikationen bedeutet die Zeile ADMINS SERVERS=SERVICES im Abschnitt User privilege specification: Alle Benutzer, die zu ADMINS gehören, können mit sudo jeden Befehl in SERVICES auf jedem Server in SERVERS ausführen.

Note

Es gibt noch eine vierte Art von Alias, die Sie in /etc/sudoers einfügen können: Runas Aliasse (Runas_Alias). Diese sind den User Aliasses ähnlich, erlauben Ihnen aber, Benutzer über ihre User ID (UID) anzugeben. Diese Funktion kann in einigen Szenarien praktisch sein.

Geführte Übungen

  1. Vervollständigen Sie die folgende Tabelle zu den Sonderrechten:

    Spezielle Berechtigung Numerische Darstellung Symbolische Darstellung Suche nach Dateien mit nur dieser Berechtigung

    SUID

    SGID

  2. Die Anzeige von Dateien, bei denen nur das SUID- oder SGID-Bit gesetzt ist, ist normalerweise nicht sehr praktisch. Zeigen Sie in den folgenden Aufgaben, dass Ihre Suche produktiver sein kann:

    • Finden Sie alle Dateien mit gesetzter SUID (und anderen Berechtigungen) in /usr/bin:

    • Finden Sie alle Dateien mit gesetzter SGID (und anderen Rechten) in /usr/bin:

    • Finden Sie alle Dateien mit gesetzter SUID oder SGID in /usr/bin:

  3. Mit chage ändern Sie die Informationen zum Ablauf des Passworts eines Benutzers. Vervollständigen Sie als root die folgende Tabelle, indem Sie die richtigen Befehle für den Benutzer mary eingeben:

    Bedeutung chage-Befehle

    Passwort ist 365 Tage lang gültig

    Benutzer auffordern, das Passwort bei der nächsten Anmeldung zu ändern

    Mindestanzahl von Tagen zwischen Passwortänderungen ist 1

    Ablauf des Passworts deaktivieren

    Benutzer ermöglichen, sein Passwort jederzeit zu ändern

    Warnfrist auf 7 Tage und das Ablaufdatum des Kontos auf den 20. August 2050 setzen

    Informationen zum Ablauf des aktuellen Passworts des Benutzers anzeigen

  4. Füllen Sie die folgende Tabelle mit dem entsprechenden Netzwerkdienstprogramm aus:

    Aktion Befehl(e)

    Netzwerkdateien für den Host 192.168.1.55 auf Port 22 mit lsof anzeigen

    Prozesse, die auf den Standardport des Apache-Webservers auf Ihrem Rechner zugrefen, mit fuser anzeigen

    Alle UDP Sockets auf Ihrem Rechner mit netstat anzeigen

    Ports 80 bis 443 auf dem Host 192.168.1.55 mit nmap scannen

  5. Führen Sie die folgenden Aufgaben in Bezug auf Resident Set Size (RSS) und ulimit als normaler Benutzer durch:

    • Zeigen Sie weiche Limits für die maximale RSS:

    • Zeigen Sie harte Limits für die maximale RSS:

    • Setzen Sie weiche Limits für die maximale RSS auf 5.000 Kilobyte:

    • Setzen Sie harte Limits für die maximale RSS auf 10.000 Kilobyte:

    • Versuchen Sie, das harte Limit für die maximale RSS auf 15.000 Kilobyte zu erhöhen. Ist das möglich? Warum?

  6. Betrachten Sie die folgende Ausgabezeile des Befehls last und beantworten Sie folgende Fragen:

    carol    pts/0        192.168.1.4      Sun May 31 14:16 - 14:22  (00:06)
    • Wurde carol von einem entfernten Rechner aus verbunden? Warum?

    • Wie lange dauerte die Sitzung von carol?

    • War carol über ein echtes textbasiertes Terminal verbunden? Warum?

  7. Betrachten Sie den folgenden Auszug aus /etc/sudoers und beantworten Sie die folgende Frage.

    # Host alias specification
    
    Host_Alias SERVERS = 192.168.1.7, server1, server2
    
    # User alias specification
    
    User_Alias REGULAR_USERS = john, mary, alex
    
    User_Alias PRIVILEGED_USERS = mimi, alex
    
    User_Alias ADMINS = carol, %sudo, PRIVILEGED_USERS, !REGULAR_USERS
    
    # Cmnd alias specification
    
    Cmnd_Alias WEB_SERVER_STATUS = /usr/bin/systemctl status apache2
    
    # User privilege specification
    root    ALL=(ALL:ALL) ALL
    ADMINS  SERVERS=WEB_SERVER_STATUS
    
    # Allow members of group sudo to execute any command
    %sudo   ALL=(ALL:ALL) ALL

    Kann alex den Status des Apache-Webservers auf einem beliebigen Host überprüfen? Warum?

Offene Übungen

  1. Neben SUID und SGID gibt es noch eine dritte spezielle Berechtigung: das Sticky Bit. Es wird meist für Verzeichnisse wie /tmp verwendet, um zu verhindern, dass normale Benutzer andere Dateien als ihre eigenen löschen oder verschieben. Führen Sie die folgenden Aufgaben aus:

    • Setzen Sie das Sticky Bit auf ~/temporal:

    • Finden Sie Verzeichnisse, die mit dem Sticky Bit (und allen anderen Berechtigungen) in Ihrem Homeverzeichnis gesetzt sind:

    • Entfernen Sie das Sticky Bit für ~/temporal:

  2. Das Passwort eines Benutzers wurde durch passwd -l username oder usermod -L username gesperrt. Wie erkennen Sie dies in /etc/shadow?

  3. Wie lautet der entsprechende usermod-Befehl zu chage -E date username oder chage --expiredate date username?

  4. Geben Sie zwei verschiedene nmap-Befehle an, um alle 65535 Ports von localhost zu scannen:

Zusammenfassung

In dieser Lektion haben Sie gelernt, wie Sie eine Reihe von Aufgaben zur Sicherheitsverwaltung durchführen. Die folgenden Themen wurden behandelt:

  • Auffinden von Dateien mit den speziellen Berechtigungen SUID und SGID.

  • Festlegen und Ändern von Benutzerkennwörtern und Umgang mit Informationen zur Passwortalterung.

  • Mit verschiedenen Netzwerkdienstprogrammen offene Ports auf Hosts/Netzwerken ermitteln.

  • Einrichten von Limits für Systemressourcen.

  • Überprüfen der Benutzer, die sich im System angemeldet haben oder gerade angemeldet sind.

  • Grundlegende Nutzung und Konfiguration von sudo (die Datei /etc/sudoers).

Die in dieser Lektion behandelten Befehle und Dateien:

find

Sucht nach Dateien in einer Verzeichnishierarchie.

passwd

Ändert das Benutzerpasswort.

chmod

Ändert das Bit des Dateimodus.

chage

Ändert Informationen zum Ablauf des Benutzerpassworts.

lsof

Listet offene Dateien.

fuser

Identifiziert Prozesse über Dateien oder Sockets.

netstat

Zeigt Netzwerkverbindungen an.

nmap

Scannt Netzwerke und Ports.

ulimit

Listet und setzt Benutzer-Limits.

/etc/security/limits.conf

Konfigurationsdatei für Benutzerbeschränkungen.

last

Listet die zuletzt eingeloggten Benutzer.

lastb

Listet fehlerhafte Anmeldeversuche.

/var/log/wtmp

Datenbank der Benutzeranmeldungen.

who

Listet eingeloggte Benutzer.

w

Listet eingeloggte Benutzer und deren Aktionen.

su

Wechselt Benutzer oder zu Superuser.

sudo

Führt einen Befehl als ein anderer Benutzer aus (einschließlich des Superusers).

/etc/sudoers

Standardkonfigurationsdatei für die sudo-Sicherheitseinstellungen.

Lösungen zu den geführten Übungen

  1. Vervollständigen Sie die folgende Tabelle zu den Sonderrechten:

    Spezielle Berechtigung Numerische Darstellung Symbolische Darstellung Suche nach Dateien mit nur dieser Berechtigung

    SUID

    4000

    s,S

    find -perm 4000, find -perm u+s

    SGID

    2000

    s,S

    find -perm 2000, find -perm g+s

  2. Die Anzeige von Dateien, bei denen nur das SUID- oder SGID-Bit gesetzt ist, ist normalerweise nicht sehr praktisch. Zeigen Sie in den folgenden Aufgaben, dass Ihre Suche produktiver sein kann:

    • Finden Sie alle Dateien mit gesetzter SUID (und anderen Berechtigungen) in /usr/bin:

      find /usr/bin -perm -4000 oder find /usr/bin -perm -u+s

    • Finden Sie alle Dateien mit gesetzter SGID (und anderen Rechten) in /usr/bin:

      find /usr/bin -perm -2000 oder find /usr/bin -perm -g+s

    • Finden Sie alle Dateien mit gesetzter SUID oder SGID in /usr/bin:

      find /usr/bin -perm /6000

  3. Mit chage ändern Sie die Informationen zum Ablauf des Passworts eines Benutzers. Vervollständigen Sie als root die folgende Tabelle, indem Sie die richtigen Befehle für den Benutzer mary eingeben:

    Bedeutung chage-Befehle

    Passwort ist 365 Tage lang gültig

    chage -M 365 mary, chage --maxdays 365 mary

    Benutzer auffordern, das Passwort bei der nächsten Anmeldung zu ändern

    chage -d 0 mary, chage --lastday 0 mary

    Mindestanzahl von Tagen zwischen Passwortänderungen ist 1

    chage -m 1 mary, chage --mindays 1 mary

    Ablauf des Passworts deaktivieren

    chage -M 99999 mary, chage --maxdays 99999 mary

    Benutzer ermöglichen, sein Passwort jederzeit zu ändern

    chage -m 0 mary, chage --mindays 0 mary

    Warnfrist auf 7 Tage und das Ablaufdatum des Kontos auf den 20. August 2050 setzen

    chage -W 7 -E 2050-08-20 mary, chage --warndays 7 --expiredate 2050-08-20 mary

    Informationen zum Ablauf des aktuellen Passworts des Benutzers anzeigen

    chage -l mary, chage --list mary

  4. Füllen Sie die folgende Tabelle mit dem entsprechenden Netzwerkdienstprogramm aus:

    Aktion Befehl(e)

    Netzwerkdateien für den Host 192.168.1.55 auf Port 22 mit lsof anzeigen

    lsof -i@192.168.1.55:22

    Prozesse, die auf den Standardport des Apache-Webservers auf Ihrem Rechner zugrefen, mit fuser anzeigen

    fuser -vn tcp 80, fuser --verbose --namespace tcp 80

    Alle UDP Sockets auf Ihrem Rechner mit netstat anzeigen

    netstat -lu,netstat --listening --udp

    Ports 80 bis 443 auf dem Host 192.168.1.55 mit nmap scannen

    nmap -p 80-443 192.168.1.55

  5. Führen Sie die folgenden Aufgaben in Bezug auf Resident Set Size (RSS) und ulimit als normaler Benutzer durch:

    • Zeigen Sie weiche Limits für die maximale RSS:

      ulimit -m, ulimit -Sm

    • Zeigen Sie harte Limits für die maximale RSS:

      ulimit -Hm

    • Setzen Sie weiche Limits für die maximale RSS auf 5.000 Kilobyte:

      ulimit -Sm 5000

    • Setzen Sie harte Limits für die maximale RSS auf 10.000 Kilobyte:

      ulimit -Hm 10000

    • Versuchen Sie, das harte Limit für die maximale RSS auf 15.000 Kilobyte zu erhöhen. Ist das möglich? Warum?

      Nein. Einmal gesetzt, können reguläre Benutzer keine harten Limits erhöhen.

  6. Betrachten Sie die folgende Ausgabezeile des Befehls last und beantworten Sie folgenden Fragen:

    carol    pts/0        192.168.1.4      Sun May 31 14:16 - 14:22  (00:06)
    • Wurde carol von einem entfernten Rechner aus verbunden? Warum?

      Ja, die IP-Adresse des entfernten Hosts steht in der dritten Spalte.

    • Wie lange dauerte die Sitzung von carol?

      Sechs Minuten, wie in der letzten Spalte angegeben.

    • War carol über ein echtes textbasiertes Terminal verbunden? Warum?

      Nein, pts/0 in der zweiten Spalte zeigt an, dass die Verbindung über einen grafischen Terminalemulator (Pseudo Terminal Slave) hergestellt wurde.

  7. Betrachten Sie den folgenden Auszug aus /etc/sudoers und beantworten Sie die folgende Frage.

    # Host alias specification
    
    Host_Alias SERVERS = 192.168.1.7, server1, server2
    
    # User alias specification
    
    User_Alias REGULAR_USERS = john, mary, alex
    
    User_Alias PRIVILEGED_USERS = mimi, alex
    
    User_Alias ADMINS = carol, %sudo, PRIVILEGED_USERS, !REGULAR_USERS
    
    # Cmnd alias specification
    
    Cmnd_Alias WEB_SERVER_STATUS = /usr/bin/systemctl status apache2
    
    # User privilege specification
    root    ALL=(ALL:ALL) ALL
    ADMINS  SERVERS=WEB_SERVER_STATUS
    
    # Allow members of group sudo to execute any command
    %sudo   ALL=(ALL:ALL) ALL

    Kann alex den Status des Apache-Webservers auf einem beliebigen Host überprüfen? Warum?

    Nein, da er Mitglied von REGULAR_USERS ist und diese Benutzergruppe von ADMINS ausgeschlossen ist — die einzigen Benutzer (abgesehen von carol, Mitgliedern der Gruppe sudo und root), die systemctl status apache2 auf SERVERS ausführen dürfen.

Lösungen zu den offenen Übungen

  1. Neben SUID und SGID gibt es noch eine dritte spezielle Berechtigung: das Sticky Bit. Es wird meist für Verzeichnisse wie /tmp verwendet, um zu verhindern, dass normale Benutzer andere Dateien als ihre eigenen löschen oder verschieben. Führen Sie die folgenden Aufgaben aus:

    • Setzen Sie das Sticky Bit von ~/temporal:

      chmod +t temporal, chmod 1755 temporal

    • Finden Sie Verzeichnisse, die mit dem Sticky Bit (und allen anderen Berechtigungen) in Ihrem Homeverzeichnis gesetzt sind:

      find ~ -perm -1000, find ~ -perm /1000

    • Entfernen Sie das Sticky Bit für ~/temporal:

      chmod -t temporal, chmod 0755 temporal

  2. Das Passwort eines Benutzers wurde durch passwd -l username oder usermod -L username gesperrt. Wie erkennen Sie dies in /etc/shadow?

    Im zweiten Feld erscheint ein Ausrufezeichen, direkt nach dem Anmeldenamen des betroffenen Benutzers (z.B.: mary:!$6$gOg9xJgv…​).

  3. Wie lautet der entsprechende usermod-Befehl zu chage -E date username oder chage --expiredate date username?

    usermod -e date username, usermod --expiredate date username

  4. Geben Sie zwei verschiedene nmap-Befehle an, um alle 65535 Ports von localhost zu scannen:

    nmap -p 1-65535 localhost und nmap -p- localhost

Linux Professional Insitute Inc. Alle Rechte vorbehalten. Besuchen Sie die LPI Learning Website: https://learning.lpi.org
Dieses Werk steht unter der Lizenz Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International.

Nächste Lektion

110.3 Daten durch Verschlüsselung schützen (110.3 Lektion 1)

Nächste Lektion lesen

Linux Professional Insitute Inc. Alle Rechte vorbehalten. Besuchen Sie die LPI Learning Website: https://learning.lpi.org
Dieses Werk steht unter der Lizenz Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International.

LPI ist eine Non-Profit-Organisation.

© 2023 Linux Professional Institute (LPI) ist eine globale Organisation für Zertifizierungsstandards und zur Karriereplanung für Open-Source-Profis. Mit mehr als 200.000 Zertifikatsinhabern ist es die weltweit erste und größte herstellerneutrale Linux- und Open-Source-Zertifizierungsstelle. LPI verfügt über zertifizierte Fachleute in über 180 Ländern, bietet Prüfungen in mehreren Sprachen an und hat Hunderte von Trainingspartnern.

Unser Ziel ist es, wirtschaftliche und kreative Möglichkeiten für alle zu ermöglichen, indem wir Open-Source-Wissens- und Kompetenzzertifizierungen allgemein zugänglich machen.

  • LinkedIn
  • flogo-RGB-HEX-Blk-58 Facebook
  • Twitter
  • Kontaktieren Sie uns
  • Datenschutz und Cookie-Richtlinien

Haben Sie einen Fehler entdeckt oder möchten Sie helfen, diese Seite zu verbessern? Lassen Sie es uns wissen.

© 1999–2023 The Linux Professional Institute Inc. Alle Rechte vorbehalten.