Δημοσιεύτηκε: 05 Απρ 2011, 00:44
από medigeek
Πάμε ξανά. Φτιάξε καφέ/τσάϊ/γάλα/φραπεδακι και διάβασε το παρακάτω. Μην τολμήσεις να ρωτήσεις οτιδήποτε αν δεν διαβάσεις το παρακάτω 3 φορές. :D

1. sudo => παιρνεις προνόμια διαχειριστή (admin privileges), εκτελείς όποια εντολή θέλεις (ή αλλιώς αν στο αρχείο /etc/sudoers λέει πως έχεις περιορισμένη εκτέλεση μερικών εντολών μόνο).
Είσαι ακόμη ο χρήστης "starlight" (το $HOME για παράδειγμα ακόμη είναι του χρήστη σου κι όχι του root).
Ζητάει τον κωδικό του χρήστη "starlight" για επιβεβαίωση (ότι είσαι ο χρήστης starlight και ξέρεις τον κωδικό και θέλεις να διαχειριστείς το σύστημα).

2. sudo apt-get install mysql-client mysql-server => Εγκαθιστάς το πακέτο mysql (daemon και client). Με το sudo γίνεται αυτό που είπα στο (1), οπόταν και το apt-get λειτουργεί με προνόμια διαχειριστή (κοβει, ράβει, σβήνει, προσθέτει, κτλ).

3. Το mysql πακέτο:

3α) Φτιάχνει ένα χρήστη mysql - αυτός ο "χρήστης" είναι system user:
Κώδικας: Επιλογή όλων
$ id mysql
uid=117(mysql) gid=131(mysql) groups=131(mysql)

Το πακέτο είναι ρυθμισμένο με δικαιώματα στον χρήστη "mysql" για να τρέχει το mysql daemon (το πρόγραμμα βάσης δεδομένων sql που λειτουργεί στο background).
Αυτόν τον χρήστη "mysql" είδες στο top να τρέχει

3β) Εγκαθιστά τα υπόλοιπα αρχεία. Κάποια από τα αρχεία είναι εντολές (στους φακέλους /usr/bin/, /usr/sbin/ κτλ) Τα αρχεία έχουν τα απαραίτητα permissions ούτως ώστε ο χρήστης "mysql" να μπορεί να εκτελεί το πρόγραμμα.
Ερωτηση: Γιατί ο root λοιπόν εμφανίζεται ως ο ιδιοκτήτης των αρχείων εντολών, όπως π.χ. του /etc/init.d/mysql ή του mysqld;
Απάντηση: Επειδή τα αρχεία βρίσκονται σε φακελους του συστήματος. Είναι λογικό να ανήκουν στον root, για να μην μπορεί κανείς άλλος να τα διαγράψει, παρά μόνο ο/οι διαχειριστές ("root" και ο "starlight" μέσω sudo).
Όμως ο χρήστης "mysql" διατηρεί το δικαίωμα να εκτελεί αρχεία που ανήκουν στον root, επειδή τα αρχεία έχουν τα κατάλληλα permissions:
Star_Light έγραψε:
kostas@kostas-SSL:/usr/sbin$ ls -l mysqld
-rwxr-xr-x 1 root root 9975224 2010-11-10 08:52 mysqld


Επίσης, μην ξεχνάς πως ο διαχειριστής μπορεί να εκτελέσει εντολές ως άλλοι χρήστες:
Κώδικας: Επιλογή όλων
$ sudo -u test -i
[sudo] password for savvas:
test@home-desktop:~$

Άρα ο διαχειριστής "root" μπορεί να πει στο λειτουργικό "τρέξε το mysqld ως χρήστης mysql". Και έτσι το πρόγραμμα mysql αυτόματα παίρνει τα ανάλογα permissions που έχει ο χρήστης mysql.

Τι πετύχαμε;
Ασφάλεια και λειτουργικότητα!
Πες ένας "hacker/cracker" βρήκε ευκαιρία και τρόπο να μπει στο σύστημα σου.
- Αφ' ενός προστατεύουμε τα αρχεία εντολών όπως το mysqld να μην διαγραφούν. Πώς; Βλέπε (3β)
- Αφ' ετέρου αν τυχόν επιχειρήσει να εισβάλει στο σύστημα μέσω της βάσης δεδομένων mysql, δε θα μπορέσει. Θα έχει access μόνο σε ό,τι ανήκει ή σε ό,τι μπορεί να δει ο χρήστης "mysql". Πώς; Βλέπε (3α)

Αν κάνω κάπου λάθος, διορθώστε με. :)