Tips en Trucs 2022

Welke poorten worden door welk proces gebruikt?

Elke poort kan op een bepaald moment slechts door één proces of dienst (service) gebruikt worden. Een poort koppelt dus een bepaalde dienst aan een proces op het systeem. Bij het opsporen van problemen moeten we soms nagaan welke poort door welk proces wordt gebruikt. Alle draaiende processen zijn geassocieerd met een proces identificatie nummer (PID) en een poort nummer.

Met de ss opdracht

De ss opdracht wordt gebruikt om informatie over netwerkverbindingen, netwerk statistieken en routing tabellen weer te geven. Maar je kan het ook gebruiken om te achterhalen welke poort door welk proces wordt gebruikt. De meeste distributies bevatten standaard de ss opdracht, installeren is dus meestal niet nodig.

Met de volgende ss opdracht krijg je een lijst met poortnummers en bijhorende processen (gebruik de schijfbalk om alle kolommen in beeld te krijgen):

dany@pindabook:~> sudo ss -ltnp
[sudo] wachtwoord voor root: 
State            Recv-Q            Send-Q                       Local Address:Port                       Peer Address:Port                                                                                                                                                
LISTEN           0                 80                               127.0.0.1:3306                            0.0.0.0:*               users:(("mysqld",pid=1513,fd=19))                                                                                                   
LISTEN           0                 128                                0.0.0.0:22                              0.0.0.0:*               users:(("sshd",pid=1552,fd=3))                                                                                                      
LISTEN           0                 5                                127.0.0.1:631                             0.0.0.0:*               users:(("cupsd",pid=1187,fd=7))                                                                                                     
LISTEN           0                 100                              127.0.0.1:25                              0.0.0.0:*               users:(("master",pid=1736,fd=13))                                                                                                   
LISTEN           0                 128                                      *:80                                    *:*               users:(("httpd-prefork",pid=1650,fd=4),("httpd-prefork",pid=1648,fd=4),("httpd-prefork",pid=1646,fd=4),("httpd-prefork",pid=1645,fd=4),("httpd-prefork",pid=1643,fd=4),("httpd-prefork",pid=1494,fd=4))
LISTEN           0                 128                                   [::]:22                                 [::]:*               users:(("sshd",pid=1552,fd=4))                                                                                                      
LISTEN           0                 5                                    [::1]:631                                [::]:*               users:(("cupsd",pid=1187,fd=6))                                                                                                     
LISTEN           0                 100                                  [::1]:25                                 [::]:*               users:(("master",pid=1736,fd=14))

Zonder root rechten (sudo) krijg je de kolom met users, PID en FD (file descriptor) niet te zien:

dany@pindabook:~> ss -ltnp
State            Recv-Q            Send-Q                       Local Address:Port                       Peer Address:Port           
LISTEN           0                 80                               127.0.0.1:3306                            0.0.0.0:*              
LISTEN           0                 128                                0.0.0.0:22                              0.0.0.0:*              
LISTEN           0                 5                                127.0.0.1:631                             0.0.0.0:*              
LISTEN           0                 100                              127.0.0.1:25                              0.0.0.0:*              
LISTEN           0                 128                                      *:80                                    *:*              
LISTEN           0                 128                                   [::]:22                                 [::]:*              
LISTEN           0                 5                                    [::1]:631                                [::]:*              
LISTEN           0                 100                                  [::1]:25                                 [::]:*

De gebruikte -ltnp opties hebben de volgende betekenis:

Als we de informatie bekijken van de sudo ss -ltnp opdracht, dan vinden we in de zesde kolom de informatie die we zochten: zo krijgen we achtereenvolgens de naam van het proces en zijn PID. Bijvoorbeeld: users:(("mysqld",pid=1513,fd=19))

Om de poort van een bepaald proces te achterhalen, kan je grep gebruiken om de ss informatie te filteren. Zo achterhaal je de poort van het sshd proces met de opdracht:

dany@pindabook:~> sudo ss -ltnp | grep sshd
LISTEN    0         128                0.0.0.0:22               0.0.0.0:*        users:(("sshd",pid=1552,fd=3))                                                 
LISTEN    0         128                   [::]:22                  [::]:*        users:(("sshd",pid=1552,fd=4))

Om te achterhalen welk proces door een bepaalde poort wordt gebruikt, gebruik je een gelijkaardige opdracht. Om het proces achter poort 22 te vinden, start je de volgende opdracht:

dany@pindabook:~> sudo ss -ltnp | grep ":22"
LISTEN    0         128                0.0.0.0:22               0.0.0.0:*        users:(("sshd",pid=1552,fd=3))                                                 
LISTEN    0         128                   [::]:22                  [::]:*        users:(("sshd",pid=1552,fd=4))

Met de lsof opdracht

De lsof opdracht toont alle geopende bestanden van de actieve processen. Voor gedetailleerdere informatie heb je ook hier root rechten nodig.

Zonder opties toont lsof een lange lijst met geopende bestanden. Met de juiste opties kunnen we de juiste informatie eruit filteren. De volgende opdracht zoekt naar processen die luisteren op poort 22:

dany@pindabook:~> sudo lsof -i :22
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1552 root    3u  IPv4  33914      0t0  TCP *:ssh (LISTEN)
sshd    1552 root    4u  IPv6  33916      0t0  TCP *:ssh (LISTEN)
sshd    2654 root    4u  IPv4  43013      0t0  TCP pindabook.lan:ssh->main.lan:50050 (ESTABLISHED)
sshd    2656 dany    4u  IPv4  43013      0t0  TCP pindabook.lan:ssh->main.lan:50050 (ESTABLISHED)

Met de fuser opdracht

Met de fuser opdracht kan je nagaan welk proces ID gebruik maakt van een bestand, map of bestandssysteem. Ook voor het achterhalen van het proces ID achter een bepaalde poort.

Om te achterhalen welke processen achter TCP poort 22 zitten, gebruik je de opdracht:

dany@pindabook:~> sudo fuser 22/tcp
22/tcp:               1552  2654  2656

Om het proces ID te vertalen naar een procesnaam, gebruik je de volgende opdracht om proces 1552 te identificeren:

dany@pindabook:~> ps -p 1552 -o comm=
sshd

Hieruit blijkt dat het process sshd met het ID 1552 luistert naar TCP poort 22.

Ports