Seguridad del argumento del comando Bash

5

Supongamos que quiero llamar a un programa que toma un nombre de usuario y una contraseña para comenzar. ¿Cuáles son los riesgos de llamar al programa como ./prog --user 'User' --password 'Password' además de la fuga obvia de un usuario que mira por encima del hombro? ¿Hay alguna forma más segura de pasar la contraseña?

    
pregunta Anthony Kraft 16.10.2014 - 23:06
fuente

3 respuestas

-2

Hay varias maneras de pasar la contraseña al programa sin escribirla:

  1. Use read y una variable

    read -s password ; ./prog --user 'User' --password "$password"
    

    Tendrá que escribir la contraseña antes de ejecutar el programa.

  2. Usar redirección

    Ponga la contraseña en password.txt y ejecute el programa:

    ./prog --user 'User' --password 'cat password.txt'
    

Tenga en cuenta que incluso si esos métodos ocultan la contraseña durante la escritura, cualquiera que ejecute ps xua | grep prog podrá ver la contraseña de todos modos.

Si puede cambiar el programa para leer la contraseña desde stdin o leer una variable de entorno, sería más fácil ocultar la contraseña. En este caso, esos métodos funcionarían.

    
respondido por el ThoriumBR 16.10.2014 - 23:26
fuente
12

En la mayoría de los sistemas Unix, la línea de comandos es visible para todos los usuarios, a través del comando ps. Es posible que esto no importe mucho si se encuentra en un sistema de un solo usuario, pero esta es la razón por la que este enfoque generalmente se considera inseguro. Por ejemplo: manual de MySQL .

Una mejor alternativa es almacenar la contraseña en un archivo, lo que evita esta fuga. Debe asegurarse de que los permisos en el archivo son apropiados. El enlace que proporcioné explica cómo hacer esto para MySQL. Un montón de otro software soporta esto de alguna manera.

    
respondido por el paj28 16.10.2014 - 23:18
fuente
1

Haz que el programa lea la contraseña en sí.

Puede usar getpass (3) o similar si está desarrollando en un lenguaje de bajo nivel. Para una secuencia de comandos de shell puede usar lectura (ya que es un componente incorporado, no hay pérdidas en los argumentos de comando).

También tenga en cuenta que si pasa las credenciales de otro lugar (como ejecutar ese comando en un servidor web, rellenar el nombre de usuario y la contraseña de lo que fue pasado por un cliente), necesita una cotización adecuada, por ejemplo, una contraseña de '' whoami '' no resulta en la ejecución remota de código.

    
respondido por el Ángel 17.10.2014 - 00:24
fuente

Lea otras preguntas en las etiquetas