Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在没有setcap cap\u net\u raw的Linux中打开原始套接字_Python_Linux_Sockets_Raw Sockets_Linux Capabilities - Fatal编程技术网

Python 在没有setcap cap\u net\u raw的Linux中打开原始套接字

Python 在没有setcap cap\u net\u raw的Linux中打开原始套接字,python,linux,sockets,raw-sockets,linux-capabilities,Python,Linux,Sockets,Raw Sockets,Linux Capabilities,我想在Linux(使用Python)中打开一个原始套接字,而不给Python cap_net_raw功能。我希望用户具有此功能,而不是程序。我正在使用Ubuntu 12.4。我也一直在努力解决这个问题。至少对于python这样的解释性语言来说,似乎没有任何好的解决办法。在根目录下运行或不捕获原始数据包:)。我能想到的唯一一件事就是作为守护进程执行脚本 sudo服务启动嗅探器 其中snifferd类似于: PATH=/sbin:/bin:/usr/sbin:/usr/bin DAEMON=/hom

我想在Linux(使用Python)中打开一个原始套接字,而不给Python cap_net_raw功能。我希望用户具有此功能,而不是程序。我正在使用Ubuntu 12.4。

我也一直在努力解决这个问题。至少对于python这样的解释性语言来说,似乎没有任何好的解决办法。在根目录下运行或不捕获原始数据包:)。我能想到的唯一一件事就是作为守护进程执行脚本

sudo服务启动嗅探器

其中snifferd类似于:

PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/home/<user>/projects/sniffer.py
DAEMON_NAME=snifferd

case "$1" in
    start)
      log_daemon_msg "Starting $DAEMON_NAME"
      setcap cap_net_raw=+ep /usr/bin/python2.7
      start-stop-daemon --start --background --pidfile $PIDFILE --make-pid --user $DAEMON_USER --chuid $DAEMON_USER --startas $DAEMON
      setcap cap_net_raw=-ep /usr/bin/python2.7
      log_end_msg $?
    ;;
...
PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/home//projects/sniffer.py
DAEMON_NAME=snifferd
案件“$1”
开始)
log_daemon_msg“启动$daemon_NAME”
setcap cap_net_raw=+ep/usr/bin/python2.7
启动-停止守护进程--启动--后台--pidfile$pidfile--生成pid--用户$daemon_user--chuid$daemon_user--startas$daemon
setcap cap_net_raw=-ep/usr/bin/python2.7
日志\结束\消息$?
;;
...
在初始化套接字之前,我尝试在代码中执行setcap,并在初始化之后移除cap,但在实例启动之前,python似乎需要该权限

还有一个是关于Privilege降落的,但我还没看过

编辑1
我试过了。它可以工作,但如果执事在程序需要之前删除了该功能,它将失败。猜测一下,它需要某种暂停等功能与进程(确切地说是线程)相关,而不是与用户相关

正如所指出的,您可以利用环境功能仅使用
cap_net_raw
执行python脚本,而无需为
python
二进制文件设置任何文件功能


您可以查看一下有关如何执行此操作的一般想法。

欢迎访问stackoverflow.com。请花些时间阅读,特别是命名和。更重要的是,请阅读。您可能还想学习如何创建一个。在Linux4.3和更高版本上,可以设置环境功能。这些将始终添加到非根进程的允许和有效集合中。这样python的文件集就不必更改。