¿Cómo se asegura database.yml?


50

Dentro de las aplicaciones de Ruby on Rails database.yml es un archivo de texto plano que almacena las credenciales de la base de datos.

Cuando despliegue mis aplicaciones de Rails tengo una devolución de llamada posterior a la implementación en mi receta Capistrano que crea un enlace simbólico dentro del directorio/config de la aplicación al archivo database.yml. El archivo en sí se almacena en un directorio separado que está fuera de la estructura de directorio estándar de Capistrano/releases. Me chmod 400 el archivo por lo que solo es legible por el usuario que lo creó.

  • ¿Esto es suficiente para bloquearlo? Si no, ¿qué más haces?
  • ¿Alguien está encriptando sus archivos database.yml?
12

también querrá asegurarse de que su sistema SSH está bien asegurado para evitar que la gente de la tala en como tu bot Capistrano. Sugeriría restringir el acceso a los pares de claves protegidos por contraseña.

Encriptar el archivo .yml en el servidor es inútil ya que tiene que darle al bot la clave, que se almacenaría. . . en el mismo servidor Cifrarlo en su máquina es probablemente una buena idea. Capistrano puede descifrarlo antes de enviarlo.


1

Si está muy preocupado por la seguridad del archivo yml, tengo que preguntar: ¿Está almacenado en su control de versión? Si es así, ese es otro punto donde un atacante puede obtenerlo. Si está realizando el proceso de pago/check-in en lugar de SSL, alguien podría interceptarlo.

Además, con algún control de versión (svn, por ejemplo), incluso si lo quita, todavía está allí en el historial. Entonces, incluso si lo eliminó en algún momento del pasado, sigue siendo una buena idea cambiar las contraseñas.

  0

Nunca guardo database.yml en mis repositorios de control de fuente. 29 oct. 082008-10-29 21:05:07

  0

Cualquiera que almacene secretos en archivos y los cargue al control de versiones debe recibir una palmada. 06 oct. 162016-10-06 00:14:33


3

Incluso si protege el archivo database.yml, las personas aún pueden escribir que usa las mismas credenciales si pueden cambiar el código de su aplicación.

Otra forma de ver esto es: ¿tiene la aplicación web mucho acceso a la base de datos? Si es cierto, baje los permisos. Deles los permisos suficientes a la aplicación. De esta forma, un atacante solo puede hacer lo que la aplicación web podría hacer.


38

La forma en que he abordado esto es poner la contraseña de la base de datos en un archivo con permisos de lectura solo para el usuario con el que ejecuto mi aplicación. Luego, en database.yml utilizo ERB para leer el archivo:

production: 
    adapter: mysql 
    database: my_db 
    username: db_user 
    password: <%= begin IO.read("/home/my_deploy_user/.db") rescue "" end %> 

trabaja un convite.

+2

¿Cómo mejora esto la configuración de los permisos de lectura para el usuario de la aplicación directamente en database.yml? 16 jun. 092009-06-16 20:36:42

+2

Tomé este enfoque porque, a) la contraseña no está en database.yml y, por lo tanto, no está comprometida con el control de fuente, yb) además de poner la contraseña en un archivo solo en el servidor de producción, no había otro trabajo requerido - sin tareas de Capistrano, sin archivos fuera de la estructura principal, etc. 17 jun. 092009-06-17 10:39:33

+1

Creo que la base de datos.yml no debería estar en el repositorio, en primer lugar, porque cada desarrollador debería ser capaz de definir su propio entorno de trabajo. 08 oct. 092009-10-08 04:07:07

+1

Si cada desarrollador desarrolla con una base de datos sqlite de aplicación local y no un servidor de base de datos, y si solo hay una implementación de producción canónica (en múltiples servidores configurados de forma idéntica) y no despliegues múltiples de producción, entonces está bien mantener ' config/database.yml' en el control de fuente. Esta es la forma predeterminada de hacerlo en Rails. Si su configuración es más complicada que eso, entonces no podrá mantener 'config/database.yml' en control de fuente. 09 ago. 102010-08-09 20:44:40


10

Eche un vistazo a esta solución github: https://github.com/NUBIC/bcdatabase. bcdatabase proporciona una tienda encriptada donde las contraseñas pueden mantenerse separadas de los archivos yaml.

bcdatabase

bcdatabase es una biblioteca y utilidad que proporciona configuración de base de datos gestión de parámetros para Ruby on Rails aplicaciones. Se proporciona un mecanismo simple para separar la base de datos atributos de configuración desde el código fuente aplicación para que no hay tentación para comprobar contraseñas en el control de versiones sistema.Y centraliza los parámetros para un único servidor, de manera que se pueden compartir fácilmente entre las aplicaciones múltiples y fácilmente actualizadas por un único administrador.

+3

Una actualización: bcdatabase ahora vive en https://github.com/NUBIC/bcdatabase. 26 sep. 112011-09-26 16:09:51

  0

Esto parece un proyecto muerto ahora. ¿Hay algún reemplazo o solución alternativa que se mantenga activamente? 14 oct. 162016-10-14 16:23:04

  0

@Streamline: el último compromiso fue 2014, no hace tanto tiempo. 15 oct. 162016-10-15 12:15:54