Доступ запрещен для файла 777

У меня есть приложение 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 to /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, где у меня тоже есть эта проблема, я дважды проверю разрешения там тоже однажды я вернулся домой.

ОБНОВЛЕНИЕ 2: Итак, на чистой 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'
0
задан 30 July 2020 в 15:49

2 ответа

Возможно, вместо того, чтобы разбираться с разрешениями, в этом случае лучше выполнить скрипт как www-данные пользователь. Это стандартный подход, который мы используем для запуска сценариев обслуживания некоторых веб-приложений, таких как NextClud, MediaWiki и т. д. Вы можете сделать это с помощью команды sudo:

sudo -u www-data python manage.py
1
ответ дан 3 August 2020 в 08:07

Похоже, вы установили определенный идентификатор пользователя в качестве группового владельца файла. (См. s в rwxrwsrwx подробностях прав доступа к файлам.) Вот почему вы получаете отказ в разрешении с именем пользователя tvelichkov. Вам нужно отключить идентификатор пользователя и установить идентификатор группы во владении файлом.

sudo chown g-s www-data: /tmp/db.log

Я бы посоветовал вам использовать одного и того же пользователя для запуска и тестирования приложения. Это позволит избежать подобных проблем.

1
ответ дан 3 August 2020 в 05:48

Другие вопросы по тегам:

Похожие вопросы: