GNU/Linux >> Belajar Linux >  >> Linux

Django [Errno 13] Izin ditolak:'/var/www/media/animals/user_uploads'

Penyelesaian untuk masalah ini ketika berhadapan dengan server produksi akan menggunakan collectstatic seperti yang telah disebutkan bahwa itu digunakan dan diselesaikan atau memberikan izin ke folder. Namun jika solusi Anda berada di lingkungan lokal, solusi tersebut dapat diperoleh dengan mengonfigurasi MEDIA lokal direktori di settings.py file yang bekerja di server lokal.

Jadi, akan menambahkan dua baris ini di file konfigurasi lokal seperti yang disebutkan @Nic Scozzaro:

MEDIA_ROOT = os.path.join (BASE_DIR, 'media')
STATIC_ROOT = os.path.join (BASE_DIR, 'static')

Setelah konfigurasi, restart layanan untuk menerapkan perbaikan.


Buat direktori 'MEDIA' di root proyek Anda. Kemudian atur:

MEDIA_ROOT = os.path.join(BASE_DIR,'MEDIA')

Untuk mengetahui pengguna mana yang Anda masuki:

$ whoami
ubuntu

Dan menambahkan ke solusi Anda, jika Anda menggunakan Instans AWS, Anda harus menambahkan pengguna Anda ke grup untuk dapat mengakses folder itu:

Membuat grup untuk pengguna layanan web (varwwwusers)

$ sudo groupadd varwwwusers

Ubah folder www dan jadikan milik varwwwusers

$ sudo chgrp -R varwwwusers /var/www/

www-data adalah server yang membuat permintaan Django, tambahkan itu ke grup

$ sudo adduser www-data varwwwusers

Ubah kebijakan folder

$ sudo chmod -R 770 /var/www/

Tambahkan ubuntu ke grup pengguna varwww

$ usermod -a -G varwwwusers ubuntu

Semoga ini bisa membantu!


Saya telah memecahkan ini sendiri pada akhirnya.

Saat menjalankan mesin pengembangan, saya sebenarnya menjalankan menggunakan hak pengguna saya saat ini. Namun, saat menjalankan di server penerapan, saya sebenarnya menjalankan wsgi , yang artinya dijalankan menggunakan www-data hak istimewa.

www-data bukan pemilik atau grup pengguna yang memiliki /var/www . Artinya www-data diperlakukan sebagai other dan memiliki izin yang disetel untuk orang lain.

Yang BURUK solusi untuk ini adalah dengan melakukan:

sudo chmod -R 777 /var/www/

Ini akan memberi semua orang akses penuh ke semua yang ada di /var/www/ , yang merupakan ide yang sangat buruk.

BURUK lainnya solusinya adalah dengan melakukan:

sudo chown -R www-data /var/www/

Ini akan mengubah pemilik menjadi www-data , yang membuka kerentanan keamanan.

Yang BAIK solusinya adalah:

sudo groupadd varwwwusers
sudo adduser www-data varwwwusers
sudo chgrp -R varwwwusers /var/www/
sudo chmod -R 760 /var/www/

Ini menambahkan www-data ke varwwwusers grup, yang kemudian ditetapkan sebagai grup untuk /var/www/ dan semua subfoldernya. chmod akan memberikan izin membaca, menulis, mengeksekusi kepada pemilik tetapi grup tidak akan dapat mengeksekusi skrip apa pun yang berpotensi diunggah di sana jika misalnya server web diretas.

Anda dapat mengaturnya ke 740 untuk membuatnya lebih aman tetapi Anda tidak akan dapat menggunakan Django's collectstatic fungsionalitas jadi tetap gunakan 760 kecuali jika Anda sangat yakin dengan apa yang Anda lakukan.


Linux
  1. Izin Sudo Ditolak Tapi Su Memberikan Izin?

  2. Perbedaan Antara /var/log/messages, /var/log/syslog, Dan /var/log/kern.log?

  3. UNIX / Linux :Apa izin yang benar dari direktori /tmp dan /var/tmp?

  1. Bagaimana saya bisa memberikan akses tulis folder ke semua pengguna di linux?

  2. Kapan saya harus menggunakan /dev/shm/ dan kapan saya harus menggunakan /tmp/?

  3. Bagaimana cara mengelola /var/www?

  1. Haruskah situs web berada di /var/ atau /usr/ sesuai dengan penggunaan yang disarankan?

  2. Izin ditolak untuk mengubah ukuran sistem file

  3. Log sistem kosong (/var/log/messages; /var/log/secure; dll)