272 - Contraseñas y dotfiles

272 - Contraseñas y dotfiles

Guardar y compartir tus archivos de configuración en un repositorio, es brillante, pero ¿como gestionar contraseñas y dotfiles?

1:25
-3:15

Una de las preguntas mas recurrentes y a la que le debo un podcast completo, y mas, es sobre los dotfiles. Son diferentes preguntas y cuestiones las que surgen en torno al asunto de los archivos de configuración. Lo cierto, es que desde para mi, mantener los archivos de configuración centralizados, han supuesto, una auténtica revolución, permitiéndome poner en marcha una nueva instalacion de Ubuntu, o de Linux Mint, dependiendo de la que esté utilizando en pocos minutos. Por supuesto, la revolución ha sido completa en el momento en el que comencé a utilizar un *escritorio de tipo mosaico como bspwm y otras herramientas como Rofi y Polybar. La cuestión es que para mayor facilidad, tus *dotfiles* deberían estar en un repositorio, a ser posible pública, para ayudar a otras personas a configurar sus dispositivos. Pero ¿que ocurre con las contraseñas?¿Como gestionar contraseñas y doftiles?

Precisamente esto es de lo que quiero hablar en el podcast de hoy. Quiero comentarte diferentes opciones y posibilidades para gestionar la combinación de contraseñas y dotfiles.

Contraseñas y dotfiles

Contraseñas y dotfiles

La pregunta sobre contraseñas y dotfiles

Todo esto viene de una pregunta de CerealKiller,

Saludos, lo primero felicitarte por el excelente trabajo que haces.Dicho esto, vamos al turrón… Veo que hay mucha gente que publica sus dotfiles en repositorios git y siempre me he preguntado como hacen para no subir el archivo con contraseñas. Me explico, para descargar mi correo uso fetchmail, y todas las contraseñas están en su correspondiente rc… Si subo el archivo tal cual estarán expuestas y obviamente no es lo que deseo (ni aunque el repositorio esté en modo privado). Espero haberme explicado.

Mi visión personal

Desde mi punto de vista, lo mejor es no publicar bajo ningún concepto tus contraseñas, ni siquiera en el caso de que estén cifradas, ni que estén en un repositorio privado. La razón de esto, según mi visión, es que lo que hoy es indescifrable, mañana puede no serlo. Al fin y al cabo, la capacidad de cómputo cada vez es mayor. Lo que hoy se prevee descifrar en un millón de años, es posible, que mañana sea en un puñado de segundos.

Por otro lado, creo que el archivo de configuración debe respetar al máximo su apariencia. Esto que ahora mismo no tiene mucho sentido, verás que a lo largo de la exposición va ganando razón.

Y, por último, lo mejor es tener tu configuración accesible, no solo para ti, sino también para otros. Además por supuesto, bajo un sistema de control de versiones, que ta va a permitir hacer una marcha atrás, en el caso de que haya un problema.

Partiendo de estas tres premisas, en los siguientes puntos te voy a comentar las opciones que te propongo para lidiar con esta combinación de contraseñas y dotfiles. Por supuesto, que estas son mis propuestas, y estaré encantado de escuchar las tuyas.

.gitignore

El primer procedimiento que me viene a la cabeza, y que por supuesto, incumple la tercera de las reglas que yo mismo me he autoimpuesto, es el de no subir los archivos de configuración que contengan contraseñas. Esto, es mala idea, pero desde luego es mejor idea, que subirlos con las contraseñas en texto plano. Esto último debería ser lo último que se te ocurra.

git-crypt

Otra opción que tienes es la de utilizar git-crypt. En este caso se trata de cifrar los archivos sensibles. Me refiero a archivos sensibles, por supuesto, a aquellos que tienen contraseñas o claves que no deberían ser públicas. Si no conoces git-crypt, te recomiendo que leas el artículo sobre Cifrado de repositorios git.

En este caso, no cumplo ni la primera, ni la segunda de las premisas. La primera, porque estoy subiendo las contraseñas, cifradas, eso si, pero las estoy subiendo. Por otro lado, incumplo la segunda de las premisas, en el sentido de que al estar cifrado el archivo completo nadie va a poder hacer uso de este archivo de configuración. Esto es casi tan absurdo como no subirlo.

El anillo de claves

La tercera de las opciones que te ofrezco es utilizar el anillo de claves. El anillo de claves está en determinados repositorios, no en todos. Por ejemplo, en KDE Plasma o GNOME, lo tienes disponible. En este caso, las contraseñas están en el anillo de claves de tu entorno de escritrio, y lo único que tienes que hacerlo es reemplazar la contraseña.

Existen archivos de configuración, como por ejemplo el de mutt, que es tratado como un script BASH, de esta forma, puedes incluir llamadas para hacer esta sustitución. Por ejemplo,

set imap_pass=`gkeyring -g -k mutt_cuenta_1`

En este caso, estoy utilizando una herramienta de desarrollo propio, llamada gkeyring, sobre la que puedes leer en el artículo sobre como guardar contraseñas en el terminal.

Pero esta no es la única opción que tienes. Como comenté hace algunos podcasts, este año era para mi el de Objetivo Rust. En este sentido he desarrollado una aplicación para el terminal llamada krcli. El funcionamiento es muy similar al anterior, y la instalación también.

Fijate, que en el ejemplo anterior, ni siquiera he utilizado el nombre de usuario, simplemente un mutt_cuenta_1, para evitar este tipo de problemas.

Uno de los aspectos que mas me gustan de esta solución es el hecho de que las contraseñas siempre quedan en tu equipo… el problema es como pierdas tu equipo, que has perdido las contraseñas, y lo has perdido todo. A lo mejor sería interesante, que las contraseñas estuvieran en un sitio seguro fuera de tu equipo, y que lo puedas recuperar de cualquier sitio.

Una solución similar es utilizar pgp ó pass, y aquí, incluso podría estar fuera de tu equipo, lo cual podrías ser una solución, siempre y cuando tus contraseñas o tus claves estén cifradas en un sitio seguro, a resguardo donde hagas copias de seguridad, del tipo 3-2-1.

El problema en este caso es ¿y si el archivo de configuración no es un script en Bash?. Pues tienes otra solución. Que comentaré mas adelante.

Bitwarden

Otra opción interesante y similar a la anterior es utilizar Bitwarden, para guardar las constraseñas, y alguno de los clientes que tienes para el terminal. En este caso, la solución es similar a la que has visto anteriormente, y dependes del tipo de archivo de configuración que utilice cada aplicación.

Reemplazando, reemplazando, reemplanzo

Una muy buena solución es utilizar palabras clave a reemplazar, y luego con un sencillo script, hacer un reemplazo del tipo clave-valor. Por ejemplo, en el caso anterior sería,

set imap_pass=$$mutt_cuenta_1$$

Esto estaría en el archivo mutt.config.template, por poner un ejemplo. Cuando tu pases el script, reemplazará todas las contraseñas del tipo $$clave$$ por el valor correspondiente a clave. Y generarías el archivo mutt.config. Este archivo mutt.config estaría en el .gitignore para evitar subirlo al repositorio, porque el que subirías sería el primero que he mencionado.


Espero que te haya gustado este nuevo episodio del podcast. Si puedes, te agradecería una valoración en iVoox y/o en Apple Podcast.

Imagen de portada de Paulius Dragunas en Unsplash

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *