какое разрешение на запись 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.