γενική ερώτηση

Giannis Stoilis giannis at stoilis.gr
Mon Nov 10 10:26:03 EET 2003


Thanos wrote:
> Πολλα προγραμματα, εκτελουνται απο μια κονσολα δινοντας π.χ. "mozilla" ή 
> "./mozilla". Καποια δουλευουν μονο με το πρωτο και αλλα μονο με το δευτερο.
> 
> Μηπως θα μπορουσε καποιος/α να μου εξηγησει τι σημαινουν ολα αυτα και αν 
> υπαρχει διαφορα στο να τρεχεις ενα προγραμμα με ή χωρις το "./";

Το PATH είναι μια μεταβλητή περιβάλλοντος, που ορίζει το ΠΟΥ να ψάχνει 
να βρει ένα executable που πας να τρέξεις, όταν δεν ορίζεις full path.

Π.χ, θέλεις να τρέξεις την εντολή "cp".

Όταν γράψεις "cp" σε γραμμή εντολών θα γίνει το εξής:

linapp:~ # cp
cp: missing file argument
Try `cp --help' for more information.
linapp:~ #

Πράγματι, την βρήκε και την έτρεξε. Ας δούμε το PATH σου τι έχει μέσα:
linapp:~ # echo $PATH
/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
linapp:~ #

Ας δούμε τώρα ΠΟΥ βρίσκετε αυτή η εντολή:
linapp:~ # which cp
/bin/cp
linapp:~ #

Άρα, βλέπουμε ότι βρίσκεται στον /bin.

Ας ΒΓΑΛΟΥΜΕ το /bin/ από το PATH, και ας ξανατρέξουμε την εντολή, να 
δούμε τι θα γίνει:

linapp:~ # export 
PATH=/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
linapp:~ # cp
-bash: cp: command not found
linapp:~ #

Όπως βλέπεις, δεν την βρήκε. Ας πάμε τώρα ΜΕΣΑ στον κατάλογο που έχει το 
cp, να το εκτελέσουμε από εκεί:

linapp:~ # cd /bin
linapp:/bin # cp
-bash: cp: command not found
linapp:/bin #

Γιατί δεν το εκτέλεσε; Γιατι δεν έχει σημασία αν είναι μέσα στον ίδιο 
τον κατάλογο. Αν δεν βρίσκεται ένας φάκελος μέσα στο PATH, δεν θα γίνει 
έλεγχος αν έχει την εντολή που ζήτησες. Ένα κολπάκι που χρησιμοποιούμε, 
είναι να βάλουμε στο PATH αυτό: ".". Αυτό σημαίνει ότι όταν τρέχεις μια 
εντολή, να ψάχνει πάντα και στον κατάλογο που βρίσκεσαι.

Μετά από αυτά τα παραδείγματα, ξαναγυρνάω στην ερώτησή σου. Γιατί δεν 
βάζουμε το "." ΠΑΝΤΑ στο PATH; Γιατί είναι επικίνδυνο. Π.χ, μπορώ εγώ ο 
κακός ο χρήστης να αφήσω μέσα στο /tmp/ ένα εκτελέσιμο που θα ονομάζεται 
"cp" το οποίο θα σβήνει στιγμιαία όλα τα δεδομένα του υπολογιστή. Όταν ο 
root είναι μέσα στο /tmp και εκτελέσει την εντολή "cp", και έχει το 
current directory πρώτο μέσα στο PATH του, την πάτησε.

Οπότε, ο γενικός κανόνας είναι:
Ο root δεν πρέπει να έχει το current directory μέσα στο PATH του. Όταν 
εκτελεί πράγματα, τα εκτελέι μόνο μέσα με απόλυτο ή σχετικό path, π.χ: 
./mozilla, ../mozilla, /usr/local/mozilla/mozilla. Επιτρέπεται να έχει 
στο path τους βασικούς καταλόγους.
Ο απλός χρήστης ας έχει μέσα ότι θέλει, επειδή δεν μπορεί να κάνει ζημιά 
στο σύστημα.

Ουφ, tutorial το έκανα... Ελπίζω να άξιζε τουλάχιστον...

- Γιάννης Στοΐλης






More information about the Migrate2linux mailing list