1. 安装tcpdump,注意需要使用root用户安装
yum install -y tcpdump
默认安装到/usr/sbin目录下
2. 普通用户运行 tcpdump 发现无权限执行
tcpdump: socket: Operation not permitted
tcpdump 必须以 root 身份来运行, 或者 tcpdump 可执行程序文件被设置了 setuid 标志(一个程序文件如果被设置了 setuid 标志,运行时该程序会拥有root权限)
3. 设置 s 权限位
setuid
类 unix 系统提供的一个标志位, 其实际意义是 set 一个 process 的 euid 为这个可执行文件或程序的拥有者(比如 root )的 uid, 也就是说当 setuid 位被设置之后, 当文件或程序(统称为 executable )被执行时, 操作系统会赋予文件所有者的权限, 因为其 euid 是文件所有者的 uid。
euid(effective user ID)
当进程执行时间, 操作系统会对euid进行识别, 以此来判断到底用什么权限来执行这个进程。
tips:
chmod 命令不进行必要的完整性检查,在使用 setuid 时, 需要保证此文件有被执行的权限(x), 如果没有执行权限。 在使用ls -l查看权限时, 会发现 setuid 位被设置为了大写的 S, 这说明 setuid 位没有被设置成功。
使用 root 用户修改 tcpdump 文件权限
chmod u+s /usr/sbin/tcpdump
ll /usr/sbin/tcpdump 时看到 rws,如: