Virtual machines versus sandboxes

Ξεκίνησε από mandarinos, 05 Μαρ 2024, 08:56:32 ΠΜ

« προηγούμενο - επόμενο »

mandarinos

Με αφορμή αυτό το thread: https://alkisg.mysch.gr/steki/index.php?topic=7804.0 , και με το σκεπτικό "πώς αποφεύγουμε εγκαταστάσεις σε δεύτερο σκληρό δίσκο;", θα ήθελα τη γνώμη των εμπείρων συναδέλφων.

Απ' όσα έχω καταλάβει:
- Μία virtual machine είναι σα να κλείνεις τραπέζι σε εστιατόριο. Μπορείς να φέρεις όποια παρέα θέλεις, αλλά το μενού και οι υπηρεσίες (πχ πού θα καθήσεις, κλπ) είναι συγκεκριμένα. Έτσι, όλα πάνε καλά όταν "φιλοξενείται" απλά ένα πχ σχεδιαστικό πρόγραμμα, ή ένα ΛΣ γιά desktop, αλλά μπορεί να έχουμε ip clashing, εάν το ΛΣ / πρόγραμμα που "φιλοξενείται" ζητάει κι αυτό τον έλεγχο των διευθύνσεων ip του LAN.
- Ένα sandbox είναι σα να νοικιάζεις όλη την αίθουσα, και κάνεις ό,τι γουστάρεις. (Πχ ένα άγριο πάρτυ με τσουλήθρα απάνω στις χυμένες μπύρες στο πάτωμα! :) ) Εφ' όσον το ΛΣ που "φιλοξενεί", υποχωρεί (προσωρινά) τελείως στο background - παραχωρώντας ακόμη και τον έλεγχο των διευθύνσεων ip του LAN.

Ωστόσο, από μιά ματιά που έριξα στο Διαδίκτυο, είδα πως ακόμη κι οι "παλιοσειρές" μπερδεύουν τις virtual machines με τα sandboxes. (Πχ εδώ: https://sourceforge.net/software/sandbox/linux/ .) Άσε που τα -θεωρούμενα- καλά sandboxes είναι εμπορικά προϊόντα και ζητούν πληρωμή!

Θα εκτιμούσα κάθε επεξήγηση από έμπειρους συναδέλφους!

alkisg

Ένα virtual machine είναι σαν να έχεις ένα κανονικό machine. Κάνεις εγκατάσταση λειτουργικού συστήματος μέσα του. Έχει δικό του virtual δίσκο, CPU, RAM, δίκτυο, τα πάντα, όλο το εστιατόριο.

Ενώ sandboxing είναι ένας διαφορετικός τρόπος για να τρέξεις μια εφαρμογή. Αντί να της επιτρέπεις πλήρη πρόσβαση σε όλους τους πόρους (σύστημα αρχείων, δίκτυο, CPU, RAM κλπ) την περιορίζεις και της λες π.χ. "επιτρέπεται να διαβάζεις / γράφεις μόνο στον φάκελο /home/user/application, άρα ακόμα και κακόβουλο λογισμικό να είσαι, δεν μπορείς να διαβάσεις τους κωδικούς μου στο αρχείο /home/user/passwords.txt". Η εφαρμογή βέβαια μπορεί να είναι και σύνολο εφαρμογών που να τρέχουν όλες κάτω από το ίδιο sandbox, αλλά συνήθως με κοινό στόχο (π.χ. μια εφαρμογή apache/php/mysql).

Για το δίκτυο και στις δύο περιπτώσεις υπάρχουν πολλές μέθοδοι, π.χ. bridged όπου είναι σαν να έχεις μια δεύτερη κάρτα δικτύου αφιερωμένη στο vm ή στο sandboxed application με δικιά της IP στο τοπικό δίκτυο, NAT όπου είναι σαν να είναι "πίσω" από έναν virtual router, native, private κλπ.

Άρα γενικά VM = "βαριά" εξομοίωση υπολογιστή μέσω υποστήριξης hardware,
sandbox = "ελαφριά" απομόνωση εφαρμογής μέσω υποστήριξης του λειτουργικού.

mandarinos

Οκ, χίλια ευχαριστώ! Το ξεκαθάρισα.

Virtual machines έχω ήδη δοκιμάσει. Εάν, τώρα, βρω κανένα τζαμπέ sandbox, φυσικά θα το δοκιμάσω κι αυτό, να δω πώς φέρεται. Πληροφορική = διάβασμα και πειραματισμός non-stop! :)

mandarinos

Είχα ξεχάσει τα containers! Αυτά, πού τα χρησιμοποιούμε; Ίδια χρήση με vm's; (Μερικά απ' αυτά συγκεντρωμένα, εδώ: https://linuxcontainers.org/ )

(Ένα ωραίο σχήμα, που επεξηγεί τη δομή τους, βρίσκεται εδώ: https://www.atlassian.com/microservices/cloud-computing/containers-vs-vms )

alkisg

#4
Τα containers στο περίπου είναι μεγάλα sandboxes, δηλαδή ελαφριά απομόνωση συλλογής εφαρμογών με υποστήριξη λειτουργικού, όχι βαριά εξομοίωση ολόκληρου υπολογιστή με υποστήριξη hardware.

Π.χ. αν τρέξεις `uname -a` για να δεις την έκδοση του πυρήνα,
σε sandbox ή container θα είναι το ίδιο με του "host", αφού από πίσω τρέχει ένας και μοναδικός πυρήνας,
ενώ σε VM θα είναι διαφορετικό το αποτέλεσμα, αφού το VM τρέχει ξεχωριστό πυρήνα από τον host.

Sandboxes είναι τα flatpak και τα snap στο Linux, αλλά και όλες οι εφαρμογές στο Android. Αν θες να πειραματιστείς χωρίς να πακετάρεις μια εφαρμογή σε sandbox, δοκίμασε με την εντολή firejail.
Για containers δες την εντολή systemd-nspawn και τα lxc/incus/docker.