在centOS docker容器内运行wireshark

era*_*ran 6 centos wireshark docker

我使用yum( RUN yum install -y wireshark wireshark-qt) 安装了wireshark,但当我通过 ssh 进入容器时无法运行它。

# tshark
tshark: Couldn't run /usr/sbin/dumpcap in child process: Operation not permitted
Are you a member of the 'wireshark' group? Try running
'usermod -a -G wireshark _your_username_' as root.
Run Code Online (Sandbox Code Playgroud)

我尝试运行usermod -a -G wireshark root(当我 ssh 进入机器时,它是以 root 身份运行的)。这没有帮助。

也尝试过su -c '/usr/sbin/tshark'没有成功。

我应该怎么办?

小智 7

dumpcap需要NET_RAW(使用RAW和PACKET套接字)NET_ADMIN(执行网络相关操作)能力

$ getcap $(which dumpcap)
/usr/sbin/dumpcap = cap_net_admin,cap_net_raw+ep
Run Code Online (Sandbox Code Playgroud)

--cap-add=NET_RAW --cap-add=NET_ADMIN默认情况下不会将它们授予非特权容器,并且必须在启动容器时显式添加

$ docker build -t tshark - <<EOF 
FROM ubuntu:18.04
RUN apt-get update && apt-get install -y tshark && rm -rf /var/lib/apt/lists/*
ENTRYPOINT ["tshark"]
EOF

$ docker run --rm -it \
    --net=[container:<name|id> | host] \
    --cap-add=NET_RAW --cap-add=NET_ADMIN tshark


Run Code Online (Sandbox Code Playgroud)


小智 1

我使用了这个命令,它运行:

usermod -a -G wireshark _your_username_  

newgrp wireshark

sudo chgrp wireshark /usr/sbin/dumpcap

tshark -i eth0 -w outfile
Run Code Online (Sandbox Code Playgroud)

请尝试。