В Ubuntu:
touch: cannot touch `/var/run/test.pid': Permission denied
Я запускаю start-stop-daemon и хочу записать файл PID в / var / run start-stop-daemon запускается от имени my-program-user
/var/run setting is drwxr-xr-x 9 root root
Мне нравится избегать включения my-program-user в корневую группу.
По умолчанию вы можете писать в / var / run только как пользователь с эффективным идентификатором пользователя 0 (то есть как root). На это есть веские причины, поэтому, что бы вы ни делали, не переходите и не изменяйте разрешения / var / run ... Вместо этого, как root, создайте каталог под / var / run:
# mkdir /var/run/mydaemon
Затем измените его владельца на пользователя / группу, под которой вы хотите запустить свой процесс:
# chown myuser:myuser /var/run/mydaemon
Теперь укажите использовать / var / run / mydaemon, а не / var / run.
Вы всегда можете проверить это, запустив тест от имени рассматриваемого пользователя.
mkdir /var/run/mydaemon
chown myuser:myuser /var/run/mydaemon
это не сработает, так как оно будет потеряно при следующей перезагрузке (/var/run
это tmpfs в Ubuntu).
Единственное возможное решение - запустить mkdir и chmod как часть сценариев запуска.
Вы можете попробовать это. Создайте каталог / var / run / test /, а затем измените разрешение этого каталога тому же пользователю, что и ваша программа. "chown / var / run / test /". Теперь в вашем приложении измените расположение файла PID на /var/run/test/test.pid. Это должно заставить вас работать.
А как насчет использования «липкого» бита в / var / run?
chmod + t / var / run?
Возможно, испортили какие-то другие приложения, но, похоже, это было бы другое решение.
Однако я пока буду создавать отдельную папку / var / run.
Записи в /etc/permissions
постоянны. Сделайте там запись, чтобы сделать права собственности и разрешения на каталог постоянными.
Чтобы не помещать вашу программу-пользователя в корневую группу, разрешите другим доступ на запись:
# chmod 757