Ищем процессы, прослушивающие порты в Linux

13 Ноября 2010. Опубликовано в GNU/Linux - Полезные советы и хитрости

Как я найду запущенные процессы, связанные с каждым открытым портом? Как я узнаю, какой процесс открыл 111-й tcp порт или 7000-й udp порт?Для поиска процессов связанных с номерами портов вы можете использовать следующие программы:

  1. netstat - консольный инструмент отображающий сетевые соединения, таблицы маршрутизации и много статистических данных сетевых интерфейсов.
  2. fuser - утилита, идентифицирующая процессы, которые используют указанные файлы или сокеты.
  3. lsof - утилита, служащая для вывода информации о том, какие файлы используются теми или иными процессами в Linux / UNIX.
  4. Файловая система /proc/$pid/ - В Linux /proc включает в себя каталог для каждого запущенного процесса (включая процессы ядра) в /proc/PID, содержащий информацию о этих процессах, в частности включает имя процесса, открывшего порт.

Все последующие команды нужно запускать от root.

Пример netstat

Введите следующую команду:

# netstat -tulpn

Примерный вывод:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1138/mysqld
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 850/portmap
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1607/apache2
tcp 0 0 0.0.0.0:55091 0.0.0.0:* LISTEN 910/rpc.statd
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 1467/dnsmasq
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 992/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1565/cupsd
tcp 0 0 0.0.0.0:7000 0.0.0.0:* LISTEN 3813/transmission
tcp6 0 0 :::22 :::* LISTEN 992/sshd
tcp6 0 0 ::1:631 :::* LISTEN 1565/cupsd
tcp6 0 0 :::7000 :::* LISTEN 3813/transmission
udp 0 0 0.0.0.0:111 0.0.0.0:* 850/portmap
udp 0 0 0.0.0.0:662 0.0.0.0:* 910/rpc.statd
udp 0 0 192.168.122.1:53 0.0.0.0:* 1467/dnsmasq
udp 0 0 0.0.0.0:67 0.0.0.0:* 1467/dnsmasq
udp 0 0 0.0.0.0:68 0.0.0.0:* 3697/dhclient
udp 0 0 0.0.0.0:7000 0.0.0.0:* 3813/transmission
udp 0 0 0.0.0.0:54746 0.0.0.0:* 910/rpc.statd

TCP port 3306 открыт процессом mysqld имеющий PID # 1138. Вы можете проверить это используя /proc, введя:

# ls -l /proc/1138/exe

Примерный вывод:

lrwxrwxrwx 1 root root 0 2010-10-29 10:20 /proc/1138/exe -> /usr/sbin/mysqld

Для фильтрации выводимой информации вы можете использовать команду grep:

# netstat -tulpn | grep :80

Пример вывода:

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1607/apache2

Команда fuser

Чтобы найти PID процессов открывших 7000-й tcp порт, введите:

# fuser 7000/tcp

Пример вывода:

7000/tcp:             3813

Наконец, найдём имя процесса ассоциированного с PID # 3813, введя:

# ls -l /proc/3813/exe

Пример вывода:

lrwxrwxrwx 1 vivek vivek 0 2010-10-29 11:00 /proc/3813/exe -> /usr/bin/transmission

/usr/bin/transmission это bittorrent-клиент, введите:

# man transmission

или

# whatis transmission

Пример вывода:

transmission (1)     - a bittorrent client

Задача: найти текущий рабочий каталог процесса

Найти текущий рабочий каталог процесса bittorrent или pid 3813 можно введя:

# ls -l /proc/3813/cwd

Пример вывода:

lrwxrwxrwx 1 vivek vivek 0 2010-10-29 12:04 /proc/3813/cwd -> /home/vivek

Или используя команду pwdx, ввести:

# pwdx 3813

Пример вывода:

3813: /home/vivek

Задача: узнать владельца процесса:

Чтобы узнать владельца процесса с PID 3813 используйте следующую команду:

# ps aux | grep 3813

Или

# [URL=http://www.cyberciti.biz/tips/grepping-ps-output-without-getting-grep.html]ps aux | grep '[3]813'[/URL]

Пример вывода:

vivek     3813  1.9  0.3 188372 26628 ?        Sl   10:58   2:27 transmission

Или попытайтесь с ps следующей командой:

# ps -eo pid,user,group,args,etime,lstart | grep '[3]813'

Пример вывода:

3813 vivek    vivek    transmission                   02:44:05 Fri Oct 29 10:58:40 2010

Другая опция это /proc/$PID/environ, введите:

# cat /proc/3813/environ

Или

# grep --color -w -a USER /proc/3813/environ

Пример вывода (не забудьте опцию --colour):Примеры с командой lsof

Введите команду следующим образом:

lsof -i :portNumber
lsof -i tcp:portNumber
lsof -i udp:portNumber
lsof -i :80
lsof -i :80 | [COLOR=purple]grep[/COLOR] LISTEN

Пример выводов:

apache2   1607     root    3u  IPv4   6472      0t0  TCP *:www (LISTEN)
apache2 1616 www-data 3u IPv4 6472 0t0 TCP *:www (LISTEN)
apache2 1617 www-data 3u IPv4 6472 0t0 TCP *:www (LISTEN)
apache2 1618 www-data 3u IPv4 6472 0t0 TCP *:www (LISTEN)
apache2 1619 www-data 3u IPv4 6472 0t0 TCP *:www (LISTEN)
apache2 1620 www-data 3u IPv4 6472 0t0 TCP *:www (LISTEN)

Теперь получите больше информации о pid # 1607 или 1616 и так далее:

# ps aux | grep '[1]616'

Пример вывода:

www-data 1616 0.0 0.0 35816 3880 ? S 10:20 0:00 /usr/sbin/apache2 -k start

Я рекомендую следующую команду для получения информации о pid # 1616:

# ps -eo pid,user,group,args,etime,lstart | grep '[1]616'

Пример вывода:

1616 www-data www-data /usr/sbin/apache2 -k start     03:16:22 Fri Oct 29 10:20:17 2010

Где

  • 1616 : PID
  • www-date : Имя пользователя (владелец - EUID)
  • www-date : Название группы (группа - EGID)
  • /usr/sbin/apache2 -k start : Название команды и её аргументы
  • 03:16:22 : Время прошедшее с момента запуска процесса в форме [[dd-]hh:]mm:ss.
  • Fri Oct 29 10:20:17 2010 : Время запуска команды.

Помощь: Я обнаружил порт, который вообще не распознаю

Для обслуживания сервисами нумерации портов и протоколов используются файл /etc/services. Попытаемся сопоставить номера портов:

$ grep port /etc/services
$ grep 443 /etc/services

Пример вывода:

https		443/tcp				# http protocol over TLS/SSL
https 443/udp

Проверка на руткиты

Я строго рекомендую узнать вам, какие процессы действительно запущены, особенно на серверах с доступом по высокоскоростному интернету. Вы можете искать rootkit, который является программой, разработанной, чтобы взять на себя фундаментальное управление компьютерной системы Вы можете искать руткиты, которые разработаны, чтобы взять фундаментальный контроль (полномочия "root" в Linux / UNIX, в Windows полномочия "Администратора") над компьютерной системой, без авторизации владельцем системы и законными менеджерами. Смотрите как обнаружить и проверять наличие руткитов в Linux.

Следите за своими графиками пропускной способности сети

Как правило заражённые руткитами сервера используются для отправки большого количества спама или вредоносного программного обеспечения (malware), или DoS атак на другие компьютеры.

Источник

Добавить комментарий


Защитный код
Обновить