Django [Errno 13] 権限が拒否されました: '/var/www/media/animals/user_uploads' 質問する

Django [Errno 13] 権限が拒否されました: '/var/www/media/animals/user_uploads' 質問する

私は、Ubuntu を実行しているサーバー上の WSGI 経由で Apache2 上で実行される django API を開発しています。

ユーザーは、POST リクエストを使用して、撮影した写真をサーバーにアップロードできます。API はこのリクエストを処理し、画像を に書き込もうとします/var/www/media/animals/user_uploads/<animal_type>/<picture_name>.jpg。ディレクトリがない場合は、ディレクトリ/var/www/media/animals/user_uploads/<animal_type>/が作成されます。

開発中にテストしたときは、Windows と Scientific Linux の両方を使用してすべて正常でした。デプロイメント サーバーでテストすると、次のエラーが表示されます。

Django エラー

私の理解では、Apache2 サーバーはユーザーを使用して実行されていますwww-data。私の場合、cat /etc/passwdユーザーのリストを取得するために実行すると、次のようになりますwww-data:

www-data:x:33:33:www-data:/var/www:/bin/sh

www-dataこれは、が 内のすべてのものにアクセスできることを意味していると想定しています/var/www/。私は以下を試しました:

chmod 777 -R メディア

これはうまくいきましたが、明らかにこれは非常に悪い解決方法です。これを解決するより良い方法はありますか?

これは私の wsgi.py です:

import os, sys
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "serengeti.settings")
sys.path.append('/serengeti/django/serengeti')
sys.path.append('/serengeti/django')

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

私のファイルにはこれがありますsettings.py:

MEDIA_ROOT = '/var/www/media/'
MEDIA_URL = os.path.join(BASE_DIR,'/media/')

私のvhost.confにはこれが含まれています:

Alias /media/ /var/www/media/

ベストアンサー1

結局、私は自分でこれを解決しました。

開発マシンで実行する場合、実際には現在のユーザーの権限を使用して実行しています。ただし、デプロイメント サーバーで実行する場合、実際には を介し​​て実行しており、これは の権限wsgiを使用して実行していることを意味します。www-data

www-dataは、所有者でも、 を所有するユーザー グループにも属していません/var/www。つまり、 はwww-dataとして扱われother、他のユーザーに権限が設定されます。

悪いこれを解決するには、次のようにします。

sudo chmod -R 777 /var/www/

これにより、誰もが のすべてに完全にアクセスできるようになります/var/www/それは非常に悪い考えだ

別の悪い解決策としては、次のようになります。

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

これにより、所有者は に変更されますwww-dataセキュリティ上の脆弱性が生じる

良い解決策は次のようになります:

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

これにより、グループwww-dataに追加され、そのグループとそのすべてのサブフォルダーvarwwwusersとして設定されます。 に設定してセキュリティを強化することもできますが、その場合、機能を使用できなくなるため、自分のやっていることに非常に自信がない限り、に固執してください。/var/www/750Django's collectstatic770

おすすめ記事