GNU/Linux >> Tutoriels Linux >  >> Linux

tcpdump :out.pcap :autorisation refusée

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.


Linux
  1. pip freeze renvoie une erreur :Autorisation refusée :hg

  2. Pourquoi Mv(1) copie-t-il des objets si l'autorisation de déplacement est refusée ?

  3. -bash :./configure :autorisation refusée ?

  4. Autorisation refusée avec bash.sh pour exécuter cron

  5. maven:autorisation bash mvn refusée

Dépannage des problèmes de refus d'autorisation de Docker

Autorisation de montage CIFS refusée sous Linux - Corrigé !

Pourquoi le conteneur Docker invite-t-il l'autorisation refusée ?

autorisation docker.sock refusée

autorisation refusée sur le fichier authorized_key

erreur de montage 13 =Autorisation refusée