Si el secreto no cambia entre ejecuciones, utilice un archivo de configuración especial, ".appsecrets"
. Establezca los permisos del archivo como de solo lectura por el propietario. Dentro del archivo establece una variable de entorno para el secreto. El archivo debe estar en el directorio de inicio del usuario que ejecuta el comando.
#!/bin/bash
#filename: .appsecrets
set SECRET=polkalover
Cargue el archivo de configuración para que se establezca la variable de entorno.
. ~/.appsecrets
Lo que he visto hacer:
1)
echo $SECRET | command
funciona si el comando solicita la contraseña de la entrada estándar y si 'eco' es una orden interna de su concha . Estábamos usando Korn.
2)
password=$ENV{"SECRET"};
funciona si usted tiene el control del código (por ejemplo, en Perl o C++)
3)
. ./.app.config #sets the environment variables
isql -host [host] -user [user] -password <<SECRET
${SQLPASSWORD}
SECRET
funciona si el comando se puede aceptar el secreto de std-in. Una limitación es que la cadena <<
tiene que ser el último argumento dado al comando. Esto podría ser problemático si hay un argumento no opcional que debe aparecer después de -contraseña
El beneficio de este enfoque es que puede organizarlo para que el secreto se pueda ocultar en la producción. Use el mismo nombre de archivo en producción, pero estará en el directorio principal de la cuenta que ejecuta el comando en producción. A continuación, puede bloquear el acceso al secreto como si tuviera acceso a la cuenta raíz. Solo ciertas personas pueden 'su' a la cuenta prod para ver o mantener el secreto mientras que los desarrolladores todavía pueden ejecutar el programa porque usan su propio archivo '.appsecret' en su directorio principal.
Puede utilizar este enfoque para almacenar información segura para cualquier cantidad de aplicaciones, siempre que utilicen nombres de variables de entorno diferentes para sus secretos.
(para mal)
Un método antiguo vi el uso DBA era establecer SYBASE a "/opt/././././././././././././././././././././././././././././././././././sybase/bin"
. Entonces sus líneas de comando eran tan largas que el ps lo truncó. Pero en Linux creo que es posible que puedas oler toda la línea de comandos desde/proc.
que hace el comando acepta el argumento secreto a través de un archivo de entrada o las corrientes? – Jeff
Tenga en cuenta que el script en sí es legible, por lo que el secreto está visible para cualquier persona interesada en encontrarlo. Para que un usuario pueda ejecutar un script de shell, el script debe ser legible, o debe usar un programa SUID para ejecutar una copia protegida del script u otras contorsiones similares. –
Aquí hay una buena respuesta: modifique/proc/PID/cmdline usando un truco de Scott James Remnant http://netsplit.com/hiding-arguments-from-ps – Martin