Linux təhlükəsizlik sistemləri

Quraşdırılmış, mobil cihazlarda və serverlərdə Linux ƏS-nin böyük uğurunun səbəblərindən biri nüvənin, əlaqəli xidmətlərin və tətbiqlərin kifayət qədər yüksək səviyyədə təhlükəsizliyidir. Amma əgər daha yaxından baxın Linux nüvəsinin arxitekturasına uyğun olaraq, onda təhlükəsizlik üçün cavabdeh olan bir kvadrat tapmaq mümkün deyil. Linux təhlükəsizlik alt sistemi harada gizlənir və o nədən ibarətdir?

Linux Təhlükəsizlik Modulları və SELinux haqqında məlumat

Security Enhanced Linux Linux sistemlərini potensial təhlükələrdən qorumaq və ənənəvi Unix təhlükəsizlik sistemi olan Discretionary Access Control (DAC) çatışmazlıqlarını düzəltmək üçün məcburi və rol əsaslı giriş modellərinə əsaslanan qaydalar və giriş mexanizmləri toplusudur. Layihə ABŞ Milli Təhlükəsizlik Agentliyinin bağırsaqlarında yaranıb və birbaşa əsasən Secure Computing Corporation və MITER podratçılar, eləcə də bir sıra tədqiqat laboratoriyaları tərəfindən hazırlanıb.

Linux təhlükəsizlik sistemləri
Linux Təhlükəsizlik Modulları

Linus Torvalds yeni NSA inkişafları haqqında bir sıra şərhlər etdi ki, onlar əsas Linux nüvəsinə daxil ola bilsinlər. O, obyektlərlə əməliyyatları idarə etmək üçün kəsicilər dəsti və müvafiq atributları saxlamaq üçün nüvə məlumat strukturlarında müəyyən qoruyucu sahələr dəsti olan ümumi mühiti təsvir etdi. Bu mühit daha sonra istənilən təhlükəsizlik modelini həyata keçirmək üçün yüklənə bilən kernel modulları tərəfindən istifadə edilə bilər. LSM 2.6-cü ildə Linux nüvəsi v2003-a tam daxil oldu.

LSM çərçivəsi məlumat strukturlarında qoruyucu sahələri və onları manipulyasiya etmək və giriş nəzarətini həyata keçirmək üçün nüvə kodunun kritik nöqtələrində tutma funksiyalarına çağırışları ehtiva edir. O, həmçinin təhlükəsizlik modullarının qeydiyyatı üçün funksionallıq əlavə edir. /sys/kernel/security/lsm interfeysi sistemdəki aktiv modulların siyahısını ehtiva edir. LSM qarmaqları CONFIG_LSM-də göstərilən ardıcıllıqla çağırılan siyahılarda saxlanılır. Qarmaqlar haqqında ətraflı sənədlər daxildir/linux/lsm_hooks.h başlıq faylına daxildir.

LSM alt sistemi sabit Linux nüvəsi v2.6-nın eyni versiyası ilə SELinux-un tam inteqrasiyasını tamamlamağa imkan verdi. Demək olar ki, dərhal SELinux təhlükəsiz Linux mühiti üçün faktiki standart oldu və ən populyar paylanmalara daxil edildi: RedHat Enterprise Linux, Fedora, Debian, Ubuntu.

