Django / Apache / mod_wsgi: bagaimana cara menghindari 403 tanpa membuat home dir dapat dieksekusi-dunia?

1

[Silakan lihat bagian bawah pertanyaan untuk status terbaru!]

Saya mencoba mengatur Django dengan Apache + mod_wsgi pada mesin vanili Debian 6.0.

Sayangnya, ketika saya pergi ke alamat IP mesin di browser, saya mengerti 403 Forbidden: You don't have permission to access / on this server. Log Apache hanya mengatakan:

[Wed May 04 10:20:56 2011] [error] [client x.x.x.x] (13)Permission denied: access to / denied

Jadi, inilah yang saya coba lakukan. Saya telah menyiapkan proyek Django baru di ~/fruit/myfruit, dan beberapa file WSGI / Apache ~/fruit/apache, sebagai berikut:

**~/fruit/apache/django.wsgi**
import os
import sys
path = '~/fruit'
if path not in sys.path:
    sys.path.append(path)
os.environ['DJANGO_SETTINGS_MODULE'] = 'myfruit.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

**~/fruit/apache/django_wsgi.conf**
WSGIScriptAlias / "/root/fruit/apache/django.wsgi"
<Directory "/root/fruit/apache">
Order deny,allow
Allow from all
</Directory>

Dan saya telah mengedit berbagai file Apache sebagai berikut:

**/etc/apache2/httpd.conf **
LoadModule wsgi_module modules/mod_wsgi.so
Include "/root/fruit/apache/django_wsgi.conf"

**/etc/hosts**
127.0.0.1 localhost
[[my_ip_address]] debian debian

Ketika saya me-restart Apache (menjalankan sebagai root), saya mendapatkan peringatan berikut:

root@debian:~/fruit/apache# /etc/init.d/apache2 restart
Restarting web server: apache2[Wed May 04 10:27:36 2011] [warn] module wsgi_module is already loaded, skipping
apache2: Could not reliably determine the server's fully qualified domain name, using [[my_ip_address]] for ServerName
 ... waiting [Wed May 04 10:27:37 2011] [warn] module wsgi_module is already loaded, skipping
apache2: Could not reliably determine the server's fully qualified domain name, using [[my_ip_address]] for ServerName
.

Saya tidak tahu apakah ini terhubung dengan kesalahan izin, atau apakah penting bahwa pesan kesalahan dicetak dua kali.

Tolong bisakah ada yang memberi tahu saya apa yang saya lakukan salah? Saya memiliki sedikit pengalaman tentang Apache!

Terimakasih banyak!

UPDATE: Dalam kasus itu kesalahan hak akses file, saya sudah menjalankan chmod a+x *untuk semua file dalam myfruitdan apachedirektori dan direktori sendiri, dan restart Apache. Tidak ada sukacita

PEMBARUAN: Saya bahkan tidak bisa terhubung ke localhost:

root@debian:~/fruit# wget http://localhost
--2011-05-04 10:44:41--  http://localhost/
Resolving localhost... 127.0.0.1
Connecting to localhost|127.0.0.1|:80... connected.
HTTP request sent, awaiting response... 403 Forbidden
2011-05-04 10:44:41 ERROR 403: Forbidden.

PEMBARUAN: OK diselesaikan, dengan menetapkan chmod a+xpada rootdirektori saya . Saya tidak suka ini sama sekali - pasti itu pasti lubang keamanan? Apa yang harus saya lakukan?

simon
sumber

Jawaban:

1

Menjalankan aplikasi web apa pun sebagai root tidak disarankan!

Seperti yang sudah Anda ketahui, ini merupakan masalah izin. Alasan Anda harus chmod + x on / root adalah karena tidak ada pengguna lain, termasuk pengguna yang menjalankan apache, memiliki hak ke direktori / root (itu harus pribadi!).

Baik melayani aplikasi menggunakan pengguna server web (www-data pada debian IIRC) dari folder / var / www atau bahkan lebih baik, buat pengguna yang sama sekali baru.

h0tw1r3
sumber
Terima kasih - melayani dari /var/wwwtampaknya menjadi cara untuk pergi :)
simon