El directorio cifrado de credenciales
Dónde se guardan las contraseñas, cómo llegan a un formulario sin pasar por su shell, y el error que las escribe en claro.
Sus credenciales se guardan en un directorio cifrado que usted monta, un
volumen gocryptfs. Dentro están en archivos JSON sencillos, legibles solo
mientras el volumen está montado. Dinoer los lee dentro del proceso que
maneja el navegador, en el momento en que se rellena un campo. El valor
nunca pasa por su shell, su historial de comandos ni los registros de Dinoer.
Crearlo y luego montarlo
En una instalación por clon de Git, el script de preparación crea el
almacenamiento cifrado y un punto de montaje vacío, en las rutas que fijan
secrets_crypt_dir y secrets_dir en dinoer.conf. --sans-chiffrement
crea en su lugar un directorio en claro (modo 700), para una máquina sin
gocryptfs:
bash scripts/configurer-repertoire-chiffre.sh # desde el clon
El paquete .deb no incluye este script: cree usted mismo el volumen
gocryptfs e indique su punto de montaje en secrets_dir. Después, en
cualquiera de las dos vías, móntelo antes de una ejecución que lo necesite:
dinoer-monter-secrets # paquete .deb
bash /opt/dinoer/scripts/monter-repertoire-chiffre.sh # clon de Git
Nada se puede leer en el disco mientras el volumen no esté montado.
Guardar credenciales en él
Un archivo JSON por sitio, con el nombre de su dominio (target.local.json,
o target.local_8443.json para un puerto concreto), en cualquier lugar bajo
el directorio montado:
{
"username": "operator",
"password": "…",
"totp_cle": "BASE32SEED",
"ntfy_topic": "…",
"origines_autorisees": ["target.local"]
}
Solo tienen que existir las claves que usan sus escenarios. totp_cle es la
semilla en base32 de los códigos de doble autenticación; ntfy_topic es el
canal por el que puede transmitirse un código que le envían. Sin --secrets,
Dinoer elige el archivo según el dominio de la página realmente cargada: una
redirección a otro sitio no encuentra ninguna credencial. Con --secrets, el
archivo se indica de forma explícita: debe entonces enumerar en
origines_autorisees los dominios en los que puede usarse, y ser legible solo
por su propietario (chmod 600); si no, Dinoer lo rechaza.
Usarlo en un escenario
{"type": "remplir", "selecteur": "input[name=\"username\"]",
"valeur": "depuis_secrets", "secret_cle": "username"},
{"type": "remplir", "selecteur": "input[name=\"password\"]",
"valeur": "depuis_secrets", "secret_cle": "password"}
secret_cle es la clave dentro del archivo. El escenario nombra una clave,
nunca un secreto, así que puede estar en un repositorio público sin nada que
ocultar.
No haga nunca esto
PASS=$(jq -r ‘.password’ ~/Vaults/…/creds.json): una credencial en
una variable del shell está en el entorno de su proceso, en /proc
y quizá en su historial. El directorio cifrado existe justamente para
evitarlo.
Un directorio por proyecto
Dos maneras, para una ejecución puntual o como costumbre.
# Puntual
DINOER_SECRETS_DIR=~/Vaults/MyProject /opt/dinoer/venv/bin/python3 /opt/dinoer/shot.py \
--url … --guide-version 1.6
# Habitual: un archivo de configuración en la raíz del proyecto
echo '{"secrets_dir": "../MyProject-secrets"}' > ~/git/MyProject/.dinoer.conf
export DINOER_CONF=~/git/MyProject/.dinoer.conf
Un secrets_dir relativo se resuelve desde la ubicación del archivo de
configuración, de modo que el ajuste viaja con el proyecto.
--secrets <archivo> indica un archivo de credenciales para una sola
ejecución sin tocar la configuración, por ejemplo cuando un mismo escenario
sirve para varias cuentas.
Cuando el directorio está cerrado
Dinoer se detiene con un error explícito:
SecretsFermesError — exit code 42 (encrypted directory not mounted)
SecretsNonConfigureError — exit code 43 (no credential directory configured)
Si usted es un agente: no intente montarlo usted mismo. Pregunte al operador.
Dinoer protege también sus propias escrituras: cuando su registro de operaciones está dentro del directorio cifrado y este está cerrado, escribe en un archivo de reserva local en lugar de escribir en claro donde debería estar el almacenamiento cifrado.
El error que más cuesta
Un directorio sin montar sigue existiendo. Simplemente está vacío, y sin cifrar.
La protección de Dinoer cubre sus propias escrituras. No cubre un archivo de credenciales que usted crea con un comando o un editor mientras el directorio no está montado. Entonces escribe al lado del almacenamiento cifrado, en claro, en un directorio que parece exactamente el correcto.
Antes de crear o modificar un archivo de credenciales, compruebe que el directorio está montado: no debe estar vacío. Este error no tiene vuelta atrás.
En resumen
- El archivo se lee dentro del proceso del navegador, nunca a través de su shell.
- Los escenarios nombran una clave, nunca un secreto: se puede hacer commit de ellos.
DINOER_CONF,DINOER_SECRETS_DIRo--secretspara credenciales por proyecto y por cuenta.- El código 42 significa cerrado; el 43, nunca configurado. Pregunte al operador, no lo monte usted.
- Un directorio sin montar es un directorio vacío y sin cifrar. Compruébelo antes de escribir.