PermissionError:[Errno 13]在CGI中启动脚本时会抛出拒绝权限,但在bash中不会

时间:2019-07-01 18:30:26

标签: python bash apache2 cgi centos7

当我通过CGI访问脚本时,会抛出PermissionError,但是当我通过SSH使用bash启动相同的脚本时,它运行良好。

我尝试临时修改sudoers文件,以便该脚本始终以root用户身份运行。

import socket                                                                                                                                                             
print("Content-type: text/html; charset=utf-8\n\n")
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((HOST, PORT))
query = 'foobar'
sock.sendall(bytes(query, 'utf-8'))
buffer = sock.recv(1024)
responce = str(buffer, "UTF-8")
print(responce)

使用bash运行脚本时,即使我以普通的非超级用户帐户登录,也不会引发任何错误,但是当我通过访问网页运行脚本时,它将错误写入/ etc / httpd / logs / error_log。 错误是:

Traceback (most recent call last):
File "/var/www/cgi-bin/script.py", line 8, in <module>
sock.connect((HOST, PORT))
PermissionError: [Errno 13] Permission denied

1 个答案:

答案 0 :(得分:1)

此行为是SELinux的错误。当我用setsebool将'httpd_can_network_connect'设置为'on'时,脚本可以正常工作。请注意,要使更改在重新启动后永久存在,必须使用-P开关。