Общие папки с возможностью записи в jupyterhub

В настоящее время мы создаем среду jupyterhub в контейнере докеров и боремся с общими папками. Наша цель — создать общую папку, доступную для записи для всех пользователей.

В домашней папке каждого пользователя есть символическая ссылка ~/shared на /opt/shared. Целевая папка имеет разрешения 777 и принадлежит группе jupyter. Каждый пользователь является членом группы jupyter. Однако, если один пользователь создает файл в общей папке, войдя в веб-приложение со своей учетной записью, разрешения устанавливаются на 644. Поэтому никакой другой пользователь не может редактировать файл.

Я попытался установить umask в 000 в файлах /etc/profiles и ~/.bashrc для каждого пользователя. Однако jupyter, похоже, игнорирует это. Есть ли возможность настроить jupyter для создания новых файлов с правами g+w по умолчанию? Я хотел бы избежать настройки списков контроля доступа с помощью setfacl на уровне файловой системы, потому что для этого требуются пользовательские флаги в файле /etc/fstab.


person Rudi    schedule 15.02.2016    source источник
comment
Отличный вопрос! Вам удалось ее решить? Что произойдет, если два разных пользователя попытаются отредактировать один и тот же файл одновременно?   -  person Dror    schedule 16.11.2016
comment
Есть ли у вас программный способ добавить всех вновь созданных пользователей jupyterhub в одну и ту же группу UNIX? Я не могу найти это предварительное условие, которое вы принесли   -  person steps    schedule 06.05.2020


Ответы (1)


  1. Установите группу (например, jupyter в вашем случае) в общую папку chgrp jupyter /opt/shared
  2. Разрешить группе запись в этот каталог + сделать группу закрепленной (новые файлы создаются с этой группой, а не с основной группой пользователя) chmod g+ws /opt/shared
  3. Для каждого пользователя создайте ~/.jupyter/jupyter_notebook_config.py

Со следующим содержанием:

  import os
  os.umask(0o002)

Вновь созданные файлы будут доступны для записи группой.

person Marian Schubert    schedule 12.02.2018
comment
Если вы не хотите создавать файл конфигурации для каждого пользователя, вы создаете/используете /etc/jupyter/jupyter_notebook_config.py, который применяется ко всем пользователям Jupyterhub. - person J.T; 19.02.2018
comment
Это работает, но это должно быть os.umask(0x002), то есть «x», а не «o». - person Enfors; 17.12.2018
comment
@Enfors: Нет, umasks обычно задаются в восьмеричном, а не в шестнадцатеричном формате. Это не имеет значения для рассматриваемого значения (0o002 и 0x002 оба просто 2), но это будет иметь значение, когда вы попытаетесь установить 0x022 вместо 0o022. - person Pascal; 14.02.2019