web-dev-qa-db-fra.com

Comment savoir quel processus a un port spécifique ouvert sur Linux?

J'ai exécuté nmap sur mon serveur et j'ai trouvé un étrange port ouvert. J'essaie de comprendre s'il existe un moyen de mapper ce port à un processus spécifique, mais je n'ai aucune idée s'il existe un tel outil.

Aucune suggestion?

32
jnman

En plus de Netstat, mentionné dans d'autres articles, la commande lsof devrait être en mesure de le faire très bien. Utilisez simplement ceci:

lsof -i :<port number>

et tous les processus devraient arriver. Je l'utilise assez souvent sur OS X.

article sur l'administration Debian pour lsof

57
bjtitus

Avertissement: votre système est compromis.

L'outil dont vous avez besoin est lsof, qui répertorie les fichiers (et les sockets et les ports). Il est probablement installé, et il s'agit très probablement de la version de l'attaquant, ce qui signifie qu'il vous sera mentir.

Il s'agit en effet d'un rootkit. J'ai déjà vu ce comportement auparavant, et c'est toujours un rootkit. Votre système est compromis et les outils que vous utilisez qui proviennent de la même machine ne sont pas fiables. Démarrez dans un Live CD (qui a des binaires de confiance en lecture seule) et utilisez-le pour extraire vos données, paramètres, etc. Tous les programmes que vous aviez, tous les scripts que vous aviez, abandonnez-les. Ne les apportez pas. Traitez-les, ainsi que le système, comme s'ils avaient la lèpre, car ils faites.

Une fois que vous avez terminé, mettez-le en orbite .

Game over man, game over.

Faites-le dès que possible. Oh, et débranchez votre connexion réseau - refusez à votre attaquant l'accès.

23
Avery Payne
Sudo netstat -lnp  

Répertorie les ports qui écoutent les connexions entrantes et le processus associé qui a le port ouvert.

14
Joe

netstat -anp

Le "-p" lui indique de lister l'ID de processus qui a le port ouvert. Le -an lui indique de lister les ports d'écoute et de ne pas résoudre les noms. Sur les systèmes occupés, la vitesse de retour peut être considérablement accélérée.

netstat -anp | grep "LISTE"

Cela vous donnera simplement les ports ouverts.

4
sysadmin1138

Si vous ne voyez pas le port ouvert avec les outils du système d'exploitation et que vous soupçonnez une intrusion, il se peut qu'un rootkit ait été installé.

Le rootkit aurait pu changer les outils système pour éviter certains processus et ports ou changer les modules du noyau.

Vous pouvez vérifier le rootkit avec plusieurs outils automatisés. 'apt-cache search rootkit' montre ce qui suit dans Ubuntu:

chkrootkit - rootkit detector
rkhunter - rootkit, backdoor, sniffer and exploit scanner
unhide - Forensic tool to find hidden processes and ports

S'il vous arrive d'avoir un rootkit, vous pouvez restaurer le "changé" sur votre système, mais je vous recommande de découvrir comment l'intrusion a été faite et de durcir le système pour qu'il ne se répète pas.


Ils ne sont pas exclusifs à Ubuntu, vous pouvez également les utiliser dans CentOS. Recherchez simplement le package ou téléchargez-le à partir de leur page.


D'après la sortie de ce port, il semble que vous exécutiez pcanywhere en effet: "�Ы� <Entrée>" est très similaire à "Veuillez appuyer sur <Entrée>" qui est le message de bienvenue de pcanywhere. Je ne sais pas pourquoi le processus n'apparaît pas dans la liste des processus. Êtes-vous root?

Vous pouvez également essayer de redémarrer pour voir s'il s'agit d'un processus unique en cours d'exécution.

4
chmeee

Pour exposer la réponse de @bjtitus, vous pouvez obtenir des informations très détaillées, par exemple:

$ lsof -i :8000
COMMAND  PID  USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
squid3  1289 proxy   15u  IPv6 14810490      0t0  TCP *:8000 (LISTEN)

$ ps -fp 1289
UID        PID  PPID  C STIME TTY          TIME CMD
proxy     1289     1  0 09:48 ?        00:00:00 /usr/sbin/squid3 -N -f /etc/squid-deb-proxy/squid-deb-proxy.conf

Je peux voir ici que le calmar est le processus, mais c'est vraiment mon squid-deb-proxy qui prend le port.

Un autre bon exemple d'application Java:

$ lsof -i :4242
COMMAND  PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
Java    3075 root   86u  IPv4    12019      0t0  TCP *:4242 (LISTEN)

$ ps -fp 3075
UID        PID  PPID  C STIME TTY          TIME CMD
root      3075     1 15 May24 ?        3-16:07:25 /usr/local/crashplan/jre/bin/Java -Dfile.encoding=UTF-8 -Dapp=CrashPlanService -DappBaseName=CrashPl

Vous pouvez voir dans lsof (LiSt Open Files) que c'est Java, ce qui est loin d'être utile. En exécutant la commande ps avec le PID, nous pouvons voir immédiatement qu'il s'agit de CrashPlan.

0
ErebusBat