Estoy utilizando el paquete Pyro para crear un demonio que, al iniciarse, solicitará una contraseña, y luego el demonio almacenará esa contraseña mientras se ejecute. Luego, otros scripts realizarán una conexión Pyro con este daemon y ejecutarán métodos desde el daemon, ninguno de los cuales revela o tiene acceso a la contraseña:
my_daemon.py :
import getpass
import Pyro.core
password = getpass.getpass()
class TestDaemon(Pyro.core.ObjBase):
def __init__(self):
Pyro.core.ObjBase.__init__(self)
def do_some_stuff(self):
return "I am a method which would do some stuff, utilizing password \"{0}\" which is only accessible from this daemon.".format(password)
Pyro.core.initServer()
daemon=Pyro.core.Daemon()
uri=daemon.connect(TestDaemon(), "TestDaemon")
daemon.requestLoop()
driver.py :
import Pyro.core
my_daemon = Pyro.core.getProxyForURI("PYROLOC://localhost:7766/TestDaemon")
print my_daemon.do_some_stuff()
# note: the password variable in the daemon is inaccessible from here.
Me gustaría recibir consejos sobre qué tan seguro es esto y qué pasos puedo tomar para aumentar la seguridad. Sé, por ejemplo, que esto no es 100% seguro, si alguien pudiera descargar la memoria, la contraseña probablemente sería accesible de esa manera. Ese es un desafortunado con el que estoy dispuesto a vivir. ¿Qué más?
El patrón de "almacenamiento-contraseña-en-memoria-vía-demonio" no es algo de lo que pueda desviarme. Este enfoque fue decidido por el equipo en su conjunto (en lugar de poner la contraseña en un archivo de texto de solo lectura de raíz, por ejemplo). Entonces, no es una cuestión de "qué alternativas tengo", y más bien es una cuestión de "¿qué herramientas puedo usar para realizar esta tarea en particular de la forma más sencilla y fácil de mantener el código sin sacrificar demasiada seguridad?"