какое разрешение на запись PID файла в / var / run


51

Ubuntu

touch: не может касаться `/var/run/test.pid ': разрешение отклонено

Я запускаю start-stop-daemon и хотел бы записать PID-файл в / var / run start-stop-daemon, запущенный от имени my-program-user

/ var / run - это корневой каталог drwxr-xr-x 9

Мне нравится избегать помещения my-program-user в корневую группу.

Ответы:


71

По умолчанию вы можете записывать в / var / run только как пользователя с эффективным идентификатором пользователя 0 (т.е. как root). Это по веским причинам, поэтому, что бы вы ни делали, не переходите и не меняйте права доступа к / var / run ... Вместо этого, от имени пользователя root создайте каталог в / var / run:

# mkdir /var/run/mydaemon

Затем измените его владельца на пользователя / группу, под которой вы хотите запустить свой процесс:

# chown myuser:myuser /var/run/mydaemon

Теперь укажите использовать / var / run / mydaemon вместо / var / run.

Вы всегда можете проверить это, выполнив тест от имени пользователя.


5
Это работало нормально для меня, но когда я перезапустил сервер, /var/run/mydaemonкаталог исчез.
— myborobudur

17
Это не полный ответ, / var / run - это tmpfs по умолчанию в Ubuntu. При каждом запуске сервера команды mkdir и chown необходимо перезапускать.
— Тим

1
@ Как насчет редактирования ответа и его завершения?
— Кайзер

Если вы имеете дело с демоном, тогда чистым решением было бы добавить путь / var / run / mydaemon в файл системного модуля, как описано здесь . Более простым решением было бы добавить команды mkdir и chown в скрипт
— init.d

1
Более подробный ответ здесь: superuser.com/a/1127720/71795 неправильный ответ, который кажется очень элегантным, находится здесь: stackoverflow.com/a/5174433 . Резюме: используйте либо /tmpили ~.
— Тим

13
mkdir /var/run/mydaemon
chown myuser:myuser /var/run/mydaemon

это не будет работать, так как будет потеряно при следующей перезагрузке ( /var/runэто tmpfs в Ubuntu).

Единственное возможное решение - запустить mkdir и chmod как часть сценариев запуска.


3

Вы можете попробовать это. Создайте каталог / var / run / test /, а затем измените разрешение этого каталога на того же пользователя, с которым работает ваша программа. msgstr "chown / var / run / test /". Теперь в вашем приложении измените местоположение файла PID на /var/run/test/test.pid. Это должно заставить вещи работать на вас.


2

Как насчет использования «липкого» бита в / var / run?

chmod + t / var / run?

Вероятно, испортят некоторые другие приложения, но, похоже, это было бы другое решение.

Однако сейчас я остановлюсь на создании отдельной папки / var / run.


1

Записи в /etc/permissionsпостоянны. Сделайте запись там, чтобы сделать владение и разрешения для каталога постоянным.


-6

Чтобы не помещать вашу программу-пользователя в корневую группу, разрешите другим доступ на запись:

# chmod 757

3
Никогда не делайте chmod 757 в / var / run! Это может вызвать серьезные проблемы с безопасностью
— Мишель

1
Это ужасная идея. Это может вызвать потенциально серьезные проблемы с безопасностью
— Том О'Коннор

Даже если мы проигнорируем проблему безопасности, chmod 757также будет работать только до следующей перезагрузки. Извините за создание нового ответа, но, похоже, нет возможности ответить на другой комментарий.
— Владимир Николич

@michel, автор никогда не говорил делать chmodдальше /var/run. Автор, возможно, подразумевал это для подкаталога приложения. Не уверен, что вся эта суета.
— Acumenus
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.