Ένας οδηγός για αρχάριους για το SELinux

Ένας οδηγός για αρχάριους για το SELinux

Μετάφραση του άρθρου που ετοιμάστηκε για φοιτητές του μαθήματος "Linux Security"

Το SELinux ή το Security Enhanced Linux είναι ένας βελτιωμένος μηχανισμός ελέγχου πρόσβασης που αναπτύχθηκε από την Εθνική Υπηρεσία Ασφαλείας των ΗΠΑ (NSA) για την πρόληψη κακόβουλων εισβολών. Εφαρμόζει ένα αναγκαστικό (ή υποχρεωτικό) μοντέλο ελέγχου πρόσβασης (English Mandatory Access Control, MAC) πάνω από το υπάρχον διακριτικό (ή επιλεκτικό) μοντέλο (English Discretionary Access Control, DAC), δηλαδή δικαιώματα ανάγνωσης, εγγραφής, εκτέλεσης.

Το SELinux έχει τρεις λειτουργίες:

  1. Ενίσχυση — άρνηση πρόσβασης βάσει κανόνων πολιτικής.
  2. Επιτρεπτικός — τήρηση αρχείου καταγραφής ενεργειών που παραβιάζουν την πολιτική, οι οποίες θα απαγορευόταν στη λειτουργία επιβολής.
  3. ανάπηρος — πλήρης απενεργοποίηση του SELinux.

Από προεπιλογή οι ρυθμίσεις είναι μέσα /etc/selinux/config

Αλλαγή λειτουργιών SELinux

Για να μάθετε την τρέχουσα λειτουργία, τρέξτε

$ getenforce

Για να αλλάξετε τη λειτουργία σε επιτρεπτή, εκτελέστε την ακόλουθη εντολή

$ setenforce 0

ή, για να αλλάξετε λειτουργία από επιτρεπτικός επί επιβολή, εκτέλεση

$ setenforce 1

Εάν πρέπει να απενεργοποιήσετε πλήρως το SELinux, τότε αυτό μπορεί να γίνει μόνο μέσω του αρχείου διαμόρφωσης

$ vi /etc/selinux/config

Για να απενεργοποιήσετε, αλλάξτε την παράμετρο SELINUX ως εξής:

SELINUX=disabled

Ρύθμιση του SELinux

Κάθε αρχείο και διεργασία επισημαίνεται με ένα πλαίσιο SELinux, το οποίο περιέχει πρόσθετες πληροφορίες όπως χρήστη, ρόλο, τύπο κ.λπ. Εάν αυτή είναι η πρώτη φορά που ενεργοποιείτε το SELinux, θα πρέπει πρώτα να διαμορφώσετε το περιβάλλον και τις ετικέτες. Η διαδικασία εκχώρησης ετικετών και περιβάλλοντος είναι γνωστή ως προσθήκη ετικετών. Για να ξεκινήσετε τη σήμανση, στο αρχείο ρυθμίσεων αλλάζουμε τη λειτουργία σε επιτρεπτικός.

$ vi /etc/selinux/config
SELINUX=permissive

Αφού ρυθμίσετε τη λειτουργία επιτρεπτικός, δημιουργήστε ένα κενό κρυφό αρχείο στη ρίζα με το όνομα autorelabel

$ touch /.autorelabel

και επανεκκινήστε τον υπολογιστή

$ init 6

Σημείωση: Χρησιμοποιούμε τη λειτουργία επιτρεπτικός για σήμανση, από τη χρήση του τρόπου λειτουργίας επιβολή μπορεί να προκαλέσει διακοπή λειτουργίας του συστήματος κατά την επανεκκίνηση.

Μην ανησυχείτε εάν η λήψη κολλήσει σε κάποιο αρχείο, η επισήμανση διαρκεί λίγο. Μόλις ολοκληρωθεί η σήμανση και το σύστημά σας εκκινηθεί, μπορείτε να μεταβείτε στο αρχείο διαμόρφωσης και να ορίσετε τη λειτουργία επιβολήκαι τρέξτε επίσης:

$ setenforce 1

Έχετε πλέον ενεργοποιήσει με επιτυχία το SELinux στον υπολογιστή σας.

Παρακολούθηση των αρχείων καταγραφής

