Lennart Poettering
El entorno del directorio de inicio se presenta en forma de un archivo de imagen montado, cuyos datos están cifrados. Las credenciales de usuario están vinculadas al directorio de inicio en lugar de a la configuración del sistema, en lugar de /etc/passwd y /etc/shadow.
Los parámetros también pueden incluir información adicional como claves SSH, datos de autenticación biométrica, imagen, correo electrónico, dirección, zona horaria, idioma, límites de proceso y memoria, indicadores de montaje adicionales (nodev, noexec, nosuid), información sobre los servidores IMAP/SMTP del usuario utilizados. , información sobre cómo habilitar controles parentales, opciones de copia de seguridad, etc. Se proporciona una API para solicitar y analizar parámetros.
La asignación y el procesamiento de UID/GID se realizan dinámicamente en cada sistema local al que está conectado el directorio de inicio. Con el sistema propuesto, el usuario puede mantener consigo su directorio de inicio, por ejemplo en una unidad flash, y obtener un entorno de trabajo en cualquier computadora sin crear explícitamente una cuenta en ella (la presencia de un archivo con la imagen del directorio de inicio conduce a la síntesis del usuario).
Se propone utilizar el subsistema LUKS2 para el cifrado de datos, pero systemd-homed también permite el uso de otros backends, por ejemplo, para directorios no cifrados, particiones de red Btrfs, Fscrypt y CIFS. Para administrar directorios portátiles, se propone la utilidad homectl, que le permite crear y activar imágenes de directorios de inicio, así como cambiar su tamaño y establecer una contraseña.
A nivel del sistema, el trabajo está garantizado por los siguientes componentes:
- systemd-homed.service: administra el directorio de inicio e incrusta registros JSON directamente en las imágenes del directorio de inicio;
- pam_systemd: procesa parámetros del perfil JSON cuando el usuario inicia sesión y los aplica en el contexto de la sesión activada (realiza autenticación, configura variables de entorno, etc.);
- systemd-logind.service: procesa parámetros del perfil JSON cuando el usuario inicia sesión, aplica varias configuraciones de administración de recursos y establece límites;
- nss-systemd: módulo NSS para glibc, sintetiza registros NSS clásicos basados en un perfil JSON, proporcionando compatibilidad con versiones anteriores de la API de procesamiento de usuarios de UNIX (/etc/contraseña);
- PID 1: crea usuarios dinámicamente (sintetizados por analogía con el uso de la directiva DynamicUser en unidades) y los hace visibles para el resto del sistema;
- systemd-userdbd.service: traduce cuentas UNIX/glibc NSS en registros JSON y proporciona una API Varlink unificada para consultar e iterar sobre registros.
Las ventajas del sistema propuesto incluyen la capacidad de administrar usuarios al montar el directorio /etc en modo de solo lectura, la ausencia de la necesidad de sincronizar identificadores (UID/GID) entre sistemas, la independencia del usuario de una computadora específica y el bloqueo de datos del usuario. durante el modo de suspensión, el uso de cifrado y métodos de autenticación modernos. Está previsto que Systemd-homed se incluya en la corriente principal de systemd en la versión 244 o 245.
Ejemplo de perfil de usuario JSON:
"autoLogin": verdadero,
"vinculante" : {
«15e19cd24e004b949ddaac60c74aa165» : {
"tipo de sistema de archivos": "ext4"
«fileSystemUUID» : «758e88c8-5851-4a2a-b98f-e7474279c111»,
"gid": 60232,
"directorioInicio": "/inicio/prueba",
"imagePath": "/home/test.home",
"luksCipher": "aes",
"luksCipherMode": "xts-plain64",
«luksUUID» : «e63581ba-79fa-4226-b9de-1888393f7573»,
"luksVolumeKeySize": 32,
«partitionUUID» : «41f9ce04-c927-4b74-a981-c669f93eb4dc»,
"almacenamiento": "luks",
"uid": 60233
}
},
"disposición": "regular",
"enforcePasswordPolicy": falso,
"último cambio USec": 1565951024279735,
"miembro de" : [
"rueda"
],
"privilegiado": {
"Contraseña hash": [
«$6$WHBKvAFFT9jKPA4k$OPY4D5…/»
] },
"firma" : [
{
"datos": "LU/HeVrPZSzi3M3J...==",
"key" : "——COMENZAR CLAVE PÚBLICA——\nMCowBQADK2VwAy…=\n——TERMINAR CLAVE PÚBLICA——\n"
}
],
"nombre de usuario": "prueba",
"estado" : {
«15e19cf24e004b949dfaac60c74aa165» : {
"goodAuthenticationCounter": 16,
"lastGoodAuthenticationUSec": 1566309343044322,
"rateLimitBeginUSec": 1566309342341723,
"rateLimitCount": 1,
"estado": "inactivo",
"servicio": "io.systemd.Home",
"Tamaño del disco": 161218667776,
"techo del disco": 191371729408,
"piso del disco": 5242780,
"firmado localmente": verdadero
}
}
Fuente: opennet.ru