ace3@midway.uchicago.edu
dd if=/dev/hda8 of=/etc/dosswap
gzip -9 /etc/dosswap
mkswap /dev/hda8 XXXXX
swapon -av
Σιγουρευτείτε ότι προσθέσατε μια γραμμή για το swap partition στο αρχείο /etc/fstab
swapoff -av
zcat /etc/dosswap.gz | dd of=/dev/hda8 bs=1k count=100
# Note that this only writes the first 100 blocks back to the partition. I've found empirically that this is sufficient
>> Ποιά είναι τα πλεονεκτήματα και τα μειονεκτήματα για το παραπάνω;
Πλεονέκτημα: εξοικονομείτε ουσιαστικό χώρο από το δίσκο σας.
Μειονέκτημα: αν το βήμα 5 δε γίνεται αυτόματα, πρέπει να θυμηθείτε να το κάνετε με το χέρι, και επιβαρύνει τη διαδικασία εκκίνησης κατά ένα nanosecond :-)
michael@actrix.gen.nz
Να ένα τρυκ που έπρεπε να χρησιμοποιήσω μερικές φορές.
undelete αρχείου κειμένου για απελπισμένους.
Αν κατά λάθος σβήσατε ένα text αρχείο, για παράδειγμα, κάποιο email, ή τα αποτελέσματα μιας ολονύχτιας προγραμματιστικής συνεδρίας , μπορεί να μη χάθηκαν όλα. Αν το αρχείο που φτιάξατε στο δίσκο, ήταν εκεί π.χ για περισσότερο από 30 δευτερόλεπτα, μπορεί τα περιεχόμενά του να βρίσκονται ακόμη στην κατάτμηση του δίσκου.
Μπορείτε να χρησιμοποιήσετε την εντολή grep για να ψάξει το raw disk partition για τα περιεχόμενα του αρχείου.
Για παράδειγμα, πρόσφατα, έσβησα κατά λάθος ένα κομμάτι ενός email. Έτσι, σταμάτησα αμέσως οποιαδήποτε ενέργεια που μπορούσε να μεταβάλλει το partition: σε αυτή την περίπτωση απλά απέφυγα να αποθηκεύσω αρχεία ή να κάνω μεταγλώττιση (compile) κλπ. Σε άλλες περιπτώσεις, μπήκα πραγματικά στον κόπο να κατεβάσω το σύστημα σε single user mode, και να αποδεσμεύσω (unmount) το σύστημα αρχείων.
Χρησιμοποίησα τότε την εντολή egrep στο partition του δίσκου: στην περίπτωσή μου το email μήνυμα ήταν στο /usr/local/home/michael/, έτσι από το output του df, είδα ότι ήμουν στο /dev/hdb5
sputnik3:~ % df
Filesystem 1024-blocks Used Available Capacity Mounted on
/dev/hda3 18621 9759 7901 55% /
/dev/hdb3 308852 258443 34458 88% /usr
/dev/hdb5 466896 407062 35720 92% /usr/local
sputnik3:~ % su
Password:
[michael@sputnik3 michael]# egrep -50 'ftp.+COL' /dev/hdb5 > /tmp/x
Τώρα είμαι υπερβολικά προσεκτικός όταν παίζω με τις κατατμήσεις των δίσκων, έτσι σταμάτησα να βεβαιωθώ ότι καταλαβαίνω τη σύνταξη της εντολής ΠΡΙΝ να πατήσω το πλήκτρο return. Σε αυτή την περίπτωση το email περιείχε τη λέξη 'ftp' ακολουθούμενη από κάποιο text που το ακολουθούσε το 'COL'. Το μήνυμα ήταν περίπου 20 γραμμές, έτσι χρησιμοποίησα το -50 για να φέρω όλες τις λέξεις γύρω από τη φράση. Στο παρελθόν είχα χρησιμοποιήσει το -3000 για να είμαι σίγουρος ότι θα πάρω όλες τις γραμμές από κάποιο πηγαίο κώδικα. Κατεύθυνα την έξοδο της egrep σε ένα διαφορετικό partition δίσκου- έτσι απέφυγα να γράψω πάνω από το παλιό μήνυμα που έψαχνα.
Μετά χρησιμοποίησα την εντολή strings για να με βοηθήσει να εξετάσω την έξοδο
strings /tmp/x | less
To email ήταν πραγματικά εκεί.
Αυτή η μέθοδος δεν είναι για να βασιστείτε σε αυτή, όλος, ή μέρος, του χώρου του δίσκου μπορεί να έχει ήδη ξαναχρησιμοποιηθεί.
Αυτό το τρυκ είναι πιθανά χρήσιμο μόνο σε συστήματα που δουλεύει ένας χρήστης. Σε συστήματα πολλαπλών χρηστών με υψηλή δραστηριότητα δίσκου, ο χώρος που ελευθερώσατε μπορεί να έχει ήδη χρησιμοποιηθεί. Ακόμη περισσότερο, δεν μπορούμε να τραβάμε το χαλί κάτω από τους χρήστες μας κάθε φορά που χρειαζόμαστε να ανακτήσουμε ένα αρχείο.
Στο σύστημα που έχω σπίτι, αυτό το τρυκ φάνηκε βολικό σε τρεις περίπου περιπτώσεις τα τελευταία χρόνια - συνήθως όταν σβήνω τυχαία μερικές μέρες δουλειάς. Αν ό,τι δουλεύω φτάνει σε ένα σημείο όπου νιώθω ότι έχω κάνει σημαντική βελτίωση, κάνω αντίγραφο ασφαλείας σε ένα floppy, έτσι δε χρειάζομαι αυτό το τρυκ και πολύ συχνά.
jadestar@rahul.net
Χρησιμοποιήσετε το σταθερό Flag
Αμέσως μόλις εγκαταστήσετε και ρυθμίσετε το σύστημά σας πηγαίνετε στα /bin, /sbin/, /usr/bin, /usr/sbin και /usr/lib (και μερικά of the other usual suspects και κάντε γενναιόδωρη χρήση της 'chattr +i εντολής'. Επίσης προσθέστε τα αρχεία του πυρήνα στο root. Κάντε 'mkdir /etc/.dist/' αντιγράψτε τα όλα από το /etc/ on down (αυτό το κάνω σε δύο βήματα χρησιμοποιώντας το /tmp/etcdist.tar για να αποφύγω την αναδρομή) σε εκείνο τον κατάλογο. (Προαιρετικά μπορείτε να δημιουργήσετε το /etc/.dist.tar.gz) -- και να το μαρκάρετε σα σταθερό.
Ο λόγος για όλα αυτά είναι να ελαττώσουμε τη ζημιά που μπορεί να προκαλέσετε αν μπείτε σαν root. Δε θα γράψετε πάνω από αρχεία με ένα τελεστή ανακατεύθυνσης (redirection operator) stray, και δε θα κάνετε το σύστημα άχρηστο με ένα stray κενό σε μια εντολή 'rm -fr' (μπορείτε ακόμη να κάνετε πολλές ζημιές στα δεδομένα σας -- αλλά οι βιβλιοθήκες και τα εκτελέσιμα θα είναι πιο ασφαλή.
Αυτό επίσης κάνει ένα πλήθος προβλημάτων ασφάλειας και άρνησης εξυπηρέτησης (denial of service) είτε αδύνατο είτε πιο δύσκολο να δημιουργηθούν (μια και πολλοί βασίζονται στο να γράψουν πάνω από ένα αρχείο μέσω των λειτουργιών κάποιου προγράμματος SUID που *δεν παρέχει μια αυθαίρετη γραμμή εντολών*).
Ο μόνος μπελάς σε αυτό είναι όταν χτίζετε τον πυρήνα και κάνετε 'make install' σε διάφορα είδη εκτελέσιμων του συστήματος. Από την άλλη, εμποδίζει επίσης το 'make install' να γράφει πάνω από τα αρχεία. Όταν ξεχάσετε να διαβάσετε το Makefile και να κάνετε chattr -i τα αρχεία που πρόκειται να γραφτούν από πάνω (και οι κατάλογοι στους οποίους θέλετε να προσθέσετε αρχεία) -- το make αποτυγχάνει, χρησιμοποιείτε απλά την εντολή chattr και το ξανατρέχετε. Μπορείτε επίσης να αρπάξετε αυτή την ευκαιρία για να μεταφέρετε τα παλιά σας bin's, lib's, ή οτιδήποτε σε ένα κατάλογο .old/ ή να του αλλάξετε όνομα ή να τα κάνετε tar ή ότι άλλο.
jadestar@rahul.net
Όλα τα νέα αρχεία μπαίνουν κάτω από το /usr/local! ή /usr/local/`hostname`
Αν η διανομή σας αφήνει το /usr/local άδειο τότε δημιουργήστε το /usr/local/src, /usr/local/bin κλπ. και χρησιμοποιήστε τα. Αν η διανομή σας εγκαθιστά προγράμματα στο δένδρο /usr/local τότε μπορεί να θέλετε να κάνετε 'mkdir /usr/local/`hostname`' και να δώσετε το 'wheel' group +w σε αυτό (το κάνω επίσης SUID και SGID για να εξασφαλίσω ότι κάθε μέλος του wheel group μπορεί να ανακατεύεται με τα δικά του αρχεία από εκεί και κάτω, και ότι όλα τα αρχεία που δημιουργήθηκαν θα ανήκουν στο 'wheel' group.
Τώρα πειθαρχήστε τον εαυτό σας και *ΠΑΝΤΑ! ΠΑΝΤΑ! ΠΑΝΤΑ!* βάλτε τα νέα πακέτα κάτω από το /usr/local/src/.from/$ΟΠΟΥ_ΤΑ_ΕΒΑ¨Α/ (για τα .tar ή οποιαδήποτε αρχεία) και χτίστε τα κάτω από το /usr/local/src (ή .../$HOSTNAME/src). Σιγουρευτείτε ότι εγκαθίσταται κάτω από την τοπική ιεραρχία. Αν *πρέπει υποχρεωτικά* να εγκατασταθεί πίσω στο /bin ή /usr/bin ή κάπου αλλού -- βάλτε ένα symlink από την τοπική ιεραρχία σε κάθε στοιχείο του από να το βάλετε οπουδήποτε αλλού.
Ο λόγος γι' αυτό -- ακόμη κι αν απαιτεί περισσότερη δουλειά -- είναι ότι βοηθά να απομονώσετε ό,τι πρέπει να γίνει αντίγραφο ασφαλείας και restore ή να ξαναεγκαταστηθεί σε περίπτωση πλήρους επανεγκατάστασης από τα distribution media (συνήθως CD στις μέρες μας). Χρησιμοποιώντας το /usr/local/.from directory μπορείτε να κρατήσετε ένα ανεπίσημο ημερολόγιο (log) από που προέρχονται οι πηγαίοι κώδικες -- το οποίο βοηθάει όταν ψάχνετε για νέες αναβαθμίσεις -- και μπορεί να είναι πολύ αποφασιστικό όταν κάνετε monitore τις λίστες ανακοινώσεων σχετικά με ασφάλεια.
Ε-να από τα συστήματά μου στο σπίτι (αυτό από το οποίο με το οποίο κάνω και τις συνδέσεις μου) συναρμολογήθηκε πριν να υιοθετήσω αυτή την τακτική για τον εαυτό μου. Ακόμη δε "γνωρίζω" όλες τις διαφορές από το σύστημα που αφήνεται "όπως εγκαταστάθηκε". Αυτό είναι παρά το γεγονός ότι έχω κάνει πολύ λίγες ρυθμίσεις στο σύστημα του σπιτιού μου και είμαι το *μόνο* άτομο που το χρησιμοποιεί.
Αντίθετα, τα συστήματα που έχω στήσει στη δουλειά (όταν απέκτησα εκεί το ρόλο του διαχειριστή συστήματος) έχουν όλα ρυθμιστεί με αυτόν τον τρόπο -- έχουν διαχειριστεί από πολλούς ανάδοχους και άλλους ανθρώπους του MIS, και έκαναν ένα μεγάλο αριθμό αναβαθμίσεων και εγκαταστάσεων πακέτων. Έχω μια πολύ καλή ιδέα για το ποια ακριβή στοιχεία τοποθετήθηκαν στο σύστημα *μετά* την αρχική εγκατάσταση και ρύθμιση.
dossey@ou.edu
Παρατήρησα μερικές υπερβολικά δύσκολες ή μη απαραίτητες διαδικασίες που προτείνονται στο τμήμα 2c tips του τεύχους 12. Μια και είναι περισσότερες από μία, τις στέλνω σε σένα:
#!/bin/sh
# lowerit
# convert all file names in the current directory to lower case
# only operates on plain files--does not change the name of directories
# will ask for verification before overwriting an existing file
for x in `ls`
do
if [ ! -f $x ]; then
continue
fi
lc=`echo $x | tr '[A-Z]' '[a-z]'`
if [ $lc != $x ]; then
mv -i $x $lc
fi
done
Ωπ, αυτό είναι μεγάλο script. Δε θα έγραφα τέτοιο script για να κάνω αυτό.
Αντίθετα, θα χρησιμοποιούσα αυτή την εντολή:
for i in * ; do [ -f $i ] && mv -i $i `echo $i | tr '[A-Z]' '[a-z]'`;
done;
στη γραμμή εντολών.
Ο άνθρωπος που έκανε αυτή τη συνεισφορά, λέει ότι έγραψε το script με αυτό τον τρόπο ώστε να είναι κατανοητό (δείτε παρακάτω).
Στην επόμενη υπόδειξη, αυτή σχετικά με την προσθήκη και διαγραφή χρηστών, ο Geoff τα πάει μια χαρά μέχρι το τελευταίο βήμα. Επανεκκίνηση; Ωχ, ελπίζω να μη χρειάζεται επανεκκίνηση του συστήματος κάθε φορά που διαγράφει ένα χρήστη. Ο,τι χρειάζεται να κάνετε είναι τα δύο πρώτα βήματα. Τι είδους διεργασίες θα έχει αφήσει ο χρήστης, άλλωστε; Ένα irc bot; Σκοτώστε τις διαδικασίες απλά με την
kill -9 `ps -aux |grep ^<username> |tr -s " " |cut -d " " -f2`
Παράδειγμα, το username είναι foo
kill -9 `ps -aux |grep ^foo |tr -s " " |cut -d " " -f2`
Τώρα που φροντίσαμε κι αυτό, ας προχωρήσουμε στο ξεχασμένο κωδικό του root.
Η λύση που δίνεται στο Gazette είναι η πιο κοινή, αλλά όχι και η πιο εύκολη. Με το LILO και το loadlin, μπορείτε να δώσετε την παράμετρο για boot σε περιβάλλον ενός χρήστη (single) για αυτόματη εκκίνηση στο προκαθορισμένο shell χωρίς login ή password prompt. Από εκεί, μπορείτε να αλλάξετε ή να αφαιρέσετε passwords πριν να γράψετε "init 3" να ξεκινήσετε σε κατάσταση πολλαπλών χρηστών (multiuser mode). Αριθμός Επανεκκινήσεων: 1 Με τον άλλο τρόπο Αριθμός Επανεκκινήσεων: 2
Justin Dossey
jadestar@rahul.net
Δημιουργήστε και συντηρήστε ένα /README.`hostname` και/ή ένα /etc/README.`hostname` [Η πιθανά /usr/local/etc/README.`hostname` -Maint. ]
Οπωσδήποτε, κρατήστε σημειώσεις από *την πρώτη μέρα* της διαχείρισης του συστήματος σε ένα online log αρχείο. Μπορείτε να φτιάξετε ένα vi /README.$(hostname). Μια γραμμή στο αρχείο του root /bash_logout. Ένας άλλος τρόπος να το κάνετε αυτό είναι να γράψετε su ή ένα sudo script που κάνει κάτι σαν το παρακάτω:
function exit \
{ unset exit; exit; \
cat ~/tmp/session.$(date +%y%m%d) \
>> /README.$(hostname) && \
vi /README.$(hostname)
}
script -a ~/tmp/session.$(date +%y%m%d)
/bin/su.org -
(χρησιμοποιήστε την εντολή typescript για να δημιουργήστε ένα session log και δημιουργήστε μια συνάρτηση που θα προσθέτει και θα ενημερώνει αυτόματα το log).
Παραδέχομαι ότι δεν έχω υλοποιήσει αυτό την πολιτική αυτόματης ενημέρωσης -- έχω βασιστεί ως τώρα στην αυτοπειθαρχία μου ως τώρα. Παρόλαυτά, έχω παίξει με αυτή την ιδέα (μέχρι το σημείο να φτιάξω ένα πρότυπο δείγμα (prototype) των scripts και των shell συναρτήσεων όπως τις βλέπετε). Ένα πράγμα που με κρατάει είναι η ίδια η 'script' εντολή. Νομίζω ότι θα πρέπει να πάρω τον κώδικα και να προσθέσω δυο παραμέτρους στη γραμμή εντολών (για να διακόπτω/σταματώ το script να καταγράφει από τη γραμμή εντολών) πριν να δεσμευτώ ότι θα το χρησιμοποιώ).
Η τελευταία μου πρόταση (γι' αυτό το γύρο):
Το path του Root θα πρέπει να περιέχει το 'PATH= /bin'
Αυτά και τίποτα άλλο στο path του root. Ο,τι κάνει ο root παρέχεται από ένα symlink από το /bin ή από ένα alias ή shell ρουτίνα, ή είναι ένα script ή ένα εκτελέσιμο στο /bin, ή γράφεται με το πλήρες path.
Αυτό κάνει τον καθένα που τρέχει σαν root να γνωρίζει (μερικές φορές επώδυνα) πόσο εμπιστεύεται τα εκτελέσιμα. Ο γνωστικός admin ενός host πολλών χρηστών θα κοιτάει περιοδικά μέσω του δικού του /bin και των αρχείων /.*history ψάχνοντας patterns και παράθυρα.
Ο πραγματικά δραστηριοποιημένος admin θα εντοπίσει ακολουθίες που μπορούν να αυτοματοποιηθούν, μέρη στα οποία έλεγχοι μπορούν/πρέπει να εισαχθούν , και διαδικασίες για τις οποίες "root" τα δικαιώματα θα πρέπει να αποφευχθούν προσωρινά (η εκτέλεση διαφόρων επεξεργαστών, MTA's και άλλα μεγάλα διαλογικά (interactive) προγράμματα με περίπλοκα χαρακτηριστικά scripting τα οποία *μπορεί* να ενσωματωθούν σε διαφανή αρχεία ή αρχεία δεδομένων -- όπως το αισχρό vi ./.exrc και το emacs ./.emacs και το ακόμη περισσότερο ύπουλο $EXINIT και οι ενσωματωμένες μακροεντολές επικεφαλίδων (header/footer macros)). Φυσιολογικά οι εντολές αυτού του τύπου μπορούν να τρέξουν με κάτι σαν:
cp $data $some_users_home/tmp
su -c $origcommand $whatever_switches
cp $some_users_home/tmp $data
(...όπου οι λεπτομέρειες εξαρτώνται από την εντολή).
Αυτές οι τελευταίες κυρίως προφυλάξεις υπερβολικές για το σπίτι ή το "single" σταθμό εργασίας του χρήστη -- αλλά είναι πολύ καλή τακτική για τη διαχείριση ενός συστήματος πολλαπλών χρηστών -- ειδικά για ένα σύστημα δημόσια εκτεθειμένο (όπως αυτό στο netcom).
a.triulzi@ic.ac.uk
/usr/bin/X11/xdm
exec /usr/bin/X11/X -indirect hostname
Αυτό το πρόσθεσα όταν προσπαθούσα απεγνωσμένα να το εγκαταστήσω για το δικό μου subnet εδώ χρειάστηκε περίπου μια βδομάδα για να κατευνάσω όλα τα προβλήματα.
Προειδοποίηση: με το παλιό SLS (1.1.1) για κάποιο λόγο μπορείτε να αφήστε ένα -nodaemon μετά τη γραμμή xdm -- αυτό ΔΕ δουλεύει για μεταγενέστερες εκδόσεις.
Για σχόλια, παρατηρήσεις, διορθώσεις, ενημερώσεις περί της Ελληνικής μετάφρασης αυτού του HOWTO, στείλτε email στην Βούλα Σανιδά : voulariba@hellug.gr ή στον Ευριπίδη Παπακώστα : evris@hellug.gr και εναλλακτικά : ep@rocketmail.com