Ενδέχεται να αντιμετωπίσατε ορισμένα σφάλματα κατά τη σήμανση ή κατά τη λειτουργία του συστήματος. Για να ελέγξετε εάν το SELinux σας λειτουργεί σωστά και εάν δεν εμποδίζει την πρόσβαση σε οποιαδήποτε θύρα, εφαρμογή κ.λπ., πρέπει να δείτε τα αρχεία καταγραφής. Το αρχείο καταγραφής SELinux βρίσκεται στο /var/log/audit/audit.log, αλλά δεν χρειάζεται να διαβάσετε ολόκληρο το θέμα για να βρείτε σφάλματα. Μπορείτε να χρησιμοποιήσετε το βοηθητικό πρόγραμμα audit2why για να βρείτε σφάλματα. Εκτελέστε την ακόλουθη εντολή:

$ audit2why < /var/log/audit/audit.log

Ως αποτέλεσμα, θα λάβετε μια λίστα σφαλμάτων. Εάν δεν υπήρχαν σφάλματα στο αρχείο καταγραφής, τότε δεν θα εμφανιστούν μηνύματα.

Διαμόρφωση πολιτικής SELinux

Μια πολιτική SELinux είναι ένα σύνολο κανόνων που διέπουν τον μηχανισμό ασφαλείας SELinux. Μια πολιτική ορίζει ένα σύνολο κανόνων για ένα συγκεκριμένο περιβάλλον. Τώρα θα μάθουμε πώς να διαμορφώνουμε πολιτικές ώστε να επιτρέπεται η πρόσβαση σε απαγορευμένες υπηρεσίες.

1. Λογικές τιμές (διακόπτες)

Οι διακόπτες (booleans) σάς επιτρέπουν να αλλάζετε τμήματα μιας πολιτικής κατά το χρόνο εκτέλεσης, χωρίς να χρειάζεται να δημιουργήσετε νέες πολιτικές. Σας επιτρέπουν να κάνετε αλλαγές χωρίς επανεκκίνηση ή μεταγλώττιση των πολιτικών SELinux.

Παράδειγμα
Ας υποθέσουμε ότι θέλουμε να μοιραστούμε τον αρχικό κατάλογο ενός χρήστη μέσω FTP ανάγνωσης/εγγραφής, και τον έχουμε ήδη μοιραστεί, αλλά όταν προσπαθούμε να αποκτήσουμε πρόσβαση, δεν βλέπουμε τίποτα. Αυτό συμβαίνει επειδή η πολιτική SELinux εμποδίζει τον διακομιστή FTP να διαβάζει και να γράφει στον αρχικό κατάλογο του χρήστη. Πρέπει να αλλάξουμε την πολιτική έτσι ώστε ο διακομιστής FTP να έχει πρόσβαση στους οικιακούς καταλόγους. Ας δούμε αν υπάρχουν διακόπτες για αυτό κάνοντας

$ semanage boolean -l

Αυτή η εντολή θα εμφανίσει τους διαθέσιμους διακόπτες με την τρέχουσα κατάσταση (ενεργοποίηση ή απενεργοποίηση) και την περιγραφή τους. Μπορείτε να κάνετε πιο συγκεκριμένη την αναζήτησή σας προσθέτοντας grep για να βρείτε αποτελέσματα μόνο για ftp:

$ semanage boolean -l | grep ftp

και θα βρεις τα παρακάτω

ftp_home_dir        -> off       Allow ftp to read & write file in user home directory

Αυτός ο διακόπτης είναι απενεργοποιημένος, επομένως θα τον ενεργοποιήσουμε με setsebool $ setsebool ftp_home_dir on

Τώρα ο δαίμονας ftp μας θα μπορεί να έχει πρόσβαση στον αρχικό κατάλογο του χρήστη.
Σημείωση: Μπορείτε επίσης να λάβετε μια λίστα με τους διαθέσιμους διακόπτες χωρίς περιγραφή κάνοντας αυτό getsebool -a

2. Ετικέτες και πλαίσιο

Αυτός είναι ο πιο συνηθισμένος τρόπος εφαρμογής της πολιτικής SELinux. Κάθε αρχείο, φάκελος, διεργασία και θύρα επισημαίνεται με το περιβάλλον SELinux:

  • Για αρχεία και φακέλους, οι ετικέτες αποθηκεύονται ως εκτεταμένα χαρακτηριστικά στο σύστημα αρχείων και μπορούν να προβληθούν με την ακόλουθη εντολή:
    $ ls -Z /etc/httpd
  • Για διεργασίες και θύρες, η διαχείριση της επισήμανσης γίνεται από τον πυρήνα και μπορείτε να δείτε αυτές τις ετικέτες ως εξής:

