Obviamente, no deseamos hardcode la contraseña del texto plano en cada secuencia de comandos. Esto dificultaría la ciclación de la contraseña, ya que habría que cambiar una tonelada de scripts además de la contraseña en texto plano en primer lugar.¿Cuáles son los enfoques seguros para manejar un script que requiere una contraseña de base de datos (MySQL)?
Si las secuencias de comandos toman la contraseña como parámetro, entonces tenemos que preocuparnos de modificar la salida 'ps' para que no se muestre el valor del argumento de la contraseña. También tendríamos que preocuparnos de que el comando se grabe en el historial de shell. Esto se puede manejar potencialmente a través de HISTIGNORE/HISTCONTROL en bash, pero hay otros shells en uso con control de historial diferente y menos flexible (por ejemplo, zsh). También podríamos usar una variable de entorno específica de línea de comando (FOO = bar ./script), y mientras que 'FOO = bar' no aparecerá en 'ps', todavía está, por defecto, registrado en el historial de shell. Además, algunos sistemas exponen los entornos de proceso de otros usuarios (a través de 'ps') de todos modos.
Se puede usar un archivo de contraseña (configuración) que simplemente almacena la contraseña de texto sin formato. Este archivo podría ser propiedad/autorizado para reforzar su acceso. Pero, al final del día, todavía tienes una contraseña en texto plano.
La solicitud también es una opción, pero esto tiende a ser menos conveniente (aún posible a través de esperar, por ejemplo, sin embargo) y complica la falta de interactividad si el script así lo requiere.
Se podría usar cifrado de algunos sabores, pero todavía tenemos un problema similar al tratar con la clave de descifrado.
¿Debo seguir con uno de los anteriores de todos modos? ¿Las otras opciones pueden ser superiores? ¿Cómo manejan las personas esta situación de manera segura?
El objetivo general aquí es que un atacante no debería ser capaz de comprender el servidor de la base de datos si el atacante llega de alguna manera a un sistema que hace uso del servidor de la base de datos. Por ejemplo, un ataque no debería ser capaz de encontrar la contraseña en algún lugar, no debería ser capaz de observar el sistema ('ps') para descubrirlo, y no debería ser capaz de "mirar atrás en el tiempo". (historial de shell) para encontrarlo.
Estoy perfeccionado sabiendo que hay millones de escenarios (kmem, páginas intercambiadas, etc. etc.) y que la mayoría de las apuestas están desactivadas si el atacante obtiene acceso raíz o físico y que nada va a ser 100% seguro Estoy realmente buscando el mejor enfoque dentro del motivo. :-)
Sí, hacen eso . +1. – MarkR