Εισαγωγή
Προαπαιτούμενα
Εξήγηση
Εργασία με δυνατότητες αρχείων
συμπέρασμα
Εισαγωγή
Οι δυνατότητες του Linux είναι ειδικά χαρακτηριστικά στον πυρήνα του Linux που εκχωρούν σε διεργασίες και σε δυαδικά εκτελέσιμα συγκεκριμένα δικαιώματα που κανονικά δεσμεύονται για διεργασίες των οποίων το πραγματικό αναγνωριστικό χρήστη είναι 0 (Ο χρήστης ρίζας και μόνο ο χρήστης ρίζας έχει UID 0).
Αυτό το άρθρο θα εξηγήσει ορισμένες από τις διαθέσιμες δυνατότητες, τις χρήσεις τους και τον τρόπο ρύθμισης και κατάργησής τους. Λάβετε υπόψη ότι η ρύθμιση δυνατοτήτων σε εκτελέσιμα αρχεία έχει τη δυνατότητα να θέσει σε κίνδυνο την ασφάλεια του συστήματός σας. Ως εκ τούτου, θα πρέπει να εξετάσετε το ενδεχόμενο δοκιμής σε ένα μη παραγωγικό σύστημα πριν εφαρμόσετε δυνατότητες στην παραγωγή.
Προαπαιτούμενα
- Ένα σύστημα Linux στο οποίο έχετε πρόσβαση root (είτε μέσω του χρήστη root είτε ενός χρήστη με πρόσβαση sudo).
Εξήγηση
Ουσιαστικά, ο στόχος των δυνατοτήτων είναι να διαιρεθεί η ισχύς του «root» σε συγκεκριμένα προνόμια, έτσι ώστε αν γίνει εκμετάλλευση μιας διεργασίας ή δυαδικού αρχείου που έχει μία ή περισσότερες δυνατότητες, η πιθανή ζημιά είναι περιορισμένη σε σύγκριση με την ίδια διεργασία που εκτελείται με το root.
Οι δυνατότητες μπορούν να οριστούν σε διαδικασίες και εκτελέσιμα αρχεία. Μια διαδικασία που προκύπτει από την εκτέλεση ενός αρχείου μπορεί να αποκτήσει τις δυνατότητες αυτού του αρχείου.
Οι δυνατότητες που εφαρμόζονται στο Linux είναι πολλές και πολλές έχουν προστεθεί από την αρχική τους κυκλοφορία. Μερικές από αυτές είναι οι εξής:
CAP_CHOWN: Πραγματοποιήστε αλλαγές στο User ID και στο Group ID των αρχείων
CAP_DAC_OVERRIDE: Παράκαμψη DAC (Discretionary Access Control). Για παράδειγμα, vto παράκαμψη ελέγχου δικαιωμάτων ανάγνωσης/εγγραφής/εκτέλεσης.
CAP_KILL: Παράκαμψη ελέγχων αδειών για αποστολή σημάτων σε διεργασίες.
CAP_SYS_NICE: Αύξηση της ωραιότητας των διαδικασιών ( Μια εξήγηση της ωραιότητας μπορείτε να βρείτε εδώ )
CAP_SYS_TIME: Ρύθμιση του συστήματος και του ρολογιού υλικού σε πραγματικό χρόνο
Για την πλήρη λίστα, τρέξτε το man 7 capabilities.
Οι δυνατότητες εκχωρούνται σε σύνολα, δηλαδή "επιτρεπόμενο", "κληρονομούμενο", "αποτελεσματικό" και "περιβάλλον" για τα νήματα και "επιτρεπόμενο", "κληρονομούμενο" και "αποτελεσματικό" για αρχεία. Αυτά τα σύνολα ορίζουν διαφορετικές σύνθετες συμπεριφορές, η πλήρης εξήγησή τους ξεφεύγει από το πεδίο εφαρμογής αυτού του άρθρου.
Όταν ορίζουμε δυνατότητες στο αρχείο, σχεδόν πάντα θα χρησιμοποιούμε "επιτρεπόμενο" και "ενεργό", για παράδειγμα CAP_DAC_OVERRIDE+ep. Παρατηρήστε το +ep, που υποδηλώνει τα προαναφερθέντα σύνολα.
Εργασία με δυνατότητες αρχείων
Απαιτούμενα πακέτα
Υπάρχουν δύο βασικά εργαλεία, getcapκαι setcapη οποία μπορεί να αντιστοίχως δείτε και να ρυθμίσετε αυτά τα χαρακτηριστικά.
- Στο Debian και στο Ubuntu, αυτά τα εργαλεία παρέχονται από το
libcap2-binπακέτο, το οποίο μπορεί να εγκατασταθεί με:apt install libcap2-bin
- Σε CentOS και Fedora, απαιτείται το
libcapπακέτο:yum install libcap
- Στο Arch Linux, παρέχονται
libcapεπίσης από:pacman -S libcap
Δυνατότητες ανάγνωσης
Για να δείτε εάν ένα αρχείο έχει κάποιο σύνολο δυνατοτήτων, μπορείτε απλώς να εκτελέσετε το getcap /full/path/to/binary, για παράδειγμα:
root@demo:~# getcap /usr/bin/ping
/usr/bin/ping = cap_net_raw+ep
root@demo:~# getcap /usr/bin/rcp
/usr/bin/rcp = cap_net_bind_service+ep
Εάν θέλετε να μάθετε ποιες δυνατότητες είναι ήδη ρυθμισμένες στο σύστημά σας, μπορείτε να αναζητήσετε ολόκληρο το σύστημα αρχείων σας αναδρομικά με την ακόλουθη εντολή:
getcap -r /
Λόγω του γεγονότος ότι τα εικονικά συστήματα αρχείων (όπως το /proc) δεν υποστηρίζουν αυτές τις λειτουργίες, η παραπάνω εντολή θα παράγει χιλιάδες σφάλματα, επομένως για μια πιο καθαρή έξοδο χρησιμοποιήστε τα εξής:
getcap -r / 2>/dev/null
Εκχώρηση και αφαίρεση δυνατοτήτων
Για να ορίσετε μια συγκεκριμένη δυνατότητα σε ένα αρχείο, χρησιμοποιήστε το setcap "capability_string" /path/to/file.
Για να καταργήσετε όλες τις δυνατότητες από ένα αρχείο, χρησιμοποιήστε το setcap -r /path/to/file.
Για επίδειξη, θα δημιουργήσουμε ένα κενό αρχείο στον τρέχοντα κατάλογο, θα του δώσουμε μια δυνατότητα και θα το αφαιρέσουμε. Ξεκινήστε με τα εξής:
root@demo:~# touch testfile
root@demo:~# getcap testfile
Η δεύτερη εντολή δεν παράγει έξοδο, που σημαίνει ότι αυτό το αρχείο δεν έχει καμία δυνατότητα.
Στη συνέχεια, ορίστε μια δυνατότητα για το αρχείο:
root@demo:~# setcap "CAP_CHOWN+ep" testfile
root@demo:~# getcap testfile
testfile = cap_chown+ep
Το "CAP_CHOWN+ep" χρησιμοποιήθηκε ως παράδειγμα, αλλά οποιοδήποτε άλλο μπορεί να εκχωρηθεί με αυτόν τον τρόπο.
Τώρα, καταργήστε όλες τις δυνατότητες από testfile:
root@demo:~# setcap -r testfile
root@demo:~# getcap testfile
Και πάλι, δεν θα υπάρχει έξοδος, επειδή το "CAP_CHOWN+ep" καταργήθηκε.
συμπέρασμα
Οι δυνατότητες έχουν πολλές πιθανές χρήσεις και μπορούν να βοηθήσουν στην ενίσχυση της ασφάλειας των συστημάτων σας. Εάν χρησιμοποιείτε το bit SUID στα εκτελέσιμα αρχεία σας, σκεφτείτε να το αντικαταστήσετε με τη συγκεκριμένη δυνατότητα που απαιτείται.