Systemzugriffe von Benutzern anzeigen

Aus LinuxUser 12/2014

Systemzugriffe von Benutzern anzeigen

© Daniilantiq, 123RF

Beobachtet

Linux führt Protokoll über alle Aktionen, die auf dem System stattfinden. Dazu gehört auch, wann welche Benutzer aktiv waren und was sie unternommen haben.

Als Mehrbenutzersystem ist Linux darauf ausgelegt, dass mehrere Anwender parallel damit arbeiten. Deswegen stellt es von Haus aus Werkzeuge bereit, die dem Systembetreuer ein entsprechendes Monitoring und auch regelmäßig Sicherheitsüberprüfungen ermöglichen.

Mithilfe dieser Tool erkennt der Administrator recht schnell eine Erklärung für ungewöhnliches Systemverhalten wie etwa Lastschwankungen und kann so die Ursachen beseitigen, um wieder einen stabilen Regelbetrieb zu gewährleisten.

Während sich frühere Artikel mit dem Bandbreiten-Monitoring [1] und, damit verbunden, mit der von Prozessen und Schnittstellen [2] erzeugten Last beschäftigten, stehen diesmal die Benutzer und deren Aktivitäten im Vordergrund.

Nutzer auf dem System

Der erste Blick gilt den Nutzern, die sich regulär auf dem System anmelden dürfen. Deren Konten und die Einstellungen dazu finden Sie in der Datei /etc/passwd (Listing 1). Jede Zeile darin beschreibt einen Benutzerzugang anhand verschiedener Felder.

Listing 1

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
[...]
avahi:x:107:119:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
usbmux:x:108:46:usbmux daemon,,,:/home/usbmux:/bin/false
kernoops:x:109:65534:Kernel Oops Tracking Daemon,,,:/:/bin/false
pulse:x:110:120:PulseAudio daemon,,,:/var/run/pulse:/bin/false
[...]
jluther:x:1000:1000:Jörg Luther,,,:/home/jluther:/bin/bash

Ganz vorn steht der Login-Name, danach folgen die Benutzer- und Gruppen-ID und der Realname des Users. Es folgen dessen Home-Verzeichnis sowie abschließend das Programm, das nach der erfolgreichen Authentifizierung automatisch startet. Üblicherweise handelt es sich dabei um /bin/sh oder /bin/bash als Login-Shell.

Eine Liste der Benutzerzugänge erstellen Sie mithilfe des Universalwerkzeugs cut, indem Sie jeweils das erste Feld aus jeder Zeile der Datei extrahieren. Die Option -d : (“delimiter”) setzt das Trennzeichen auf den Doppelpunkt, -f 1 bezeichnet das erste Textfeld in jeder Zeile. Listing 2 zeigt das Ergebnis des Aufrufs.

Listing 2

$ cut -d : -f 1 /etc/passwd
root
daemon
bin
sys
[...]
jluther

An erster Stelle steht stets der Zugang für den administrativen Benutzer root mit der ID 0. Die Liste umfasst auch Einträge für Systemdienste ohne echtes Login, wie etwa exim, sshd, avahi oder saned. Andere Einträge tauchen nur unter bestimmten Umständen in der Liste auf. So erscheint etwa www-data nur dann, wenn auf dem System ein Webserver wie Apache oder Nginx läuft.

Die Konten der Systemdienste tragen eine recht niedrige User-ID und weisen als Login-Shell Einträge der Form /bin/false oder /usr/sbin/nologin auf. Melden Sie sich als Benutzer über einen solchen Account an, startet das hinterlegte Programm; enthält der Eintrag /bin/false, bekommen Sie dabei keine Shell.

Das Awk-Kommando aus Listing 3 filtert aus der Datei /etc/passwd alle tatsächlichen Benutzer samt deren User-ID heraus. Dazu nutzt es die Tatsache aus, dass die IDs regulärer Benutzer stets beim Wert 1000 beginnen.

Listing 3

