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.
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))
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 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.