[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?
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
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
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
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'.
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.
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 ... !!
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