“tcpdump -w 1.pcap”有效,但“tcpdump -C 100 -w 1.pcap” - 权限被拒绝
Posted
技术标签:
【中文标题】“tcpdump -w 1.pcap”有效,但“tcpdump -C 100 -w 1.pcap” - 权限被拒绝【英文标题】:"tcpdump -w 1.pcap" works, but "tcpdump -C 100 -w 1.pcap" - permission denied 【发布时间】:2013-08-05 17:12:49 【问题描述】:我需要在运行“tcpdump -w 1.pcap”时限制文件大小。我尝试使用键“-C”来执行此操作,但是当我添加它时,我收到错误“权限被拒绝”。所以:
> sudo tcpdump -w 1.pcap
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
^C821 packets captured
847 packets received by filter
24 packets dropped by kernel
但是:
> sudo tcpdump -C 100 -w 1.pcap
tcpdump: 1.pcap: Permission denied
我从我的主目录运行命令,并尝试在以不同权限运行命令之前删除并创建文件,最后我有:
-rwxrwxrwx 1 root root 0 Aug 5 10:30 1.pcap
或
-rwxrwxrwx 1 fd8 users 0 Aug 5 10:30 1.pcap
您能否建议为什么在第二种情况下我无法写入文件?
【问题讨论】:
当您执行sudo tcpdump -C 100 -w 1.pcap
时,1.pcap
已经以 root:root 身份存在?
@VarunLakkur 因为他使用 sudo 运行它,所以权限应该无关紧要。
sudoers
配置可以指定运行sudo
时允许的特定命令和选项。这里有可能吗?
@VarunLakkur 根据 sudoers 的说法,我拥有全部权利。所以我认为文件权限没有问题。人们经常写道,他们根本无法使用 -w。他们通过 tcpdump 的编译标志(如 chroot 或 suid)解决了这个问题,但我找不到如何在我的系统上检查这个问题......
即使我以 root (sudo su) 身份运行它也有问题。
【参考方案1】:
你需要做-Z root
。阅读手册页:
-Z Drops privileges (if root) and changes user ID to user and the group ID to the primary group of user.
This behavior is enabled by default (-Z tcpdump), and can be disabled by -Z root.
【讨论】:
是的,我已经阅读了手册页,但我仍然不明白为什么“tcpdump -w 1.pcap”在没有 -Z 的情况下也能正常工作,而“sudo tcpdump -C 100 -w 1. pcap”没有。 默认情况下,RHEL 中的 tcpdump 在写入文件时会将权限“放弃”给 tcpdump 用户,这意味着文件将被保存为非 root 用户。在 RHEL 中,用户应该是“tcpdump”。所以你可以通过chmod 777 /path/to/logdir/
,甚至chown tcpdump /path/to/logdir
来解决这个问题。如果您的日志目录归特定用户所有,您可以使用-Z
将文件保存为该用户,但-Z root
允许您在任何地方写入文件。
哦,“因为这就是它的工作原理”在 *** 的答案中是一件可怕的事情。 :-)【参考方案2】:
我在 Ubuntu 12.04 LTS 上遇到了类似的问题,我的情况已按以下步骤修复。
sudo apt-get install apparmor-utils
user2704275引用的aa-complain命令包含在这个包中。
如果您的环境是 RedHat/CentOS 发行版,您可以通过 yum 执行相同的命令。
sudo aa-complain /usr/sbin/tcpdump
这会将 tcpdump 的 AppArmor 模式从“强制”更改为“投诉”。 您可以在 /sys/kernel/security/apparmor/profiles 中查看 AppArmor 状态。
那么我就可以用sudo成功获取tcpdump了。
获取 tcpdump 后,出于安全原因,您可以按照以下命令将 apparmor 状态恢复为以前的模式。
sudo aa-enforce /usr/sbin/tcpdump
问候。
【讨论】:
【参考方案3】:我在尝试读取文件时遇到了类似的问题,例如
tcpdump -r example.cap 'icmp[icmptype] = icmp-echo'
对我来说,AppArmor 导致了我不得不在“tcpdump”上从“强制”模式切换到“投诉”模式的问题。以 root 身份运行以下命令:
aa-complain /usr/sbin/tcpdump
【讨论】:
感谢您的回答!但是 AppArmor 用于 Ubuntu,我在服务器上有 RHEL。答案是对 tcpdump 使用“-Z root”键。但是我们仍然不知道为什么 tcpdump 会这样,因为 SELinux 在服务器上已关闭。 这可能只是禁用 AppArmor 配置文件的情况(因为抱怨模式可能是一个安全问题)使用:sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.tcpdump
以上是关于“tcpdump -w 1.pcap”有效,但“tcpdump -C 100 -w 1.pcap” - 权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章