У меня есть пользовательский вопи, под которым запускается служба 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=
может использоваться для указания другого пользователя.Для пользовательских служб любого другого пользователя переключение идентификатора пользователя не разрешено, поэтому единственной допустимой настройкой является тот же пользователь, с которым работает диспетчер служб пользователя. Если группа не задана, используется группа пользователя по умолчанию. Этот параметр не влияет на команды, в командной строке которых стоит префикс «+».