Η μετάφραση του άρθρου ετοιμάστηκε ειδικά για τους φοιτητές του μαθήματος .

Εδώ θα βρείτε απαντήσεις σε σημαντικά ερωτήματα σχετικά με τη ζωή, το σύμπαν και όλα όσα υπάρχουν... Linux με βελτιωμένη ασφάλεια.
«Η σημαντική αλήθεια ότι τα πράγματα δεν είναι πάντα όπως φαίνονται είναι κοινή γνώση...»
-Ντάγκλας Άνταμς, The Hitchhiker's Guide to the Galaxy
Ασφάλεια. Αυξημένη αξιοπιστία. Αλληλογραφία. Πολιτική. Τέσσερις Ιππείς της Αποκάλυψης sysadmin. Εκτός από τις καθημερινές μας εργασίες - παρακολούθηση, δημιουργία αντιγράφων ασφαλείας, υλοποίηση, διαμόρφωση, ενημέρωση κ.λπ. - είμαστε επίσης υπεύθυνοι για την ασφάλεια των συστημάτων μας. Ακόμη και εκείνα τα συστήματα όπου ο τρίτος πάροχος συνιστά να απενεργοποιήσουμε τη βελτιωμένη ασφάλεια. Αισθάνεται σαν δουλειά από το "Mission: Impossible".
Αντιμέτωποι με αυτό το δίλημμα, ορισμένοι διαχειριστές συστήματος αποφασίζουν να το πάρουν , γιατί πιστεύουν ότι δεν θα μάθουν ποτέ την απάντηση στο μεγάλο ερώτημα της ζωής, του σύμπαντος και όλων αυτών. Και όπως όλοι γνωρίζουμε, αυτή η απάντηση είναι 42.
Στο πνεύμα του The Hitchhiker's Guide to the Galaxy, ακολουθούν 42 απαντήσεις σε σημαντικές ερωτήσεις σχετικά με τον έλεγχο και τη χρήση. στα συστήματά σας.
1. SELinux — είναι ένα υποχρεωτικό σύστημα ελέγχου πρόσβασης, που σημαίνει ότι κάθε διεργασία έχει μια ετικέτα. Κάθε αρχείο, κατάλογος και αντικείμενο συστήματος έχει επίσης μια ετικέτα. Οι κανόνες πολιτικής διέπουν την πρόσβαση μεταξύ διεργασιών και αντικειμένων με ετικέτες. Ο πυρήνας επιβάλλει αυτούς τους κανόνες.
2. Οι δύο πιο σημαντικές έννοιες είναι: Σήμανση — σημάνσεις (αρχεία, διεργασίες, θύρες, κ.λπ.) και Επιβολή τύπου (το οποίο απομονώνει διεργασίες μεταξύ τους με βάση τους τύπους).
3. Σωστή μορφή ετικέτας user:role:type:level (προαιρετικός).
4. Ο σκοπός της παροχής ασφάλειας πολλαπλών επιπέδων (Ασφάλεια πολλαπλών επιπέδων - MLS) είναι η διαχείριση διαδικασιών (τομέων) με βάση το επίπεδο ασφάλειας των δεδομένων που θα χρησιμοποιήσουν. Για παράδειγμα, μια μυστική διαδικασία δεν μπορεί να διαβάσει άκρως απόρρητα δεδομένα.
5. Εξασφάλιση ασφάλειας πολλαπλών κατηγοριών (Ασφάλεια πολλαπλών κατηγοριών - MCS) προστατεύει παρόμοιες διεργασίες η μία από την άλλη (π.χ. εικονικές μηχανές, μηχανές OpenShift, sandboxes SELinux, δοχεία, κ.λπ.).
6. Παράμετροι πυρήνα για αλλαγή λειτουργιών SELinux κατά τη φόρτωση:
autorelabel=1→ αναγκάζει το σύστημα να εκτελέσει επανασήμανσηselinux=0→ ο πυρήνας δεν φορτώνει την υποδομή SELinuxenforcing=0→ φόρτωση σε επιτρεπτή λειτουργία
7. Εάν χρειάζεται να επισημάνετε εκ νέου ολόκληρο το σύστημα:
# touch /.autorelabel
#reboot
Εάν η σήμανση συστήματος περιέχει μεγάλο αριθμό σφαλμάτων, μπορεί να χρειαστεί να κάνετε εκκίνηση σε λειτουργία επιτρεπόμενης για να πετύχει η παρατήρηση.
8. Για να ελέγξετε αν το SE είναι ενεργοποιημένοLinux: # getenforce
9. Για να ενεργοποιήσετε/απενεργοποιήσετε προσωρινά το SELinux: # setenforce [1|0]
10. Έλεγχος κατάστασης SELinux: # sestatus
11. Αρχείο διαμόρφωσης: /etc/selinux/config
12. Πώς λειτουργεί το SELinuxΑκολουθεί ένα παράδειγμα σήμανσης για τον διακομιστή ιστού Apache:
- Δυαδική αναπαράσταση:
/usr/sbin/httpd→httpd_exec_t - Κατάλογος διαμόρφωσης:
/etc/httpd→httpd_config_t - Κατάλογος αρχείων καταγραφής:
/var/log/httpd → httpd_log_t - Κατάλογος περιεχομένου:
/var/www/html → httpd_sys_content_t - Εκκίνηση σεναρίου:
/usr/lib/systemd/system/httpd.service → httpd_unit_file_d - Διαδικασία:
/usr/sbin/httpd -DFOREGROUND → httpd_t - Λιμένες:
80/tcp, 443/tcp → httpd_t, http_port_t
Η διαδικασία εκτελείται στο πλαίσιο httpd_t, μπορεί να αλληλεπιδράσει με ένα αντικείμενο με ετικέτα httpd_something_t.
13. Πολλές εντολές δέχονται ένα όρισμα -Z για προβολή, δημιουργία και αλλαγή περιβάλλοντος:
ls -Zid -Zps -Znetstat -Zcp -Zmkdir -Z
Τα περιβάλλοντα δημιουργούνται όταν δημιουργούνται αρχεία με βάση το περιβάλλον του γονικού καταλόγου τους (με ορισμένες εξαιρέσεις). Τα RPM μπορούν να δημιουργήσουν περιβάλλοντα όπως κατά την εγκατάσταση.
14. Υπάρχουν τέσσερις κύριοι λόγοι για τα σφάλματα SELinux, τα οποία περιγράφονται λεπτομερέστερα στις παραγράφους 15-21 παρακάτω:
- Ζητήματα επισήμανσης
- Λόγω κάτι που ΝΑLinux πρέπει να ξέρω
- Σφάλμα στην πολιτική/εφαρμογή 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 πρέπει να ξέρω Λογικές τιμές που σας επιτρέπουν να αλλάξετε τμήματα της πολιτικής 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 για την ανάπτυξη ενοτήτων πολιτικής:
# yum -y install setroubleshoot setroubleshoot-server
Επανεκκίνηση ή επανεκκίνηση auditd μετά την εγκατάσταση.
23. χρήση
journalctl για να εμφανίσετε μια λίστα με όλα τα αρχεία καταγραφής που σχετίζονται με setroubleshoot:
# journalctl -t setroubleshoot --since=14:20
24. χρήση journalctl για να παραθέσετε όλα τα αρχεία καταγραφής που σχετίζονται με μια συγκεκριμένη ετικέτα SELinux. Για παράδειγμα:
# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0
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.html26. Υλοτομία: ΝΑLinux καταγράφει πληροφορίες σε πολλά σημεία:
- / var / log / μηνύματα
- /var/log/audit/audit.log
- /var/lib/setroubleshoot/setroubleshoot_database.xml
27. Καταγραφή: Εύρεση σφαλμάτων SELinux στο αρχείο καταγραφής ελέγχου:
# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today
28. Για να βρείτε μηνύματα SELinux Πρόσβαση στην 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
33. Ενεργοποίηση πολιτικής MLS SELinux: # yum install selinux-policy-mls
в /etc/selinux/config:
SELINUX=επιτρεπτικό
SELINUXTYPE=mls
Βεβαιωθείτε ότι ΝΑLinux λειτουργεί σε επιτρεπτική λειτουργία: # 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. Για να εκτελέσετε μια εντολή ή ένα σενάριο σε ένα συγκεκριμένο αρχείο, ρόλο και περιβάλλον χρήστη:
# runcon -t initrc_t -r system_r -u user_u yourcommandhere
-tπλαίσιο αρχείου-rπλαίσιο ρόλου-uπεριβάλλον χρήστη
41. Κοντέινερ που εκτελούνται με απενεργοποιημένο το SELinux:
- Podman:
# podman run --security-opt label=disable … - Λιμενεργάτης:
# docker run --security-opt label=disable …
42. Εάν πρέπει να δώσετε στο κοντέινερ πλήρη πρόσβαση στο σύστημα:
- Podman:
# podman run --privileged … - Λιμενεργάτης:
# docker run --privileged …
Και τώρα ξέρετε ήδη την απάντηση. Οπότε σας παρακαλώ: μην πανικοβάλλεστε και ενεργοποιήστε το SELinux.
Βιβλιογραφικές αναφορές:
- by
- από τον Dan Walsh
- by
- by
Πηγή: www.habr.com
