Python / django日志记录权限错误

时间:2017-07-20 13:14:06

标签: python linux django logging

使用manage.py脚本运行命令时,django会给我一个权限被拒绝错误:

vagrant@vagrant:/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'

但我在正确的组中(据我所见),我可以使用shell触摸日志文件:

vagrant@vagrant:/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

vagrant@vagrant:/var/log/django$ groups
vagrant adm cdrom sudo dip www-data plugdev lxd lpadmin sambashare

vagrant@vagrant:/var/log/django$ touch debug.log

vagrant@vagrant:/var/log/django$

任何人都可以帮我理解这里的问题是什么吗?我正在使用流浪汉' bento' ubuntu 16.04 image。

编辑:为了清楚,如果我在日志文件上将权限设置为777,它确实可以正常工作。但我宁愿将它们保持为775(或更低)。

2 个答案:

答案 0 :(得分: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可让您启动任何辅助群组的流程。

答案 1 :(得分:0)

对于疑难解答,您可以暂时在文件上设置全局可写:

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

您也可以尝试使用

sudo python3 manage.py migrate