Estou tentando capturar tráfego de dentro de um namespace de rede e visualizá-lo no Wireshark no host como um usuário sem privilégios. Para fazer isso, estou executando tcpdump
dentro do namespace de rede de destino e gravando a captura em um pipe nomeado /tmp/fifo
que pode ser acessado pelo host.
Quando tento visualizar esse tráfego no Wireshark no host executando wireshark -k -i /tmp/fifo
, recebo a mensagem de erro:
Couldn't run dumpcap in child process: Permission denied
A execução ls -l /bin/dumpcap
gera as permissões -rwxr-xr-- 1 root wireshark
, o que explica por que dumpcap
não pode ser executada pelo usuário que não está no wireshark
grupo.
Como o usuário está efetivamente apenas lendo bytes de um pipe, não são necessários privilégios ou capacidades de root. Eu poderia adicionar o usuário ao wireshark
grupo, mas o dumpcap
binário tem capacidades que eu preferiria não conceder. Alternativamente, eu poderia remover capacidades dumpcap
e torná-lo executável por todos, o que, em um breve teste, funciona, mas pode apresentar dumpcap
falhas inesperadas, já que foi projetado para ser executado com essas capacidades.
Existe uma maneira mais direta de atingir meu objetivo?
Resposta atualizada:
O Wireshark procura
dumpcap
no mesmo local que owireshark
binário ( 1 , 2 ).Copie os dois executáveis para um diretório diferente:
O binário dumpcap agora é seu e executável.
Execute o Wireshark a partir desse diretório:
Resposta anterior (quando pensei que o
/usr/bin/dumpcap
caminho estava codificado em tempo de compilação):Se o seu sistema tiver namespaces de usuários sem privilégios disponíveis (
unshare --user
), você pode sobrepor o /bin/dumpcap com um que tenha permissões diferentes.Faça uma cópia de sua propriedade:
Insira um namespace de usuário, no qual você pode ter recursos de root – e que também lhe dá privilégios para criar um namespace de montagem ao mesmo tempo:
Isso
--keep-caps
permite que você invoque diretamentemount
dentro do namespace, pois não será possível fazersudo
nada (/bin/sudo pertence à raiz "externa", que você não tem permissão para mapear no namespace).Dentro do shell do namespace, monte sua cópia do dumpcap no caminho esperado pelo Wireshark e execute o Wireshark de dentro do mesmo shell: