1 安装tcpdump,注意需要使用root用户安装
yum install -y tcpdump
安装到/usr/sbin目录下
2 修改admin用户的profile,把/usr/sbin加入到环境变量
export PATH=$PATH:$HOME/bin:/usr/sbin
3 运行tcpdump发现无权限执行
tcpdump: socket: Operation not permitted
man
Under Linux:
You must be root or tcpdump must be installed setuid to root(unless your distri-
bution has a kernel that supports capability bits such as CAP_NET_RAW and code to
allow those capability bits to be given to particular accounts and to cause those
bits to be set on a user's initial processes when they log in, in which case you
must have CAP_NET_RAW in order to capture and CAP_NET_ADMIN to enumerate network
devices with, for example, the -D flag).
发现需要使用setuid,也就是s权限
4 设置s权限位
(1)、s:文件属主和组设置SUID和GUID,文件在被设置了s权限后将以root(文件所有者)身份执行。在设置s权限时文件属主、属组必须先设置相应的x权限,否则s权限并不能正真生效(chmod命令不进行必要的完整性检查,即使不设置x权限就设置s权限,chmod也不会报错,当我们ls -l时看到rwS,大写S说明s权限未生效)。
Linux修改密码的passwd便是个设置了SUID的程序,普通用户无读写/etc/shadow文件的权限确可以修改自己的密码。
ls -al /usr/bin/passwd
-rwsr-xr-x 1 root root 32988 2008-12-08 17:17 /usr/bin/passwd
使用root用户修改tcpdump文件权限
chmod u+s tcpdump
[admin@v035114 sbin]$ ll -a | grep tcpdump
-rwsr-xr-x 1 root root 789064 Nov 11 2009 tcpdump
这样非root就可以使用tcpdump了