Συστήματα ασφαλείας Linux

Ένας από τους λόγους για την τεράστια επιτυχία του λειτουργικού συστήματος Linux σε ενσωματωμένες, φορητές συσκευές και διακομιστές είναι ο αρκετά υψηλός βαθμός ασφάλειας του πυρήνα, των σχετικών υπηρεσιών και των εφαρμογών. Αλλα αν κοίτα καλύτερα στην αρχιτεκτονική του πυρήνα του Linux, τότε είναι αδύνατο να βρεθεί σε αυτό ένα τετράγωνο υπεύθυνο για την ασφάλεια ως τέτοιο. Πού κρύβεται το υποσύστημα ασφαλείας Linux και από τι αποτελείται;

Ιστορικό για λειτουργικές μονάδες ασφαλείας Linux και SELinux

Το Security Enhanced Linux είναι ένα σύνολο κανόνων και μηχανισμών πρόσβασης που βασίζονται σε υποχρεωτικά και βασισμένα σε ρόλους μοντέλα πρόσβασης για την προστασία των συστημάτων Linux από πιθανές απειλές και τη διόρθωση των αδυναμιών του Discretionary Access Control (DAC), του παραδοσιακού συστήματος ασφαλείας Unix. Το έργο ξεκίνησε στα έγκατα της Υπηρεσίας Εθνικής Ασφάλειας των ΗΠΑ και αναπτύχθηκε άμεσα κυρίως από τους εργολάβους Secure Computing Corporation και MITER, καθώς και από μια σειρά ερευνητικών εργαστηρίων.

Συστήματα ασφαλείας Linux
Ενότητες ασφαλείας Linux

Ο Linus Torvalds έκανε μια σειρά από σχόλια σχετικά με τις νέες εξελίξεις της NSA, ώστε να μπορούν να συμπεριληφθούν στον κύριο πυρήνα του Linux. Περιέγραψε ένα γενικό περιβάλλον, με ένα σύνολο αναχαιτιστών για τον έλεγχο των λειτουργιών με αντικείμενα και ένα σύνολο ορισμένων προστατευτικών πεδίων στις δομές δεδομένων του πυρήνα για την αποθήκευση των αντίστοιχων χαρακτηριστικών. Αυτό το περιβάλλον μπορεί στη συνέχεια να χρησιμοποιηθεί από μονάδες πυρήνα με δυνατότητα φόρτωσης για την εφαρμογή οποιουδήποτε επιθυμητού μοντέλου ασφαλείας. Το LSM μπήκε πλήρως στον πυρήνα Linux v2.6 το 2003.

Το πλαίσιο LSM περιλαμβάνει πεδία προστασίας σε δομές δεδομένων και κλήσεις σε λειτουργίες υποκλοπής σε κρίσιμα σημεία του κώδικα του πυρήνα για να τα χειριστείτε και να εκτελέσετε έλεγχο πρόσβασης. Προσθέτει επίσης λειτουργικότητα για την καταχώριση μονάδων ασφαλείας. Η διεπαφή /sys/kernel/security/lsm περιέχει μια λίστα ενεργών λειτουργικών μονάδων στο σύστημα. Τα άγκιστρα LSM αποθηκεύονται σε λίστες που καλούνται με τη σειρά που καθορίζεται στο CONFIG_LSM. Λεπτομερής τεκμηρίωση για τα άγκιστρα περιλαμβάνεται στο αρχείο κεφαλίδας include/linux/lsm_hooks.h.

Το υποσύστημα LSM κατέστησε δυνατή την ολοκλήρωση της πλήρους ενοποίησης του SELinux με την ίδια έκδοση του σταθερού πυρήνα Linux v2.6. Σχεδόν αμέσως, το SELinux έγινε το de facto πρότυπο για ένα ασφαλές περιβάλλον Linux και συμπεριλήφθηκε στις πιο δημοφιλείς διανομές: RedHat Enterprise Linux, Fedora, Debian, Ubuntu.