$ awk -F: '$3>999{print $3,$1}' /etc/passwd | sort -n
1000 frank
1001 kurs
1002 test
65534 nobody

Die Option -F: setzt im Awk-Aufruf zunächst den Feldtrenner auf den Doppelpunkt. Die Angabe '$3>999{print $3,$1}' wertet also den Inhalt des dritten Textfelds aus und prüft, ob dieses einen Wert größer als 999 besitzt. Falls ja, gibt es den Inhalt des dritten und ersten Felds (User-ID und Login) aus.

Die einfachen Anführungsstriche sorgen dafür, dass die Shell die Option nicht selbst auswertet. Der Pipe-Operator | leitet die Ausgabe von Awk an das Kommando Sort weiter, das die Zeilen aufsteigend sortiert. Die Option -n sorgt dabei für die korrekte Interpretation der numerischen Daten.

Lassen Sie dieses Awk-Kommando von Zeit zu Zeit laufen, um Altbestände nicht mehr existierender Benutzer zutage zu fördern. Genaueres Augenmerk sollten Sie auch Home-Verzeichnissen schenken, deren Benutzer eigentlich keines haben dürften oder die sich eigentlich an anderer Stelle befinden müssten.

Momentan aktive Benutzer

Um festzustellen, welche Benutzer im Moment auf dem System aktiv sind, setzen Sie die drei Standardwerkzeuge users, w und who ein. Das erste zeigt lediglich eine Liste mit den Benutzernamen an – erscheint ein Name mehrmals, hat dieser Benutzer derzeit entsprechend viele aktive Login-Sessions auf diesem System.

Listing 4 zeigt die Ausgabe von w, die deutlich ausführlicher ausfällt. Sie beginnt mit einer Kopfzeile, die neben der Systemzeit auch die Laufzeit des Systems enthält. Daneben sehen Sie die Anzahl der aktiven Benutzer sowie die durchschnittliche Systemlast. Darunter listet das Kommando benutzerbezogen auf, welche User welche Aktivitäten verursachen.

Listing 4

$ w
 01:51:50 up 49 days,  7:01,  4 users,  load average: 0.12, 0.27, 0.31
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
esc      pts/1    mosh-            00:27    1:24m  0.00s  0.00s tmux att
nasobem  pts/16   88.72.218.175-   21:06    2days  0.12s 20:55  mosh-server new -s -c 256 -l LANG=de_
pluteus  pts/50   79.171.206.7     18Aug14 37:10m  0.21s  0.01s sshd: pluteus [priv]

Auf den Benutzernamen folgen in der zweiten und dritten Spalte das Terminal (TTY) sowie der Ursprungsort (FROM) der Verbindung. Bei Letzterem handelt es sich dabei meist um die IP-Adresse, von der aus die Verbindung hergestellt wurde. Der Wert mosh beim Benutzer esc zeigt an, dass eine verschlüsselte Verbindung über entsprechende Programm [3] erfolgte.

Danach folgen der Zeitpunkt des Logins (LOGIN@), die Leerlaufzeit (IDLE) sowie die CPU-Zeit, die alle über das Terminal angestoßenen Prozesse (JCPU) respektive der derzeit laufende Prozess (PCPU) genutzt haben. Die zur PCPU gehörige Kommandozeile erscheint in der letzten Spalte.

Das Programm who (Listing 5) zeigt ähnliche Informationen wie w, jedoch in kompakterer Form. Sie sehen den Login-Namen, das (Pseudo-)Terminal, den Zeitpunkt des Logins und zuletzt wiederum die Herkunfts-IP oder das Programm, mit dem die Verbindung aufgebaut wurde. Der Wert in den eckigen Klammern führt die zugehörige Prozessnummer auf.

Listing 5

$ who
esc      pts/1        2014-08-27 00:27 (mosh [2247])
nasobem  pts/16       2014-08-26 21:06 (88.72.218.175 via mosh [10278])
pluteus  pts/50       2014-08-18 09:14 (79.171.206.7)

