Netstat в docker не показывает PID для процессов, запущенных от имени другого пользователя - PullRequest
0 голосов
/ 03 апреля 2020

Я запускаю сетевой сервер под пользователем jamq в Docker.

[root@12af450e8259 /]# su jamq -c '/opt/jboss-amq-7-i0/bin/artemis-service start'
Starting artemis-service
artemis-service is now running (25)

Затем я пытаюсь перечислить процессы и их сокеты прослушивания, используя netstat как root, но для процессов, выполняющихся от имени другого пользователя, вместо PID я вижу только -.

[root@12af450e8259 /]# netstat -nlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1/sshd              
tcp        0      0 0.0.0.0:1883            0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:8161          0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:5445            0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:5672            0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:61613           0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:61616           0.0.0.0:*               LISTEN      -                   
tcp6       0      0 :::22                   :::*                    LISTEN      1/sshd          

Я попытался добавить --privileged в командную строку Docker, и это устраняет проблему. Затем я хотел использовать более детализированные возможности, но не могу найти правильную возможность.

Я пытался

docker run --rm --cap-add=SYS_ADMIN --cap-add=NET_ADMIN -it myimage:latest bash

, но это не помогает.

1 Ответ

0 голосов
/ 03 апреля 2020

Требуемая возможность --cap-add=SYS_PTRACE. В сообщениях об ошибках есть различные сообщения, что netstat нуждается в этой возможности. Например, Ошибка 901754 - SE Linux не позволяет / usr / bin / netstat использовать возможности 'sys_ptrace'.

Поэтому правильная команда

docker run --rm --cap-add=SYS_PTRACE -it myimage:latest bash
[root@f9c4b5fa7d1c /]# netstat -nlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:5672            0.0.0.0:*               LISTEN      22/java             
tcp        0      0 0.0.0.0:61613           0.0.0.0:*               LISTEN      22/java             
tcp        0      0 0.0.0.0:61616           0.0.0.0:*               LISTEN      22/java             
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      92/sshd             
tcp        0      0 0.0.0.0:1883            0.0.0.0:*               LISTEN      22/java             
tcp        0      0 127.0.0.1:8161          0.0.0.0:*               LISTEN      22/java             
tcp        0      0 0.0.0.0:5445            0.0.0.0:*               LISTEN      22/java             
tcp6       0      0 :::22                   :::*                    LISTEN      92/sshd             
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   PID/Program name     Path
...