tcpdump: out.pcap: autorisation refusée

15
[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 j'ai une erreur ??

Que devrais-je faire?

chobo
la source

Réponses:

21

j'ai essayé sur Centos 5, toujours le même même sur tmp ou dossier racine. à partir de la page de manuel tcpdump, les privilèges sont supprimés lorsqu'ils sont utilisés avec l'option -Z (activée par défaut) avant d'ouvrir le premier fichier de sauvegarde. car vous avez spécifié «-C 1», l'autorisation refusée se produit en raison de la taille de fichier déjà atteinte 1, et lors de la création d'un nouveau fichier, une erreur d'autorisation refusée est générée. il suffit donc de spécifier 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 strace ci-dessus, tcpdump a supprimé les privilèges dans l'utilisateur et le groupe pcap (77).

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

Depuis la page de manuel de 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 un utilisateur spécifique avec l'utilisateur -Z

# 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     
chocripple
la source
8

Essayez d'exécuter la commande à partir de /tmpou de tout autre répertoire accessible en écriture du monde. Je me souviens avoir eu des problèmes avec tcpdump dans des répertoires qui ne sont pas accessibles en écriture, je ne sais pas pourquoi - :)

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

Votre tcpdump abandonne les privilèges à l'utilisateur 'tcpdump', consultez la page de manuel ("-Z tcpdump" est la valeur par défaut, et l'utilisateur tcpdump n'a pas l'autorisation d'écrire dans le répertoire racine de root). Comme Daniel T. vous l'a dit, exécutez votre capture dans un répertoire accessible en écriture comme / tmp, ou au moins un répertoire dans lequel vous avez accordé à l'utilisateur ou au groupe les autorisations d'écriture 'tcpdump'.

Mark R
la source
5

Lorsque j'ai rencontré ce Permission deniedproblème, il s'est avéré que je mettais une .capextension sur le fichier au lieu de .pcap. Comme RichL l'a souligné dans les commentaires, le profil AppArmor sur Ubuntu /etc/apparmor.d/usr.sbin.tcpdumpest à l'origine de cela.

  # 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
poussins
la source
5
Il s'avère que le profil AppArmor pour Ubuntu (/etc/apparmor.d/usr.sbin.tcpdump) permet uniquement au binaire tcpdump d'écrire dans des fichiers avec une extension .pcap. AppArmor est activé par défaut dans Ubuntu, ce qui m'a surpris.
Rich L
3

SELinux fonctionne-t-il? Vérifiez en tapant son terminal:

/usr/sbin/getenforce

Si c'est le cas Enforcing, vous pouvez essayer de désactiver SELinux et de réessayer tcpdump, pour voir si SE l'arrêtait.

mako_reactor
la source
@Hauke ​​Laging D'après sa sortie bash, il semble qu'il exécute la commande depuis le répertoire personnel de root.
mako_reactor
1

Le message d'erreur n'a pas beaucoup de sens pour moi. SELinux est cependant une explication possible. Vous pouvez regarder de plus près ce qui se passe en démarrant tcpdump via strace:

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

vous devez changer le mode de répertoire sous lequel vous exécutez tcpdump.

chmod 777

Exécutez maintenant la commande tcpdump -vv -i any -s0 -w nom_fichier.pcap

Ça devrait marcher ... !!

Michael Scofield
la source
1
Pour certaines valeurs de «travail». Vous avez maintenant un répertoire qui comprend la capture de paquets qui peut très bien contenir des données sensibles exposées, lisibles par toute personne ayant accès à l'hôte. "Hé docteur, j'ai une vignette", il ne faut pas répondre par une amputation, même si cela résout complètement le problème de la vignette.
DopeGhoti