Über die Schalter -a (alle Informationen) und -u (ausführliche Informationen nur der angemeldeten Benutzer) gibt Who noch detaillierter Auskunft. Neben allen echten Terminals (tty, “teletype”) sehen Sie dabei auch Terminals in der grafischen Oberfläche (pts, “pseudo terminal slave”). Listing 6 zeigt die entsprechende Ausgabe auf einem Desktop-System.

Die zweite Zeile zeigt den Zeitpunkt des Rechnerstarts, die vierte den Wechsel in den Runlevel 2, und Zeile 6 deutet per Darstellung auf dem Display :0 darauf hin, dass hier das X-Window-System läuft. In den Zeilen 7 bis 9 warten echte Terminals über [Strg]+[Alt]+[F1]…[F6] auf ihre Aktivierung. Die Zeile 12 zeigt ein Pseudoterminal, das in Zeile 13 mit dem Fehlercode 0 terminiert. Pseudoterminals entstehen zum Beispiel beim Öffnen eines Terminalfensters auf einer X-Windows-Oberfläche, indem Sie das Programm xterm aufrufen.

Listing 6

$ who -a
                      2014-08-26 20:46         240 id=si term=0 exit=0
         Systemstart  2014-08-26 20:46
         Runlevel 2   2014-08-26 20:46             last=S
                      2014-08-26 20:46        2264 id=l2 term=0 exit=0
frank  - tty7         2014-08-26 20:46  alt   4444 (:0)
LOGIN    tty1         2014-08-26 20:46        4291 id=1
[...]
LOGIN    tty6         2014-08-26 20:46        4296 id=6
frank  + pts/0        2014-08-26 20:46 15:04  4683 (:0)
         pts/7        2014-08-27 11:11           0 id=/7 term=0 exit=0
frank  + pts/10       2014-08-27 10:49   .    5022 (:0.0)
         pts/11       2014-08-27 11:50           0 id=/11 term=0 exit=0

TIPP

Nutzen Sie statt der Bash die Zsh [7], dann erfahren Sie über das eingebaute Kommando watch, wer sich auf dem System an- und abmeldet. Dazu setzen Sie watch auf den Wert all für alle Benutzer oder notme für alle Benutzer außer Ihnen selbst (Listing 7).

Listing 7

$ watch=(all)
$
test has logged off pts/7 from localhost.
test has logged on pts/7 from localhost.

Buntes Whowatch

Finden Sie die einfarbige Ausgabe im Terminal zu unübersichtlich, dann probieren Sie doch einmal das Werkzeug Whowatch [4] aus: Es stellt die Benutzer und deren Prozesse grafisch, bunt und vor allem in Echtzeit aktualisiert dar.

In der Darstellung eingerückte Prozesse hat der direkt darüber aufgeführte, nicht eingerückte Prozess gestartet. Daraus ersehen Sie, dass in Abbildung 1 der über SSH verbundene Benutzer test ein Terminal aufgerufen hat, darin eine Bash erhielt und gerade mit dem Midnight Commander arbeitet.

Abbildung 1: Das Tool Whowatch stellt die Prozessanalyse grafisch aufbereitet dar.

Abbildung 1: Das Tool Whowatch stellt die Prozessanalyse grafisch aufbereitet dar.

Die Software erlaubt das Bedienen ausschließlich über die Tastatur und bietet zum Beispiel über das Menü, das Sie via [F9] erhalten, auch die Möglichkeit, Details zu ausgewählten Prozessen anzuzeigen und diese gegebenenfalls zu beenden.

Aktive Verbindungen

Neben den lokalen Aktivitäten sind insbesondere die Verbindungen von und nach außen bedeutsam. Hier kommt das Tool ss (“socket statistics”) ins Spiel, das in der Funktion Netstat [5] ähnelt und ebenfalls die Netzwerksockets untersucht, etwa für TCP, UDP, DCCP, Raw- und Unix-Domain-Sockets. Neben statistischen Informationen listet es insbesondere die über die Sockets laufenden Verbindungen auf.