SELinux Lüğəti

  • Kimlik — SELinux istifadəçisi adi Unix/Linux istifadəçi identifikatoru ilə eyni deyil; onlar eyni sistemdə birlikdə mövcud ola bilərlər, lakin mahiyyətcə tamamilə fərqlidirlər. Hər bir standart Linux hesabı SELinux-da bir və ya bir neçəsinə uyğun ola bilər. SELinux identifikasiyası ümumi təhlükəsizlik kontekstinin bir hissəsidir, hansı domenlərə qoşula və qoşula bilməyəcəyinizi müəyyən edir.
  • Domains - SELinux-da domen subyektin, yəni prosesin icra kontekstidir. Domen prosesin malik olduğu girişi birbaşa müəyyən edir. Domen əsasən proseslərin nə edə biləcəyinin və ya prosesin müxtəlif növlərlə nə edə biləcəyinin siyahısıdır. Domenlərin bəzi nümunələri sistem administrasiyası üçün sysadm_t və imtiyazlı olmayan normal istifadəçi domeni olan user_t-dir. İnit sistemi init_t domenində, adlandırılmış proses isə named_t domenində işləyir.
  • Roles — Domenlər və SELinux istifadəçiləri arasında vasitəçi kimi xidmət edən. Rollar istifadəçinin hansı domenlərə aid ola biləcəyini və hansı növ obyektlərə daxil ola biləcəyini müəyyən edir. Bu girişə nəzarət mexanizmi imtiyazların artırılması hücumları təhlükəsinin qarşısını alır. Rollar SELinux-da istifadə olunan Rol Əsaslı Giriş Nəzarəti (RBAC) təhlükəsizlik modelinə yazılır.
  • Növləri — Obyektə təyin edilən və ona kimin daxil ola biləcəyini müəyyən edən Növün Təminatı siyahısı atributu. Domen tərifinə bənzəyir, istisna olmaqla, domen prosesə, tip isə kataloqlar, fayllar, yuvalar və s. kimi obyektlərə tətbiq edilir.
  • Mövzular və obyektlər - Proseslər subyektlərdir və xüsusi kontekstdə və ya təhlükəsizlik sahəsində işləyirlər. Əməliyyat sistemi resursları: fayllar, kataloqlar, soketlər və s., müəyyən bir tip, başqa sözlə, məxfilik səviyyəsi təyin edilmiş obyektlərdir.
  • SELinux Siyasətləri — SELinux sistemi qorumaq üçün müxtəlif siyasətlərdən istifadə edir. SELinux siyasəti istifadəçilərin rollara, rolların domenlərə və domenlərin növlərə çıxışını müəyyən edir. Birincisi, istifadəçi bir rol əldə etmək səlahiyyətinə malikdir, sonra rola domenlərə daxil olmaq icazəsi verilir. Nəhayət, bir domen yalnız müəyyən növ obyektlərə giriş əldə edə bilər.

LSM və SELinux arxitekturası

Adına baxmayaraq, LSM-lər ümumiyyətlə yüklənə bilən Linux modulları deyil. Bununla belə, SELinux kimi, o, birbaşa nüvəyə inteqrasiya olunur. LSM mənbə koduna edilən hər hansı dəyişiklik yeni kernel kompilyasiyasını tələb edir. Müvafiq seçim kernel parametrlərində aktivləşdirilməlidir, əks halda LSM kodu yükləmədən sonra aktivləşdirilməyəcək. Ancaq bu halda belə, OS yükləyicisi seçimi ilə aktivləşdirilə bilər.

Linux təhlükəsizlik sistemləri
LSM yoxlama yığını

LSM çeklər üçün uyğun ola bilən əsas nüvə funksiyalarında qarmaqlarla təchiz edilmişdir. LSM-lərin əsas xüsusiyyətlərindən biri onların yığılmış olmasıdır. Beləliklə, standart yoxlamalar hələ də aparılır və LSM-nin hər bir təbəqəsi yalnız əlavə nəzarət və nəzarət elementləri əlavə edir. Bu o deməkdir ki, qadağanı geri qaytarmaq olmaz. Bu şəkildə göstərilmişdir; əgər müntəzəm DAC yoxlamalarının nəticəsi uğursuz olarsa, o zaman məsələ LSM qarmaqlarına belə çatmayacaq.

SELinux Fluke tədqiqat əməliyyat sisteminin Flask təhlükəsizlik arxitekturasını, xüsusən də ən az imtiyaz prinsipini qəbul edir. Bu konsepsiyanın mahiyyəti, adından da göründüyü kimi, istifadəçiyə yalnız nəzərdə tutulan hərəkətləri həyata keçirmək üçün lazım olan hüquqları vermək və ya emal etməkdir. Bu prinsip məcburi girişin yazılması ilə həyata keçirilir, beləliklə SELinux-da girişə nəzarət => tip modelinə əsaslanır.

Məcburi girişin yazılması sayəsində SELinux, Unix/Linux əməliyyat sistemlərində istifadə edilən ənənəvi DAC modelindən qat-qat böyük girişə nəzarət imkanlarına malikdir. Məsələn, siz ftp serverinin qoşulacağı şəbəkə port nömrəsini məhdudlaşdıra, müəyyən bir qovluqda faylları yazmağa və dəyişdirməyə icazə verə bilərsiniz, lakin onları silməyəsiniz.

