Вопрос: Как я могу удалить привилегии и все еще очистить мой файл pid в / var / run?


У меня есть демон foo, Мой сценарий инициализации /etc/init.d/foo начинает foo демон и хранит его pidfile в /var/run/foo.pid, который, кажется, является стандартным местом. Потому как /etc/init.d/foo должен выполняться как root, у него нет проблем с созданием и удалением pidfiles в /var/run,

foo daemon - действительно программа /usr/sbin/foo который должен быть вызван как root bu скрипт инициализации, но затем сразу же отбрасывает свои привилегии в непривилегированный foo пользователь. Тем не менее, я также хочу, чтобы это /usr/sbin/foo чтобы удалить его pidfile, когда он выйдет из-за критической ошибки. Но поскольку он уже утратил свои привилегии, у него больше нет возможности удалять файлы из /var/run каталог.

Мой нынешний подход - использовать seteuid вместо setuid отказаться от моих привилегий, а затем повторно установить привилегии непосредственно перед выходом, чтобы я мог правильно удалить pidfile из /var/run, Тем не менее, я столкнулся со многими и многими проблемами с различными библиотеками и внешними программами, которые сжигаются при вызове с другим euid, чем uid.

Есть ли другой способ сделать это? Я полагаю, что другой вариант состоит в том, чтобы просто поместить мой pidfile в каталог, который доступен для записи как корневым, так и foo пользователи. Но все наши другие pidfiles находятся в /var/run, включая pidfiles другими программами, которые работают как непривилегированные пользователи, поэтому я хотел бы foo.pid файл там также.

Есть ли способ сделать это, кроме использования seteuid?


4
2017-11-03 14:03


Источник




Ответы:


Не помещайте файл PID в /var/run/foo.pid, поместите его в /var/run/foo/foo.pid и имеют /var/run/foo принадлежащий пользователю foo и группа foo, Таким образом вы можете удалить файл pid перед выходом, и вам не нужно повышать уровень привилегий.

Обратите внимание, однако, что это плохая практика безопасности, так как позволяющая вашему непривилегированному приложению калечить с его файлом откроет дыру в безопасности: представьте, что ваше приложение захвачено (в конце концов, что было причиной отказа от прав, если не предвидеть, что приложение может быть атакованным?) - теперь злоумышленник обновляет файл pid и помещает, скажем, номер pid sshd. Теперь, когда скрипты всей системы (работающие от имени root) будут пытаться остановить ваше приложение с помощью этого pid-файла, они будут отключать sshd вместо этого. Это всего лишь пример, есть больше способов злоупотреблять вашей системой. В целом, файл pid должен быть создан до сброс привилегий и очистка файлов pid должны выполняться общесистемными скриптами. - Хлебников Дмитрий Дмитриевич

Еще лучше было бы переключиться на систему init, такую ​​как systemd или Upstart, которая не требует файлов PID для управления службами.


7
2017-11-03 14:07



Это хорошая идея, и я сделаю это, если понадобится, но что делают другие демоны, чтобы поместить их pidfiles в / var / run? Они просто используют seteuid и не имеют проблем, потому что они используют разные программы и библиотеки? - Eli Courtwright
Либо они не отказывают в привилегиях, либо не очищают файл PID из непривилегированного процесса. - jcollie


Перед запуском вашего демона вы можете разблокировать новый процесс. Родительский процесс остается с привилегированным пользователем root, Дочерний процесс снижает свои привилегии до foo пользователь. Этот процесс действительно работает с реальным демоном.

Родительский процесс создаст файл PID после разветвления его дочернего элемента и удалит его, когда его дочерний элемент завершится.


2
2017-11-03 14:19





Заглядывая в мою систему Ubuntu, я вижу, что некоторое установленное программное обеспечение создало каталоги в / var / run, принадлежащие пользователю без полномочий root, например, jcollie.

Другим вариантом является наличие pidfile, принадлежащего пользователю без полномочий root, и нуль файла вместо его удаления.


2
2017-11-03 14:24



Интересно; Я не думал обнулить его, а не удалять. Однако, я думаю, я не должен думать о создании подкаталога, если это делают и другие программы. - Eli Courtwright