2013-06-03 3 views
7

Мой вопрос связан с this question, но рассматриваемые процессы выполняются cron и пользователями без полномочий root. Таким образом, многие пользователи на самом деле не имеют домашних дисков (или их домашние директории указывают на /usr/share/package_name, что не является идеальным местом для файла PID).Предпочтительное место для PID-файла системного демона запускается как пользователь без полномочий root

Хранение в /var/run проблематично, потому что этот каталог не доступен для записи, кроме как с помощью root.

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

Я могу организовать сценарий запуска для создания каталога в /var/run, который принадлежит соответствующему пользователю (я не могу сделать это при времени установки пакета, так как /var часто монтируется как tmpfs, так что он не является постоянным).

Какая у вас лучшая практика?

+0

У меня есть идея. Что делать, если вы используете/tmp, но ищете pidfile, который называется 'yourdaemon.pid.UNIQUE_KEY' и принадлежит пользователю демона? – hek2mgl

+0

@ hek2mgl: 'UNIQUE_KEY' должен быть случайным, но это имеет некоторые возможности. Это делает обнаружение PID-файла немного раздражающим, поскольку демонам необходимо прочитать все файлы в '/ tmp/*' и сравнить с ожидаемым шаблоном и собственностью, но, похоже, он должен быть безопасным. – Flimzy

+0

@ hek2mgl: Если вы хотите превратить это в ответ, я буду его голосовать. И в этот момент я бы сказал, что это лидирует для принятия. – Flimzy

ответ

2

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

Я искал googled и обнаружил, что регистрация каждого пользователя-демона как службы dbus - изящное решение. dbus может убедиться, что служба работает только один раз. нет необходимости в pidfile.

Другое решение (мой текущий) будет создан файл PID в папку:

$HOME/.yourdaemon/pid 

После вашего комментария я понял, что вы не можете писать дома. Я хотел бы предложить, чтобы посмотреть в DBus

Update

У меня есть идея. Что делать, если вы используете/tmp, но ищете pidfile, который называется yourdaemon.pid.UNIQUE_KEY и принадлежит пользователю демона? Это должно работать нормально.

UNIQUE_KEY должно быть случайным сгенерированным (предпочтительнее использовать tempnam, поскольку оно является доказательством состояния гонки).

+0

Ваше предложение $ HOME не работает в моем случае по причинам, которые я объяснил в вопросе. А именно, нет $ HOME, или $ HOME - это место, недоступное для записи. Однако я посмотрю на dbus. – Flimzy

+4

Хотя ваше совершенно детское поведение, в том числе последовательное голосование по голосу и серийное закрытие моих других вопросов, соблазняет меня иначе, я не хочу наклоняться к вашему уровню. Я использую случайное имя PID-файла в моем коде, поэтому вы получаете кредит на прием. – Flimzy

+0

Это не ребячество. Иногда это лучший способ вернуть кого-то в Интернет. Если бы у меня был номер телефона, я бы позвонил тебе. И да, конечно, вы используете мою идею, потому что это хорошо (и результат бессонной ночи) :) hehe – hek2mgl

-2

@Flimzy - Что такое проблема безопасности?

Несомненно, если кто-то имеет доступ к машине, они могут использовать системную команду ps? Затем они получают идентификатор процесса из уст лошадей.

Таким образом, ответ заключается в том, чтобы размещать его там, где вы хотите, и сосредоточиться на других проблемах безопасности. Т.е. как этот человек получает доступ к вашей машине?

+2

Как минимум, злоумышленник с доступом для записи в/tmp может обмануть скрипт, считая его уже запущенным. В зависимости от того, как этот скрипт взаимодействует с его PID-файлом, возможно, что-то более опасное может быть выполнено. – Flimzy

+2

Конечно, я мог бы проверить, что мой скрипт проверяет право собственности и разрешения его файла PID как гарантию того, что кто-то не сделал что-то противное ... Но тогда ему нужно иметь альтернативное место для записи нового PID-файла. ... – Flimzy

+0

@Flimzy - я бы сказал вам, если атташера может писать в '/ tmp', тогда их знание идентификатора процесса демона очень мало в списке. (т. е. как, черт возьми, они могут получить доступ к вашей машине) –

Смежные вопросы