
Algunas aplicaciones permiten pasar la contraseña como argumento. Por ejemplo:
mysql --user=user_name --password=your_password db_name
¿Es seguro? Además del hecho de que la contraseña escrita se guardará en el historial de bash, alguien puede escribir w
el comando en el momento apropiado y verá la línea de comando completa del proceso (incluida la contraseña).
Es bastante sorprendente para mí que cada usuario pueda ver qué comando estoy ejecutando actualmente.
Respuesta1
Los argumentos de la línea de comando de cada proceso del sistema se consideran "públicos". No solo el w
comando, sino ps
que top
muchos otros comandos acceden a esa información de forma natural. De hecho, no se requieren privilegios especiales para obtener esa información. En Linux, puedes leer la línea de comando de otro proceso, incluso un proceso que pertenece a otro usuario, leyendo /proc/<pid>/cmdline
.
Esto no es un defecto o comportamiento inseguro por parte de w
o top
o ps
(o cat
). Más bien, la responsabilidad recae en el lado de no pasar información confidencial en líneas de comando en sistemas multiusuario, nunca.
La mayoría de las utilidades que tienen la capacidad de aceptar contraseñas en la línea de comando documentan que no se recomienda hacerlo. Por ejemplo, desde mysql
la página de manual de:
Especificar una contraseña en la línea de comando debe considerarse inseguro. Consulte la Sección 5.3.2.2, "Directrices para el usuario final sobre seguridad de contraseñas". Puede utilizar un archivo de opciones para evitar dar la contraseña en la línea de comando.
Por cierto, pasar contraseñas o datos confidenciales en variables de entorno es menos inseguro, pero también lo es en la mayoría de los sistemas.
Respuesta2
No, no es seguro pasar contraseñas a programas en la línea de comandos. Es mejor usar:
mohsen@debian:~$ mysql -uuser -p
Enter password:
Respuesta3
Si bien no es seguro, recuerde que Linux en estos días tiene poco más de veinte años; al igual que con otras cosas en TI, las implicaciones de seguridad no eran tan claras en ese entonces o se abordaron más adelante.
Por lo tanto, como se menciona en las otras respuestas, no utilice contraseña en la línea de comando.
También puede (y probablemente debería hacerlo) restringir la información proporcionada mediante procfs with the
la opción mountring hidepid` o usando elseguridadnúcleo endurecido. Tenga en cuenta que esto podría romper algunas cosas (posiblemente cgroups y cualquier cosa que dependa de ellos, como por ejemplo systemd), al menos al momento de escribir esto.