2017-07-20 16 views
2

manage.pyスクリプトを使用してコマンドを実行し、Djangoは私の許可拒否エラー与える:のPython/Djangoのログ権限エラーが

[email protected]:/opt/proj$ python3 manage.py migrate 

Traceback (most recent call last): 
    File "/usr/lib/python3.5/logging/config.py", line 558, in configure 
    handler = self.configure_handler(handlers[name]) 
    File "/usr/lib/python3.5/logging/config.py", line 731, in configure_handler 
    result = factory(**kwargs) 
    File "/usr/lib/python3.5/logging/__init__.py", line 1008, in __init__ 
    StreamHandler.__init__(self, self._open()) 
    File "/usr/lib/python3.5/logging/__init__.py", line 1037, in _open 
    return open(self.baseFilename, self.mode, encoding=self.encoding) 
PermissionError: [Errno 13] Permission denied: '/var/log/django/debug.log' 

をしかし、私は(私の知る限り)正しいグループにいる、とシェルを使用してログファイルに触れることができます:

[email protected]:/var/log/django$ ls -la 
total 20 
drwxrwxr-x 2 nobody www-data 4096 Jul 20 13:06 . 
drwxrwxr-x 12 root syslog 4096 Jul 20 12:37 .. 
-rwxrwxr-x 1 nobody www-data 11283 Jul 20 13:07 debug.log 

[email protected]:/var/log/django$ groups 
vagrant adm cdrom sudo dip www-data plugdev lxd lpadmin sambashare 

[email protected]:/var/log/django$ touch debug.log 

[email protected]:/var/log/django$ 

問題がここにあるのは誰でも分かりますか?私は迷惑メールの「弁当」ubuntu 16.04イメージを使用しています。

編集:ログファイルでアクセス権を777に設定すると、正常に動作します。しかし、私はむしろ775(またはそれ以下)としてそれらを保つだろう。

答えて

1

を使用して試みることができますただし、SELinuxまたはAppArmorがインストールされている場合は、強制アクセス制御オプションが干渉している可能性があります。

SELinuxを使用しているディストリビューションでは、sudo setsenforce 0を実行してから、Djangoを実行してください。それが動作すれば、それはSELinuxの問題かどうかを判断します。そこから、https://wiki.centos.org/HowTos/SELinuxを読むこと、またはaudit2allowまたはSEのブーリアンを使用してセキュリティ拒否を分類する方法をトラブルシューティングするために、ディストリビューションの類似ドキュメントが存在することをお勧めします。

編集:MACの問題を除外して、私はそれがプライマリグループとセカンダリグループの問題だと思っています。コマンドsg www-data -c 'python3 manage.py migrate'を実行すると、それは作成するプロセスがvagrantのプライマリグループを継承し、セカンダリは継承しないことを意味します。 sgを使用すると、セカンダリグループのいずれかでプロセスを開始できます。

+0

あなたの提案に感謝します。私はimg情報を追加しました。これは、ubuntu 16.04です。私はSELinuxを持っていませんが、私は 'sudo invoke-rc.d apparmor kill'を使ってAppArmorを無効にしましたが、それでも同じ問題があります。 – jeremy

+0

これはプライマリまたはセカンダリグループのアクセス許可の問題だと思います。それを反映するように答えを修正するでしょう。 –

0

あなたは一時的にファイルに世界を書き込み可能に設定することができ、トラブルシューティングのため:

chmod 777 /var/log/django/debug.log

また、あなたはあなたが使用しているものをイメージ言わない

sudo python3 manage.py migrate

+0

ありがとうございました。残念ながら、それは777パーマで動作しますが、私はそれを残したくありません。私はあなたの2番目の提案が何を意味するのか、私はすでに実行しているコマンドであるとは思っていませんか? – jeremy

+0

777を使用して、コマンドがログに書き込めるかどうかを確認することをお勧めしました。あなたは、アプリケーションが所有者でも、グループでもないことを知っています。 –

関連する問題