ProHoster > Blog > διαχείριση > Φύλλο εξαπάτησης SELinux για διαχειριστές συστήματος: 42 απαντήσεις σε σημαντικές ερωτήσεις
Φύλλο εξαπάτησης SELinux για διαχειριστές συστήματος: 42 απαντήσεις σε σημαντικές ερωτήσεις
Η μετάφραση του άρθρου ετοιμάστηκε ειδικά για τους φοιτητές του μαθήματος "Διαχειριστής Linux".
Εδώ θα λάβετε απαντήσεις σε σημαντικές ερωτήσεις σχετικά με τη ζωή, το σύμπαν και τα πάντα στο Linux με βελτιωμένη ασφάλεια.
«Η σημαντική αλήθεια ότι τα πράγματα δεν είναι πάντα όπως φαίνονται είναι κοινή γνώση...»
-Ντάγκλας Άνταμς, The Hitchhiker's Guide to the Galaxy
Ασφάλεια. Αυξημένη αξιοπιστία. Αλληλογραφία. Πολιτική. Τέσσερις Ιππείς της Αποκάλυψης sysadmin. Εκτός από τις καθημερινές μας εργασίες - παρακολούθηση, δημιουργία αντιγράφων ασφαλείας, υλοποίηση, διαμόρφωση, ενημέρωση κ.λπ. - είμαστε επίσης υπεύθυνοι για την ασφάλεια των συστημάτων μας. Ακόμη και εκείνα τα συστήματα όπου ο τρίτος πάροχος συνιστά να απενεργοποιήσουμε τη βελτιωμένη ασφάλεια. Αισθάνεται σαν δουλειά Ίθαν Χαντ από το "Mission: Impossible".
Αντιμέτωποι με αυτό το δίλημμα, ορισμένοι διαχειριστές συστήματος αποφασίζουν να το πάρουν μπλε χάπι, γιατί πιστεύουν ότι δεν θα μάθουν ποτέ την απάντηση στο μεγάλο ερώτημα της ζωής, του σύμπαντος και όλων αυτών. Και όπως όλοι γνωρίζουμε, αυτή η απάντηση είναι 42.
Στο πνεύμα του The Hitchhiker's Guide to the Galaxy, ακολουθούν 42 απαντήσεις σε σημαντικές ερωτήσεις σχετικά με τον έλεγχο και τη χρήση. SELinux στα συστήματά σας.
1. Το SELinux είναι ένα σύστημα ελέγχου αναγκαστικής πρόσβασης, που σημαίνει ότι κάθε διαδικασία έχει μια ετικέτα. Κάθε αρχείο, κατάλογος και αντικείμενο συστήματος έχει επίσης ετικέτες. Οι κανόνες πολιτικής ελέγχουν την πρόσβαση μεταξύ διεργασιών και αντικειμένων με ετικέτα. Ο πυρήνας επιβάλλει αυτούς τους κανόνες.
2. Οι δύο πιο σημαντικές έννοιες είναι: Σήμανση — σημάνσεις (αρχεία, διεργασίες, θύρες, κ.λπ.) και Επιβολή τύπου (το οποίο απομονώνει διεργασίες μεταξύ τους με βάση τους τύπους).
3. Σωστή μορφή ετικέτας user:role:type:level (προαιρετικός).
4. Ο σκοπός της παροχής ασφάλειας πολλαπλών επιπέδων (Ασφάλεια πολλαπλών επιπέδων - MLS) είναι η διαχείριση διαδικασιών (τομέων) με βάση το επίπεδο ασφάλειας των δεδομένων που θα χρησιμοποιήσουν. Για παράδειγμα, μια μυστική διαδικασία δεν μπορεί να διαβάσει άκρως απόρρητα δεδομένα.
6. Επιλογές πυρήνα για την αλλαγή των λειτουργιών SELinux κατά την εκκίνηση:
autorelabel=1 → αναγκάζει το σύστημα να εκτελέσει επανασήμανση
selinux=0 → ο πυρήνας δεν φορτώνει την υποδομή SELinux
enforcing=0 → φόρτωση σε επιτρεπτή λειτουργία
7. Εάν χρειάζεται να επισημάνετε εκ νέου ολόκληρο το σύστημα:
# touch /.autorelabel
#reboot
Εάν η σήμανση συστήματος περιέχει μεγάλο αριθμό σφαλμάτων, μπορεί να χρειαστεί να κάνετε εκκίνηση σε λειτουργία επιτρεπόμενης για να πετύχει η παρατήρηση.
8. Για να ελέγξετε εάν το SELinux είναι ενεργοποιημένο: # getenforce
9. Για να ενεργοποιήσετε/απενεργοποιήσετε προσωρινά το SELinux: # setenforce [1|0]
10. Έλεγχος κατάστασης SELinux: # sestatus
11. Αρχείο διαμόρφωσης: /etc/selinux/config
12. Πώς λειτουργεί το SELinux; Ακολουθεί ένα παράδειγμα σήμανσης για τον διακομιστή ιστού Apache:
Η διαδικασία εκτελείται στο πλαίσιο httpd_t, μπορεί να αλληλεπιδράσει με ένα αντικείμενο με ετικέτα httpd_something_t.
13. Πολλές εντολές δέχονται ένα όρισμα -Z για προβολή, δημιουργία και αλλαγή περιβάλλοντος:
ls -Z
id -Z
ps -Z
netstat -Z
cp -Z
mkdir -Z
Τα περιβάλλοντα δημιουργούνται όταν δημιουργούνται αρχεία με βάση το περιβάλλον του γονικού καταλόγου τους (με ορισμένες εξαιρέσεις). Τα RPM μπορούν να δημιουργήσουν περιβάλλοντα όπως κατά την εγκατάσταση.
14. Υπάρχουν τέσσερις κύριες αιτίες σφαλμάτων SELinux, οι οποίες περιγράφονται λεπτομερέστερα στα σημεία 15-21 παρακάτω:
Ζητήματα επισήμανσης
Λόγω κάτι που πρέπει να γνωρίζει το SELinux
Σφάλμα στην πολιτική/εφαρμογή SELinux
Οι πληροφορίες σας ενδέχεται να παραβιαστούν
15.Πρόβλημα επισήμανσης: εάν τα αρχεία σας είναι μέσα /srv/myweb επισημαίνονται λανθασμένα, η πρόσβαση ενδέχεται να απαγορεύεται. Ακολουθούν μερικοί τρόποι για να το διορθώσετε:
Εάν γνωρίζετε την ετικέτα: # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
Εάν γνωρίζετε ένα αρχείο με ισοδύναμες επισημάνσεις: # semanage fcontext -a -e /srv/myweb /var/www
Επαναφορά του περιβάλλοντος (και για τις δύο περιπτώσεις): # restorecon -vR /srv/myweb
16.Πρόβλημα επισήμανσης: Εάν μετακινήσετε το αρχείο αντί να το αντιγράψετε, το αρχείο θα διατηρήσει το αρχικό του πλαίσιο. Για να διορθώσετε αυτό το πρόβλημα:
Αλλάξτε την εντολή περιβάλλοντος με την ετικέτα: # chcon -t httpd_system_content_t /var/www/html/index.html
Αλλάξτε την εντολή περιβάλλοντος με την ετικέτα συνδέσμου: # chcon --reference /var/www/html/ /var/www/html/index.html
Επαναφορά του περιβάλλοντος (και για τις δύο περιπτώσεις): # restorecon -vR /var/www/html/
17. αν SELinux πρέπει να γνωρίζετεότι το HTTPD ακούει στη θύρα 8585, πείτε στο SELinux:
# semanage port -a -t http_port_t -p tcp 8585
18.SELinux πρέπει να γνωρίζετε Τιμές Boolean που επιτρέπουν την αλλαγή τμημάτων της πολιτικής SELinux κατά το χρόνο εκτέλεσης χωρίς να γνωρίζουμε ότι η πολιτική SELinux έχει αντικατασταθεί. Για παράδειγμα, εάν θέλετε το httpd να στέλνει email, πληκτρολογήστε: # setsebool -P httpd_can_sendmail 1
19.SELinux πρέπει να γνωρίζετε λογικές τιμές για την ενεργοποίηση/απενεργοποίηση των ρυθμίσεων SELinux:
Για να δείτε όλες τις δυαδικές τιμές: # getsebool -a
Για να δείτε μια περιγραφή του καθενός: # semanage boolean -l
Για να ορίσετε μια τιμή boolean: # setsebool [_boolean_] [1|0]
Για μόνιμη εγκατάσταση, προσθέστε -P. Για παράδειγμα: # setsebool httpd_enable_ftp_server 1 -P
20. Οι πολιτικές/εφαρμογές SELinux ενδέχεται να περιέχουν σφάλματα, όπως:
Ασυνήθιστες διαδρομές κώδικα
Διαμορφώσεις
Ανακατεύθυνση stdout
Διαρροή περιγραφής αρχείων
Εκτελέσσιμη μνήμη
Βιβλιοθήκες κακοχτισμένες
Ανοίξτε εισιτήρια (μην υποβάλετε αναφορά στην Bugzilla, η Bugzilla δεν έχει SLA).
21.Οι πληροφορίες σας ενδέχεται να παραβιαστούνεάν έχετε περιορισμένους τομείς που προσπαθούν να:
Φόρτωση μονάδων πυρήνα
Απενεργοποιήστε την επιβεβλημένη λειτουργία SELinux
Γράφω σε etc_t/shadow_t
Αλλάξτε τους κανόνες του iptables
22. Εργαλεία SELinux για την ανάπτυξη ενοτήτων πολιτικής:
25. Εάν παρουσιαστεί σφάλμα SELinux, χρησιμοποιήστε το αρχείο καταγραφής setroubleshoot προσφέροντας πολλές πιθανές λύσεις.
Για παράδειγμα, από journalctl:
Jun 14 19:41:07 web1 setroubleshoot: SELinux is preventing httpd from getattr access on the file /var/www/html/index.html. For complete message run: sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
# sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
SELinux is preventing httpd from getattr access on the file /var/www/html/index.html.
***** Plugin restorecon (99.5 confidence) suggests ************************
If you want to fix the label,
/var/www/html/index.html default label should be httpd_syscontent_t.
Then you can restorecon.
Do
# /sbin/restorecon -v /var/www/html/index.html
26. Καταγραφή: Το SELinux καταγράφει πληροφορίες σε πολλά σημεία:
27. Καταγραφή: αναζήτηση για σφάλματα SELinux στο αρχείο καταγραφής ελέγχου:
# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today
28. Για να βρείτε μηνύματα SELinux Access Vector Cache (AVC) για μια συγκεκριμένη υπηρεσία:
# ausearch -m avc -c httpd
29. Χρησιμότητα audit2allow συλλέγει πληροφορίες από αρχεία καταγραφής απαγορευμένων λειτουργιών και στη συνέχεια δημιουργεί κανόνες πολιτικής αδειών SELinux. Για παράδειγμα:
Για να δημιουργήσετε μια αναγνώσιμη από τον άνθρωπο περιγραφή του γιατί απαγορεύεται η πρόσβαση: # audit2allow -w -a
Για να προβάλετε έναν κανόνα επιβολής τύπου που επιτρέπει την άρνηση πρόσβασης: # audit2allow -a
Για να δημιουργήσετε μια προσαρμοσμένη λειτουργική μονάδα: # audit2allow -a -M mypolicy
Επιλογή -M δημιουργεί ένα αρχείο επιβολής τύπου (.te) με το καθορισμένο όνομα και μεταγλωττίζει τον κανόνα σε ένα πακέτο πολιτικής (.pp): mypolicy.pp mypolicy.te
Για να εγκαταστήσετε μια προσαρμοσμένη λειτουργική μονάδα: # semodule -i mypolicy.pp
30. Για να διαμορφώσετε μια ξεχωριστή διεργασία (τομέα) ώστε να λειτουργεί σε λειτουργία επιτρεπόμενης: # semanage permissive -a httpd_t
31. Εάν δεν θέλετε πλέον ο τομέας να είναι επιτρεπτός: # semanage permissive -d httpd_t
32. Για να απενεργοποιήσετε όλους τους επιτρεπόμενους τομείς: # semodule -d permissivedomains
Βεβαιωθείτε ότι το SELinux εκτελείται σε λειτουργία επιτρεπόμενης: # setenforce 0
Χρησιμοποιήστε ένα σενάριο fixfilesγια να βεβαιωθείτε ότι τα αρχεία φέρουν νέα ετικέτα στην επόμενη επανεκκίνηση:
# fixfiles -F onboot # reboot
34. Δημιουργήστε έναν χρήστη με συγκεκριμένο εύρος MLS: # useradd -Z staff_u john
Χρησιμοποιώντας την εντολή useradd, αντιστοιχίστε τον νέο χρήστη σε έναν υπάρχοντα χρήστη SELinux (σε αυτήν την περίπτωση, staff_u).
35. Για να δείτε την αντιστοίχιση μεταξύ χρηστών SELinux και Linux: # semanage login -l
36. Ορίστε ένα συγκεκριμένο εύρος για τον χρήστη: # semanage login --modify --range s2:c100 john
37. Για να διορθώσετε την ετικέτα του οικιακού καταλόγου του χρήστη (αν χρειάζεται): # chcon -R -l s2:c100 /home/john
38. Για να δείτε τις τρέχουσες κατηγορίες: # chcat -L
39. Για να αλλάξετε κατηγορίες ή να ξεκινήσετε να δημιουργείτε τη δική σας, επεξεργαστείτε το αρχείο ως εξής:
/etc/selinux/_<selinuxtype>_/setrans.conf
40. Για να εκτελέσετε μια εντολή ή ένα σενάριο σε ένα συγκεκριμένο αρχείο, ρόλο και περιβάλλον χρήστη: