Drošības sistēmas Linux

Viens no lielo panākumu iemesliem Linux Iegulto, mobilo ierīču un serveru operētājsistēmai ir diezgan augsts kodola, saistīto pakalpojumu un lietojumprogrammu drošības līmenis. Bet, ja ieskaties tuvāk uz kodola arhitektūru Linux, tad tajā nevar atrast kvadrātu, kas būtu atbildīgs par drošību kā tādu. Kur slēpjas drošības apakšsistēma? Linux un no kā tas sastāv?

Aizvēsture Linux Drošības moduļi un SELinux

Uzlabota drošība Linux ir noteikumu un piekļuves mehānismu kopums, kas balstīts uz obligātiem un uz lomām balstītiem piekļuves modeļiem, lai aizsargātu sistēmas Linux pret iespējamiem draudiem un novērš tradicionālās Unix drošības sistēmas Discretionary Access Control (DAC) trūkumus. Projekts tika aizsākts ASV Nacionālajā drošības aģentūrā, un izstrādi galvenokārt veica līgumslēdzēji Secure Computing Corporation un MITRE, kā arī vairākas pētniecības laboratorijas.

Drošības sistēmas Linux
Linux Drošības moduļi

Linuss Torvalds sniedza vairākus komentārus par jaunākajiem NSA izstrājumiem, lai tos varētu iekļaut galvenajā kodolā. LinuxViņš aprakstīja kopēju vidi ar pārtvērēju kopu objektu operāciju pārvaldībai un aizsarglauku kopu kodola datu struktūrās atbilstošo atribūtu glabāšanai. Šo vidi pēc tam varēja izmantot ielādējami kodola moduļi, lai ieviestu jebkuru vēlamo drošības modeli. LSM kļuva pilnībā integrēts kodolā. Linux 2.6. versija 2003. gadā.

LSM ietvars ietver apsardzes laukus datu struktūrās un pārtveršanas funkciju izsaukumus kodola koda kritiskajos punktos, lai tos pārvaldītu un veiktu piekļuves kontroli. Tas arī pievieno funkcionalitāti drošības moduļu reģistrēšanai. /sys/kernel/security/lsm saskarne satur sistēmas aktīvo moduļu sarakstu. LSM āķi tiek saglabāti sarakstos, kas tiek izsaukti CONFIG_LSM norādītajā secībā. Detalizēta āķa dokumentācija ir iekļauta header failā include/linux/lsm_hooks.h.

LSM apakšsistēma ļāva pilnībā integrēt SELinux tā pati stabilā kodola versija Linux v2.6. Burtiski nekavējoties SELinux ir kļuvis par faktisku drošas vides standartu Linux un kļuva par daļu no populārākajiem izplatījumiem: RedHat Enterprise Linux, fedora, Debian, Ubuntu.

SE glosārijsLinux

  • Identitāte — SE lietotājsLinux nav tas pats, kas parastais Unix/Linux lietotāja ID, tie var pastāvēt līdzās vienā sistēmā, bet pēc būtības ir pilnīgi atšķirīgi. Katrs standarta konts Linux var atbilst vienam vai vairākiem SELinuxSE identitāteLinux ir neatņemama vispārējā drošības konteksta sastāvdaļa, kas nosaka, kuros domēnos var iekļūt un kuros nevar.
  • Domains — DALinux Domēns ir subjekta, t. i., procesa, izpildes konteksts. Domēns tieši nosaka procesa piekļuvi. Domēns būtībā ir saraksts ar to, ko procesi var darīt vai kādas darbības process var veikt ar dažādiem tipiem. Daži domēnu piemēri ir sysadm_t sistēmas administrēšanai un user_t, kas ir parasts, neprivileģēts lietotāja domēns. Init sistēma darbojas init_t domēnā, un nosauktais process darbojas named_t domēnā.
  • Lomas — Kas kalpo kā starpnieks starp domēniem un SE lietotājiemLinuxLomas nosaka, kuriem domēniem lietotājs var piederēt un kāda veida objektiem viņš var piekļūt. Šis piekļuves kontroles mehānisms novērš privilēģiju eskalācijas uzbrukumu draudus. Lomas ir integrētas SE izmantotajā lomām balstītajā piekļuves kontroles (RBAC) drošības modelī.Linux.
  • Veidi — Ierakstiet Enforcement list atribūtu, kas tiek piešķirts objektam un nosaka, kas tam varēs piekļūt. Līdzīgi kā domēna definēšanai, izņemot to, ka domēns attiecas uz procesu, savukārt tips attiecas uz tādiem objektiem kā direktoriji, faili, ligzdas utt.
  • Priekšmeti un objekti - Procesi ir subjekti un tiek palaisti noteiktā kontekstā vai drošības jomā. Operētājsistēmas resursi: faili, direktoriji, ligzdas utt. ir objekti, kuriem ir piešķirts noteikts veids, citiem vārdiem sakot, slepenības līmenis.
  • SE politikasLinux - Lai aizsargātu SE sistēmuLinux izmanto dažādas politikas. SE politikaLinux Definē lietotāja piekļuvi lomām, lomas domēniem un domēnus tipiem. Vispirms lietotājs tiek autorizēts lomai, pēc tam loma tiek autorizēta piekļuvei domēniem. Visbeidzot, domēnam var būt piekļuve tikai noteiktiem objektu tipiem.

