Systemd zmieni sposób działania katalogu domowego systemu Linux

Zespół zajmujący się systemd proponuje nową metodę zarządzania katalogami domowymi. Określenie tego jako „nową metodę” jest nieco przesadzone – to rzeczywiście istotna zmiana paradygmatu w świecie Linuksa. Oto wszystko, co powinieneś wiedzieć o systemd-homed, który wkrótce może pojawić się w Twojej ulubionej dystrybucji Linuksa.

Kontrowersje są normą

Gdy systemd został zaprezentowany w 2010 roku, społeczność Linuksa podzieliła się na trzy główne grupy. Niektórzy uważali go za znaczące ulepszenie, podczas gdy inni dostrzegali w nim wadliwy projekt, który odbiegał od filozofii Unix. Inni z kolei pozostawali obojętni na te kontrowersje.

Reakcja przeciwników systemd była głośna i pełna emocji, a w niektórych przypadkach wręcz fanatyczna. Lennart Poettering, inżynier oprogramowania w Red Hat i współtwórca systemu, otrzymał nawet groźby śmierci.

Powstały piosenki nawołujące do przemocy wobec Poetteringa, a także stworzono strony internetowe zachęcające użytkowników Linuksa do bojkotu systemu. Jego współtwórca, Kay Sievers, również spotkał się z krytyką, jednak to Poettering poniósł największy ciężar tej sytuacji.

Mimo to, w ciągu ośmiu miesięcy od wprowadzenia systemd, Fedora zaczęła go stosować, a do końca 2013 roku Arch, Debian, Manjaro oraz Ubuntu również zainstalowały systemd. Oczywiście, zaletą open source jest możliwość forku, czyli rozwidlenia kodu źródłowego, aby stworzyć własne rozwiązania. Nowe dystrybucje, takie jak Devuan, powstały jako alternatywa dla uniknięcia systemd.

Twój katalog $HOME

W strukturze katalogów Linuksa wszystkie Twoje działania odbywają się w katalogu „/home”. Znajdziesz tam swoje pliki, zdjęcia, muzykę oraz całą osobistą hierarchię katalogów, które są związane z Twoim kontem użytkownika.

Ustawienia aplikacji są przechowywane w folderze domowym w ukrytych „katalogach z kropkami”. Jeśli nazwa pliku lub katalogu zaczyna się od kropki (.), jest on ukryty. Dzięki temu, że te ustawienia są lokalne, a nie zapisane w centralnym rejestrze, tworząc kopię zapasową katalogu domowego, automatycznie kopiujesz również wszystkie te ukryte pliki i foldery.

Podczas przywracania kopii zapasowej i uruchamiania aplikacji, takich jak LibreOffice czy Thunderbird, programy te będą szukały swoich ukrytych katalogów, w których znajdą preferencje dokumentów, ustawienia pasków narzędzi oraz inne dostosowania. Thunderbird odnajdzie również dane dotyczące Twojego konta e-mail. Dzięki temu unikasz problemu z ponownym konfigurowaniem każdej aplikacji od podstaw.

Aby wyświetlić ukryte pliki i katalogi, możesz użyć polecenia ls z opcją -a (wszystko). Najpierw wpisz:

ls

To pokaże tylko zwykłe pliki i katalogi. Następnie wpisz:

ls -a

Aby zobaczyć również ukryte pliki i katalogi.

Ochrona katalogu „/home” jest kluczowa, dlatego często jest on montowany na oddzielnej partycji lub dysku. Dzięki temu, jeśli coś złego wydarzy się z systemem operacyjnym, możesz ponownie zainstalować dystrybucję Linuksa, a następnie zamontować istniejącą partycję domową.

Informacje o Tobie

Katalog domowy nie tylko zawiera Twoje pliki, ale także przechowuje informacje o Twojej tożsamości cyfrowej. Na przykład katalog „.ssh” zawiera dane dotyczące zdalnych połączeń z innymi komputerami oraz wszelkie wygenerowane klucze SSH.

Inne istotne informacje systemowe, takie jak nazwa użytkownika, hasło oraz unikalny identyfikator użytkownika, są przechowywane w plikach takich jak „/etc/passwd” i „/etc/shadow”. Niektóre z tych danych mogą być dostępne dla każdego, inne mogą być odczytywane tylko przez użytkowników z uprawnieniami roota.

Przykład zawartości pliku „/etc/passwd”:

cat /etc/passwd

Rewolucja w systemie

Celem systemd-homed jest stworzenie w pełni przenośnego katalogu domowego, który przechowuje zarówno dane, jak i cyfrową tożsamość użytkownika w Linuksie. Twój UID oraz wszelkie mechanizmy identyfikacyjne i uwierzytelniające będą przechowywane wyłącznie w Twoim katalogu domowym.

W związku z koncepcją „wszystkie jajka w jednym koszyku”, katalogi domowe będą szyfrowane. Zostaną automatycznie odszyfrowane przy każdym logowaniu, a następnie ponownie zaszyfrowane podczas wylogowywania. Preferowaną metodą jest użycie LUKS do szyfrowania dysku, chociaż dostępne są również inne rozwiązania, takie jak fscrypt.