SELinux-un əsas komponentləri bunlardır:

  • Siyasət İcra Serveri — Girişə nəzarətin təşkili üçün əsas mexanizm.
  • Sistem təhlükəsizlik siyasəti məlumat bazası.
  • LSM hadisə ələ keçiricisi ilə qarşılıqlı əlaqə.
  • Selinuxfs - Pseudo-FS, /proc ilə eynidir və /sys/fs/selinux-da quraşdırılmışdır. İş vaxtı Linux nüvəsi tərəfindən dinamik şəkildə yerləşdirilir və SELinux status məlumatını ehtiva edən faylları ehtiva edir.
  • Vektor Keşinə daxil olun — Məhsuldarlığın artırılması üçün köməkçi mexanizm.

Linux təhlükəsizlik sistemləri
SELinux necə işləyir

Hamısı belə işləyir.

  1. Müəyyən subyekt, SELinux baxımından, yuxarı şəkildə göstərildiyi kimi, DAC yoxlanışından sonra obyekt üzərində icazə verilən hərəkəti yerinə yetirir. Əməliyyatı yerinə yetirmək üçün bu sorğu LSM hadisə ələ keçiricisinə gedir.
  2. Oradan sorğu mövzu və obyekt təhlükəsizlik konteksti ilə birlikdə LSM ilə qarşılıqlı əlaqəyə cavabdeh olan SELinux Abstraksiya və Hook Logic moduluna ötürülür.
  3. Subyektin obyektə girişi ilə bağlı qərar qəbul edən orqan Siyasət İcra Serveridir və o, SELinux AnHL-dən məlumat alır.
  4. Giriş və ya rədd etmə ilə bağlı qərarlar qəbul etmək üçün Policy Enforment Server ən çox istifadə olunan qaydalar üçün Access Vector Cache (AVC) keşləmə altsisteminə müraciət edir.
  5. Keş yaddaşda müvafiq qaydanın həlli tapılmırsa, sorğu təhlükəsizlik siyasəti məlumat bazasına ötürülür.
  6. Verilənlər bazasından və AVC-dən axtarış nəticəsi Siyasət İcra Serverinə qaytarılır.
  7. Tapılan siyasət tələb olunan hərəkətə uyğundursa, əməliyyata icazə verilir. Əks halda əməliyyat qadağandır.

SELinux Parametrlərinin idarə edilməsi

SELinux üç rejimdən birində işləyir:

  • Tətbiq etmək - təhlükəsizlik siyasətlərinə ciddi riayət etmək.
  • İcazə verən - məhdudiyyətlərin pozulmasına icazə verilir, jurnalda müvafiq qeyd aparılır.
  • Disabled—Təhlükəsizlik siyasətləri qüvvədə deyil.

SELinux-un hansı rejimdə olduğunu aşağıdakı əmrlə görə bilərsiniz.

[admin@server ~]$ getenforce
Permissive

Yenidən yükləmədən əvvəl rejimin dəyişdirilməsi, məsələn, onun tətbiq edilməsi və ya 1. İcazə verən parametr 0 rəqəmsal koduna uyğundur.

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

Siz həmçinin faylı redaktə etməklə rejimi dəyişə bilərsiniz:

[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=hədəf

Setenfoce ilə fərq ondadır ki, əməliyyat sistemi işə salındıqda SELinux rejimi konfiqurasiya faylındakı SELINUX parametrinin dəyərinə uyğun olaraq qurulacaq. Bundan əlavə, qüvvəyə minmə <=> əlillərə edilən dəyişikliklər yalnız /etc/selinux/config faylını redaktə etməklə və yenidən başladıqdan sonra qüvvəyə minir.

Qısa status hesabatına baxın:

[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 atributlarına baxmaq üçün bəzi standart utilitlər -Z parametrindən istifadə edir.

[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-in normal çıxışı ilə müqayisədə aşağıdakı formatda bir neçə əlavə sahə var:

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

Sonuncu sahə təhlükəsizlik təsnifatı kimi bir şeyi ifadə edir və iki elementin birləşməsindən ibarətdir:

  • s0 - əhəmiyyəti, həmçinin aşağı səviyyəli-yüksək səviyyəli interval kimi yazılır
  • c0, c1… c1023 - kateqoriya.

Giriş konfiqurasiyasının dəyişdirilməsi

SELinux modullarını yükləmək, əlavə etmək və silmək üçün semoduldan istifadə edin.

[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 - удалить модуль

Birinci komanda giriş semanage SELinux istifadəçisini əməliyyat sistemi istifadəçisi ilə əlaqələndirir, ikincisi siyahı göstərir. Nəhayət, -r keçidi ilə sonuncu əmr SELinux istifadəçilərinin OS hesablarına xəritələşdirilməsini aradan qaldırır. MLS/MCS Range dəyərləri üçün sintaksisin izahı əvvəlki bölmədədir.

[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

Komanda semanage istifadəçisi SELinux istifadəçiləri və rolları arasında xəritələri idarə etmək üçün istifadə olunur.

[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

Komanda parametrləri:

  • -a xüsusi rol Xəritəçəkmə giriş əlavə edin;
  • -l uyğun gələn istifadəçilərin və rolların siyahısı;
  • -d istifadəçi rolunun xəritələşdirilməsi girişini silmək;
  • -R istifadəçiyə əlavə edilmiş rolların siyahısı;

Fayllar, Portlar və Boolean Dəyərləri

Hər bir SELinux modulu fayl etiketləmə qaydaları toplusunu təmin edir, lakin zəruri hallarda siz öz qaydalarınızı da əlavə edə bilərsiniz. Məsələn, biz veb serverin /srv/www qovluğuna giriş hüquqlarının olmasını istəyirik.

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

Birinci komanda yeni işarələmə qaydalarını qeyd edir, ikincisi isə mövcud qaydalara uyğun olaraq fayl növlərini sıfırlayır, daha doğrusu təyin edir.

Eynilə, TCP/UDP portları elə işarələnmişdir ki, yalnız müvafiq xidmətlər onları dinləyə bilər. Məsələn, veb serverin 8080 portunu dinləməsi üçün əmri yerinə yetirməlisiniz.

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

SELinux modullarının əhəmiyyətli sayı Boolean dəyərlərini qəbul edə bilən parametrlərə malikdir. Bu cür parametrlərin bütün siyahısını getsebool -a istifadə edərək görmək olar. Siz setsebool istifadə edərək boolean dəyərlərini dəyişə bilərsiniz.

[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

Seminar, Pgadmin-veb interfeysinə giriş əldə edin

Praktik bir nümunəyə baxaq: biz PostgreSQL verilənlər bazasını idarə etmək üçün RHEL 7.6-da pgadmin4-web quraşdırdıq. Bir az gəzdik axtarmaq pg_hba.conf, postgresql.conf və config_local.py parametrləri ilə qovluq icazələrini təyin edin, çatışmayan Python modullarını pip-dən quraşdırın. Hər şey hazırdır, işə salırıq və qəbul edirik 500 Daxili Server xətası.

Linux təhlükəsizlik sistemləri

Biz /var/log/httpd/error_log-u yoxlayan tipik şübhəlilərdən başlayırıq. Orada maraqlı yazılar var.

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

Bu nöqtədə, əksər Linux administratorları setencorce 0-ı işə salmağa həvəslənəcəklər və bu, onun sonu olacaq. Açığını deyim ki, ilk dəfə bunu etdim. Bu, əlbəttə ki, çıxış yoludur, lakin ən yaxşıdan uzaqdır.

Çətin dizaynlara baxmayaraq, SELinux istifadəçi dostu ola bilər. Sadəcə problem həll etmə paketini quraşdırın və sistem jurnalına baxın.

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

Nəzərə alın ki, OS-də systemd olmasına baxmayaraq, auditd xidməti systemctl istifadə etmədən bu şəkildə yenidən işə salınmalıdır. Sistem jurnalında göstəriləcək bloklanma faktı deyil, həm də səbəbi və qadağanı aradan qaldırmağın yolu.

Linux təhlükəsizlik sistemləri

Bu əmrləri yerinə yetiririk:

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

Biz pgadmin4-web veb səhifəsinə girişi yoxlayırıq, hər şey işləyir.

Linux təhlükəsizlik sistemləri

Linux təhlükəsizlik sistemləri

Mənbə: www.habr.com

Добавить комментарий