Γλωσσάρι SELinux

  • Ταυτότητα — Ο χρήστης SELinux δεν είναι ο ίδιος με το συνηθισμένο αναγνωριστικό χρήστη Unix/Linux· μπορούν να συνυπάρχουν στο ίδιο σύστημα, αλλά είναι εντελώς διαφορετικοί στην ουσία. Κάθε τυπικός λογαριασμός Linux μπορεί να αντιστοιχεί σε έναν ή περισσότερους στο SELinux. Η ταυτότητα SELinux είναι μέρος του γενικού περιβάλλοντος ασφαλείας, το οποίο καθορίζει σε ποιους τομείς μπορείτε και σε ποιους δεν μπορείτε να συμμετάσχετε.
  • τομείς - Στο SELinux, ένας τομέας είναι το περιβάλλον εκτέλεσης ενός θέματος, δηλαδή μιας διαδικασίας. Ο τομέας καθορίζει άμεσα την πρόσβαση που έχει μια διεργασία. Ένας τομέας είναι βασικά μια λίστα με το τι μπορεί να κάνει μια διεργασία ή τι μπορεί να κάνει μια διεργασία με διαφορετικούς τύπους. Μερικά παραδείγματα τομέων είναι το sysadm_t για διαχείριση συστήματος και το user_t που είναι ένας κανονικός μη προνομιούχος τομέας χρήστη. Το σύστημα init εκτελείται στον τομέα init_t και η επώνυμη διεργασία στον τομέα named_t.
  • Ρόλοι — Τι χρησιμεύει ως ενδιάμεσος μεταξύ τομέων και χρηστών SELinux. Οι ρόλοι καθορίζουν σε ποιους τομείς μπορεί να ανήκει ένας χρήστης και σε ποιους τύπους αντικειμένων μπορεί να έχει πρόσβαση. Αυτός ο μηχανισμός ελέγχου πρόσβασης αποτρέπει την απειλή επιθέσεων κλιμάκωσης προνομίων. Οι ρόλοι εγγράφονται στο μοντέλο ασφαλείας Role Based Access Control (RBAC) που χρησιμοποιείται στο SELinux.
  • τύποι — Ένα χαρακτηριστικό λίστας επιβολής τύπου που εκχωρείται σε ένα αντικείμενο και καθορίζει ποιος μπορεί να έχει πρόσβαση σε αυτό. Παρόμοια με τον ορισμό τομέα, με τη διαφορά ότι ο τομέας ισχύει για μια διεργασία και ο τύπος ισχύει για αντικείμενα όπως καταλόγους, αρχεία, υποδοχές κ.λπ.
  • Υποκείμενα και αντικείμενα - Οι διεργασίες είναι θέματα και εκτελούνται σε συγκεκριμένο πλαίσιο ή τομέα ασφάλειας. Πόροι λειτουργικού συστήματος: αρχεία, κατάλογοι, υποδοχές κ.λπ., είναι αντικείμενα στα οποία εκχωρείται ένας συγκεκριμένος τύπος, με άλλα λόγια, ένα επίπεδο απορρήτου.
  • Πολιτικές SELinux — Το SELinux χρησιμοποιεί μια ποικιλία πολιτικών για την προστασία του συστήματος. Η πολιτική SELinux ορίζει την πρόσβαση των χρηστών σε ρόλους, ρόλους σε τομείς και τομείς σε τύπους. Αρχικά, ο χρήστης εξουσιοδοτείται να αποκτήσει έναν ρόλο και, στη συνέχεια, ο ρόλος εξουσιοδοτείται να έχει πρόσβαση σε τομείς. Τέλος, ένας τομέας μπορεί να έχει πρόσβαση μόνο σε συγκεκριμένους τύπους αντικειμένων.

Αρχιτεκτονική LSM και SELinux

Παρά το όνομα, τα LSM δεν είναι γενικά λειτουργικές μονάδες Linux με δυνατότητα φόρτωσης. Ωστόσο, όπως και το SELinux, είναι άμεσα ενσωματωμένο στον πυρήνα. Οποιαδήποτε αλλαγή στον πηγαίο κώδικα LSM απαιτεί νέα μεταγλώττιση πυρήνα. Η αντίστοιχη επιλογή πρέπει να είναι ενεργοποιημένη στις ρυθμίσεις του πυρήνα, διαφορετικά ο κωδικός LSM δεν θα ενεργοποιηθεί μετά την εκκίνηση. Αλλά ακόμη και σε αυτήν την περίπτωση, μπορεί να ενεργοποιηθεί από την επιλογή του bootloader του λειτουργικού συστήματος.

Συστήματα ασφαλείας Linux
Στοίβα ελέγχου LSM

Το LSM είναι εξοπλισμένο με άγκιστρα σε λειτουργίες πυρήνα πυρήνα που μπορεί να σχετίζονται με ελέγχους. Ένα από τα κύρια χαρακτηριστικά των LSM είναι ότι είναι στοιβαγμένα. Έτσι, οι τυπικοί έλεγχοι εξακολουθούν να εκτελούνται και κάθε επίπεδο του LSM προσθέτει μόνο πρόσθετα στοιχεία ελέγχου και στοιχεία ελέγχου. Αυτό σημαίνει ότι η απαγόρευση δεν μπορεί να ανατραπεί. Αυτό φαίνεται στο σχήμα· εάν το αποτέλεσμα των τακτικών ελέγχων DAC είναι αποτυχία, τότε το θέμα δεν θα φτάσει καν στα άγκιστρα LSM.

Το SELinux υιοθετεί την αρχιτεκτονική ασφαλείας Flask του ερευνητικού λειτουργικού συστήματος Fluke, ιδιαίτερα την αρχή του ελάχιστου προνομίου. Η ουσία αυτής της έννοιας, όπως υποδηλώνει το όνομά της, είναι να παραχωρεί στον χρήστη ή στη διαδικασία μόνο εκείνα τα δικαιώματα που είναι απαραίτητα για την εκτέλεση των προβλεπόμενων ενεργειών. Αυτή η αρχή υλοποιείται χρησιμοποιώντας πληκτρολόγηση αναγκαστικής πρόσβασης, επομένως ο έλεγχος πρόσβασης στο SELinux βασίζεται στο μοντέλο τύπου domain =>.

Χάρη στην πληκτρολόγηση αναγκαστικής πρόσβασης, το SELinux έχει πολύ μεγαλύτερες δυνατότητες ελέγχου πρόσβασης από το παραδοσιακό μοντέλο DAC που χρησιμοποιείται στα λειτουργικά συστήματα Unix/Linux. Για παράδειγμα, μπορείτε να περιορίσετε τον αριθμό θύρας δικτύου στην οποία θα συνδεθεί ο διακομιστής ftp, να επιτρέψετε την εγγραφή και την αλλαγή αρχείων σε έναν συγκεκριμένο φάκελο, αλλά όχι τη διαγραφή τους.

Τα κύρια στοιχεία του SELinux είναι:

  • Διακομιστής επιβολής πολιτικής — Ο κύριος μηχανισμός οργάνωσης του ελέγχου πρόσβασης.
  • Βάση δεδομένων πολιτικής ασφαλείας συστήματος.
  • Αλληλεπίδραση με τον υποκλοπή συμβάντων LSM.
  • Selinuxfs - Pseudo-FS, ίδιο με το /proc και προσαρτημένο στο /sys/fs/selinux. Συμπληρωμένο δυναμικά από τον πυρήνα Linux κατά την εκτέλεση και περιέχει αρχεία που περιέχουν πληροφορίες κατάστασης SELinux.
  • Πρόσβαση στη διανυσματική προσωρινή μνήμη — Ένας βοηθητικός μηχανισμός για την αύξηση της παραγωγικότητας.

Συστήματα ασφαλείας Linux
Πώς λειτουργεί το SELinux

Όλα λειτουργούν έτσι.

  1. Ένα συγκεκριμένο θέμα, με όρους SELinux, εκτελεί μια επιτρεπόμενη ενέργεια σε ένα αντικείμενο μετά από έλεγχο DAC, όπως φαίνεται στην επάνω εικόνα. Αυτό το αίτημα για την εκτέλεση μιας λειτουργίας πηγαίνει στον υποκλοπή συμβάντων LSM.
  2. Από εκεί, το αίτημα, μαζί με το πλαίσιο ασφάλειας θέματος και αντικειμένου, μεταβιβάζεται στη μονάδα SELinux Abstraction and Hook Logic, η οποία είναι υπεύθυνη για την αλληλεπίδραση με το LSM.
  3. Η αρχή λήψης αποφάσεων σχετικά με την πρόσβαση ενός υποκειμένου σε ένα αντικείμενο είναι ο διακομιστής εφαρμογής πολιτικής και λαμβάνει δεδομένα από το SELinux AnHL.
  4. Για να λάβει αποφάσεις σχετικά με την πρόσβαση ή την άρνηση, ο διακομιστής επιβολής πολιτικών στρέφεται στο υποσύστημα προσωρινής αποθήκευσης διανυσματικής μνήμης πρόσβασης (AVC) για τους κανόνες που χρησιμοποιούνται περισσότερο.
  5. Εάν δεν βρεθεί λύση για τον αντίστοιχο κανόνα στην κρυφή μνήμη, τότε το αίτημα μεταβιβάζεται στη βάση δεδομένων της πολιτικής ασφαλείας.
  6. Το αποτέλεσμα αναζήτησης από τη βάση δεδομένων και το AVC επιστρέφεται στον διακομιστή εφαρμογής πολιτικής.
  7. Εάν η πολιτική που βρέθηκε ταιριάζει με την ενέργεια που ζητήθηκε, τότε η λειτουργία επιτρέπεται. Διαφορετικά, η λειτουργία απαγορεύεται.

Διαχείριση ρυθμίσεων SELinux

Το SELinux λειτουργεί σε έναν από τους τρεις τρόπους λειτουργίας:

  • Επιβολή - Αυστηρή τήρηση των πολιτικών ασφαλείας.
  • Επιτρεπτό - Επιτρέπεται η παραβίαση των περιορισμών· γίνεται αντίστοιχη σημείωση στο ημερολόγιο.
  • Απενεργοποιημένο — Οι πολιτικές ασφαλείας δεν ισχύουν.

Μπορείτε να δείτε σε ποια λειτουργία βρίσκεται το SELinux με την ακόλουθη εντολή.

[admin@server ~]$ getenforce
Permissive

Αλλαγή της λειτουργίας πριν από την επανεκκίνηση, για παράδειγμα, ρύθμιση σε επιβολή ή 1. Η παράμετρος επιτρεπόμενης αντιστοιχεί στον αριθμητικό κωδικό 0.

[admin@server ~]$ setenfoce enforcing
[admin@server ~]$ setenfoce 1 #то же самое

Μπορείτε επίσης να αλλάξετε τη λειτουργία επεξεργάζοντας το αρχείο:

[admin@server ~]$ cat /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.

SELINUXTYPE=στόχος

Η διαφορά με το setenfoce είναι ότι κατά την εκκίνηση του λειτουργικού συστήματος, η λειτουργία SELinux θα ρυθμιστεί σύμφωνα με την τιμή της παραμέτρου SELINUX στο αρχείο διαμόρφωσης. Επιπλέον, οι αλλαγές στην επιβολή <=> απενεργοποίησης ισχύουν μόνο με την επεξεργασία του αρχείου /etc/selinux/config και μετά από επανεκκίνηση.

Δείτε μια σύντομη αναφορά κατάστασης:

[admin@server ~]$ sestatus

SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: permissive
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 31

Για να προβάλετε τα χαρακτηριστικά SELinux, ορισμένα τυπικά βοηθητικά προγράμματα χρησιμοποιούν την παράμετρο -Z.

[admin@server ~]$ ls -lZ /var/log/httpd/
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20200920
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20200927
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20201004
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20201011
[admin@server ~]$ ps -u apache -Z
LABEL                             PID TTY          TIME CMD
system_u:system_r:httpd_t:s0     2914 ?        00:00:04 httpd
system_u:system_r:httpd_t:s0     2915 ?        00:00:00 httpd
system_u:system_r:httpd_t:s0     2916 ?        00:00:00 httpd
system_u:system_r:httpd_t:s0     2917 ?        00:00:00 httpd
...
system_u:system_r:httpd_t:s0     2918 ?        00:00:00 httpd

Σε σύγκριση με την κανονική έξοδο του ls -l, υπάρχουν πολλά πρόσθετα πεδία στην ακόλουθη μορφή:

<user>:<role>:<type>:<level>

Το τελευταίο πεδίο υποδηλώνει κάτι σαν ταξινόμηση ασφάλειας και αποτελείται από έναν συνδυασμό δύο στοιχείων:

  • s0 - σημασία, γραμμένο επίσης ως διάστημα lowlevel-highlevel
  • c0, c1… c1023 - κατηγορία.

Αλλαγή διαμόρφωσης πρόσβασης

Χρησιμοποιήστε το semodule για να φορτώσετε, να προσθέσετε και να αφαιρέσετε μονάδες SELinux.

[admin@server ~]$ semodule -l |wc -l #список всех модулей
408
[admin@server ~]$ semodule -e abrt #enable - активировать модуль
[admin@server ~]$ semodule -d accountsd #disable - отключить модуль
[admin@server ~]$ semodule -r avahi #remove - удалить модуль

Πρώτη ομάδα semanage login συνδέει τον χρήστη SELinux με τον χρήστη του λειτουργικού συστήματος, ο δεύτερος εμφανίζει μια λίστα. Τέλος, η τελευταία εντολή με το διακόπτη -r αφαιρεί την αντιστοίχιση των χρηστών SELinux σε λογαριασμούς λειτουργικού συστήματος. Μια επεξήγηση της σύνταξης για τις τιμές εύρους MLS/MCS βρίσκεται στην προηγούμενη ενότητα.

[admin@server ~]$ semanage login -a -s user_u karol
[admin@server ~]$ semanage login -l

Login Name SELinux User MLS/MCS Range Service
__default__ unconfined_u s0-s0:c0.c1023 *
root unconfined_u s0-s0:c0.c1023 *
system_u system_u s0-s0:c0.c1023 *
[admin@server ~]$ semanage login -d karol

Ομάδα semanage χρήστη χρησιμοποιείται για τη διαχείριση αντιστοιχίσεων μεταξύ χρηστών και ρόλων του SELinux.

[admin@server ~]$ semanage user -l
                Labeling   MLS/       MLS/                          
SELinux User    Prefix     MCS Level  MCS Range             SELinux Roles
guest_u         user       s0         s0                    guest_r
staff_u         staff      s0         s0-s0:c0.c1023        staff_r sysadm_r
...
user_u          user       s0         s0                    user_r
xguest_u        user       s0         s0                    xguest_r
[admin@server ~]$ semanage user -a -R 'staff_r user_r'
[admin@server ~]$ semanage user -d test_u

Παράμετροι εντολών:

  • -μια προσθήκη προσαρμοσμένης καταχώρησης αντιστοίχισης ρόλων.
  • -l λίστα χρηστών και ρόλων που ταιριάζουν.
  • -δ διαγραφή καταχώρισης αντιστοίχισης ρόλων χρήστη.
  • -R λίστα ρόλων που συνδέονται με τον χρήστη.

Αρχεία, Ports και Boolean Values

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

