Назад | Перейти на главную страницу

процессы модуля systemd игнорируют липкие биты (sgid) в каталогах

У меня есть пользовательский вопи, под которым запускается служба systemd (пользовательский режим). Сервис представляет собой скрипт на Python, который должен записывать файл в общий каталог по пути /usr/local/myfolder

Группа настроена на myfolder является bot и я установил липкий бит, чтобы все файлы, созданные внутри, принадлежали группе bot.

В настоящее время разрешения для моей папки выглядят так

drwxrwsr-x root bot ... myfolder

Пользователь vopi входит в группу bot

Когда я запускаю сценарий вроде python main.py он успешно создает файл под myfolder и у него есть разрешения -rw-rw-r-- vopi bot .... Однако когда я звоню systemctl --user start myservice он пытается создать файл с разрешениями -rw-r--r-- vopi vopi и терпит неудачу (я понял это, временно установив группу vopi к myfolder

Почему мой скрипт, запущенный под модулем systemd, игнорирует липкий бит, установленный в каталоге, и почему разрешения не -rw-rw-r--?

Я пытался установить Group= опция в конфигурации устройства, но она не сработала. Сбой службы с ошибкой: 216 Group

Я установил липкий бит, чтобы все файлы, созданные внутри, принадлежали группе bot.

Это говорит о том, что добавление липкого бита делает права собственности на файлы и разрешения унаследованный из родительской папки. Не в этом цель липких кусочков. Липкий бит - это флаг ограниченного удаления.

В man chmod в Linux описывает как его текущую функцию, так и историю:

Флаг ограниченного удаления или липкий бит - это отдельный бит, интерпретация которого зависит от типа файла. Для каталогов он не позволяет непривилегированным пользователям удалять или переименовывать файл в каталоге, если только они не владеют файлом или каталогом; это называется флаг ограниченного удаления для каталога и обычно находится в каталогах с доступом для записи, таких как /tmp.

Для обычных файлов в некоторых старых системах бит сохраняет текстовое изображение программы на устройстве подкачки, поэтому при запуске она загружается быстрее; это называется липким кусочком.

Ваш 216 Group ошибка возникает из-за того, что systemd.unit в конфигурации нет такой [Unit] Вариант раздела так как Group=. Это systemd.exec (Конфигурация среды выполнения) вариант, принадлежащий [Service] (, [Socket], [Mount], или [Swap]) разделы:

User=, Group=

Задайте пользователя или группу UNIX, от имени которых будут выполняться процессы, соответственно. В качестве аргумента принимает имя отдельного пользователя или группы или числовой идентификатор.

Для системных служб (службы, выполняемые менеджером системных служб, то есть управляемые PID 1) и для пользовательских служб пользователя root (службы, управляемые экземпляром root из systemd --user) по умолчанию root, но User= может использоваться для указания другого пользователя.

Для пользовательских служб любого другого пользователя переключение идентификатора пользователя не разрешено, поэтому единственной допустимой настройкой является тот же пользователь, с которым работает диспетчер служб пользователя. Если группа не задана, используется группа пользователя по умолчанию. Этот параметр не влияет на команды, в командной строке которых стоит префикс «+».