¿Cuál es la forma menos insegura de almacenar una contraseña que utiliza un script?

13

Tengo un script Bash que se autentica automáticamente con un servicio utilizando mi nombre de usuario y contraseña. Las credenciales se almacenan actualmente como texto sin formato dentro del script.

¿Qué precauciones debo tomar para almacenar estas credenciales de forma más segura y al mismo tiempo permitir el acceso al script?

Puntos de aclaración:

  • Entiendo que, si está disponible, se deben usar otros métodos de autenticación. Todavía quiero saber qué hacer en caso de que la autenticación de contraseña sea la única opción.
  • No almacenar la contraseña en absoluto no es una respuesta aceptable aquí. Le pregunto sobre el caso en que el script debe tener acceso desatendido a la contraseña.
ændrük
fuente
2
¿No almacenar el código de acceso de las credenciales, tal vez?
Thomas Ward
¿No funcionaría acceder a GNOME Keyring o algo similar?
Firefeather
Quizás si pudiera almacenarlo como un hash criptográfico (como SHA-1), sería bueno.
Anónimo
ROT13 lo oscurecería, pero NO lo aseguraría de ninguna manera.
Anónimo el
@ Anónimo Si la contraseña se almacena como un hash criptográfico, ¿cómo recomienda recuperarla?
ændrük

Respuestas:

8

Que tipo de servicio Ciertos servicios tienen otros métodos para autenticar, por ejemplo, claves SSH para SSH en conjunto con el agente SSH.

Almacenaría la contraseña por separado del script y me aseguraría de que todos los componentes de la ruta tengan los permisos correctos establecidos. Por ejemplo, asegúrese de que en el camino /path/to/file, /, /pathy /path/toson propiedad de un usuario de confianza ( root) y que éstas no se pueden escribir por alguien que no está permitido para ver sus archivos. Finalmente, los permisos recomendados para fileson 600 o 400.

Eso filepodría verse así:

PASSWORD='something that you cannot remember'

En su secuencia de comandos, use el siguiente código para importar la variable:

. /path/to/file

En cuanto a su secuencia de comandos, asegúrese de que no contenga agujeros que puedan permitir a los atacantes ejecutar código en el contexto de la secuencia de comandos (por ejemplo, un entorno no controlado que puede tener un $PATHconjunto de variables arbitrarias o un uso no válido de otros archivos (por ejemplo, obtener un archivo de escritura mundial) .

En cuanto a la protección real de su contraseña, no puede. Debe estar disponible de alguna manera para el otro servicio. Como alternativa, puede encriptar el archivo / script que contiene la contraseña utilizando opensslo gpgdebe ingresar una contraseña antes de desbloquear las credenciales. Esto es especialmente útil si la contraseña de su servicio es difícil de recordar.

Lekensteyn
fuente
14

En lugar de codificar la contraseña en el archivo, almacene la contraseña en un archivo separado y proteja el archivo ( chmod 700o chmod 500) para que solo los usuarios autorizados puedan acceder a ella.

Recupere la contraseña con en cat /dir/to/file/with/.passwordlugar de leer el archivo y almacenar su contenido en una variable.

Rinzwind
fuente
Algunas herramientas incluso tienen la opción de leer la contraseña de un archivo directamente por esta razón, como la --passphrase-fileopción de gpg .
2
... y conviértalo en un archivo .dot (/dir/to/file/with/.password)
knb
2
chmod 400para archivos (solo lectura). Por supuesto, debe proteger los directorios principales (700 o 500, o incluso 100 si es paranoico). Tenga en cuenta que 400 (o 500 para directorios) es suficiente, otros modos (100) pueden considerarse como seguridad a través de la oscuridad , al igual que ocultar el archivo colocando un punto delante del nombre.
Lekensteyn
1

Sé que esta es una vieja pregunta, pero me enfrenté a este problema similar y usé el llavero de Ubuntu para resolverlo. Aquí hay una solución en ubuntu 18.04LTS Abra el terminal Escriba, keyring set {{service}} {{username}} por ejemplo, si está usando esto para el registro de contraseña de la escuela:

keyring set school mohamed

Le registrará para una contraseña ingrese la contraseña. Ahora la contraseña que ingresó está almacenada en el llavero de Ubuntu.

Para obtener esta contraseña, escriba en el terminal:

keyring get school mohamed

para usar esto en el contexto de un script:

password=$(keyring get school mohamed)

Ahora la contraseña contiene la contraseña que ingresó anteriormente.

Mohamed Ashref
fuente