Credenciales en el directorio cifrado
El servidor escribe una contraseña solo desde un archivo del directorio gocryptfs que usted abre, solo en el origen exacto que el archivo nombra, y el valor no aparece nunca en lo que recibe el modelo.
El directorio cifrado lo abre usted
El servidor lee y escribe solo en un directorio de un volumen gocryptfs:
credenciales, el perfil dedicado del navegador, el diario, las capturas y las
descargas. Usted abre y cierra el volumen; el servidor nunca lo monta ni lo
desmonta, nunca ejecuta gocryptfs ni fusermount3, y nunca conoce su
contraseña. Mientras está cerrado, el servidor se niega a escribir, y no tiene
ningún lugar alternativo sin cifrar. Acepta el montaje solo como un montaje
fuse.gocryptfs de su propio usuario, sin la opción allow_other.
mcp-server-diwall-browser-setup lo hace por usted, en una terminal suya, y create
escribe el perfil del operador cuando ha visto el volumen montado.
create --temporary crea un volumen en memoria para una prueba, destruido por
close, por el apagado de la máquina o por el fin de su sesión (las sesiones de los
sitios, el diario y las capturas se pierden con él); create crea un volumen
duradero; open lo abre de nuevo; close detiene el navegador y después
desmonta. Usted teclea la contraseña cuando gocryptfs se la pide; el asistente no
la lee. Un volumen que ya existe, copiado de otra máquina o creado por Plasma
Vault, se toma con create --crypt-dir y --mount-dir: no se inicializa, solo se
abre con su contraseña. Ejecutado sin argumento, el comando dice lo que su máquina
permite y el siguiente comando.
A mano, con el volumen creado una vez (gocryptfs -init, cuya clave maestra va en
papel o en un gestor de contraseñas, nunca en un archivo de este disco), ábralo y,
la primera vez, cree los directorios del servidor:
gocryptfs ~/Vaults/Main.enc ~/Vaults/Main
mkdir -m 700 ~/Vaults/Main/mcp-server-diwall-browser
mkdir -m 700 ~/Vaults/Main/mcp-server-diwall-browser/credentials
mkdir -m 700 ~/Vaults/Main/mcp-server-diwall-browser/browser-profile
Para cerrarlo, cierre primero el navegador dedicado, que mantiene archivos abiertos en su perfil, y después:
fusermount3 -u ~/Vaults/Main
Nunca fusermount3 -u -z: un desmontaje diferido desvincula el directorio
mientras un proceso aún puede escribir por la ruta antigua, que lleva entonces
al directorio sin cifrar que hay debajo. El directorio abierto no debe entrar en
ninguna copia de seguridad: exclúyalo por el límite del sistema de archivos
(rsync --one-file-system) o en su herramienta de copias; los archivos cifrados
pueden copiarse en otro lugar.
Un archivo por sitio
Un archivo de credenciales contiene el nombre de usuario y la contraseña de un
sitio, en credentials/, en modo 600. Su nombre está formado por letras
minúsculas, dígitos, ., _ y -, como máximo 64 caracteres, y luego .json.
Sus claves son allowed_origins (obligatoria), username y password (al menos
una de las dos), y nada más:
{
"allowed_origins": ["https://account.example.invalid"],
"username": "alice",
"password": "replace-with-the-real-password"
}
Escríbalo con su editor, nunca con echo ni con una redirección de la shell, que
dejarían la contraseña en el historial de su shell:
vim ~/Vaults/Main/mcp-server-diwall-browser/credentials/account.json
chmod 600 ~/Vaults/Main/mcp-server-diwall-browser/credentials/account.json
El origen es exacto. Con este archivo, una página de
https://account.example.invalid recibe la credencial;
http://account.example.invalid, https://account.example.invalid:8443 y
https://www.account.example.invalid no la reciben (credential_not_bound). Se
rechaza un archivo que enumere un comodín.
Lo que hace el modelo y lo que ve
El modelo rellena un campo con una referencia, nunca con el valor:
{"key": "password"}, o {"key": "password", "name": "account"} cuando varios
archivos están ligados a un mismo origen. El servidor lee el archivo en su propio
proceso en el momento de escribir, envía el valor al navegador por la conexión
local de depuración, y el resultado dice <secret:password>. Un campo que el
servidor considera sensible (contraseña, tarjeta, código) rechaza el texto plano
con sensitive_value_refused, de modo que una contraseña no puede pasar por
error por el contexto del modelo.
El servidor no lee las credenciales guardadas en un formato antiguo, un archivo JSON por sitio con nombres de host y sin esquema. Un comando que usted ejecuta en su propia shell convierte un archivo, o un directorio de ellos, dentro de su propio proceso y no imprime ningún valor; no conserva ningún segundo factor y no sobrescribe nada:
cd ~/mcp-server-diwall-browser
.venv/bin/python -m mcp_server_diwall_browser.credential_import \
--source-dir ~/Vaults/Main/old-credentials
Se probó con archivos del conjunto de pruebas en un volumen simulado, no en un volumen gocryptfs real. Todas las opciones, todos los rechazos y las seis comprobaciones que hace están en la sección 6 de la guía del operador.