Lennart Poettering () op de conferentie All Systems Go 2019 een nieuwe component van de systeembeheerder systemd – , gericht op het waarborgen van de draagbaarheid van gebruikershome-mappen en hun scheiding van systeeminstellingen. Het hoofddoel van het project is het creëren van zelfvoorzienende omgevingen voor gebruikersgegevens die tussen verschillende systemen kunnen worden verplaatst zonder zich zorgen te maken over het synchroniseren van identificatoren en privacy.
De omgeving van de home-map wordt geleverd in de vorm van een te monteren schijfafbeelding, waarvan de gegevens zijn versleuteld. Gebruikersgegevens zijn verbonden aan de home-map, en niet aan systeeminstellingen – in plaats van /etc/passwd en /etc/shadow wordt gebruikgemaakt van in JSON-indeling, opgeslagen in de map ~/ .identity. In het profiel staan de parameters die nodig zijn voor de werking van de gebruiker, inclusief gegevens over de naam, het wachtwoordhash, de versleutelingselementen, quota en aangeboden bronnen. Het profiel kan worden ondertekend met een digitale handtekening die op een externe Yubikey-token is opgeslagen.
De parameters kunnen ook aanvullende informatie bevatten, zoals sleutels voor SSH, gegevens voor biometrische authenticatie, afbeelding, e-mail, adres, tijdzone, taal, limieten voor het aantal processen en geheugen, extra montagemerken (nodev, noexec, nosuid), gegevens over de door de gebruiker toegepaste IMAP/SMTP-servers, informatie over het inschakelen van ouderlijk toezicht, back-upinstellingen, enzovoort. Voor het aanvragen en parsken van parameters is er een API beschikbaar .
De toewijzing en verwerking van UID/GID gebeurt dynamisch in elk lokaal systeem waarmee de home-map wordt verbonden. Met het voorgestelde systeem kan de gebruiker zijn home-map bij zich houden, bijvoorbeeld op een flashdrive, en een werkomgeving op elke computer krijgen zonder expliciet een gebruikersaccount op te stellen (de aanwezigheid van een bestand met de home-mapafbeelding leidt tot het synthetiseren van de gebruiker).
Voor de gegevensversleuteling wordt aangeraden de LUKS2-subsystem te gebruiken, maar systemd-homed maakt ook andere backend-systemen mogelijk, bijvoorbeeld voor niet-versleutelde mappen, Btrfs, Fscrypt en netwerkschijven CIFS. Voor het beheren van draagbare mappen is de homectl-tool voorgesteld, waarmee afbeeldingen van thuismappen kunnen worden gemaakt en geactiveerd, evenals hun grootte kan worden gewijzigd en een wachtwoord kan worden ingesteld.
Op systeemniveau wordt de werking gegarandeerd door de volgende componenten:
- systemd-homed.service — beheert de thuismap en voegt JSON-records rechtstreeks toe aan de afbeeldingen van de thuismappen;
- pam_systemd — verwerkt parameters uit het JSON-profiel bij de gebruikersaanmelding en past deze toe in de context van de geactiveerde sessie (voert authenticatie uit, stelt omgevingsvariabelen in, enz.);
- systemd-logind.service — verwerkt parameters uit het JSON-profiel bij de gebruikersaanmelding, past verschillende instellingen voor resourcebeheer toe en stelt limieten in;
- nss-systemd — NSS-module voor glibc, synthetiseert klassieke NSS-records op basis van het JSON-profiel en biedt achterwaartse compatibiliteit met de UNIX API voor gebruikersverwerking (\/etc\/password);
- PID 1 — maakt dynamisch gebruikers aan (synthetiseert vergelijkbaar met het gebruik van de DynamicUser-richtlijn in de eenheden) en maakt ze zichtbaar voor de rest van het systeem;
- systemd-userdbd.service — vertaalt UNIX\/glibc NSS-accounts naar JSON-registraties en biedt een gestandaardiseerde Varlink-API voor het opvragen en doorlopen van records.
De voordelen van het voorgestelde systeem omvatten de mogelijkheid om gebruikers te beheren tijdens het mounten van de map \/etc in alleen-lezen modus, het ontbreken van de noodzaak om identificatoren (UID\/GID) tussen systemen te synchroniseren, de onafhankelijkheid van de gebruiker van een specifieke computer, blokkering van gebruikersgegevens tijdens de overgang naar slaapstand, het toepassen van versleuteling en moderne authenticatiemethoden. Systemd-homed is gepland om deel uit te maken van de hoofdversie van systemd in release 244 of 245.
Voorbeeld van een gebruikers JSON-profiel:
«autoLogin» : true,
«binding» : {
«15e19cd24e004b949ddaac60c74aa165» : {
«fileSystemType» : «ext4»,
«fileSystemUUID» : «758e88c8-5851-4a2a-b98f-e7474279c111»,
«gid» : 60232,
«homeDirectory» : «\/home\/test»,
«imagePath» : «\/home\/test.home»,
«luksCipher» : «aes»,
«luksCipherMode» : «xts-plain64»,
«luksUUID» : «e63581ba-79fa-4226-b9de-1888393f7573»,
«luksVolumeKeySize» : 32,
«partitionUUID» : «41f9ce04-c927-4b74-a981-c669f93eb4dc»,
«storage» : «luks»,
«uid» : 60233,
}
},
«disposition» : «regular»,
«enforcePasswordPolicy» : false,
«lastChangeUSec» : 1565951024279735,
«memberOf» : [
«wheel»
],
«privileged» : {
«hashedPassword» : [
«$6$WHBKvAFFT9jKPA4k$OPY4D5…/»
]
},
«signature» : [
{
«data» : «LU/HeVrPZSzi3M3J…==»,
«key» : «——BEGIN PUBLIC KEY——\nMCowBQADK2VwAy…=\n——END PUBLIC KEY——\n»
}
],
«userName» : «test»,
«status» : {
«15e19cf24e004b949dfaac60c74aa165» : {
«goodAuthenticationCounter» : 16,
«lastGoodAuthenticationUSec» : 1566309343044322,
«rateLimitBeginUSec» : 1566309342341723,
«rateLimitCount» : 1,
«state» : «inactive»,
«service» : «io.systemd.Home»,
«diskSize» : 161218667776,
«diskCeiling» : 191371729408,
«diskFloor» : 5242780,
«signedLocally» : true
}
}
Bron: opennet.ru
