Zastanawiam się, co dokładnie oznacza „Obsługa przestrzeni nazw” w jądrze Linuksa. Używam jądra 3.11.1 (najnowszego stabilnego jądra w tej chwili).
Jeśli zdecyduję się go wyłączyć, czy zauważę jakieś zmiany w moim systemie?
A jeśli ktoś zdecyduje się skorzystać z przestrzeni nazw, czy wystarczy po prostu skompilować się NAMESPACES=Y
w jądrze, czy też potrzebuje również narzędzi przestrzeni użytkownika?
linux
linux-kernel
namespace
Martin Vegter
źródło
źródło
Odpowiedzi:
W skrócie, przestrzenie nazw zapewniają sposób na zbudowanie wirtualnego systemu Linux wewnątrz większego systemu Linux. Różni się to od uruchamiania maszyny wirtualnej, która działa jako proces nieuprzywilejowany: maszyna wirtualna pojawia się jako host jako pojedynczy proces, podczas gdy procesy działające w przestrzeni nazw nadal działają w systemie hosta.
System wirtualny działający w większym systemie nazywa się kontenerem . Idea kontenera polega na tym, że procesy uruchomione w kontenerze uważają, że są to jedyne procesy w systemie. W szczególności użytkownik root w kontenerze nie ma uprawnień roota poza kontenerem (zwróć uwagę, że jest to prawdą tylko w wystarczających wersjach jądra).
Przestrzenie nazw wirtualizują jedną funkcję naraz. Oto niektóre przykłady typów przestrzeni nazw:
Od jądra Linuksa 3.8 nieuprzywilejowani użytkownicy mogą tworzyć przestrzenie nazw użytkowników. Umożliwia to zwykłemu użytkownikowi korzystanie z funkcji zarezerwowanych dla użytkownika root (takich jak zmiana tabel routingu lub ustawienia).
Przestrzenie nazw polegają na jądrze w celu zapewnienia izolacji między przestrzeniami nazw. Jest to dość skomplikowane, aby uzyskać prawidłowe, więc nadal mogą leżeć błędy bezpieczeństwa. Ryzyko błędów bezpieczeństwa byłoby głównym powodem, dla którego funkcja ta nie zostanie włączona. Kolejnym powodem, dla którego nie można go włączyć, jest tworzenie małego jądra dla urządzenia osadzonego. W jądrze ogólnego przeznaczenia, które można zainstalować na typowym serwerze lub stacji roboczej, przestrzenie nazw powinny być włączone, jak każda inna dojrzała funkcja jądra.
Nadal niewiele aplikacji korzysta z przestrzeni nazw. Tu jest kilka:
Aby uzyskać więcej informacji, zobacz serię artykułów LWN autorstwa Michaela Kerriska .
źródło
Przestrzeń nazw jądra Linux to koncepcja używana do izolowania grupy procesów od innych w odniesieniu do dostępu do zasobu systemowego. Na przykład dwie różne przestrzenie nazw PID mogą zawierać procesy z identycznymi PID, ale zupełnie innym obrazem procesu. Są one często używane w wirtualizacji na poziomie systemu operacyjnego, w której jedno jądro jednocześnie obsługuje różne systemy operacyjne - wszystkie muszą być oparte na systemie Linux (ponieważ oczywiście współużytkują jądro), ale mogą być różnymi dystrybucjami i wersjami. Zobacz na przykład LXC .
Możesz zauważyć wyłączenie na przykład w systemach opartych na systemie, ponieważ systemd może używać przestrzeni nazw dla funkcji kontenera . Dlatego wiele zależy od tego, jakiej dystrybucji używasz i co zamierzasz zrobić z systemem.
Podobnie jak w przypadku prawie każdej funkcji jądra, na pewno potrzebujesz programów przestrzeni użytkownika - nawet jeśli rozmawiałeś z jądrem za pomocą specjalnych plików (nie jestem pewien, czy potrafisz), zwykle lepiej jest polegać na specjalistycznych narzędziach, ponieważ one oferować przyjazny interfejs API.
źródło
Aby podać przykład użycia przestrzeni nazw, w systemach obsługujących SELinux (MLS lub Strict). Przestrzeń nazw jest zwykle używana do tworzenia indywidualnych
/tmp
i / lub/home
katalogów dla każdego użytkownika. Te katalogi są widoczne tylko dla: użytkownika, użytkowników o tej samej etykiecie, jądra i użytkowników z uprzywilejowanym dostępem. Katalog nazw/tmp
jest oznaczony przez SELinux-MLS, aby pasował do etykiety SELinux-MLS użytkownika. W tym scenariuszu/tmp
katalog, który widzi użytkownik, może naprawdę zostać zamontowany w innym miejscu niż/tmp
(/var/user-tmp
). Użytkownik widzi jednak tylko/tmp
pliki utworzone w wyniku aktywności użytkownika. użytkownik nigdy nie zobaczy żadnych plików,/tmp
które są produktem innych użytkowników.źródło