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
|
|
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 sindL
(gesperrtes Passwort) undNP
(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
oderusermod --lock carol
- Passwort für Benutzer
carol
entsperren -
usermod -U carol
oderusermod --unlock carol
Note
|
Mit den Optionen |
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 Wert0
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 Wert99999
ü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 Wert0
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 wieusermod -f
oderusermod --inactive
. Sobald diese Anzahl von Tagen verstrichen ist, wird das Konto gesperrt. Bei einem Wert von0
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 |
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 |
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 |
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 |
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.*
odernmap 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 |
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 |
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:
-
Der Benutzer
carol
am Terminalpts/0
von Host192.168.1.4
startete seine Sitzung amSat Jun 6
um14:25
und ist immer noch eingeloggt (still logged in
). Das System — mit Kernel4.19.0-9-amd64
— wurde amSat Jun 6
um14:24
gestartet (reboot system boot
) und läuft immer noch. -
Der Benutzer
mimi
am Terminalpts/0
von Host192.168.1.4
startete seine Sitzung amSat Jun 6
um12:07
und meldete sich um14:24
ab (die Sitzung dauerte insgesamt(02:16)
Stunden). Das System — mit Kernel4.19.0-9-amd64
— wurde amSat Jun 6
um12:07
gestartet (reboot system boot
) und um14:24
ausgeschaltet (und war für(02:17)
Stunden in Betrieb).
Note
|
Die Zeile |
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 |
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
:
-
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. -
Mit
sudo
können Sie einzelne Befehle mit erweiterten Rechten ausführen statt eine neue Subshell für root zu starten, wiesu
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
|
|
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 |
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 |
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 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 AliasSERVERS
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 AliasADMINS
schließt zum Beispiel den Benutzercarol
, die Mitglieder der Gruppesudo
und die Mitglieder des User AliasPRIVILEGE_USERS
ein, die nicht zum Uder AliasREGULAR_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 |
Geführte Übungen
-
Vervollständigen Sie die folgende Tabelle zu den Sonderrechten:
Spezielle Berechtigung Numerische Darstellung Symbolische Darstellung Suche nach Dateien mit nur dieser Berechtigung SUID
SGID
-
Die Anzeige von Dateien, bei denen nur das
SUID
- oderSGID
-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
oderSGID
in/usr/bin
:
-
-
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 Benutzermary
eingeben:Bedeutung chage
-BefehlePasswort 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
-
Füllen Sie die folgende Tabelle mit dem entsprechenden Netzwerkdienstprogramm aus:
Aktion Befehl(e) Netzwerkdateien für den Host
192.168.1.55
auf Port22
mitlsof
anzeigenProzesse, die auf den Standardport des Apache-Webservers auf Ihrem Rechner zugrefen, mit
fuser
anzeigenAlle UDP Sockets auf Ihrem Rechner mit
netstat
anzeigenPorts
80
bis443
auf dem Host192.168.1.55
mitnmap
scannen -
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?
-
-
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?
-
-
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 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
-
Neben
SUID
undSGID
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
:
-
-
Das Passwort eines Benutzers wurde durch
passwd -l username
oderusermod -L username
gesperrt. Wie erkennen Sie dies in/etc/shadow
? -
Wie lautet der entsprechende
usermod
-Befehl zuchage -E date username
oderchage --expiredate date username
? -
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
undSGID
. -
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
-
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
-
Die Anzeige von Dateien, bei denen nur das
SUID
- oderSGID
-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
oderfind /usr/bin -perm -u+s
-
Finden Sie alle Dateien mit gesetzter
SGID
(und anderen Rechten) in/usr/bin
:find /usr/bin -perm -2000
oderfind /usr/bin -perm -g+s
-
Finden Sie alle Dateien mit gesetzter
SUID
oderSGID
in/usr/bin
:find /usr/bin -perm /6000
-
-
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 Benutzermary
eingeben:Bedeutung chage
-BefehlePasswort 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
-
Füllen Sie die folgende Tabelle mit dem entsprechenden Netzwerkdienstprogramm aus:
Aktion Befehl(e) Netzwerkdateien für den Host
192.168.1.55
auf Port22
mitlsof
anzeigenlsof -i@192.168.1.55:22
Prozesse, die auf den Standardport des Apache-Webservers auf Ihrem Rechner zugrefen, mit
fuser
anzeigenfuser -vn tcp 80
,fuser --verbose --namespace tcp 80
Alle UDP Sockets auf Ihrem Rechner mit
netstat
anzeigennetstat -lu
,netstat --listening --udp
Ports
80
bis443
auf dem Host192.168.1.55
mitnmap
scannennmap -p 80-443 192.168.1.55
-
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.
-
-
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.
-
-
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 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 vonADMINS
ausgeschlossen ist — die einzigen Benutzer (abgesehen voncarol
, Mitgliedern der Gruppesudo
undroot
), diesystemctl status apache2
aufSERVERS
ausführen dürfen.
Lösungen zu den offenen Übungen
-
Neben
SUID
undSGID
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
-
-
Das Passwort eines Benutzers wurde durch
passwd -l username
oderusermod -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…
). -
Wie lautet der entsprechende
usermod
-Befehl zuchage -E date username
oderchage --expiredate date username
?usermod -e date username
,usermod --expiredate date username
-
Geben Sie zwei verschiedene
nmap
-Befehle an, um alle 65535 Ports von localhost zu scannen:nmap -p 1-65535 localhost
undnmap -p- localhost