2011-01-21 3 views
4

루트로 실행되지 않는 Python 서버가 있습니다. 개발중인 응용 프로그램과 마주하고 있습니다. 그러나 루트 권한을 의미하는 RAW 소켓에 대한 액세스가 필요한 일부 응용 프로그램 기능이 있습니다.Python 원격 프로 시저 호출 (원격 부분 제외)

물론 루트로서 주 서버를 실행하고 싶지 않으므로 내 솔루션은 해당 기능에 대한 보호 된 액세스를 제공하는 루트로 실행되는 데몬 프로세스 또는 명령 줄 스크립트를 만드는 것입니다.

그러나 stdin/stdout 통신을 제외하고 Pyro과 같은 상호 작용 RPC 스타일을 사용하고 싶습니다. 그러나 이것은 RPC 인터페이스를 컴퓨터에 대한 네트워크 액세스 권한을 가진 사람에게 노출시키는 반면 RPC 메서드를 호출하는 프로세스는 동일한 컴퓨터에서 다른 프로세스가된다는 것을 알고 있습니다. 비슷한 (로컬 컴퓨터에만 해당) 방식으로 사용될 수 프로세스 간 프로 시저 호출 표준의 종류

이 아닌가?

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

그리고 방법 노출 루트로 실행 과정 :

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

이 가능한 같은 것을인가를이 같은 서버 일을 뭔가를 상상?

+0

나는 미리 쓰여진 것을 전혀 모르지만, 요청/응답 채널을 추상화 한 zmq와 같은 통신 레이어를 사용하여 구현하는 것이 쉬울 것이라고 생각합니다. –

답변

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() 
0

Pyro는 특별히 RPC 인터페이스에 대한 액세스를 제한하기 위해 a number of security features을가집니다. 이것들은 사용하기에 너무 많은 성능 부담이 있습니까? 내 의견에 따라