mysqlclient python mysql linux django passwords

python - mysqlclient django download



Linux/Python: ¿Cómo puedo ocultar información confidencial en un archivo Python, para que los desarrolladores en el entorno no puedan acceder? (4)

Echa un vistazo a las ACL del sistema de archivos, setfacl manpage .

Puede hacer que los archivos cuestionados sean de su propiedad y leídos únicamente por el usuario raíz, pero también permite que cualquier usuario con el código de Django que se esté ejecutando (su nombre de usuario, usuario de apache, etc.) tenga acceso de lectura. Las ACL del sistema de archivos permiten un control de acceso mucho más granular que el propietario / grupo / otros permisos de archivos estándar

Tengo un proyecto Django ejecutándose en un servidor Ubuntu. Hay otros desarrolladores que tienen la capacidad de ingresar al buzón y mirar archivos. Quiero que las credenciales de mysql y las claves de la API de settings.py se separen en un archivo diferente que solo puede ver el usuario root, pero que el proyecto django también puede usar para ejecutarlo.

Mi enfoque anterior era hacer que el archivo de contraseñas solo fuera accesible para root: root con chmod 600 , pero mi settings.py arroja un ImportError cuando intenta importar las variables del archivo de contraseñas. Leí sobre setuid, pero eso no parece muy seguro en absoluto. ¿Cuál es un buen enfoque para lo que estoy tratando de hacer? Gracias.


Colocaría el archivo de contraseña en un directorio con 600 permisos propiedad del usuario de Django. El usuario de Django podría hacer lo que necesita y nadie más podría mirar en el directorio (excepto root y Django)

Otra cosa que podría hacer sería almacenarlo en una base de datos y configurarlo para que el usuario raíz y el usuario de Django en el DB tengan contraseñas únicas, de esa manera solo la persona con esas contraseñas podría acceder a él. La raíz del sistema IE ya no es lo mismo que la raíz de la base de datos.


Esto se discute en la página code.djangoproject.com en code.djangoproject.com . Tienen varias sugerencias tales como

SECRET_KEY = open(os.path.expanduser(''~/.gallery-secret'')).read().strip()

donde .gallery-secret está limitado a ser leído solo por el usuario django (la raíz aún se sale con la .gallery-secret , por supuesto). Prefiero una variable de entorno como MYAPP_OPTIONS=/etc/opt/myapp/ utilizada con os.path.expandvar para que la cuenta de usuario no necesite un directorio de inicio y para que los desarrolladores puedan probar las credenciales fácilmente.


¡Para eso exactamente se creó dj-database-url !

Usando este paquete puede almacenar información de DB en la variable de entorno de su usuario. cualquiera que inicie sesión desde una cuenta diferente no tendrá acceso a los detalles de DB

¿Cómo utilizar?

Configure su base de datos en settings.py desde DATABASE_URL (el valor predeterminado es opcional):

import dj_database_url DATABASES = {''default'': dj_database_url.config(default=''postgres://...'')}

Entonces en tu caparazón

$ export DATABASE_URL="postgress://user:password@host/databasename" $ ./manage.py runserver

Esto ejecutará el servidor con la conexión que usted especificó, si DATABASE_URL no está definido, entonces suponga que la conexión pasó por el parámetro default opcional.

idealmente pondrías

export DATABASE_URL="postgress://user:password@host/databasename"

dentro de su archivo .bashrc dentro de su directorio personal para que solo usted pueda leerlo