Как определить, какой процесс имеет определенный порт, открытый в Linux?

32

Я запустил nmap на моем сервере и обнаружил странный открытый порт. Я пытаюсь выяснить, есть ли способ сопоставить этот порт с конкретным процессом, но я не знаю, есть ли такой инструмент.

Какие-либо предложения?

jnman
источник
Upvote за ответ № 1 в Gogle, июнь 2018 года.
SDsolar

Ответы:

57

Как и Netstat, упомянутый в других постах, команда lsof должна справиться с этой задачей. Просто используйте это:

lsof -i :<port number>

и все процессы должны пройти. Я использую его на OS X довольно часто.

Статья по администрированию Debian для lsof

bjtitus
источник
интересный. Я не знал об этом. однако, я рассматриваю это как результат попытки взлома. машина у друга. Вы можете подключиться к вызывающему порт, но НЕТ lsof И netstat оба не показывают, что порт открыт.
Джнман
порт 5631, который в соответствии с / etc / services является pcanywhedata, что очень подозрительно.
Джнман
Это хорошо, я этого не знал! Всегда использовал netstat. Спасибо
бастер
4
Если ни netstat, ни lsof не показывают используемый порт, но машина отвечает на него, скорее всего, установлен корневой набор. Я рекомендую перенести любые данные с машины в другое место, а затем уничтожить их.
Камил Кисиэль
6
Это действительно руткит. Я видел такое поведение раньше, и это всегда руткит. Ваша система взломана, и никаким инструментам, которые вы используете, нельзя доверять. Загрузитесь с Live CD (который содержит доверенные двоичные файлы только для чтения) и используйте его для извлечения ваших данных, настроек и т. Д. Любые программы, которые у вас были, любые сценарии, которые вы использовали, откажитесь от них. Не приноси их. Относитесь к системе как к проказе, потому что она / делает /. Как только вы закончите, сбросьте его с орбиты. Сделайте это как можно скорее. О, и отключите сетевое соединение - запретите доступ злоумышленнику.
Эйвери Пейн
23

Предупреждение: ваша система взломана.

Инструмент, который вам нужен, - lsofэто список файлов (а также сокетов и портов). Скорее всего, он установлен, и, скорее всего, это версия злоумышленника, а значит, он будет вам лгать .

Это действительно руткит. Я видел такое поведение раньше, и это всегда руткит. Ваша система взломана, и никаким инструментам, которые вы используете, которые исходят с того же компьютера, нельзя доверять. Загрузитесь с Live CD (который содержит доверенные двоичные файлы только для чтения) и используйте его для извлечения ваших данных, настроек и т. Д. Любые программы, которые у вас были, любые сценарии, которые вы использовали, откажитесь от них . Не приноси их . Относитесь к ним и к системе, как к проказе, потому что они есть .

Как только вы закончите, сбросьте его с орбиты .

Игра окончена, игра окончена.

Сделайте это как можно скорее. О, и отключите сетевое соединение - запретите доступ злоумышленнику.

Эйвери Пэйн
источник
1
Это говорит обо всем на самом деле. Выясните, что пошло не так, выровняйте сервер, восстановите из последней удачной резервной копии. Жизнь слишком коротка, чтобы играть в игры.
Роб Мойр
2
Просто добавьте: убедитесь, что вы знаете дату взлома, так как вы можете восстанавливать тот же руткит, который вы только что удалили. В противном случае, да, восстановить с / до / этой даты.
Эйвери Пейн
1
Это забавная графика. Я знаю, что система взломана (к счастью, это не мое). Вопрос, который мне был более любопытен, заключался в том, чтобы выяснить, как он попал в первую очередь. Я подозреваю, что через php / joomla, но хотел понять, как / почему этот порт оставался открытым, когда ни один из инструментов обнаружения корневого набора не показывал этот порт.
jnman
1
LOL @ "О, и отключите сетевое подключение"
theman_on_osx
6
Прежде чем перейти к такому выводу , есть другие возможные объяснения неожиданного открытия портов; например, пакет, который вы установили, но о котором забыли.
Дэвид Дж.
14
sudo netstat -lnp  

Перечисляет порты, которые прослушивают входящие соединения, и связанный процесс, у которого открыт порт.

Джо
источник
4

netstat -anp

«-P» указывает ему перечислить идентификатор процесса, у которого открыт порт. Параметр -an указывает списку прослушиваемых портов и не разрешает имена. На загруженных системах это может значительно ускорить скорость возврата.

netstat -anp | Греп "СПИСОК"

Это просто даст вам открытые порты.

sysadmin1138
источник
4

Если вы не видите, что порт открыт с помощью инструментов операционной системы, и вы подозреваете вторжение, возможно, установлен руткит.

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

Вы можете проверить руткит с помощью нескольких автоматизированных инструментов. 'apt-cache search rootkit' в Ubuntu показывает следующее:

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

Если у вас есть руткит, вы можете вернуть «измененные» в вашу систему, но я рекомендую вам выяснить, как было сделано вторжение, и укрепить систему, чтобы она не повторялась.


Они не являются эксклюзивными для Ubuntu, их можно использовать и в CentOS. Просто найдите пакет или загрузите его со своей страницы.


По выводу из этого порта кажется, что вы действительно используете pcany где-то: « Ы <Enter>» очень похоже на «Пожалуйста, нажмите <Enter>», которое является приветственным сообщением pcanywhere. Я не знаю, почему процесс не отображается в списке процессов. Вы рут?

Вы также можете попробовать перезагрузить компьютер, чтобы увидеть, запущен ли он один раз.

chmeee
источник
какие-либо предложения для Centos?
Джнман
странно, unhide-tcp не показывает никаких подозрительных портов. chkrootkit / rkhunter сообщил, что все ясно (но в основном потому, что я удалил подозрительные папки перед тем, как задавать этот вопрос)
jnman
FWIW, руткит установился как apache в / var / tmp / ... и /var/tmp/.ICE-Unix/* Второй был подлый, так как я не заметил его в первый раз, и мне было интересно, как черт возьми процесс продолжал порождать себя после того, как был убит.
jnman
Оказывается, взломщик установил задание cron.
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 - это процесс, но на самом деле мой 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.

ErebusBat
источник