Fornire file CGI Python su un NAS Synology

Oct 19 2020

Non riesco a far sì che i file Python vengano serviti con Apache 2.2 o 2.4 senza un errore 500. Ho installato WebStation, python, perl, php e Apache 2.2 e 2.4 installati.

Posso fornire file statici benissimo con Apache. Quando provo a fornire un cgi di base "ciao mondo", ottengo un errore 500. L'errore è

[cgid: errore] [pid 10076: tid 140542621480832] (2) Nessun file o directory di questo tipo: AH01241: exec di ['/volume2/Development/WebRepo/cgi-bin/test.py' non riuscito.

Ho provato a eseguire sia uno script perl che uno script python. Entrambi vengono eseguiti correttamente da una riga di comando, ma non da Apache (stessi errori di "nessun file di questo tipo ..") Nota anche che questo è un errore 500, non 404, quindi sta vedendo il file. Posso fornire file HTML statici senza problemi.

Lo script Python non potrebbe essere più semplice:

#!/usr/bin/python
print "Content-type: text/html\n\n";
print "Hello, World.";

Tutti i file hanno 755 autorizzazioni. Il percorso per Python è corretto. Non so cosa fare dopo.

Risposte

1 saaj Nov 29 2020 at 21:26

Python può fornire script CGI pronti all'uso, usando http.server.CGIHTTPRequestHandler.

Sul mio Synology NAS ho installato il pacchetto ufficiale Python3 (versione 3.8.2-0150). Posso accedere al NAS come SSH admine aggiungere uno script:

mkdir -p app/cgi-bin

cat << EOF > app/cgi-bin/hello.py
#!/usr/bin/env python3

print('Content-Type: text/html')
print()
print('<html><body><h2>Hello World!</h2></body></html>')
EOF

Dopodiché posso eseguirlo in questo modo (nota che --directorynon ha effetto per --cgiquindi sono cdlì):

cd app && python3 -m http.server --cgi

Poi sulla mia macchina, posso curl http://nas:8000/cgi-bin/hello.py.

In esecuzione all'avvio

È possibile eseguirlo automaticamente all'avvio tramite l'utilità di pianificazione.

Pannello di controllo → Utilità di pianificazione → Crea → Attività attivata → Script definito dall'utente . Compila questi nella scheda Generale :

  • Attività: Python CGI
  • Utente: admin
  • Abilitato: [x]

E script definito dall'utente nella scheda Impostazioni attività :

cd /var/services/homes/admin/app
python3 -m http.server --cgi

Quindi puoi eseguirlo manualmente. Dovrebbe essere eseguito anche al riavvio.

Autorizzazioni

Se si desidera eseguire l'attività come root, assicurarsi che i permessi dei file siano corretti dal rootpunto di vista di. Nel mio caso c'è discrepanza per qualche motivo.

$ ls -l app/cgi-bin/hello.py -rwxrwxrwx+ 1 admin users 122 Nov 29 14:50 app/cgi-bin/hello.py $ sudo ls -l app/cgi-bin/hello.py 
Password: 
-rwx--x--x+ 1 admin users 122 Nov 29 14:50 app/cgi-bin/hello.py