web-dev-qa-db-fra.com

TCPDump: Out.PCAP: Autorisation refusée

[root@localhost ~]# cat /etc/issue
Fedora release 17 (Beefy Miracle)
Kernel \r on an \m (\l)
[root@localhost ~]# uname -a
Linux localhost.localdomain 3.6.10-2.fc17.i686 #1 SMP Tue Dec 11 18:33:15 UTC 2012 i686 i686 i386 GNU/Linux
[root@localhost ~]# tcpdump -i p3p1 -n -w out.pcap -C 16
tcpdump: out.pcap: Permission denied

Pourquoi je reçois une erreur ??

Que dois-je faire?

15
chobo

j'ai essayé sur Centos 5, toujours identique même sur le dossier TMP ou racine. À partir de la page manqueuse TCPDump, les privilèges sont supprimés lorsqu'ils sont utilisés avec -Z option (activé par défaut) avant d'ouvrir la première sauvegarde. Parce que vous avez spécifié "-c 1", la permission refusée se produit en raison de la taille de fichier déjà atteinte 1, et lors de la création de nouveau fichier, il augmentera une erreur de permission refusée. Donc, spécifiez simplement l'utilisateur -z

# strace tcpdump -i eth0 -n -w out.pcap -C 1
fstat(4, {st_mode=S_IFREG|0644, st_size=903, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aea31934000
lseek(4, 0, SEEK_CUR)                   = 0
read(4, "root:x:0:root\nbin:x:1:root,bin,d"..., 4096) = 903
read(4, "", 4096)                       = 0
close(4)                                = 0
munmap(0x2aea31934000, 4096)            = 0
setgroups(1, [77])                      = 0
setgid(77)                              = 0
setuid(77)                              = 0
setsockopt(3, SOL_SOCKET, SO_ATTACH_FILTER, "\1\0\0\0\0\0\0\0\310\357k\0\0\0\0\0", 16) = 0
fcntl(3, F_GETFL)                       = 0x2 (flags O_RDWR)
fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK)    = 0

recvfrom(3, 0x7fff9563d35f, 1, 32, 0, 0) = -1 EAGAIN (Resource temporarily unavailable)
fcntl(3, F_SETFL, O_RDWR)               = 0
setsockopt(3, SOL_SOCKET, SO_ATTACH_FILTER, "\1\0\17\0\0\0\0\0P\327\233\7\0\0\0\0", 16) = 0
open("out.pcap", O_WRONLY|O_CREAT|O_TRUNC, 0666) = -1 EACCES (Permission denied)
write(2, "tcpdump: ", 9tcpdump: )                = 9
write(2, "out.pcap: Permission denied", 27out.pcap: Permission denied) = 27
write(2, "\n", 1
)                       = 1
exit_group(1)                           = ?

vous pouvez voir le résultat de la strace ci-dessus, TCPDump a laissé tomber les privilèges dans l'utilisateur et le PCAP du groupe (77).

# grep 77 /etc/group
pcap:x:77:
# grep 77 /etc/passwd
pcap:x:77:77::/var/arpwatch:/sbin/nologin

De la page homme Tcpdump, -c

# man tcpdump
       -C     Before writing a raw packet to a savefile, check whether the file is currently larger than file_size and, if so,
              close the current savefile and open a new one.  Savefiles after the first savefile will have the name  specified
              with  the -w flag, with a number after it, starting at 1 and continuing upward.  The units of file_size are mil-
              lions of bytes (1,000,000 bytes, not 1,048,576 bytes).

              **Note that when used with -Z option (enabled by default), privileges are dropped before opening first savefile.**


# tcpdump --help
tcpdump version 3.9.4
libpcap version 0.9.4
Usage: tcpdump [-aAdDeflLnNOpqRStuUvxX] [-c count] [ -C file_size ]
                [ -E algo:secret ] [ -F file ] [ -i interface ] [ -M secret ]
                [ -r file ] [ -s snaplen ] [ -T type ] [ -w file ]
                [ -W filecount ] [ -y datalinktype ] [ -Z user ]
                [ expression ]

Spécifiez l'utilisateur spécifique avec -z utilisateur

# tcpdump -i eth0 -n -w out.pcap -C 1 -Z root
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
35 packets captured
35 packets received by filter
0 packets dropped by kernel     
21
chocripple

Essayez d'exécuter la commande de /tmp ou tout autre répertoire jirtable mondial. Je me souviens d'avoir des problèmes avec TCPDump dans des annuaires qui ne sont pas écritables mondiales, je n'ai aucune idée de pourquoi - :)

         cd /tmp
         tcpdump -i p3p1 -n -w out.pcap -C 16 
8
Daniel t.

Quand j'ai couru dans ce Permission denied problème il s'est avéré être que je mettais un .cap extension sur le fichier au lieu de .pcap. Comme Richl a souligné dans les commentaires, Apparmer Profile sur Ubuntu /etc/apparmor.d/usr.sbin.tcpdump cause ceci.

  # uname -a ; lsb_release -a
  Linux bidder-lb4 3.2.0-76-virtual #111-Ubuntu SMP Tue Jan 13 22:33:42 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
  No LSB modules are available.
  Distributor ID: Ubuntu
  Description:    Ubuntu 12.04.5 LTS
  Release:        12.04
  Codename:       precise
5
chicks

Votre TCPDummp est de laisser tomber les privilèges à l'utilisateur "TCPDump", cochez la page Man ("-Z TCPDump" est la valeur par défaut et l'utilisateur TCPDump n'a pas d'autorisations pour écrire dans le HomeDir de la racine). Comme Daniel T. vous l'a dit, dirigez votre capture dans un répertoire mondial comme/TMP, ou au moins un répertoire où vous avez donné aux autorisations d'écrivie de l'utilisateur ou du groupe 'TCPDump'.

5
Mark R

Selinux est-il en cours d'exécution? Vérifier en tapant est terminal:

/usr/sbin/getenforce

Si c'est indiqué Enforcing, vous pouvez essayer de désactiver SELINUX et d'essayer à nouveau le TCPDump, de voir si elle l'empêchait.

3
mako_reactor

vous devriez changer le mode de répertoire sous lequel vous exécutez TCPDump.

chmod 777

Maintenant, exécutez la commande tcpdump -vv -i -i tout -s0 -w file_name.pcap.pcap

Ça devrait marcher ... !!

1
Michael Scofield

Le message d'erreur n'a pas beaucoup de sens pour moi. Selinux est une explication possible, cependant. Vous avez peut-être de plus près ce qui se passe en démarrant Tcpdump à travers la strace:

strace tcpdump -i p3p1 -n -w out.pcap -C 16
1
Hauke Laging