ruby-on-rails - software - ruby on rails website
¿Cómo se asegura database.yml? (5)
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 al despliegue en mi receta de 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ó.
- ¿Es esto suficiente para bloquearlo? Si no, ¿qué más haces?
- ¿Alguien está encriptando sus archivos database.yml?
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 administración de parámetros de configuración de la base de datos para aplicaciones de Ruby on Rails. Proporciona un mecanismo simple para separar los atributos de configuración de la base de datos del código fuente de la aplicación para que no haya tentación de verificar las contraseñas en el sistema de control de versiones. Y centraliza los parámetros para un solo servidor, de modo que puedan compartirse fácilmente entre múltiples aplicaciones y ser actualizados fácilmente por un solo administrador.
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: ¿la aplicación web tiene 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.
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 %>
Funciona un placer
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.
También querrá asegurarse de que su sistema SSH esté bien protegido para evitar que las personas inicien sesión como su bot de Capistrano. Sugeriría restringir el acceso a los pares de claves protegidos por contraseña.
Cifrar el archivo .yml en el servidor es inútil, ya que tienes que darle al bot la clave, que se almacenará. . . en el mismo servidor Cifrarlo en su máquina es probablemente una buena idea. Capistrano puede descifrarlo antes de enviarlo.