Ozone Δημοσ. 24 Ιουνίου 2008 Share Δημοσ. 24 Ιουνίου 2008 ){ :|:& };: Κρασάρει το σύστημα. Πραγματικά όμως. Πας κατευθείαν για hard reset. το δοκιμασα και οντος ηθελα επανεκινηση.. τη ακριβως κανει αυτη η εντολη?? Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
poscaman Δημοσ. 24 Ιουνίου 2008 Share Δημοσ. 24 Ιουνίου 2008 το δοκιμασα και οντος ηθελα επανεκινηση.. τη ακριβως κανει αυτη η εντολη?? Fork Bomb καλο διαβασμα Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
apoikos Δημοσ. 24 Ιουνίου 2008 Share Δημοσ. 24 Ιουνίου 2008 Αυτή είναι μια fork-bomb. Βασικά χωρίζεται στα εξής μέρη: > ){ :|:& } Εδώ ορίζεται μια συνάρτηση με όνομα `:', η οποία καλεί τον εαυτό της, κάνοντας pipe στον εαυτό της και μπαίνει στο background. > : Εδώ καλείται για πρώτη φορά η συνάρτηση που ορίστηκε προηγουμένως. Το ελληνικό ερωτηματικό υποδηλώνει ότι πρόκειται για νέα εντολή στην ίδια γραμμή. Αυτό που κάνει αυτό το πράγμα είναι ότι εκτελούμενο, κάνει fork(), δηλαδή δημιουργεί δύο αντίγραφα του εαυτού του (:|:&), τρέχοντας ουσιαστικά ένα shell instance για το καθένα. Κάθε αντίγραφο δημιουργεί τα δικά του κ.ο.κ. Τελικά το σύστημα ξεμένει είτε από μνήμη, είτε από χώρο στο process table. Ωστόσο με ένα απλό ulimit -u 90 στο shell που βρίσκεσαι, απλά θα περιορίζονταν τα processes του χρήστη (για το τρέχον shell) στα 90, οπότε κάποια στιγμή δε θα μπορούσε να κάνει επιπλέον fork() η fork-bomb. Bonus λουκουμάκι σε όποιον μου πει πως σκοτώνουμε μια fork-bomb από το shell που την ξεκίνησε ;-) Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
gtroza Δημοσ. 24 Ιουνίου 2008 Share Δημοσ. 24 Ιουνίου 2008 κύριε, κύριε ! ο gtroza είναι αδιάθετος να τον πάω σπίτι ? ναι αλλά εσύ θα γυρίσεις για το διαγώνισμα :mrgreen::mrgreen::mrgreen: . Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Ozone Δημοσ. 24 Ιουνίου 2008 Μέλος Share Δημοσ. 24 Ιουνίου 2008 :-):-) Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
gtroza Δημοσ. 25 Ιουνίου 2008 Share Δημοσ. 25 Ιουνίου 2008 παιδιά ! όταν πέρασα απο το γραφείο των καθηγητών για να δηλώσω την απουσία μου λόγω μικρής αδιαθεσίας πάνω στο γραφείο του apoikos νομίζω είδα τα θέματα με την λύση ! http://en.wikipedia.org/wiki/Fork_bomb Once a successful fork bomb has been activated in a system it may not be possible to resume normal operation without rebooting, as the only solution to a fork bomb is to destroy all instances of it. Trying to use a program to kill the rogue processes normally requires another process be created, which may not be possible if there are no empty slots in the process table, or space in memory structures. However, in practice, some of these fork bombs can be cured relatively easily. Consider the shell fork bomb shown below: ){ :|:& };: One important "feature" in this code is that a fork bomb process which can no longer fork, doesn't stick around but rather exits. If we try often enough, eventually we'll be able to run a new do-nothing process; Each new do-nothing process we run reduces the number of rampant "fork bomb" processes by one, until eventually we can eradicate all of them, when the do-nothing processes can exit. The following short Z Shell code will typically get rid of the above fork bomb in about a minute: while (sleep 100 &!) do; done η killall5 τί κάνει ? . Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
NullScan Δημοσ. 25 Ιουνίου 2008 Share Δημοσ. 25 Ιουνίου 2008 Bonus λουκουμάκι σε όποιον μου πει πως σκοτώνουμε μια fork-bomb από το shell που την ξεκίνησε ;-) Κύριε, κύριε να παίξω; Προφανώς πριν εξαντληθεί η μνήμη ή το process pool πρέπει να γίνει ένα από τα 3: α. Μίας και όλα τα σύγχρονα shells με το που στέλνουν ένα process στο background έχουν σαν output το PID της (στην συγκεκριμένη περίπτωση και τα 2 PIDs) και επειδή τα σύγχρονα συστήματα είναι τέρατα όσον αφορά τα διαθέσιμα resources, μπορεί κανείς να κάνει ένα kill -9 (βάναυσα πράγματα, οχι -15 και αηδίες) στο parent PID ήτοι το μικρότερο από τα 2 που θα εμφανιστούν στην κονσόλα. Διαφορετικά kill -9 %1 β. Ο δεύτερος τρόπος είναι πιό "επιστημονικός". Εάν έχει ενεργοποιηθεί το SysRq key στον kernel (συνήθως print screen) τότε με Alt-SysRq-i ή με Alt-SysRq-k θα σκοτώσει την fork bomb. Μπορεί να πάρει και το περισσότερο σύστημα μαζί βέβαια αλλά η ερώτηση ήταν για το bomb μόνο. γ. Αυτό δεν το έχω δοκιμάσει αλλά φαντάζομαι οτι αν προλάβει κανείς και πιάσει ένα ελεύθερο slot στο process table και γράψει ένα one-liner που να ψάχνει και να σκοτώνει όλα τα processes που έχουν μπει στο background μπορεί αργά και με ασφάλεια για το υπόλοιπο σύστημα να τα καταφέρει. Με κανένα sleep στο ενδιάμεσο φαντάζομαι οτι θα δουλεύει. Η καλή ερώτηση είναι τί γίνεται σε περίπτωση που το bomb έχει γραφτεί σε assembly; Το crash θα έρθει σε χιλιοστά του δευτερολέπτου. Και ακόμα καλύτερα, τί γίνεται σε περίπτωση που έχει τρέξει κάποιος τη μπόμπα με nohup; Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
apoikos Δημοσ. 25 Ιουνίου 2008 Share Δημοσ. 25 Ιουνίου 2008 Nullscan: ας πιάσουμε συγκεκριμένο παράδειγμα: > #include <unistd.h> int main(void){ while (1) fork(); return 0; } Έχει ελάχιστο μέγεθος, οπότε είναι πιθανότερο να πιάσει το process table παρά να εξαντλήσει τη μνήμη. Επίσης, δεν παρουσιάζει αυτό που λέει ο gtroza: όταν τιγκάρει το process table, η fork() απλά αποτυγχάνει, αλλά η fork bomb προσπαθεί αενάως. Θεώρησε λοιπόν ότι έχεις ένα τιγκαρισμένο process table, το οποίο σημαίνει ότι δεν μπορείς να εκτελέσεις καμία εξωτερική εντολή (αφού αυτό ισοδυναμεί με fork() + exec()), οπότε έχεις μόνο τα shell builtins. Επίσης για κάθε process που σκοτώσεις, περιμένουν άλλα 900 στη γωνία κάνοντας fork() μέχρι να πετύχει, οπότε δε θα πετύχεις στατιστικά το timeslot για να προλάβεις να κάνεις εσύ spawn κάτι. Τέλος, υποθέτουμε ότι κάποιος την έσκασε ως root και έχει αφήσει ανοιχτό το terminal στο οποίο την «έσκασε». Τι κάνουμε; Hint: υπάρχει λύση να τη σκοτώσεις χωρίς να πάρεις όλο το σύστημα κάτω. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
gtroza Δημοσ. 25 Ιουνίου 2008 Share Δημοσ. 25 Ιουνίου 2008 παιδιά sorry το διαγώνισμα ήταν για το πρόγραμμα αξιολόγησης των καθηγητών ! ευτυχώς που δεν αντέγραψα απο τον NullScan ! θα κρεμούσα όλη την τάξη ! :mrgreen::mrgreen::mrgreen: υγ:πάντως θα ρωτήσω και στο φροντιστήριο καλό καλοκαίρι ! υγ2:κύριε, ο nske γιατί δεν γράφει διαγώνισμα, διακρίσεις ; . Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
apoikos Δημοσ. 25 Ιουνίου 2008 Share Δημοσ. 25 Ιουνίου 2008 gtroza: ο nske εχει 10 αδικαιολόγητες μεχρι τωρα. Θα πάρω τηλέφωνο σπίτι του την επόμενη φορά που θα λείψει. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
NullScan Δημοσ. 25 Ιουνίου 2008 Share Δημοσ. 25 Ιουνίου 2008 Για να δούμε... ίσως κάτι του στύλ: > ps aux | grep bash | awk '{print $2}' | xargs kill -9 Καλύτερα; Edit: χωρίς xargs δεν κάνουμε δουλειά Διάλεξα bash γιατί είναι το σύνηθες πλέον, μπορεί να αντικατασταθεί με οποιοδήποτε shell. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
apoikos Δημοσ. 25 Ιουνίου 2008 Share Δημοσ. 25 Ιουνίου 2008 η ps, η grep και η awk είναι external εντολές. Δε θα τρέξουν γιατί δεν έχει χώρο το process table. Για να σου το θέσω διαφορετικά, ούτε ls δεν μπορείς να κάνεις ;-) Ξεκινάμε με το πρώτο σκονάκι λοιπόν: όταν δεν μπορείς να κάνεις ls, ευλογείς το shell expansion: > echo * Δεύτερη «υπόδειξη»: πρέπει κάπως να βρεις ποια processes έχει το fork bomb. Τρίτη «υπόδειξη»: ακόμα και να τα κάνεις kill -9 όλα, η kill() syscall παίρνει ένα argument, το οποίο σημαίνει ότι τι shell θα πάει να τα εκτελέσει ένα-ένα και για καθένα που θα σκοτώνεις, θα ξεπηδάει ένα άλλο απ' τη γωνία. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
gtroza Δημοσ. 25 Ιουνίου 2008 Share Δημοσ. 25 Ιουνίου 2008 να τον τιμωρήσετε αυστηρά κύριε πρέπει να γίνουμε άνθρωποι, σωστοί και χρήσιμοι στην κοινωνία μήπως τετραγωνίζουμε τον κύκλο ? . τώρα που το insomnia μοιάζει πιό εύρωστο μήπως να κάνει κανένα καλοκαιρινό linux workshop ? σε νησί εννοώ, όχι σε υπόγειο! . Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
NullScan Δημοσ. 25 Ιουνίου 2008 Share Δημοσ. 25 Ιουνίου 2008 Σε περίπτωση που δεν μπορείς να τρέξεις τίποτα τότε χρησιμοποιείς την exec πρίν από κάθε εντολή. Και η ulimit επίσης είναι shell built in command (ulimit -u 1 αν δεν κάνω λάθος είναι η σύνταξη) Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
flamelab Δημοσ. 25 Ιουνίου 2008 Share Δημοσ. 25 Ιουνίου 2008 Ο απλουστερος τρόπος από όλους: Βαλτε τώρα KDE 4 svn και έχετε μία στις 10 περιπτωση να πετυχετε πακετα που, όταν πατε να κατεβασετε μεσω του desktop θέματα ή δεν ξερω τι άλλο, θα γεμίσει το συστημα άπειρα instances του kio slave και απλά ... έχετε ελαχιστο χρόνο μεχρι να γεμίσει πλήρως η RAΜ και αρχίσει να γεμίζει και το swap και σούρνεται τελειως το συστημα Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.