2010-01-27 9 views
15

Estoy escribiendo un script bash que planeo ejecutar a través de cron. En este guión, quiero ejecutar un comando contra una base de datos MySQL, algo como esto:¿Cómo puedo ocultar una contraseña/nombre de usuario utilizado en un script bash para acceder a MySQL?

$ mysql -u username -ppassword -e 'show databases;' 

Para mayor claridad y aquellos que no están familiarizados con MySQL, el interruptor "-u" acepta el nombre de usuario para acceder a la base de datos y la "-p" es para contraseña (espacio omitido a propósito).

Estoy buscando una buena manera de mantener el nombre de usuario/contraseña a mano en el guión, pero de una manera que también mantendrá esta información segura de miradas indiscretas. He visto las estrategias que requieren lo siguiente:

  1. Mantener la contraseña en un archivo: pword.txt
  2. chmod 700 pword.txt (eliminar los permisos para todos, excepto el propietario del archivo" pword.txt
  3. gato en una variable en el script cuando sea necesario para el inicio de sesión.

pero no siento que esto es muy seguro ya sea (algo acerca de mantener las contraseñas en el claro que me hace mareado).

Entonces, ¿cómo s ¿Debo proteger la contraseña que se utilizará en un script automatizado en Linux?

Respuesta

5

Una forma de ocultar la contraseña es ponerla en options file. Esto generalmente se encuentra en ~/.my.cnf en sistemas UNIX/Linux.He aquí un ejemplo simple que muestra usuario y contraseña:

[client] 
user=aj 
password=mysillypassword 
+0

Esto al menos mantendrá la información en una ubicación (aunque en el claro). ¿El archivo de opción se lee cuando la llamada a mysql se realiza en un script ejecutado por cron? – Steven

+0

@shambleh, en mi entorno lo hace. Estoy en Debian Etch (4.0). –

5

La única manera verdaderamente segura de proteger su contraseña es encriptarla. Pero luego tiene el problema de proteger la clave de cifrado. Este problema es tortugas todo el camino hacia abajo.

Cuando las buenas personas que crean OpenSsh abordaron este problema, proporcionaron una herramienta llamada ssh-agent que conservará sus credenciales y le permitirá usarlas para conectarse a un servidor cuando lo necesite. Pero incluso ssh-agent tiene un socket con nombre en el sistema de archivos, y cualquiera que pueda obtener acceso a ese socket puede actuar usando sus credenciales.

creo que las dos únicas alternativas son

  • tener una persona escriba una contraseña.

  • Confíe en el sistema de archivos.

Confío solo en un sistema de archivos local, no remoto. Pero yo confiaría en eso.

La seguridad es un infierno.

+0

la confianza del sistema de archivos = confiar al administrador del sistema que gestiona el servidor @AJ –

+1

: Por supuesto. Si no confía en su administrador de sistemas, también puede darse por vencido (o separarse). Incluso un sistema de archivos encriptado no es mucha protección contra un administrador de sistemas malicioso que tiene acceso interno. –

-2

Estoy de acuerdo con Norman en que debe hacer que alguien escriba la contraseña. Si solo proporciona el indicador -p sin una contraseña de acompañamiento, se lo solicitará al usuario.

+4

Ningún usuario debe ingresar la contraseña cuando se trata de un trabajo CRON. –

0

Consulte el doc for some guidelines. un paso adicional que puede tomar es restringir el uso del comando ps para usuarios normales, si tienen el permiso para acceder al servidor.

Cuestiones relacionadas