使用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(或更低)。
答案 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