systemd: проблема с правами доступа с mkdir и ExecStartPre

Обновленный:

Если список пакета добавляется в FILE1, и Вы хотите удалить всех их затем:

#!/bin/sh
for i in \`cat $1`
do
       dpkg -${2} $i
done

Теперь сохраните этот файл как script.sh и выполните его с двумя параметрами i. Название рассматриваемого файла ii. "r" для удаления и "i" для установки

37
29.09.2016, 17:46
3 ответа

Это не ответ, который объясняет или исправляет проблему разрешений, но я думаю, что вы должны просто использовать опцию Systemds Runtimedirectory. Цитируя страницу человек :

RuntimeDirectory=, RuntimeDirectoryMode=
       Takes a list of directory names. If set, one or more directories by
       the specified names will be created below /run (for system
       services) or below $XDG_RUNTIME_DIR (for user services) when the
       unit is started, and removed when the unit is stopped. The
       directories will have the access mode specified in
       RuntimeDirectoryMode=, and will be owned by the user and group
       specified in User= and Group=. Use this to manage one or more
       runtime directories of the unit and bind their lifetime to the
       daemon runtime. The specified directory names must be relative, and
       may not include a "/", i.e. must refer to simple directories to
       create or remove. This is particularly useful for unprivileged
       daemons that cannot create runtime directories in /run due to lack
       of privileges, and to make sure the runtime directory is cleaned up
       automatically after use. For runtime directories that require more
       complex or different configuration or lifetime guarantees, please
       consider using tmpfiles.d(5).

Так что все, что вам нужно сделать, это изменить свой сервисный файл на:

[Unit]
Description=control FOO daemon
After=syslog.target network.target

[Service]
Type=forking
User=FOOd
Group=FOO
RuntimeDirectory=FOOd
RuntimeDirectoryMode=$some-mode
ExecStart=/usr/local/bin/FOOd -P /run/FOOd/FOOd.pid
PIDFile=/run/FOOd/FOOd.pid

[Install]
WantedBy=multi-user.target
29
27.01.2020, 19:36

Во время установки Windows / Linux с EFI установщик устанавливает файл запуска на специальный раздел на диске. Этот раздел EFI обычно устанавливается в / Boot / EFI в Linux. Раздел EFI (см. Также http://en.wikipedia.org/wiki/efi_system_partition ) - это жирный раздел, содержащий загрузочную подсистему ОС, например, / Defi/boot/bootx64.efi .

Настройки EFI в NVRAM прочитаются BIOS при загрузке и содержат указатели к файлам в этом разделе. Это действует как менеджер загрузки с различными вариантами, как Grub (по себе иногда называется сам Grub). Поэтому OS добавит запись в EFI NVRAM для себя, который будет указывать на его файлы на раздел EFI, например, EFI / Ubuntu / grubx64.efi . Диспетчер загрузки EFI может быть настроен под Linux с помощью команды Efibootmgr или в вашей настройке BIOS. У обоих вы также можете установить загрузки по умолчанию. Манипулирование этим записями может быть сложнее с включенной опцией BIOS «Безопасная загрузка».

В вашем случае будет неверные записи в загрузке EFI Manager (область NVRAM) после удаления жесткого диска. Тем не менее, ваша новая ОС установит (и, скорее всего, установит по умолчанию) его вновь установленная опция в Boot Manager EFI.

-121--100549-

Вам необходимо добавить

PermissionsStartOnly=true

на [Service] . Ваш пользователь Food , конечно, не разрешен для создания каталога в / var / Run . Чтобы процитировать страницу человека:

принимает булевой аргумент. Если правда, выполнение, связанное с разрешениями Параметры, как настроен с пользователем = и аналогичными вариантами (см. systemd.exec (5) для получения дополнительной информации), применяются только к процесс начался с execstart =, а не различным другим Execstartpre =, execstartpost =, execreload =, execstop =, а также Execstoppost = команды. Если false, настройка применяется ко всем Настроенные команды так же. По умолчанию на ложь.

57
27.01.2020, 19:36

Добавьте +перед командой, которую вы хотите запустить с полными привилегиями.

Например:

ExecStartPre=+/bin/mkdir test

См. раздел «Специальные исполняемые префиксы» в https://www.freedesktop.org/software/systemd/man/systemd.service.html#ExecStart=

.
12
27.01.2020, 19:36

Теги

Похожие вопросы