LSM un SE arhitektūraLinux

Neskatoties uz nosaukumu, LSM faktiski nav ielādējami moduļi. LinuxTomēr, tāpat kā SELinux, tas ir tieši integrēts kodolā. Jebkurām izmaiņām LSM pirmkodā ir nepieciešama jauna kodola kompilācija. Atbilstošajai opcijai jābūt iespējotai kodola iestatījumos, pretējā gadījumā LSM kods netiks aktivizēts pēc sāknēšanas. Tomēr pat šajā gadījumā to var iespējot, izmantojot OS sāknēšanas ielādētāja opciju.

Drošības sistēmas Linux
LSM čeku kaudze

LSM ir aprīkots ar kodola galveno funkciju āķiem, kas var būt svarīgi pārbaudēm. Viena no galvenajām LSM iezīmēm ir tā, ka tās ir balstītas uz steku. Tādējādi joprojām tiek veiktas standarta pārbaudes, un katrs LSM slānis tikai pievieno papildu vadīklas un vadīklas. Tas nozīmē, ka aizliegumu nevar atcelt. Tas ir parādīts attēlā, ja kārtējo DAC pārbaužu rezultāts ir kļūme, tad tas pat nesasniegs LSM āķus.

SELinux pārņēma Fluke pētniecības operētājsistēmas Flask drošības arhitektūru, jo īpaši mazāko privilēģiju principu. Šīs koncepcijas būtība, kā norāda nosaukums, ir piešķirt lietotājam vai procesam tikai tās tiesības, kas nepieciešamas paredzētās darbības veikšanai. Šis princips tiek īstenots, izmantojot obligātu piekļuves ierakstīšanu, tādējādi kontrolējot piekļuves tiesības SE.Linux pamatojoties uz domēna => tipa modeli.

Pateicoties piespiedu piekļuves SE rakstīšanaiLinux ir daudz nozīmīgākas piekļuves kontroles iespējas nekā tradicionālajam DAC modelim, ko izmanto Unix OS/LinuxPiemēram, varat ierobežot tīkla porta numuru, kuru FTP serveris klausīsies, ļaujot rakstīt un modificēt failus noteiktā mapē, bet nedzēst tos.

SE galvenās sastāvdaļasLinux ir šādi:

  • Politikas izpildes serveris - Galvenais piekļuves kontroles organizēšanas mehānisms.
  • Sistēmas drošības politiku datu bāze.
  • Mijiedarbība ar LSM notikumu klausītāju.
  • Selinuxfs — Pseido-FS, tāda pati kā /proc un piemontēta /sys/fs/selinux. Kodols to dinamiski aizpilda. Linux izpildes laikā un satur failus, kas satur informāciju par SE statusuLinux.
  • Piekļūstiet vektora kešatmiņai - Palīgmehānisms veiktspējas uzlabošanai.

Drošības sistēmas Linux
SE darbības shēmaLinux

Tas viss darbojas šādi.

  1. Noteikts priekšmets SE izpratnēLinux, pēc DAC verifikācijas veic atļauto darbību ar objektu, kā parādīts attēlā iepriekš. Šis pieprasījums veikt darbību tiek nodots LSM notikumu pārtvērējam.
  2. No turienes pieprasījums kopā ar subjekta un objekta drošības kontekstu tiek nodots SE modulim.Linux Abstrakcija un āķa loģika, kas atbild par mijiedarbību ar LSM.
  3. Lēmumu pieņemšanas iestāde attiecībā uz subjekta piekļuvi objektam ir politikas izpildes serveris, un tas saņem datus no SE.Linux AnHL.
  4. Lai pieņemtu lēmumus par piekļuvi vai atteikumu, politikas izpildes serveris visbiežāk izmantotajām kārtulām izmanto Access Vector Cache (AVC) kešatmiņas apakšsistēmu.
  5. Ja kešatmiņā atbilstošā noteikuma risinājums netiek atrasts, pieprasījums tiek nodots drošības politikas datu bāzei.
  6. Meklēšanas rezultāts no datu bāzes un AVC tiek atgriezts politikas izpildes serverī.
  7. Ja atrastā politika atbilst pieprasītajai darbībai, darbība ir atļauta. Pretējā gadījumā operācija ir aizliegta.

SE iestatījumu pārvaldībaLinux

SELinux darbojas vienā no trim režīmiem:

  • Izpilde – stingra drošības politikas izpilde.
  • Atļauja - Ierobežojumu pārkāpums ir pieļaujams, žurnālā tiek veikta atbilstoša atzīme.
  • Atspējots — drošības politikas nav spēkā.

Skatiet, kādā režīmā ir SELinux To var izdarīt ar šādu komandu.

[admin@server ~]$ getenforce
Permissive

