настройки разрешений tempfile.mkstemp - PullRequest
0 голосов
/ 27 июня 2018

Я использую tempfile.mkstemp для генерации случайного доступного имени файла и записи некоторого контента с помощью os.fdopen. Затем я передаю имя файла задаче через celery.

Эта задача открывает файл, обрабатывает содержимое и, наконец, удаляет файл. При тестировании это работает нормально, однако я понял, что это сломается в моей рабочей среде, где пользователь, выполняющий задачу, не совпадает с пользователем, который создает файл.

Это означает, что пользователь не может открыть файл, потому что tempfile.mkstemp устанавливает разрешения на 600 (-rw-------).

Я не могу запустить оба процесса одним и тем же пользователем, поэтому есть ли способ изменить права доступа к файлу, установленные tempfile.mkstemp?

Я использую Python 3.6 в Ubuntu 14.04.

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Учитывая, что вы используете os.fdopen после вызова mkstemp (), вам может быть лучше использовать tempfile.NamedTeilitaryFile (delete = False). Он возвращает объект файла Python вместо fd.

В любом случае, возвращенный файл будет иметь режим = 0600, поэтому вам нужно будет его изменить. Используйте os.fchmod(temp_file.fileno(), 0640) или аналогичный (измените режим в соответствии с вашими потребностями).

0 голосов
/ 27 июня 2018

Нет, кроме изменения прав доступа вручную с помощью команды chmod, нет способа изменить разрешения файла, созданного tempfile.mkstemp. Эта функция по своему замыслу создает временный файл наиболее безопасным из возможных , поэтому файл доступен для чтения и записи только при создании идентификатора пользователя . См. документация mkstemp .

Создайте временный файл, используя tempfile.TemporaryFile или tempfile.NamedTemporaryFile.

...