Das Programm bietet vielfältige Optionen, die Sie bei Bedarf auch miteinander kombinieren [6]. Der Aufruf ss -pl | grep 17500 etwa zeigt, welcher Prozess den Port 17500 geöffnet hat. Die Option -p steht für --processes und zeigt den Prozessnamen, -l steht für --listening und begrenzt die Ausgabe auf lauschende bestehende Verbindungen.

Eine Liste aller bestehenden TCP-Verbindungen erhalten Sie mittels ss -t (Listing 8). Das Schlüsselwort ESTAB (“established”) zeigt an, dass eine Verbindung besteht; CLOSE-WAIT signalisiert, dass dieser Socket bald geschlossen wird. Die weiteren Spalten zeigen jeweils die lokale und entfernte IP-Adresse sowie den verwendeten Port beziehungsweise das Netzwerkprotokoll an.

Listing 8

$ ss -t
State      Recv-Q Send-Q          Local Address:Port            Peer Address:Port
ESTAB      0      0      2001:bf0:c000:a::1:123:36483 2001:748:100:40::8:112:imap2
CLOSE-WAIT 1      0              192.109.42.123:43037          192.109.42.23:ldap
ESTAB      0      0              192.109.42.123:nfs           192.109.42.123:685
[...]
ESTAB      0      0              192.109.42.123:54390         198.252.206.25:https
ESTAB      0      0              192.109.42.123:955           192.109.42.119:nfs
ESTAB      0      0              192.109.42.123:34930             82.96.64.4:afs3-fileserver
$

Sie schränken die Ausgabe noch weiter ein, indem Sie beim Aufruf einzelne Optionen mittels boolescher Operation verknüpfen. So filtern Sie alle bestehenden HTTP-Verbindungen einerseits mit der Option -o state established, andererseits mit der Angabe des genutzten Netzwerkprotokolls http für die Quell- und Zieladresse (sport (“source port”) und dport (“destination port”) heraus.

Die Verknüpfung erfolgt wiederum in einfachen Anführungszeichen, damit die ausführende Shell die Klammern und den Ausdruck nicht selbst auswertet. HTTPS-Verbindungen, die von außerhalb bestehen, filtern Sie anhand des Schlüsselworts dst (“destination”) und des Protokolls https.

Die Historie

Gedämpfte Systemarchäologie bringt sogar die Aktivitäten aus der Vergangenheit wieder ans Licht des Tages: Indem Sie die Datei /var/log/auth.log durchsuchen, bekommen Sie heraus, welcher Benutzer sich in letzter Zeit angemeldet hat (Listing 9). Dazu benötigen Sie jedoch administrative Rechte.

Listing 9

# grep sshd /var/log/auth.log | tail
Aug 26 14:42:36 efho-mobil sshd[31609]: pam_unix(sshd:session): session closed for user test
Aug 26 14:47:38 efho-mobil sshd[31091]: pam_unix(sshd:session): session closed for user test
Aug 26 20:46:21 efho-mobil sshd[4165]: Server listening on 0.0.0.0 port 22.
Aug 26 20:46:21 efho-mobil sshd[4165]: Server listening on :: port 22.
Aug 26 20:46:31 efho-mobil sshd[4165]: Received signal 15; terminating.
Aug 26 20:46:31 efho-mobil sshd[4531]: Server listening on 0.0.0.0 port 22.
Aug 26 20:46:31 efho-mobil sshd[4531]: Server listening on :: port 22.
Aug 27 14:07:53 efho-mobil sshd[730]: Accepted password for test from ::1 port 40402 ssh2
Aug 27 14:07:53 efho-mobil sshd[730]: pam_unix(sshd:session): session opened for user test by (uid=0)

Eine Übersicht der letzten Anmeldungen bietet das Werkzeug last aus dem Debian-Paket sysvinit-utils. Es durchsucht die Datei /etc/log/wtmp und stellt alle Aktivitäten im Zusammenhang mit dem Login und Logout in zeitlich umgekehrter Reihenfolge dar – die neuesten Ereignisse erscheinen also obenan (Listing 10). Neben dem Login zeigt das Protokoll auch das Terminal, den Ursprungsrechner und den Zeitpunkt der Nutzung an. Derzeit noch angemeldete Benutzer tragen in der letzten Spalte den Vermerk still logged in.

Listing 10

$ last
frank   pts/9        :0.0             Wed Aug 27 14:09   still logged in
test    pts/7        localhost        Wed Aug 27 14:07   still logged in
frank   pts/1        :0               Tue Aug 26 20:46   still logged in
frank   tty7         :0               Tue Aug 26 20:46   still logged in
reboot  system boot  3.2.0-4-686-pae  Tue Aug 26 20:46 - 16:18  (19:32)
test    pts/17       192.168.102.21   Tue Aug 26 14:32 - 14:47  (00:14)

Welcher Benutzer sich generell schon einmal auf dem System angemeldet hat, das verrät Ihnen das Kommando lastlog aus dem Debian-Paket login. Dazu wertet es die Datei /etc/log/lastlog aus und sortiert die Ausgabe anhand der Benutzer in /etc/passwd.

Fazit

Mit den vorgestellten Werkzeugen verschaffen Sie sich binnen kurzer Zeit einen Überblick darüber, welche Benutzer auf dem von Ihnen betreuten System aktiv sind oder waren. Sie erhalten einerseits einen Einblick in den aktuellen Zustand, erfahren aber auch, wer in der Vergangenheit auf das System zugriff.

Weitere Informationen zu den Benutzern erhalten Sie mithilfe der Werkzeuge Pinky, Finger oder Cfinger. Gnome-Enthusiasten finden Ähnliches im Programm Gnome-nettool, das zudem weitere Informationen übersichtlich in einer grafischen Bedienoberfläche aggregiert. 

Danksagung

Der Autor bedankt sich bei Wolfram Eifler und Axel Beckert für deren kritische Anmerkungen und Kommentare im Vorfeld des Artikels.

Glossar

DCCP

Datagram Congestion Control Protocol. DCCP bietet beim Übertragen Medienströmen in TCP/IP-Netzen einen Mechanismus zur dynamischen Anpassung der Senderate an die verfügbare Bandbreite.

Infos

[1] LAN-Monitoring (Teil 1): Frank Hofmann, Martin Steigerwald, “Raus aus dem Engpass”, LU 06/2013, S. 78, https://www.linux-community.de/28993

[2] LAN-Monitoring (Teil 2): Frank Hofmann, Martin Steigerwald, “Spürnase im Netz”, LU 02/2014, S. 76, https://www.linux-community.de/31701

[3] AutoSSH und Mosh: Axel Beckert, “Starke Verbindung”, LU 08/2012, S. 82, https://www.linux-community.de/26418

[4] Whowatch: http://whowatch.sourceforge.net

[5] Ubuntu-Wiki zu Netstat: http://wiki.ubuntuusers.de/netstat

[6] “Display Linux TCP / UDP Network and Socket Information”: http://www.cyberciti.biz/tips/linux-investigate-sockets-network-connections.html

[7] Zsh: http://michael-prokop.at/computer/tools_zsh_liebhaber.html

Der Autor

Frank Hofmann (http://www.efho.de) hat Informatik an der TU Chemnitz studiert. Derzeit arbeitet er in Berlin im Open-Source-Experten-Netzwerk Büro 2.0, als Dienstleister mit Spezialisierung auf Druck und Satz. Er ist Mitgründer des Schulungsunternehmens Wizards of FOSS und koordiniert seit 2008 das Regionaltreffen der LUGs in Berlin-Brandenburg.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 12/2014 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben