ρss*_*ρss 10 python sockets linux raw-sockets
是否可以创建没有root权限的原始套接字?如果没有,脚本可以自己提升其权限吗?
我使用原始套接字编写了一个Python脚本:
#!/usr/bin/env python
import socket
rawSocket = socket.socket(socket.PF_PACKET, socket.SOCK_RAW, socket.htons(0x0800))
print "Worked!"
Run Code Online (Sandbox Code Playgroud)
以root权限运行它打印Worked!
.但是,使用普通用户权限运行时会出错.
我想以普通用户身份执行我的脚本,它应该创建一个原始套接字而不需要任何东西.可能吗?
sme*_*eso 11
正如您所指出的,原始套接字需要比普通用户更高的权限.您可以通过两种方式规避此问题:
chmod +s file
并设置其所有者root
使用chown root.root file
.这将以root身份运行您的脚本,无论执行它的有效用户如何.当然,如果你的脚本存在一些缺陷,这可能会很危险.setcap cap_net_raw+ep file
.这将只为其提供打开原始套接字所需的权限.编辑:
正如@Netch指出的那样,给定的解决方案不适用于任何解释语言(如Python).你需要一些"黑客"来使它工作.尝试谷歌搜索 "Python SUID",你应该找到一些东西.
没有办法让非特权进程(Python或其他)提升自己的权限.这是拥有这整个特权/非特权用户的基石之类的东西.关于原始套接字,从手册页raw(7):
只允许有效用户ID为0或CAP_NET_RAW功能的进程打开原始套接字.
用户ID为0表示root.有关linux上的原始套接字的信息,请参见此处.
正如Faust的回答/评论所指出的,你将无法直接为你的python程序设置CAP_NET_RAW功能,因为它是一个由Python解释器执行的脚本,但是网上可能有解决方案可以绕过这个限制.
归档时间: |
|
查看次数: |
5968 次 |
最近记录: |