2016-01-01 24 views
10

Il ip netns crea il riferimento allo spazio dei nomi di rete (denominato) in /var/run/ns, che potrebbe essere facilmente rintracciato. Inoltre, lo stesso potrebbe essere determinato tramite /proc/[pid]/ns/net. Tuttavia, è possibile che alcuni programmi personalizzati creino un net ns e salvino l'inode corrispondente in qualche altro luogo non convenzionale. Questo può rendere difficile determinare se ci siano o meno reti che potremmo elencare.Spazi dei nomi Linux: è possibile che uno spazio dei nomi di rete esista senza essere associato a un processo?

In secondo luogo, unshare <cmd> distrugge la rete ns quando il processo si interrompe, il che va bene. Tuttavia, ip netns exec <netns> <cmd> manterrà il ns anche dopo l'uscita del comando/processo. Quindi, credo, potrebbe essere possibile per qualsiasi programma personalizzato fare lo stesso.

Quindi, la domanda è: E 'possibile che un programma personalizzato crea un anonimo ns netti, e si lascia non associati con qualsiasi processo?

Inoltre, è possibile elencare tali net (nascosti) dallo spazio utente, dato che non conosciamo i percorsi degli inode? (Il kernel ha ovviamente un elenco collegato di net ns) Un frammento di codice sarà utile.

+0

Apprezzerebbero più risposte. Chiunque? Grazie! – user31986

risposta

1

È possibile che un programma personalizzato crei una rete senza nome e non venga associato a nessun processo?

Sì, è possibile. Secondo Linux namespace pagina man (http://man7.org/linux/man-pages/man7/namespaces.7.html):

Ogni processo ha un/proc/[PID]/ns/sottodirectory che contiene una voce per ogni spazio dei nomi che supporta essere manipolato da setns (2):

Bind (vedi mount (2)) uno dei file in questa directory su da qualche altra parte nel filesystem mantiene lo spazio dei nomi corrispondente di il processo specificato da pid vivo anche se tutti i processi attualmente in terminano lo spazio dei nomi.

Chi d'altra domanda:

è possibile elencare tali (nascosti) ns netti da user-space, dato che noi non conosciamo i percorsi dei inode?

Se si considera la citazione di cui sopra dalla prima domanda, esaminando i percorsi legati si dovrebbe essere in grado di trovare quelle spazi dei nomi nascosti.

+0

I percorsi associati in/proc/sono specifici dell'utilità netns che lo crea deliberatamente. Se crei un net ns, ad esempio, nel programma C, come lo traccia? – user31986