Як сказати, у якому процесі відкритий певний порт в Linux?


32

Я запустив nmap на своєму сервері і знайшов дивний порт відкритим. Я намагаюся з’ясувати, чи є спосіб відобразити цей порт на конкретний процес, але поняття не маю, чи є такий інструмент.

Будь-які пропозиції?


Upvote за те, що ви отримали відповідь №1 у Gogle, червень 2018 року.
SDsolar

Відповіді:


57

Як і Netstat, згаданий в інших публікаціях, команда lsof повинна це зробити просто чудово. Просто скористайтеся цим:

lsof -i :<port number>

і всі процеси повинні з'явитися. Я використовую його в OS X досить часто.

Стаття адміністрації Debian для lsof


цікаво. Я про це не знав. однак я розглядаю це як результат спроби злому. машина - друга. Ви можете зателефонувати до порту-порушника, АЛЕ lsof І netstat обидва не виявлять порт відкритим.
jnman

порт 5631, який згідно з / etc / services є pcanywheredata настільки підозрілим.
jnman

Тепер це приємно, я цього не знав! Завжди використовуйте netstat. Дякую
buster

4
Якщо ні netstat, ні lsof не показують порт як використаний, але машина відповідає на нього, швидше за все, встановлено кореневий комплект. Я рекомендую перемістити будь-які дані з машини десь в іншому місці, а потім видалити їх.
Каміль Кісієль

6
Це справді руткіт. Я вже бачив таку поведінку, і це завжди руткіт. Ваша система порушена, і будь-яким інструментам, яким ви користуєтесь, не можна довіряти. Увімкніть живий компакт-диск (який має довірені бінарні файли лише для читання) і використовуйте їх для вилучення ваших даних, налаштувань тощо. Будь-які програми, які ви мали, будь-які сценарії, які у вас були, відмовляються від них. Не принось їх. Поводьтеся з системою так, ніби в ній є проказа, бо вона / робить /. Як тільки ви закінчите, виведете її з орбіти. Зробіть це якомога швидше. О, і відключіть мережеве з'єднання - забороніть зловмиснику доступу.
Avery Payne

23

Попередження: Ваша система порушена.

Вам потрібен інструмент lsof, який перелічить файли (і сокети, і порти). Він, швидше за все, встановлений, і це, швидше за все, версія зловмисника, це означає, що він вам бреше .

Це справді руткіт. Я вже бачив таку поведінку, і це завжди руткіт. Ваша система порушена, і будь-яким інструментам, які ви використовуєте, які походять з однієї машини, не можна довіряти. Увімкніть живий компакт-диск (який має довірені бінарні файли лише для читання) і використовуйте їх для вилучення ваших даних, налаштувань тощо. Будь-які програми, які ви мали, будь-які сценарії, які у вас були, відмовляються від них . Не принось їх . Ставтесь до них, і до системи, ніби у них є проказа, бо вони є .

Як тільки ви закінчите, виведете її з орбіти .

Гра над людиною, гра закінчена.

Зробіть це якомога швидше. О, і відключіть мережеве з'єднання - забороніть зловмиснику доступу.


1
Це все говорить насправді. З’ясуйте, що пішло не так, сплюстіть сервер, відновіть з останніх відомих хороших резервних копій. Життя занадто коротке, щоб грати в ігри.
Роб Моїр

2
Просто додайте: будьте впевнені, що знаєте дату пролому, оскільки ви можете відновити той самий руткіт, який ви тільки що видалили. В іншому випадку, так, відновити з / до / цієї дати.
Avery Payne

1
Це смішна графіка. Я знаю, що система порушена (на щастя, це не моя). Питання, яке мені було цікавіше, було простежити, як він потрапив в першу чергу. Я підозрюю через php / joomla, але хотів зрозуміти, як / чому цей порт залишається відкритим, коли жоден інструмент виявлення кореневого набору не показував цей порт.
jnman

1
lol @ "О, і відключіть мережеве з'єднання"
theman_on_osx

6
Перш ніж перейти до цього висновку , існують інші можливі пояснення того, як відкриті несподівані порти; наприклад, встановлений вами пакет, але про нього забули.
Девід Дж.

14
sudo netstat -lnp  

Перелічує порти, які слухають вхідні з'єднання, і пов'язаний з цим процес, який відкриває порт.


4

netstat -anp

"-P" повідомляє йому перелічити ідентифікатор процесу, у якого відкритий порт. -An каже йому, щоб перелічити порти прослуховування та не вирішувати імена. На зайнятих системах, які можуть значно прискорити швидкість повернення.

netstat -anp | grep "СПИСОК"

Це просто дасть вам відкриті порти.


4

Якщо ви не можете побачити порт, відкритий за допомогою інструментів операційної системи, і підозрюєте про вторгнення, можливо, встановлено руткіт.

Руткіт міг змінити системні інструменти, щоб уникнути певних процесів і портів або змінених модулів ядра.

Ви можете перевірити наявність rootkit за допомогою декількох автоматизованих інструментів. 'rootkit пошуку apt-кешу' показує наступне в Ubuntu:

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

Якщо у вас є руткіт, ви можете повернути "змінене" до вашої системи, але я рекомендую вам дізнатися, як було здійснено вторгнення, і загартувати систему, щоб вона не повторювалася.


Вони не є ексклюзивним для Ubuntu, ви можете використовувати їх і в CentOS. Просто шукайте пакет або завантажуйте його зі своєї сторінки.


На виході з цього порту, здається, ви справді працюєте pcanywhere: " Y <Enter>" дуже схожий на "Будь ласка, натисніть <Enter>", яке є привітальним повідомленням pcanywhere. Я не знаю, чому процес не відображається у списку процесів. Ви корінь?

Ви можете спробувати перезавантажити, щоб побачити, чи це одноразовий процес.


якісь пропозиції для центів?
jnman

як не дивно, нехорошо-tcp не показує жодних підозрілих портів. chkrootkit / rkhunter повідомив про все ясно (але в основному тому, що я видалив підозрілі пані до того, як задати це питання)
jnman

FWIW, rootkit встановив себе як apache в / var / tmp / ... та /var/tmp/.ICE-Unix/* Другий був підлий, оскільки я не помітив цього вперше, і мені було цікаво, як хек баш процес продовжував нерестити себе після вбивства.
jnman

Виявляється, зломщик встановив роботу з кроном.
jnman

0

Щоб пояснити відповідь @bjtitus, ви можете отримати дуже детальну інформацію, наприклад:

$ 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

Я можу побачити, що кальмар - це процес, але він справді мій, squid-deb-proxyщо займає порт.

Ще один хороший приклад програми 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

Ви можете бачити в lsof(LiSt Open Files), що це java, що менш ніж корисно. Запустивши psкоманду з PID, ми можемо відразу побачити, що це CrashPlan.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.