2014-07-01 41 views
2

我想在Linux中(使用Python)打开一个原始套接字而不给Python cap_net_raw功能。我希望用户拥有这个能力,而不是程序。我使用的是Ubuntu 12.4。在没有setcap的情况下在Linux中打开原始套接字cap_net_raw

+0

欢迎来到stackoverflow.com。请花些时间阅读[帮助页面](http://stackoverflow.com/help),尤其是名为[“我可以问些什么话题?”]的章节(http://stackoverflow.com/help/)讨论话题)和[“我应该避免问什么类型的问题?”](http://stackoverflow.com/help/dont-ask)。更重要的是,请阅读[Stack Overflow问题清单](http://meta.stackoverflow.com/questions/156810/stack-overflow-question-checklist)。您可能还想了解如何创建[最小化,完整和可验证的示例](http://stackoverflow.com/help/mcve)。 –

回答

0

我一直在为此而苦苦挣扎。似乎没有任何好的解决方法,至少对于像Python这样的解释性语言来说。以root运行或不捕获原始数据包:)。我唯一能想到的就是将脚本作为守护进程来执行。

须藤服务启动snifferd

其中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 $? 
    ;; 
... 

我已经试过正确初始化的插座,并在之后取下盖子之前执行我的代码setcap但似乎蟒蛇在实例启动之前需要权限。

还有http://www.subspacefield.org/security/privilege/code/privilege/ privelege下降,但我没有真正看过它。

编辑1 刚刚尝试过。它可以工作,但是如果deamon在程序需要之前删除它的功能,它将会失败。猜测,它需要某种暂停在那里等

+0

在Linux 4.3及更高版本上可以设置Ambient功能。这些将始终添加到非根进程允许的和有效的集合中。这样python的文件集不需要改变。 – wheredidthatnamecomefrom

0

功能与流程(线程是精确的),而不是用户。

正如@wheredidthatnamecomefrom指出的那样,您可以利用环境功能仅用cap_net_raw执行python脚本,而不需要为python二进制文件设置任何文件功能。

你可以看看the following question关于如何做到这一点的一般想法。

相关问题