PermissionError: [Errno 13] Permission denied gets thrown when starting the script in CGI, but not in bash

PermissionError: [Errno 13] Permission denied gets thrown when starting the script in CGI, but not in bash

当我通过 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

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