Jakiś czas temu do hostowania m.in. serwera Home Assistant zastąpiłem Raspberry Pi 3B+ małym komputerem GMKtec G3. A że nowy sprzęt posiada sporą nadwyżkę mocy jak na moje potrzeby „inteligentnego domo”, to uznałem, że przeniosę na niego kilka innych usług. A skoro tak, to wygodniej będzie przejść na wirtualizację. Wybór padł na Promox, a wraz z tym wyborem pojawiło się sporo nowych tematów, z których duża część, to pomysły na kolejne artykuły. Jednym z tematów, jest zmiana typu kontenera LXC z uprzywilejowanego na nieuprzywilejowany, i odwrotnie…

Zmiana kontenera uprzywilejowanego w nieuprzywilejowany i odwrotnie w Proxmox

Nie będę tutaj rozpisywał się o tym, czym różni się kontener uprzywilejowany od nieuprzywilejowanego, bo każdy zainteresowany raczej wie, bo jest to opisane w dokumentacji, a reszta pewnie będzie używać nieuprzywilejowanych. Choćby ze względów bezpieczeństwa.

Natomiast czasem może się okazać, że podjęta przy tworzeniu kontenera LXC decyzja dotycząca tego, czy ma być to kontener uprzywilejowany, czy nie, okazuje się błędna. I wtedy zaczyna się zabawa, bo teoretycznie odpowiednia opcja znajduje się w pliku konfiguracyjnym kontenera, ale sama jej zmiana to zazwyczaj za mało. Bo owszem, zmieni to omawiane ustawienie dla kontenera, ale jest duża szansa, że rozjadą się uprawnienia.

Na szczęście nie musi oznaczać to ręcznej korekty, czy – dla świętego spokoju – stawiania kontenera od nowa. Można skorzystać np. ze skryptu LXC Container Privilege Converter przygotowanego przez Floriana Kefferpütza i dostępnego w serwisie GitHub.

Cała procedura jest wprawdzie opisana na stronie projektu, ale dla porządku przedstawię ją również w tym artykule…

Zaczynamy od skolonowania – w wybrane miejsce – repozyturium z serwisu GitHub, oczywiście na maszynie, na której zainstalowany jest Proxmox:

git clone https://github.com/onethree7/proxmox-lxc-privilege-converter

Następnie przechodzimy do katalogu ze skryptem i sprawiamy, by był wykonywalny:

cd proxmox-lxc-privilege-converter
chmod +x lxc_privilege_converter.sh

Teraz zostało już tylko uruchomić skrypt:

sudo ./lxc_privilege_converter.sh

Dalej odpowiadamy na kilka pytań, takich jak wybór kontenera źródłowego, identyfikator kontenera docelowego itp…

Zmiana poprzez kopię

Punkt ten nazwałem „zmiana poprzez kopię” nie tylko dlatego, że cała procedura zmiany typu kontenera LXC z uprzywilejowanego na nieuprzywilejowany lub odwrotnie odbywa się poprzez stworzenie kopii aktualnego kontenera, ale też dlatego, że jeśli chcemy zachować identyfikator kontenera, bo np. adresy IP mamy powiązane z identyfikatorami,  to potrzebna będzie jeszcze jedna kopia. Zrobiona przed uruchomieniem skryptu.

Bo skoro skrypt tworzy kopię istniejącego kontenera i później na jego bazie tworzy nowy, z odwrotnym stanem, ale w trakcie tej operacji nie kasuje kontenera źródłowego, to siłą rzeczy musimy użyć innego identyfikatora, bo nie może być dwóch wirtualnych maszyn z tym samym identyfikatorem.

Natomiast można to obejść tworząc – jeszcze przed konwersją kontenera za pomocą skryptu – kopię kontenera samodzielnie, z innym identyfikatorem – tymczasowym. Następnie usuwamy oryginalny kontener źródłowy, co automatycznie zwalnia nam jego identyfikator, i skrypt uruchamiamy na tymczasowo utworzonej kopii, z tymczasowym identyfikatorem.

Oczywiście tymczasową kopię wykonujemy z takim samym ustawieniem opcji uprzywilejowany/nieuprzywilejowany, bo zmianę wykonujemy dopiero później, za pomocą skryptu.

(!) Zgłoś błąd na stronie
Pomogłem? To może postawisz mi wirtualną kawę?
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
Wdrożenie Omnibusa w sklepie na WooCommerce
Jak (legalnie) latać dronem w Kategorii Otwartej
Patryk