Удаленный вызов процедур Python (без удаленной части)

У меня есть сервер Python, который не работает от имени root, который выходит за рамки приложения, которое я разрабатываю. Однако есть некоторые функции приложения, которые требуют доступа к сокетам RAW, что означает привилегии root.

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

Однако я хочу отложить связь stdin / stdout и использовать стиль взаимодействия RPC, такой как Pyro . Но это предоставляет интерфейс RPC всем, у кого есть сетевой доступ к машине, тогда как я знаю, что процесс, вызывающий методы RPC, будет другим процессом на том же компьютере.

Разве нет какого-то стандарта вызова процедуры межпроцессного процесса, который можно использовать в аналогичной (только для локальной машины)? Я полагаю, что сервер делает что-то вроде этого:

# Server not running as root pythonically, returned, values = other_process_running_as_root.some_method() 

И процесс, выполняемый как root, выставляет метод:

 # Daemon running as root @expose_this_method def some_method(): # Play with RAW sockets return pythonically, returned, values 

Возможно ли подобное?

3 Solutions collect form web for “Удаленный вызов процедур Python (без удаленной части)”

Следуя моему замечанию, мне было интересно узнать, возможно ли это, поэтому я решил собрать это вместе: https://github.com/takowl/ZeroRPC

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

Сервер:

 rpcserver = zerorpc.Server("ipc://myrpc.ipc") @rpcserver.expose def product(a, b): return a * b rpcserver.run() 

Клиент:

 rpcclient = zerorpc.Client("ipc://myrpc.ipc") print(rpcclient.product(5, 7)) rpcclient._stopserver() 

Это непростая задача. Вы должны иметь возможность получить то, что хотите от любого механизма RPC, который может использовать сокеты Unix, или использовать обычные сокеты TCP, но только принимать соединения из интерфейса loopback (слушать 127.0.0.1).

Многопроцессорная библиотека в стандартной библиотеке Python также поддерживает локальный IPC. http://docs.python.org/library/multiprocessing.html#module-multiprocessing.connection

Pyro имеет ряд функций безопасности, специально предназначенных для ограничения доступа к интерфейсу RPC. Это слишком большая работа, чтобы использовать ее?

 
Interesting Posts for Van-Lav

Пересечение списка, содержащего dicts и отображающего его определенным образом

python: определение имени / идентификатора устройства на последовательном COM

Обзор памяти Cython в Windows

Данные доступа Python в подкаталоге Package

Использование Tweepy для прослушивания потока и поиска твитов. Как остановить предыдущий поиск и прослушать только новый поток?

python – нос не обнаруживает тесты уровня пакета в Django

Производный класс не запущенный код в _init_

Python: генерировать случайное число между x и y, которое кратно 5

Python при поддержке JS при интеграции с внешним интерфейсом

Почему мой текстовый файл перезаписывает данные на нем?

Правильно отформатированный пример для доступа к электронной почте для Python iMAP?

Неявное уравнение и майяви

Изменение глобальной переменной внутри функции

Suds игнорирует настройки прокси

Как создать PDF-файлы в Python

Python - лучший язык программирования в мире.