В моем проекте Django мне нужно иметь возможность проверить, является ли хост в локальной сети up , используя пинг ICMP.Я нашел этот SO вопрос , который отвечает, как пинговать что-то в Python, и этот SO вопрос , который ссылается на ресурсы, объясняющие, как использовать файл sodoers.
Параметр *Модель 1009 * A Device
хранит IP-адрес для хоста в локальной сети, и после добавления нового экземпляра Device
в БД (с помощью пользовательского представления, а не администратора) я предусматриваю проверку, чтобы убедиться, чтоустройство отвечает на эхо-запрос, используя AJAX-вызов API, который предоставляет такую возможность. Проблема
Однако (из строки документации библиотеки, предложенной в первом вопросе SO) «Обратите внимание, чтоСообщения ICMP могут отправляться только от процессов, выполняющихся от имени пользователя root. "
Я не хочу запускать Django от имени пользователя root, поскольку это плохая практика.Однако эта часть процесса (отправка и ICMP-пинг) должна выполняться от имени пользователя root.Если в представлении Django я хочу отправить пакет ping для проверки работоспособности хоста, то сам Django должен быть запущен от имени пользователя root, поскольку этот процесс будет вызывать ping.
Solutions
Это решения, которые я могу придумать, и мой вопрос в том, есть ли более эффективные способы выполнения только отдельных частей проекта Django с правами root , отличные от этих:
- Запустите Django от имени пользователя root (пожалуйста, нет!)
- Поместите «запрос ping» в очередь, которую другие процессы - запускаются от имени root - могут периодически проверять и выполнять.Может быть, что-то вроде сельдерей .
Разве нет более простого способа?
Я хочу что-то вроде библиотеки "Django run as root", это возможно?