非root用户(普通用户)使用tcpdump

5,151 阅读1分钟

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,如:

参考来源
tcpdump 安装和文件的s权限
Linux中的setuid简介