[admin@server ~]$ semanage fcontext -a -t httpd_sys_content_t "/srv/www(/.*)?
[admin@server ~]$ restorecon -R /srv/www/

Η πρώτη εντολή καταχωρεί νέους κανόνες σήμανσης και η δεύτερη επαναφέρει, ή μάλλον ορίζει, τους τύπους αρχείων σύμφωνα με τους τρέχοντες κανόνες.

Ομοίως, οι θύρες TCP/UDP επισημαίνονται με τέτοιο τρόπο ώστε μόνο οι κατάλληλες υπηρεσίες να μπορούν να τις ακούσουν. Για παράδειγμα, για να ακούει ο διακομιστής web στη θύρα 8080, πρέπει να εκτελέσετε την εντολή.

[admin@server ~]$ semanage port -m -t http_port_t -p tcp 8080

Ένας σημαντικός αριθμός μονάδων SELinux έχει παραμέτρους που μπορούν να λάβουν τιμές Boolean. Ολόκληρη η λίστα τέτοιων παραμέτρων μπορεί να φανεί χρησιμοποιώντας το getsebool -a. Μπορείτε να αλλάξετε τις τιμές boolean χρησιμοποιώντας το setsebool.

[admin@server ~]$ getsebool httpd_enable_cgi
httpd_enable_cgi --> on
[admin@server ~]$ setsebool -P httpd_enable_cgi off
[admin@server ~]$ getsebool httpd_enable_cgi
httpd_enable_homedirs --> off

Εργαστήριο, αποκτήστε πρόσβαση στη διεπαφή Pgadmin-web

Ας δούμε ένα πρακτικό παράδειγμα: εγκαταστήσαμε το pgadmin7.6-web στο RHEL 4 για τη διαχείριση της βάσης δεδομένων PostgreSQL. Περπατήσαμε λίγο Αναζήτηση με τις ρυθμίσεις των pg_hba.conf, postgresql.conf και config_local.py, ορίστε δικαιώματα φακέλου, εγκαταστάθηκαν οι λειτουργικές μονάδες Python που λείπουν από το pip. Όλα είναι έτοιμα, ξεκινάμε και παραλαμβάνουμε 500 Εσωτερικό σφάλμα διακομιστή.

Συστήματα ασφαλείας Linux

Ξεκινάμε με τους τυπικούς ύποπτους, ελέγχοντας το /var/log/httpd/error_log. Υπάρχουν μερικές ενδιαφέρουσες συμμετοχές εκεί.

[timestamp] [core:notice] [pid 23689] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0
...
[timestamp] [wsgi:error] [pid 23690] [Errno 13] Permission denied: '/var/lib/pgadmin'
[timestamp] [wsgi:error] [pid 23690] [timestamp] [wsgi:error] [pid 23690] HINT : You may need to manually set the permissions on
[timestamp] [wsgi:error] [pid 23690] /var/lib/pgadmin to allow apache to write to it.

Σε αυτό το σημείο, οι περισσότεροι διαχειριστές Linux θα μπουν στον πειρασμό να εκτελέσουν το setencorce 0 και αυτό θα είναι το τέλος. Ειλικρινά, έκανα ακριβώς αυτό την πρώτη φορά. Αυτή είναι φυσικά και μια διέξοδος, αλλά μακριά από την καλύτερη.

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

[admin@server ~]$ yum install setroubleshoot
[admin@server ~]$ journalctl -b -0
[admin@server ~]$ service restart auditd

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

Συστήματα ασφαλείας Linux

Εκτελούμε αυτές τις εντολές:

[admin@server ~]$ setsebool -P httpd_can_network_connect 1
[admin@server ~]$ setsebool -P httpd_can_network_connect_db 1

Ελέγχουμε την πρόσβαση στην ιστοσελίδα pgadmin4-web, όλα λειτουργούν.

Συστήματα ασφαλείας Linux

Συστήματα ασφαλείας Linux

Πηγή: www.habr.com

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