Wprowadzono systemd-homed do zarządzania przenośnymi katalogami domowymi

Lennarta Poetteringa wprowadzono (PDF) na konferencji All Systems Go 2019 nowy komponent systemu menadżera systemu - systemowy, mający na celu uczynienie katalogów domowych użytkowników przenośnymi i niezależnymi od ustawień systemowych. Główną ideą projektu jest stworzenie samowystarczalnych środowisk dla danych użytkowników, które można przesyłać pomiędzy różnymi systemami bez obawy o synchronizację identyfikatorów i poufność.

Środowisko katalogu domowego ma postać zamontowanego pliku obrazu, w którym dane są zaszyfrowane. Poświadczenia użytkownika są powiązane z katalogiem domowym, a nie z ustawieniami systemowymi - zamiast z /etc/passwd i /etc/shadow profil w formacie JSON, przechowywany w katalogu ~/.identity. Profil zawiera parametry niezbędne do pracy użytkownika, m.in. informacje o nazwie, haszu hasła, kluczach szyfrujących, limitach i przydzielonych zasobach. Profil może być poświadczony podpisem cyfrowym przechowywanym na zewnętrznym tokenie Yubikey.

Parametry mogą również zawierać dodatkowe informacje, takie jak klucze SSH, dane uwierzytelniania biometrycznego, obraz, adres e-mail, adres, strefa czasowa, język, limity procesów i pamięci, dodatkowe flagi montowania (nodev, noexec, nosuid), informacje o używanych serwerach IMAP/SMTP użytkownika , informacje o włączeniu kontroli rodzicielskiej, opcjach tworzenia kopii zapasowych itp. Dostępny jest interfejs API do żądania i analizowania parametrów Varlink.

Przypisywanie i przetwarzanie UID/GID odbywa się dynamicznie w każdym systemie lokalnym, do którego podłączony jest katalog domowy. Korzystając z proponowanego systemu, użytkownik może przechowywać swój katalog domowy przy sobie, np. na pendrive'ie, a jednocześnie uzyskać środowisko pracy na dowolnym komputerze bez jawnego zakładania na nim konta (obecność pliku z obrazem katalogu domowego prowadzi do syntezy użytkownika).

Do szyfrowania danych proponuje się wykorzystanie podsystemu LUKS2, ale systemd-homed umożliwia także wykorzystanie innych backendów, na przykład dla niezaszyfrowanych katalogów, partycji sieciowych Btrfs, Fscrypt i CIFS. Do zarządzania katalogami przenośnymi proponowane jest narzędzie homectl, które pozwala tworzyć i aktywować obrazy katalogów domowych, a także zmieniać ich rozmiar i ustawiać hasło.

Na poziomie systemu pracę zapewniają następujące komponenty:

  • systemd-homed.service - zarządza katalogiem domowym i osadza rekordy JSON bezpośrednio w obrazach katalogu domowego;
  • pam_systemd - przetwarza parametry z profilu JSON w momencie logowania użytkownika i stosuje je w kontekście aktywowanej sesji (przeprowadza uwierzytelnianie, konfiguruje zmienne środowiskowe itp.);
  • systemd-logind.service - przetwarza parametry z profilu JSON podczas logowania użytkownika, stosuje różne ustawienia zarządzania zasobami i ustawia limity;
  • nss-systemd - moduł NSS dla glibc, syntetyzuje klasyczne rekordy NSS w oparciu o profil JSON, zapewniając kompatybilność wsteczną z API przetwarzania użytkownika UNIX (/etc/password);
  • PID 1 - dynamicznie tworzy użytkowników (syntetyzowany analogicznie do użycia dyrektywy DynamicUser w jednostkach) i udostępnia ich widoczności dla reszty systemu;
  • systemd-userdbd.service - tłumaczy konta NSS UNIX/glibc na rekordy JSON i zapewnia ujednolicony interfejs API Varlink do wykonywania zapytań i iteracji po rekordach.

Do zalet proponowanego systemu należy możliwość zarządzania użytkownikami podczas montowania katalogu /etc w trybie tylko do odczytu, brak konieczności synchronizacji identyfikatorów (UID/GID) pomiędzy systemami, niezależność użytkownika od konkretnego komputera, blokowanie danych użytkownika w trybie uśpienia zastosowanie szyfrowania i nowoczesnych metod uwierzytelniania. Planuje się, że Systemd-homed zostanie włączony do głównego nurtu systemd w wydaniach 244 lub 245.

Przykładowy profil użytkownika JSON:

„autoLogin”: prawda,
„wiązanie” : {
«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»,
"przechowywanie": "luks",
„uid”: 60233
}
},
„dyspozycja”: „regularna”,
„enforcePasswordPolicy”: fałsz,
„lastChangeUSec”: 1565951024279735,
"członkiem" : [
"koło"
],
„uprzywilejowany” : {
„hashedPassword”: [
«$6$WHBKvAFFT9jKPA4k$OPY4D5…/»
] },
„podpis”: [
{
"dane": "LU/HeVrPZSzi3M3J...==",
"key": "——ROZPOCZNIJ KLUCZ PUBLICZNY——\nMCowBQADK2VwAy…=\n——KOŃCZ KLUCZ PUBLICZNY——\n”
}
],
„nazwa użytkownika”: „test”,
„stan” : {
«15e19cf24e004b949dfaac60c74aa165» : {
„goodAuthenticationCounter”: 16,
„lastGoodAuthenticationUSec”: 1566309343044322,
„rateLimitBeginUSec”: 1566309342341723,
„rateLimitCount”: 1,
"stan": "nieaktywny",
"usługa": "io.systemd.Home",
„Rozmiar dysku”: 161218667776,
„dyskSufit”: 191371729408,
„Piętro dysku”: 5242780,
„signedLocally”: prawda
}
}

Źródło: opennet.ru

Dodaj komentarz