Rekord użytkownika w formacie JSON przechowuje wszystkie informacje o Twojej tożsamości w katalogu o nazwie „~/.identity”, który jest kryptograficznie podpisany kluczem, nad którym nie masz kontroli.

Katalog domowy każdego użytkownika jest montowany na urządzeniu zwrotnym, podobnie jak aplikacje snap, aby drzewo katalogów w katalogu głównym wyglądało jak spójna struktura systemu operacyjnego. Domyślnym punktem montowania jest „/home/$USER.homedir” (gdzie „$USER” to nazwa konta użytkownika).

Zalety nowego podejścia

Dzięki temu, że katalog domowy jest bezpiecznym miejscem przechowywania danych, można nawet przenieść go na urządzenie wymienne, takie jak dysk USB, aby używać go na różnych komputerach – w pracy lub w domu.

To właśnie miał na myśli Poettering, mówiąc o „w pełni przenośnym katalogu domowym”. Podkreślił, że nawet jeśli nie zamierzasz przenosić swojego katalogu, nowa struktura ułatwi aktualizacje, migracje i poprawi bezpieczeństwo.

Eliminuje to tzw. „pomocnicze bazy danych”, które gromadzą fragmenty istotnych informacji o użytkownikach, które powinny być scentralizowane. Pliki „/etc/passwd” i „/etc/shadow” zawierają dane uwierzytelniające oraz zaszyfrowane hasła, ale także inne informacje, takie jak domyślna powłoka czy plik GECOS.

Poettering podkreślił, że metadane powinny być zorganizowane i przechowywane w znaczących grupach w rekordzie JSON każdego użytkownika w katalogu domowym.

Zarządzanie nowym katalogiem $HOME

Usługa systemd-homed jest zarządzana za pomocą nowego narzędzia wiersza poleceń homectl homectl.

Dzięki temu narzędziu można tworzyć użytkowników oraz katalogi domowe, ustalać limity pamięci dla każdego użytkownika, a także zarządzać hasłami, blokować dostęp do kont lub całkowicie usuwać konta. Użytkownicy oraz ich rekordy JSON mogą być również kontrolowane poprzez to narzędzie.

Możliwe jest również ustawienie stref czasowych i innych informacji lokalizacyjnych dla każdego użytkownika. Możesz określić domyślną powłokę oraz dostosować zmienne środowiskowe, które będą aktywne przy logowaniu.

W katalogu „/home” znajdziesz wpisy zarządzane przez systemd-homed, które będą wyglądały następująco, z „.homedir” dodanym do nazwy użytkownika:

/home/dave.homedir

Pamiętaj, że to tylko punkt montowania. Prawdziwa lokalizacja zaszyfrowanego katalogu domowego znajduje się w innym miejscu.

Ograniczenia i wyzwania

systemd-homed jest przeznaczony wyłącznie dla kont użytkowników. Nie obsługuje kont z UID mniejszym niż 1000. Oznacza to, że za pomocą nowego schematu nie można zarządzać kontem root, daemonem, bin i tym podobnymi. Nadal będą potrzebne tradycyjne metody zarządzania użytkownikami. W związku z tym systemd-homed nie jest rozwiązaniem uniwersalnym.

Istnieje znany problem Catch-22, który wymaga rozwiązania. Jak wspomniano wcześniej, katalog domowy użytkownika jest odszyfrowywany podczas logowania. Jeśli jednak ktoś próbuje uzyskać dostęp do komputera zdalnie przez SSH, klucze SSH w katalogu domowym nie będą dostępne, dopóki użytkownik się nie zaloguje. Oczywiście, klucze SSH są wymagane przed zalogowaniem.

Ten problem został zauważony przez zespół systemd-homed, ale nie znaleziono jeszcze rozwiązania. Jest nadzieja, że w przyszłości pojawi się odpowiednie rozwiązanie; byłoby to istotne, gdyby nie udało się go opracować.

Gdy ktoś przenosi swój katalog domowy na nowy komputer, jeśli UID jest już zajęty przez innego użytkownika, automatycznie zostanie przydzielony nowy UID. W takim przypadku wszystkie pliki będą musiały być przypisane do nowego UID.

Obecnie obsługiwane jest to za pomocą rekurencyjnego zastosowania polecenia chown -R. Prawdopodobnie w przyszłości podejście to zostanie zmienione na bardziej eleganckie rozwiązanie. Obecne metody nie uwzględniają demonów i procesów działających jako inni użytkownicy.

Kiedy to się zacznie?

Zmiany są już w toku. Kody zostały złożone 20 stycznia 2020 r. i uwzględnione w wersji 245 systemu systemd, która została dostarczona z Ubuntu 20.04 w kwietniu 2020 r.

Aby sprawdzić wersję systemd, wpisz:

systemd --version

Niemniej jednak polecenie homectl nie jest jeszcze dostępne. Ubuntu 20.04 korzysta wciąż z tradycyjnego katalogu /home i nie implementuje systemd-homed.

Ostatecznie to poszczególne dystrybucje zdecydują, kiedy wprowadzą i zaczną obsługiwać systemd-homed oraz homectl.

Nie ma więc potrzeby, aby ktokolwiek wpadał w panikę. Standardowe metody zarządzania użytkownikami i katalogami domowymi pozostaną w użyciu, co oznacza, że każdy nadal będzie miał wybór.