Dlaczego Home Assistant odtwarza brakujące pliki z niewłaściwym właścicielem?

Eva Wong jest Technicznym pisarzem i stałym majsterkowiczem w ZimaSpace. Całe życie geek z pasją do homelabów i oprogramowania open-source, specjalizuje się w tłumaczeniu skomplikowanych koncepcji technicznych na przystępne, praktyczne przewodniki. Eva wierzy, że samodzielne hostowanie powinno być zabawą, a nie czymś onieśmielającym. Poprzez swoje samouczki umożliwia społeczności rozwiewanie tajemnic konfiguracji sprzętu, od budowy pierwszego NAS po opanowanie kontenerów Docker.

Home Assistant nie wybiera przyjaznej nazwy użytkownika hosta podczas ponownego tworzenia pliku. Nowy plik zwykle dziedziczy numeryczny UID, GID, umask, ACL oraz reguły systemu plików procesu, który utworzył go wewnątrz kontenera.

Staje się to widoczne w przypadku montowania bind mount, ponieważ Linux zapisuje identyfikatory numeryczne, a host i kontener mogą przypisywać tym samym liczbom różne nazwy. Przed zmianą uprawnień zatrzymaj Home Assistant, zapisz starych i nowych właścicieli numerycznych, zidentyfikuj proces uruchomieniowy oraz ustal, czy plik został utworzony przez Home Assistant, punkt wejścia, narzędzie do tworzenia kopii zapasowych czy hosta.

Potwierdź, który proces utworzył plik

Porównaj czas utworzenia lub modyfikacji pliku z uruchomieniem kontenera oraz zadaniem przywracania, aktualizacji lub dodatku. Następnie sprawdź numeryczny UID i GID na hoście oraz tożsamość procesu Home Assistant wewnątrz kontenera. Nazwy użytkowników mogą się różnić; wiarygodnym punktem porównania są liczby.

Problem z kontenerem polega na tym, że pliki w montowanym katalogu bind są tworzone z tożsamością używaną przez proces kontenera. Niezależne wyjaśnienie niezgodności właściciela systemu plików hosta pokazuje, dlaczego sama zgodność nazw nie rozwiązuje różnic numerycznych UID i GID.

Jeśli nowy właściciel odpowiada procesowi kontenera, główna przyczyna została potwierdzona. Jeśli odpowiada rootowi lub innemu pomocniczemu procesowi, sprawdź punkt wejścia, narzędzie przywracania, zaplanowane zadanie lub skrypt uruchamiany po stronie hosta, zanim zmienisz użytkownika uruchomieniowego Home Assistant.

Sprawdź montowanie, ACL i granicę systemu plików

Potwierdź, że ścieżka jest właściwym montowaniem bind, a nie wolumenem nazwanym lub katalogiem obrazu ukrytym przez montowanie. Sprawdź właściciela i tryb katalogu nadrzędnego, domyślną listę ACL oraz to, czy system plików jest lokalny, NFS, SMB lub oparty na innej sieciowej pamięci masowej.

Proces może utworzyć plik wyłącznie zgodnie z uprawnieniami i mapowaniem udostępnianym przez system plików. Mapowanie tożsamości NFS, root squashing, opcje montowania SMB, domyślne ACL oraz restrykcyjny umask mogą zmienić widocznego właściciela lub dostęp do zapisu, nawet gdy UID kontenera jest prawidłowy.

Jeśli plik tymczasowy utworzony z użyciem UID procesu uruchomieniowego otrzyma oczekiwanego właściciela, przejdź do ustalenia twórcy właściwego dla aplikacji. Jeśli otrzyma niewłaściwego właściciela, najpierw napraw montowanie lub mapowanie systemu plików; zmiana konfiguracji Home Assistant nie ominie tej warstwy.

Napraw wyłącznie potwierdzoną niezgodność właściciela

Zatrzymaj Home Assistant przed zmianą właściciela aktywnej bazy danych, rejestru lub pliku konfiguracyjnego. Utwórz kopię zapasową lub migawkę, a następnie zmień wyłącznie dotkniętą ścieżkę na zweryfikowany UID i GID usługi. Zachowaj bity wykonywania, listy ACL i uprawnienia specjalne, zamiast stosować szeroki tryb, taki jak dostęp do zapisu dla wszystkich.

Zaktualizuj definicję wdrożenia, aby po ponownym utworzeniu kontenera używana była ta sama tożsamość uruchomieniowa, albo udokumentuj, dlaczego obraz musi działać z domyślną tożsamością, i dopasuj do niej ścieżkę na hoście. Unikaj wykonywania chown na całym drzewie katalogów przy każdym uruchomieniu; może to działać wolno, ukrywać błędy projektowe i zmieniać pliki należące do innych usług.

Przewodnik ZimaSpace dotyczący zapobiegania rozbieżnościom uprawnień zawiera szerszą listę kontrolną dotyczącą montowań, właścicieli, testów zapisu i zachowania podczas przywracania po skorygowaniu bieżącej niezgodności właściciela.

-15% OFF

Zweryfikuj właściciela po ponownym utworzeniu i rzeczywistym zapisie

Uruchom Home Assistant i wywołaj dokładnie tę operację, która ponownie utworzyła plik. Potwierdź, że nowy plik ma zamierzonego właściciela numerycznego, Home Assistant może go aktualizować, a proces tworzenia kopii zapasowych po stronie hosta może go odczytać. Pomyślne uruchomienie bez wykonania zapisu nie dowodzi, że problem został rozwiązany.

Uruchom ponownie usługę i odtwórz kontener z zapisanej konfiguracji. Właściciel, ACL i działanie zapisu muszą pozostać stabilne po obu tych zdarzeniach. Sprawdź dzienniki pod kątem komunikatów o odmowie dostępu, bazie danych tylko do odczytu, nieudanej kopii zapasowej lub błędach konfiguracji integracji.

Skontaktuj się z opiekunem obrazu lub administratorem pamięci masowej, jeśli tożsamość tworząca plik zmienia się nieoczekiwanie między wersjami, sieciowy system plików przepisuje właściciela lub wymagana usługa nie może bezpiecznie współdzielić ścieżki. Zachowaj identyfikatory numeryczne, definicję montowania, typ systemu plików i minimalny przypadek odtwarzający problem.

Wsparcie i wskazówki

Więcej do przeczytania

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.