PermissionError: [Errno 13] Beim Starten des Skripts in CGI wird eine Fehlermeldung „Permission denied“ ausgegeben, nicht jedoch in Bash.

PermissionError: [Errno 13] Beim Starten des Skripts in CGI wird eine Fehlermeldung „Permission denied“ ausgegeben, nicht jedoch in Bash.

Ich habe ein Python-Skript auf meinem HTTP-Server (CentOS 7), das für die Reaktion auf den Client-Browser zuständig ist. Es funktioniert in Bash einwandfrei, aber wenn ich versuche, über CGI darauf zuzugreifen, wird nur ein Fehler ausgegeben. Unter Ubuntu funktioniert es einwandfrei (sowohl über HTTP als auch über Shell). Das Skript lautet:

import socket
HOST = '127.0.0.1'
PORT = 4345

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)

Der Fehler, den ich erhalte, wenn ich das Skript über CGI ausführe, ist:

PermissionError: [Errno 13] Permission denied
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

Die Ausgabe von „getsebool -a | grep httpd“ lautet:

httpd_anon_write --> off
httpd_builtin_scripting --> on
httpd_can_check_spam --> off
httpd_can_connect_ftp --> off
httpd_can_connect_ldap --> off
httpd_can_connect_mythtv --> off
httpd_can_connect_zabbix --> off
httpd_can_network_connect --> off
httpd_can_network_connect_cobbler --> off
httpd_can_network_connect_db --> off
httpd_can_network_memcache --> off
httpd_can_network_relay --> off
httpd_can_sendmail --> off
httpd_dbus_avahi --> off
httpd_dbus_sssd --> off
httpd_dontaudit_search_dirs --> off
httpd_enable_cgi --> on
httpd_enable_ftp_server --> off
httpd_enable_homedirs --> off
httpd_execmem --> off
httpd_graceful_shutdown --> on
httpd_manage_ipa --> off
httpd_mod_auth_ntlm_winbind --> off
httpd_mod_auth_pam --> off
httpd_read_user_content --> off
httpd_run_ipa --> off
httpd_run_preupgrade --> off
httpd_run_stickshift --> off
httpd_serve_cobbler_files --> off
httpd_setrlimit --> off
httpd_ssi_exec --> off
httpd_sys_script_anon_write --> off
httpd_tmp_exec --> off
httpd_tty_comm --> off
httpd_unified --> off
httpd_use_cifs --> off
httpd_use_fusefs --> off
httpd_use_gpg --> off
httpd_use_nfs --> off
httpd_use_openstack --> off
httpd_use_sasl --> off
httpd_verify_dns --> off

Antwort1

Die Lösung bestand darin, httpd die Verbindung zum Netzwerk zu erlauben. Ich habe einfach mit auf httpd_can_network_connecteingestellt und es funktionierte. Beachten Sie, dass Sie den Schalter auch verwenden müssen, um die Lösung dauerhaft zu machen.onsetsebool-P

verwandte Informationen