Tshark работает в CentOS внутри Docker: операция не разрешена: '/ usr / sbin / dumpcap' - PullRequest
0 голосов
/ 03 сентября 2018

Я пытаюсь запустить образ Docker с Tshark на CentOS. К сожалению, я все время получаю эту ошибку PermissionError: [Errno 1] Operation not permitted: '/usr/sbin/dumpcap'.

Мой docker-compose.yml:

version: '2'
services:
  tshark:
    build:
      dockerfile: Dockerfile
      context: .
    container_name: tshark

Dockerfile:

FROM centos

RUN  yum -y update && \
     yum -y install epel-release && \
     yum -y install python36 \
     yum -y install libcap2-bin wireshark && yum clean all && \
     curl -O https://bootstrap.pypa.io/get-pip.py && \
     /usr/bin/python36 get-pip.py && \
     rm get-pip.py && \
     pip install pyshark && \
     pip install tqdm requests && \
     ln -s /usr/bin/python36 /usr/bin/python3

# add extra user
RUN useradd -ms /bin/bash shark
RUN usermod -aG wireshark shark
RUN newgrp wireshark
RUN chgrp wireshark /usr/sbin/dumpcap
RUN chmod 750 /usr/sbin/dumpcap
RUN setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/sbin/dumpcap

# wireshark fixes
# RUN newgrp wireshark

ADD . /app
WORKDIR /app

# switch user
USER shark

CMD ["python3", "process.py"]

Мой process.py:

#!/usr/bin/env python3 
import pyshark

capture = pyshark.LiveRingCapture(interface='eth0')

for packet in capture.sniff_continuously(packet_count=5):
    print('Just arrived:', packet)

Я пробовал разные решения. Кажется, это как-то связано с тем, что он не будет работать при использовании пользователя root или пользователя, у которого нет необходимых прав доступа. Надеюсь, кто-нибудь может мне помочь. Это результат, который я продолжаю получать после запуска docker-compose up --build:

tshark    | Traceback (most recent call last):
tshark    |   File "process.py", line 6, in <module>
tshark    |     for packet in capture.sniff_continuously(packet_count=5):
tshark    |   File "/usr/local/lib/python3.6/site-packages/pyshark/capture/capture.py", line 207, in _packets_from_tshark_sync
tshark    |     tshark_process = existing_process or self.eventloop.run_until_complete(self._get_tshark_process())
tshark    |   File "/usr/lib64/python3.6/asyncio/base_events.py", line 468, in run_until_complete
tshark    |     return future.result()
tshark    |   File "/usr/local/lib/python3.6/site-packages/pyshark/capture/live_capture.py", line 89, in _get_tshark_process
tshark    |     stderr=self._stderr_output())
tshark    |   File "/usr/lib64/python3.6/asyncio/subprocess.py", line 225, in create_subprocess_exec
tshark    |     stderr=stderr, **kwds)
tshark    |   File "/usr/lib64/python3.6/asyncio/base_events.py", line 1194, in subprocess_exec
tshark    |     bufsize, **kwargs)
tshark    |   File "/usr/lib64/python3.6/asyncio/unix_events.py", line 200, in _make_subprocess_transport
tshark    |     **kwargs)
tshark    |   File "/usr/lib64/python3.6/asyncio/base_subprocess.py", line 39, in __init__
tshark    |     stderr=stderr, bufsize=bufsize, **kwargs)
tshark    |   File "/usr/lib64/python3.6/asyncio/unix_events.py", line 706, in _start
tshark    |     universal_newlines=False, bufsize=bufsize, **kwargs)
tshark    |   File "/usr/lib64/python3.6/subprocess.py", line 709, in __init__
tshark    |     restore_signals, start_new_session)
tshark    |   File "/usr/lib64/python3.6/subprocess.py", line 1344, in _execute_child
tshark    |     raise child_exception_type(errno_num, err_msg, err_filename)
tshark    | PermissionError: [Errno 1] Operation not permitted: '/usr/sbin/dumpcap'
tshark exited with code 1

Я почти уверен, что это проблема самого wireshark, а не pyshark. Пытался установить pyshark, используя pip install pyshark --user, но та же ошибка, все еще.

...