kernel: supporto dei namespace


15

Mi chiedo cosa significhi esattamente la funzione "Supporto dei namespace" nel kernel di Linux. Sto usando il kernel 3.11.1 (il kernel stabile più recente in questo momento).

Se decido di disabilitarlo, noterò qualche modifica sul mio sistema?

E nel caso in cui qualcuno decida di utilizzare gli spazi dei nomi, è sufficiente compilare solo NAMESPACES=Ynel kernel o ha bisogno anche degli strumenti per lo spazio utente?


5
Gli spazi dei nomi sono spiegati abbastanza bene qui: lwn.net/Articles/531114 (non una risposta, perché non sto davvero rispondendo alle tue domande - ti sto indicando un mucchio di testo)
derobert

Risposte:


21

In breve, i namespace offrono un modo per costruire un sistema Linux virtuale all'interno di un sistema Linux più grande. Ciò è diverso dall'esecuzione di una macchina virtuale che funziona come un processo senza privilegi: la macchina virtuale appare come un singolo processo nell'host, mentre i processi in esecuzione all'interno di uno spazio dei nomi sono ancora in esecuzione sul sistema host.

Un sistema virtuale in esecuzione all'interno di un sistema più grande è chiamato contenitore . L'idea di un contenitore è che i processi in esecuzione all'interno del contenitore credano di essere gli unici processi nel sistema. In particolare, l'utente root all'interno del contenitore non ha i privilegi di root all'esterno del contenitore (si noti che ciò è vero solo nelle versioni abbastanza recenti del kernel).

Gli spazi dei nomi virtualizzano una funzione alla volta. Alcuni esempi di tipi di spazi dei nomi sono:

  • Spazi dei nomi utente : ciò consente ai processi di comportarsi come se fossero in esecuzione come utenti diversi all'interno e all'esterno dello spazio dei nomi. In particolare, i processi in esecuzione come UID 0 all'interno dello spazio dei nomi hanno privilegi di superutente solo rispetto ai processi in esecuzione nello stesso spazio dei nomi.
    Dal kernel Linux 3.8, gli utenti non privilegiati possono creare spazi dei nomi utente. Ciò consente a un utente normale di utilizzare le funzioni riservate al root (come la modifica delle tabelle di routing o l'impostazione delle funzionalità).
  • Spazi dei nomi PID : i processi all'interno di uno spazio dei nomi PID non possono uccidere o tracciare i processi all'esterno di quello spazio dei nomi.
  • Montare spazi dei nomi : ciò consente ai processi di avere una propria visione del filesystem. Questa vista può essere parziale, consentendo di nascondere alcuni pezzi del filesystem e di ricomporre i pezzi in modo che gli alberi delle directory compaiano in luoghi diversi. Gli spazi dei nomi di mount generalizzano la chroot di funzionalità Unix tradizionale , che consente ai processi di essere limitati a una sottostruttura particolare.
  • Spazi dei nomi di rete : consentono la separazione delle risorse di rete (dispositivi di rete) e quindi migliorano l'isolamento dei processi.

Gli spazi dei nomi si basano sul kernel per fornire isolamento tra gli spazi dei nomi. Questo è abbastanza complicato da ottenere, quindi potrebbero esserci ancora bug di sicurezza. Il rischio di bug di sicurezza sarebbe il motivo principale per non abilitare la funzione. Un altro motivo per non abilitarlo sarebbe quando si sta creando un piccolo kernel per un dispositivo incorporato. In un kernel generico che installeresti su un tipico server o workstation, gli spazi dei nomi dovrebbero essere abilitati, come qualsiasi altra funzione del kernel maturo.

Esistono ancora poche applicazioni che fanno uso di spazi dei nomi. Eccone alcuni:

  • LXC è affermata. Si basa su cgroups per fornire contenitori.
  • virt-sandbox è un progetto sandboxing più recente.
  • Le versioni recenti di Chromium usano anche spazi dei nomi per il sandboxing ove disponibili.
  • Il framework uWSGI per le applicazioni in cluster utilizza gli spazi dei nomi per migliorare il sandboxing.

Vedi la serie di articoli LWN di Michael Kerrisk per maggiori informazioni.


6

Lo spazio dei nomi del kernel Linux è un concetto utilizzato per isolare un gruppo di processi dagli altri rispetto all'accesso a una risorsa di sistema. Ad esempio, due diversi spazi dei nomi PID possono contenere processi con PID identici ma un'immagine di processo completamente diversa. Vengono spesso utilizzati nella virtualizzazione a livello di sistema operativo, in cui un singolo kernel esegue contemporaneamente vari sistemi operativi; tutti devono essere basati su Linux (perché condividono il kernel, ovviamente), ma possono essere distribuzioni e versioni diverse. Vedi ad esempio LXC .

Si può notare disabilitarlo ad esempio sui sistemi basati su systemd, poiché systemd è in grado di utilizzare gli spazi dei nomi per la sua funzionalità contenitore . Quindi molto dipende dalla distribuzione che si sta utilizzando e da cosa si intende fare con il sistema.

Come con quasi tutte le funzionalità del kernel, hai sicuramente bisogno di una sorta di programmi per lo spazio utente - anche se hai parlato con il kernel attraverso file speciali (non sono sicuro che puoi), di solito è molto meglio fare affidamento su strumenti specializzati, dal momento che offri API intuitive.


1

Per fare un esempio dell'uso dello spazio dei nomi, nei sistemi SELinux (MLS o Strict) abilitati. Lo spazio dei nomi viene in genere utilizzato per creare directory individuali /tmpeo /homeper ciascun utente. Tali directory sono visibili solo a: l'utente, gli utenti con la stessa etichetta, il kernel e gli utenti con accesso privilegiato. La /tmpdirectory con spazio dei nomi viene etichettata da SELinux-MLS in modo che corrisponda all'etichetta SELinux-MLS dell'utente. In questo scenario, la /tmpdirectory visualizzata dall'utente può essere effettivamente montata in un luogo diverso da /tmp( /var/user-tmp). L'utente tuttavia vede solo /tmpcon i file creati a causa dell'attività dell'utente. l'utente non vedrà mai alcun file /tmpche sia il prodotto di altri utenti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.