Я пытаюсь запустить образ 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
, но та же ошибка, все еще.