Επόμενο Προηγούμενο Περιεχόμενα
Τα capabilities είναι ένα set, όπως λέει και το όνομά
τους, δυνατοτήτων, που ορίζονται μέσα στον πυρήνα, και
περιορίζουν τις δυνατότητες του root που μέχρι τώρα
ξέραμε ότι είχε (και των setuid root προγραμμάτων
αντίστοιχα). Τα capabilites ορίστηκαν από κάποιο POSIX
draft (το οποίο τώρα αποσύρθηκε), ενώ ο πυρήνας του Linux
έχει και πολλά capabilities τα οποία δεν αναφέρονται στο
draft αλλά είναι linux-specific.
Ένα παράδειγμα capability, είναι το CAP_CHOWN το οποίο
επιτρέπει την αλλαγή ιδιοκτήτη ενός αρχείου. Όπως
καταλαβαίνετε, για να κάνουμε chown ένα αρχείο, πρέπει να
είμαστε ο root, άρα ένα πρόγραμμα που θέλουμε να κάνει
chown πρέπει να είναι setuid root. Κάτι τέτοιο όμως
αυτόματα σημαίνει ότι το ίδιο πρόγραμμα, θα μπορεί να
διαβάσει το αρχείο /etc/shadow, δημιουργώντας έτσι, για
κάτι τόσο απλό, μία τρύπα ασφαλείας στο σύστημα. Με χρήση
των capabilities, μπορεί το setuid root πρόγραμμα να
αρχίσει να τρέχει, και μετά να "ρίξει" όλα τα
capabilities που δεν χρειάζεται και να κρατήσει μόνο το
cap_chown. Μπορεί επίσης, να αλλάξει το effective uid και
πλέον να μην μπορεί καν να ανακτήσει τα dropped
capabilities.
Λογικό, γιατί ακόμα, δεν μας παρέχουν τίποτα. Για να τα
λέμε σωστά τα πράγματα, πρέπει η εφαρμογή μας να γραφτεί
έτσι ώστε να χρησιμοποιεί τα capabilities, αλλιώς δεν
κερδίζουμε τίποτα.. Γι αυτό ξεκίνησε και το project LIDS
(Linux Intrusion Detection System) το οποίο παρέχει απλά
ένα layer μεταξύ του συστήματος (kernel) και των
εφαρμογών, για να επιβάλλει την χρήση capabilities σε ήδη
γραμμένες εφαρμογές.
Αμέ... Το CAP_CHOWN που είδαμε πιο πάνω, το
CAP_NET_BIND_SERVICE που επιτρέπει σε μία εφαρμογή να
ανοίξει ένα port κάτω από το 1024 (privileged ports), το
CAP_SYS_PTRACE που επιτρέπει την χρήση της ptrace() σε
οποιοδήποτε process...
Μία πλήρη λίστα για τον δικό σας πυρήνα, θα βρείτε εδώ:
/usr/src/linux/include/linux/capability.h
Επόμενο Προηγούμενο Περιεχόμενα