Φύλλο εξαπάτησης SELinux για διαχειριστές συστήματος: 42 απαντήσεις σε σημαντικές ερωτήσεις

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

Φύλλο εξαπάτησης SELinux για διαχειριστές συστήματος: 42 απαντήσεις σε σημαντικές ερωτήσεις

Εδώ θα λάβετε απαντήσεις σε σημαντικές ερωτήσεις σχετικά με τη ζωή, το σύμπαν και τα πάντα στο 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) είναι η διαχείριση διαδικασιών (τομέων) με βάση το επίπεδο ασφάλειας των δεδομένων που θα χρησιμοποιήσουν. Για παράδειγμα, μια μυστική διαδικασία δεν μπορεί να διαβάσει άκρως απόρρητα δεδομένα.

5. Εξασφάλιση ασφάλειας πολλαπλών κατηγοριών (Ασφάλεια πολλαπλών κατηγοριών - MCS) προστατεύει παρόμοιες διαδικασίες μεταξύ τους (για παράδειγμα, εικονικές μηχανές, μηχανές OpenShift, SELinux sandboxes, κοντέινερ κ.λπ.).

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:

  • Δυαδική αναπαράσταση: /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 -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 για την ανάπτυξη ενοτήτων πολιτικής:

# 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.html

26. Καταγραφή: Το SELinux καταγράφει πληροφορίες σε πολλά σημεία:

  • / 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 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

33. Ενεργοποίηση πολιτικής MLS SELinux: # yum install selinux-policy-mls
в /etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls

Βεβαιωθείτε ότι το 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. Για να εκτελέσετε μια εντολή ή ένα σενάριο σε ένα συγκεκριμένο αρχείο, ρόλο και περιβάλλον χρήστη:

# 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.

Βιβλιογραφικές αναφορές:

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο