kernel: Obsługa przestrzeni nazw


15

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=Yw jądrze, czy też potrzebuje również narzędzi przestrzeni użytkownika?


5
Przestrzenie nazw są dość dobrze wyjaśnione tutaj: lwn.net/Articles/531114 (nie jest to odpowiedź, ponieważ tak naprawdę nie odpowiadam na twoje pytania - wskazuję ci stos tekstów)
derobert 24.09.2013

Odpowiedzi:


21

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:

  • Przestrzenie nazw użytkowników - pozwala procesom zachowywać się tak, jakby działały jak różni użytkownicy wewnątrz i na zewnątrz przestrzeni nazw. W szczególności procesy działające jako UID 0 w przestrzeni nazw mają uprawnienia administratora tylko w odniesieniu do procesów działających w tej samej 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 PID - procesy w przestrzeni nazw PID nie mogą zabijać ani śledzić procesów poza tą przestrzenią nazw.
  • Montuj przestrzenie nazw - pozwala to procesom na uzyskanie własnego widoku systemu plików. Ten widok może być widokiem częściowym, pozwalającym na ukrywanie niektórych elementów systemu plików i ponowne ich komponowanie, aby drzewa katalogów pojawiały się w różnych miejscach. Przestrzenie nazw montowania uogólniają tradycyjny chroot uniksowy , co pozwala na ograniczenie procesów do określonego poddrzewa.
  • Sieciowe przestrzenie nazw - pozwalają oddzielić zasoby sieciowe (urządzenia sieciowe), a tym samym poprawić izolację procesów.

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 .


6

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.


1

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 /tmpi / lub /homekatalogó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 /tmpjest oznaczony przez SELinux-MLS, aby pasował do etykiety SELinux-MLS użytkownika. W tym scenariuszu /tmpkatalog, który widzi użytkownik, może naprawdę zostać zamontowany w innym miejscu niż /tmp( /var/user-tmp). Użytkownik widzi jednak tylko /tmppliki utworzone w wyniku aktywności użytkownika. użytkownik nigdy nie zobaczy żadnych plików, /tmpktóre są produktem innych użytkowników.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.