Solution 1 :
J'ai essayé sur Centos 5, toujours le même même sur le dossier tmp ou 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 l'ouverture du premier fichier de sauvegarde. parce que vous avez spécifié "-C 1", l'autorisation refusée se produit car la taille du fichier a déjà atteint 1, et lors de la création d'un nouveau fichier, une erreur d'autorisation refusée sera déclenchée. alors 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 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 -Z user
# 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
Solution 2 :
Essayez d'exécuter la commande à partir de /tmp
ou tout autre répertoire mondial accessible en écriture. Je me souviens d'avoir eu des problèmes avec tcpdump dans des répertoires qui ne sont pas accessibles en écriture, je n'ai aucune idée pourquoi - :)
cd /tmp
tcpdump -i p3p1 -n -w out.pcap -C 16
Solution 3 :
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 les autorisations pour é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 par tout le monde comme /tmp, ou au moins un répertoire où vous avez donné à l'utilisateur ou au groupe 'tcpdump' des autorisations d'écriture.
Solution 4 :
Quand j'ai rencontré ce Permission denied
problème, il s'est avéré que je mettais un .cap
extension 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.tcpdump
provoque 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
Solution 5 :
SELinux est-il en cours d'exécution ? Vérifiez en tapant est terminal :
/usr/sbin/getenforce
S'il indique Enforcing
, vous pouvez essayer de désactiver SELinux et de réessayer tcpdump, pour voir si SE l'arrêtait.