PID Namespace
Βασικές Πληροφορίες
Το PID (Process IDentifier) namespace είναι μια λειτουργία στον πυρήνα του Linux που παρέχει απομόνωση διεργασιών επιτρέποντας σε μια ομάδα διεργασιών να έχει το δικό της σύνολο μοναδικών PIDs, ξεχωριστά από τα PIDs σε άλλα namespaces. Αυτό είναι ιδιαίτερα χρήσιμο στην ενθυλάκωση, όπου η απομόνωση διεργασιών είναι απαραίτητη για την ασφάλεια και τη διαχείριση πόρων.
Όταν δημιουργείται ένα νέο PID namespace, η πρώτη διεργασία σε αυτό το namespace αντιστοιχίζεται στο PID 1. Αυτή η διεργασία γίνεται η διεργασία "init" του νέου namespace και είναι υπεύθυνη για τη διαχείριση άλλων διεργασιών μέσα στο namespace. Κάθε επόμενη διεργασία που δημιουργείται μέσα στο namespace θα έχει ένα μοναδικό PID μέσα σε αυτό το namespace και αυτά τα PIDs θα είναι ανεξάρτητα από τα PIDs σε άλλα namespaces.
Από την οπτική γωνία μιας διεργασίας μέσα σε ένα PID namespace, μπορεί να βλέπει μόνο άλλες διεργασίες στο ίδιο namespace. Δεν είναι ενήμερη για διεργασίες σε άλλα namespaces και δεν μπορεί να αλληλεπιδράσει με αυτές χρησιμοποιώντας παραδοσιακά εργαλεία διαχείρισης διεργασιών (π.χ. kill
, wait
, κλπ.). Αυτό παρέχει ένα επίπεδο απομόνωσης που βοηθά στην αποτροπή των διεργασιών να παρεμβαίνουν μεταξύ τους.
Πώς λειτουργεί:
Όταν δημιουργείται μια νέα διεργασία (π.χ. χρησιμοποιώντας τη συστημική κλήση
clone()
), η διεργασία μπορεί να αντιστοιχιστεί σε ένα νέο ή υπάρχον PID namespace. Εάν δημιουργείται ένα νέο namespace, η διεργασία γίνεται η διεργασία "init" αυτού του namespace.Ο πυρήνας διατηρεί μια αντιστοίχιση μεταξύ των PIDs στο νέο namespace και των αντίστοιχων PIDs στο γονικό namespace (δηλαδή το namespace από το οποίο δημιουργήθηκε το νέο namespace). Αυτή η αντιστοίχιση επιτρέπει στον πυρήνα να μεταφράζει τα PIDs όταν είναι απαραίτητο, όπως όταν στέλνει σήματα μεταξύ διεργασιών σε διαφορετικά namespaces.
Οι διεργασίες μέσα σε ένα PID namespace μπορούν να βλέπουν και να αλληλεπιδρούν με άλλες διεργασίες στο ίδιο namespace. Δεν είναι ενήμερες για διεργασίες σε άλλα namespaces και τα PIDs τους είναι μοναδικά μέσα στο namespace τους.
Όταν ένα PID namespace καταστρέφεται (π.χ. όταν η διεργασία "init" του namespace εξέρχεται), όλες οι διεργασίες μέσα σε αυτό το namespace τερματίζονται. Αυτό εξασφαλίζει ότι όλοι οι πόροι που σχετίζονται με το namespace καθαρίζονται σωστά.
Εργαστήριο:
Δημιουργία διαφορετικών Namespaces
Εντολή CLI
Με την προσάρτηση μιας νέας περίπτωσης του αρχείου συστήματος /proc
εάν χρησιμοποιείτε την παράμετρο --mount-proc
, εξασφαλίζετε ότι το νέο namespace περιέχει μια ακριβή και απομονωμένη προβολή των πληροφοριών διεργασίας που είναι συγκεκριμένες για αυτό το namespace.
Docker
Ελέγξτε σε ποιο namespace βρίσκεται η διεργασία σας
To check which namespace your process is in, you can use the following command:
This command will display the PID (Process ID) of your process along with the namespace it belongs to.
Βρείτε όλα τα PID namespaces
Να σημειωθεί ότι ο ριζικός χρήστης από το αρχικό (προεπιλεγμένο) PID namespace μπορεί να δει όλες τις διεργασίες, ακόμη και αυτές στα νέα PID namespaces, γι' αυτό μπορούμε να δούμε όλα τα PID namespaces.
Εισέλθετε μέσα σε ένα PID namespace
Όταν εισέρχεστε σε ένα PID namespace από το προεπιλεγμένο namespace, θα εξακολουθείτε να βλέπετε όλες τις διεργασίες. Και η διεργασία από αυτό το PID ns θα μπορεί να δει το νέο bash στο PID ns.
Επίσης, μπορείτε να εισέλθετε σε ένα άλλο PID namespace μόνο αν είστε root. Και δεν μπορείτε να εισέλθετε σε άλλο namespace χωρίς έναν δείκτη που να δείχνει σε αυτό (όπως /proc/self/ns/pid
)
Αναφορές
Last updated