Intereting Posts
Является ли xfs_fsr безопасным для прерывания? Как создавать политики SELinux на основе журналов? Как создать локальную копию полного раздела веб-сайта из OSX с помощью wget? Что значит установить «название значка» терминала? не может прочитать ключ «net.ipv6.conf.all.stable_secret» в sysctl? Есть ли способ иметь прошлые журналы в течение 1-2 лет в dpkg? Список процессов: / bin / sh -e / proc / self / fd / 11 Обработка ввода для команды чтения как самой команды insserv: предупреждение: сценарий «K07smfpd» отсутствует метки LSB и переопределения urxvt: прокрутка только одной строки Diff: сравнивать только если файл существует, а не содержимое yum не работает на RHEL 6.3 Создание / удаление символической ссылки при подключении / отключении устройства USB Какой пользователь должен запускать apache и PHP? Какие разрешения должны иметь / var / www файлы? есть ли ярлык vim или я могу создать его для 'tabe other_file'

Смущает записи ExecStartPre в файле systemd unit

У меня есть служба systemd, которая должна создавать каталог в /run , но в противном случае выполняется как пользователь без полномочий root. Из примера блога я получил следующее решение:

 [Unit] Description=Startup Thing [Service] Type=oneshot ExecStart=/usr/bin/python3 -u /opt/thing/doStartup WorkingDirectory=/opt/thing StandardOutput=journal User=thingUser # Make sure the /run/thing directory exists PermissionsStartOnly=true ExecStartPre=-/bin/mkdir -p /run/thing ExecStartPre=/bin/chmod -R 777 /run/thing [Install] WantedBy=multi-user.target 

Магия находится в 3 строках, следующих за комментарием. По-видимому, ExecStartPre будет запускаться как root таким образом, но ExecStart будет работать как указанный пользователь.

Это привело к 3-мя вопросам:

  1. Что делает перед do /bin/mkdir ? Я не знаю, почему он там или что он делает.
  2. Когда в файле unit имеется несколько ExecStartPre , они запускаются серийно в том порядке, в котором они находятся в файле устройства? Или какой-то другой метод?
  3. Является ли это на самом деле лучшим методом для достижения моей цели создания созданного каталога запуска, чтобы пользователь, не являющийся пользователем root, мог его использовать?

По любым вопросам, касающимся директив systemd, вы можете использовать man systemd.directives для поиска справочной страницы, которая документирует директиву. В случае ExecStartPre= вы найдете его документированным в man systemd.service .

В документах для ExecStartPre= вы найдете объяснение, что ведущий «-» используется для ExecStartPre= , что для этих команд допускается отказ. В этом случае допускается, если /run/thing уже существует.

В документах также объясняется, что «разрешено несколько командных строк и команды выполняются один за другим последовательно».

Одно из усовершенствований вашего метода предварительного создания каталога не делает его доступным для всего мира, когда вам нужно только его для записи отдельным пользователем. Более ограниченные разрешения будут выполнены с помощью:

  ExecStartPre=-/bin/chown thingUser /run/thing ExecStartPre=-/bin/chmod 700 /run/thing 

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