我有一个Django
配置为将数据库查询写入/tmp/db.log
文件的应用程序。
"debug_console_to_file": {
"level": "DEBUG",
"filters": ["require_debug_true"],
"class": "logging.FileHandler",
"filename": "/tmp/db.log",
},
应用程序通常从以用户身份uwsgi
使用的服务器启动www-data
。python manage.py
但是,有时我通过我的用户手动运行它(使用) - tvelichkov
。
问题是,当我尝试从我的用户启动它时,我收到一个 Permission denied 错误,/tmp/db.log
因为www-data
已经创建了它(删除文件可以临时解决问题,但是服务器将收到相同的错误,因为现在我用户拥有该文件)。
PermissionError: [Errno 13] Permission denied: '/tmp/db.log'
我试图将我的用户添加到www-data
组
$ members www-data
www-data tvelichkov
我还尝试为777
文件授予文件权限。
$ ls -l /tmp/db.log
-rwxrwsrwx 1 www-data www-data 22102 юли 30 15:25 /tmp/db.log
但我仍然不断收到这个Permission denied
错误。任何帮助,将不胜感激。
注意:我以前在 Ubuntu 18.04 中对这个设置没有任何问题,但现在我在 Ubuntu 20.04 中有它。
更新:这是该/tmp/
文件夹的权限,但请注意,这是在我运行之后chown root:root /tmp
并且chmod 777 /tmp
正如@adrian vera 所建议的那样,顺便说一句,在此更改之后似乎chmod 777 /tmp/db.log
正在工作,因为我不再收到 Permission denied 错误。Ubuntu 是否有可能/tmp/
在 18.04 和 20.04 版本之间更改了文件夹的内容?因为我很确定在遇到此问题之前我没有对此文件夹进行任何更改?
$ ls -l / | grep tmp
drwxrwxrwx 24 root root 4096 авг 3 10:19 tmp
注意 2:我还有一台安装了干净的 Ubuntu 20.04 的机器,我也遇到了这个问题,回家后我也会仔细检查那里的权限。
UPDATE2:所以在干净的 Ubuntu 20.04 上安装/tmp/
文件夹的权限是:
$ ls -l / | grep tmp
drwxrwxrwt 23 root root 12288 авг 3 16:41 tmp
这就是它的/tmp/db.log
样子:
$ ls -l /tmp/db.log
-rw-r--r-- 1 www-data www-data 0 авг 3 16:54 /tmp/db.log
$ sudo chmod 777 /tmp/db.log
$ ls -l /tmp/db.log
-rwxrwxrwx 1 www-data www-data 0 авг 3 16:54 /tmp/db.log
$ lsattr /tmp/db.log
--------------e----- /tmp/db.log
$ whoami
tvelichkov
$ getent group www-data
www-data:x:33:tvelichkov
$ python manage.py test --settings=cs.settings.test
Traceback (most recent call last):
File "/home/tvelichkov/.pyenv/versions/3.6.10/lib/python3.6/logging/config.py", line 565, in configure
handler = self.configure_handler(handlers[name])
File "/home/tvelichkov/.pyenv/versions/3.6.10/lib/python3.6/logging/config.py", line 738, in configure_handler
result = factory(**kwargs)
File "/home/tvelichkov/.pyenv/versions/3.6.10/lib/python3.6/logging/__init__.py", line 1032, in __init__
StreamHandler.__init__(self, self._open())
File "/home/tvelichkov/.pyenv/versions/3.6.10/lib/python3.6/logging/__init__.py", line 1061, in _open
return open(self.baseFilename, self.mode, encoding=self.encoding)
PermissionError: [Errno 13] Permission denied: '/tmp/db.log'
看起来您已将特定用户 ID 设置为文件的组所有权。(请参阅rwxrwsrwx文件权限详细信息中的 s。)这就是您使用 tvelichkov 用户名被拒绝权限的原因。您需要关闭用户 ID 并在文件所有权中设置组 ID。
我建议您应该使用相同的用户来运行和测试应用程序。这样就可以避免此类问题。
在这种情况下,可能不是处理权限,而是以
www-data
用户身份执行脚本是一个更好的主意。这是我们用来运行一些 Web 应用程序(如 NextClud、MediaWiki 等)的维护脚本的标准方法。您可以通过以下sudo
命令来执行此操作: