我正在尝试使用mod_python在Apache 2.x中运行python脚本。我用发布者编辑了httpd.conf
LoadModule python_module /usr/local/apache2/modules/mod_python.so
<Directory /usr/local/apache2/htdocs/mod_python>
SetHandler mod_python
PythonHandler mod_python.publisher
PythonDebug On
我正在尝试使用需要root权限的python脚本在防火墙中添加规则。它要求root权限?请有人帮忙。
#!/usr/local/bin/python
#from mod_python import apache
import sys
import errno
import pf
def index(req):
filter = pf.PacketFilter()
try:
# Enable packet filtering
filter.enable()
print "pf is enabled"
return "pf is enabled"
except IOError, (err, msg):
if err == errno.EACCES:
#sys.exit("Permission denied: are you root?")
return ("Permission denied: are you root?")
elif err == errno.ENOTTY:
#sys.exit("ioctl not supported by the device: is the pf device correct?")
return ("ioctl not supported by the device: is the pf device correct?")
这是我想通过openBSD的apache执行的python脚本。它使用mod_python。
答案 0 :(得分:1)
请将你的python脚本发布到某个地方并给我们链接。 你的python脚本如何尝试与pf通信?通过pfctl?假设您正在尝试向表中添加IP
pfctl -t thetable -T add x.x.x.x
找出哪个用户运行apache
ps aux | grep apache
然后您必须编辑 / etc / sudoers 以使该用户能够在没有密码的情况下运行pfctl命令。所以,让我们说你运行apache作为www。将以下内容放在sudoers中:
www ALL=(ALL:ALL) NOPASSWD: /sbin/pfctl
最后在python脚本中(假设你用子进程调用外部命令)
from subprocess import call
call(["sudo","pfctl","-T","theTable","-t","add", "x.x.x.x"])
但请记住,整个计划确实是一个坏主意,你不应该这样做。如果你可以摆脱python脚本并运行捆绑的apache 1.3,它是私有的和审计的。在chroot中运行Web服务器。当来自网络时,切勿将防火墙的控制权暴露给用户输入。我相信如果你详细说明你想做什么,我们可以找到一个更加高效和安全的设置。
答案 1 :(得分:1)
您无法以root用户身份在mod_python下运行Python脚本。这是因为Apache总是会将权限下放给不受信任的用户。解决它的唯一方法是从源代码重新编译Apache并定义一个魔术预处理器宏,它启用安全漏洞,允许Apache工作进程以root身份运行。
总之,不要这样做,这很危险。
另外请注意,不再维护或开发mod_python,并且首先是否应该使用它是值得怀疑的。