διαδικασία

$ ps –auxZ | grep httpd

λιμάνι

$ netstat -anpZ | grep httpd

Παράδειγμα
Τώρα ας δούμε ένα παράδειγμα για να κατανοήσουμε καλύτερα τις ετικέτες και το πλαίσιο. Ας υποθέσουμε ότι έχουμε έναν διακομιστή ιστού που, αντί για έναν κατάλογο /var/www/html/ использует /home/dan/html/. Το SELinux θα θεωρήσει ότι αυτό αποτελεί παραβίαση της πολιτικής και δεν θα μπορείτε να δείτε τις ιστοσελίδες σας. Αυτό συμβαίνει επειδή δεν έχουμε ορίσει το πλαίσιο ασφαλείας που σχετίζεται με τα αρχεία HTML. Για να προβάλετε το προεπιλεγμένο περιβάλλον ασφαλείας, χρησιμοποιήστε την ακόλουθη εντολή:

$ ls –lz /var/www/html
 -rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/

Εδώ φτάσαμε httpd_sys_content_t ως πλαίσιο για αρχεία html. Πρέπει να ρυθμίσουμε αυτό το πλαίσιο ασφαλείας για τον τρέχοντα κατάλογο μας, ο οποίος επί του παρόντος έχει το ακόλουθο περιβάλλον:

-rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/

Μια εναλλακτική εντολή για τον έλεγχο του περιβάλλοντος ασφαλείας ενός αρχείου ή καταλόγου:

$ semanage fcontext -l | grep '/var/www'

Θα χρησιμοποιήσουμε επίσης το semanage για να αλλάξουμε το περιβάλλον μόλις βρούμε το σωστό περιβάλλον ασφαλείας. Για να αλλάξετε το περιβάλλον του /home/dan/html, εκτελέστε τις ακόλουθες εντολές:

$ semanage fcontext -a -t httpd_sys_content_t ‘/home/dan/html(/.*)?’
$ semanage fcontext -l | grep ‘/home/dan/html’
/home/dan/html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
$ restorecon -Rv /home/dan/html

Αφού αλλάξει το περιβάλλον χρησιμοποιώντας το semanage, η εντολή restorecon θα φορτώσει το προεπιλεγμένο περιβάλλον για αρχεία και καταλόγους. Ο διακομιστής ιστού μας θα μπορεί πλέον να διαβάζει αρχεία από το φάκελο /home/dan/htmlεπειδή το πλαίσιο ασφαλείας για αυτόν τον φάκελο έχει αλλάξει σε httpd_sys_content_t.

3. Δημιουργήστε τοπικές πολιτικές

Μπορεί να υπάρξουν περιπτώσεις όπου οι παραπάνω μέθοδοι δεν σας ωφελούν και λαμβάνετε σφάλματα (avc/denial) στο audit.log. Όταν συμβεί αυτό, πρέπει να δημιουργήσετε μια τοπική πολιτική. Μπορείτε να βρείτε όλα τα σφάλματα χρησιμοποιώντας το audit2why, όπως περιγράφεται παραπάνω.

Μπορείτε να δημιουργήσετε μια τοπική πολιτική για την επίλυση σφαλμάτων. Για παράδειγμα, λαμβάνουμε ένα σφάλμα που σχετίζεται με httpd (apache) ή smbd (samba), grep τα σφάλματα και δημιουργούμε μια πολιτική για αυτά:

apache
$ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy
samba
$ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policy

Εδώ http_policy и smb_policy είναι τα ονόματα των τοπικών πολιτικών που δημιουργήσαμε. Τώρα πρέπει να φορτώσουμε αυτές τις τοπικές πολιτικές που δημιουργήθηκαν στην τρέχουσα πολιτική SELinux. Αυτό μπορεί να γίνει ως εξής:

$ semodule –I http_policy.pp
$ semodule –I smb_policy.pp

Έγινε λήψη των τοπικών μας πολιτικών και δεν θα πρέπει πλέον να λαμβάνουμε avc ή denail στο audit.log.

Αυτή ήταν η προσπάθειά μου να σας βοηθήσω να κατανοήσετε το SELinux. Ελπίζω ότι αφού διαβάσετε αυτό το άρθρο θα νιώσετε πιο άνετα με το SELinux.

Πηγή: www.habr.com

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