2011-01-21 35 views
4

我這是不以root運行,我正在開發方面的應用Python的服務器。但是有一些應用程序功能需要訪問RAW套接字,這意味着root權限。Python的遠程過程調用(沒有遙控部分)

很顯然,我不想運行主服務器作爲根,所以我的解決方案是創建以root身份運行提供防護訪問所述功能的守護進程或命令行腳本。

不過,我想拋開標準輸入/輸出通信,並使用互動的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 

是這樣可能什麼?

+0

我不知道任何事情預先編寫的,但我認爲這將是很容易使用像ZMQ的通信層執行,因爲周圍的請求的抽象/答覆通道。 – 2011-01-21 18:23:18

回答

3

按照我的意見,我很感興趣,看看它是否是可能的,所以我在把這個在一起了個去: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()