Piemēram, mainot režīmu pirms atsāknēšanas, iestatiet to uz piespiedu vai 1. Atļaujošais parametrs atbilst ciparu kodam 0.

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

Varat arī mainīt režīmu, rediģējot failu:

[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=mērķis

Atšķirība ar setenfoce ir tāda, ka operētājsistēmas startēšanas laikā SE režīmsLinux tiks iestatīts atbilstoši SELINUX konfigurācijas faila parametra vērtībai. Turklāt izmaiņas <=> ieviešanas atspējošanā stājas spēkā tikai pēc /etc/selinux/config faila rediģēšanas un pēc pārstartēšanas.

Skatīt kopsavilkuma statusa pārskatu:

[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

Lai skatītu SE atribūtusLinux Dažas standarta utilītas izmanto parametru -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

Salīdzinot ar parasto ls -l izvadi, ir vairāki papildu lauki šādā formātā:

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

Pēdējais lauks apzīmē kaut ko līdzīgu drošības zīmogam un sastāv no divu elementu kombinācijas:

  • s0 - nozīmīgums, ierakstīts arī zema līmeņa-augsta līmeņa intervālā
  • c0, c1… c1023 ir kategorija.

Piekļuves konfigurācijas maiņa

Izmantojiet semodule, lai ielādētu SE moduļusLinux, pievienojiet un noņemiet tos.

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

Pirmā komanda semanage pieteikšanās savieno SE lietotājuLinux ar operētājsistēmas lietotāju, otrais parāda sarakstu. Visbeidzot, pēdējā komanda ar slēdzi -r noņem SE lietotāja kartējumu.Linux OS kontiem. MLS/MCS diapazona vērtību sintakse ir paskaidrota iepriekšējā sadaļā.

[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 lietotājs izmanto, lai pārvaldītu lietotāju un SE lomu savstarpējo saistībuLinux.

[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

Komandu opcijas:

  • -a pievienot pielāgotu lomu kartēšanas ierakstu;
  • -l atbilstošo lietotāju un lomu saraksts;
  • -d dzēst lietotāja lomu kartēšanas ierakstu;
  • -R lietotājam piesaistīto lomu saraksts;

Faili, porti un Būla vērtības

Katrs SE modulisLinux Nodrošina failu marķēšanas noteikumu kopu, taču, ja nepieciešams, varat pievienot arī savus noteikumus. Piemēram, mēs vēlamies piešķirt tīmekļa serverim piekļuves tiesības mapei /srv/www.

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

Pirmā komanda reģistrē jaunus marķēšanas noteikumus, bet otrā atiestata vai drīzāk atklāj failu tipus saskaņā ar pašreizējiem noteikumiem.

Tāpat TCP/UDP porti ir marķēti tā, lai tos varētu klausīties tikai atbilstošie pakalpojumi. Piemēram, lai tīmekļa serveris klausītos portā 8080, jums ir jāpalaiž komanda.

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

Ievērojams skaits SE moduļuLinux ir parametri, kas var pieņemt Būla vērtības. Pilnu šādu parametru sarakstu var apskatīt, izmantojot getsebool -a. Būla vērtības var mainīt, izmantojot 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

Seminārs, iegūstiet piekļuvi Pgadmin tīmekļa saskarnei

Apsveriet piemēru no prakses, mēs instalējām pgadmin7.6-web uz RHEL 4, lai administrētu PostgreSQL datu bāzi. Pabraucām garām mazam quest iestatot pg_hba.conf, postgresql.conf un config_local.py, iestatiet tiesības uz mapēm, instalējiet trūkstošos Python moduļus no pip. Viss gatavs, skrien un saņemies 500 Iekšējā servera kļūda.

Drošības sistēmas Linux

Mēs sākam ar tipiskiem aizdomās turamajiem, pārbaudiet /var/log/httpd/error_log. Tur ir daži interesanti ieraksti.

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

Šeit atrodas lielākā daļa administratoru Linux Radīsies liels kārdinājums palaist setencorce 0, un ar to viss arī beigsies. Atklāti sakot, tieši to es izdarīju pirmajā reizē. Tas noteikti ir risinājums, bet nebūt ne labākais.

Neskatoties uz SE dizainu apjomīgumuLinux Tas var būt lietotājam draudzīgs. Vienkārši instalējiet setroubleshoot pakotni un apskatiet sistēmas žurnālu.

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

Ņemiet vērā, ka auditētais pakalpojums ir jārestartē šādā veidā, nevis ar systemctl, neskatoties uz systemd klātbūtni OS. Sistēmas žurnālā tiks norādīts ne tikai bloķēšanas fakts, bet arī iemesls un veids, kā pārvarēt aizliegumu.

Drošības sistēmas Linux

Mēs izpildām šīs komandas:

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

Pārbaudām piekļuvi pgadmin4-web lapai, viss darbojas.

Drošības sistēmas Linux

Drošības sistēmas Linux

Avots: www.habr.com

Iegādājieties uzticamu mitināšanu vietnēm ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa vietņu mitināšanu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster