Mga sistema sa seguridad sa Linux

Usa sa mga hinungdan sa dako nga kalampusan sa Linux OS sa mga naka-embed, mobile device ug mga server mao ang medyo taas nga lebel sa seguridad sa kernel, mga may kalabutan nga serbisyo ug aplikasyon. Apan kung tan-awa pag-ayo sa arkitektura sa Linux kernel, nan imposible nga makit-an niini ang usa ka square nga responsable sa seguridad nga ingon niana. Asa ang Linux security subsystem nagtago ug unsa ang naglangkob niini?

Background sa Linux Security Modules ug SELinux

Ang Security Enhanced Linux usa ka set sa mga lagda ug mga mekanismo sa pag-access base sa mandatory ug role-based nga access models aron mapanalipdan ang mga sistema sa Linux gikan sa posibleng mga hulga ug matul-id ang mga kakulangan sa Discretionary Access Control (DAC), ang tradisyonal nga Unix security system. Ang proyekto naggikan sa tiyan sa US National Security Agency, ug direkta nga gipalambo sa kadaghanan sa mga kontraktor nga Secure Computing Corporation ug MITRE, ingon man usab sa daghang mga laboratoryo sa panukiduki.

Mga sistema sa seguridad sa Linux
Mga Module sa Seguridad sa Linux

Naghimo si Linus Torvalds og daghang mga komento bahin sa bag-ong mga pag-uswag sa NSA aron maapil sila sa mainline nga kernel sa Linux. Gihubit niya ang usa ka kinatibuk-ang palibot, nga adunay usa ka hugpong sa mga interceptor aron makontrol ang mga operasyon sa mga butang ug usa ka hugpong sa piho nga mga natad sa pagpanalipod sa mga istruktura sa datos sa kernel aron matipigan ang katugbang nga mga hiyas. Mahimong gamiton kini nga palibot pinaagi sa mga makarga nga kernel modules aron ipatuman ang bisan unsang gusto nga modelo sa seguridad. Ang LSM hingpit nga nakasulod sa Linux kernel v2.6 niadtong 2003.

Ang balangkas sa LSM naglakip sa mga natad sa pagbantay sa mga istruktura sa datos ug mga tawag sa interception nga mga gimbuhaton sa mga kritikal nga punto sa kernel code aron mamanipula kini ug mapahigayon ang kontrol sa pag-access. Nagdugang usab kini og gamit alang sa pagrehistro sa mga module sa seguridad. Ang /sys/kernel/security/lsm interface adunay lista sa mga aktibong module sa sistema. Ang mga kaw-it sa LSM gitipigan sa mga lista nga gitawag sa han-ay nga gitakda sa CONFIG_LSM. Ang detalyado nga dokumentasyon sa mga kaw-it gilakip sa header file naglakip sa/linux/lsm_hooks.h.

Ang LSM subsystem nagpaposible nga makompleto ang bug-os nga integrasyon sa SELinux nga adunay parehas nga bersyon sa stable nga Linux kernel v2.6. Hapit diha-diha dayon, ang SELinux nahimong de facto nga sumbanan alang sa usa ka luwas nga palibot sa Linux ug gilakip sa labing inila nga mga distribusyon: RedHat Enterprise Linux, Fedora, Debian, Ubuntu.

SELinux Glossary

  • Pag-ila β€” Ang tiggamit sa SELinux dili parehas sa naandan nga Unix/Linux user id; mahimo silang mag-uban sa parehas nga sistema, apan hingpit nga lahi sa esensya. Ang matag standard nga account sa Linux mahimong katumbas sa usa o daghan pa sa SELinux. Ang identidad sa SELinux bahin sa kinatibuk-ang konteksto sa seguridad, nga nagtino kung unsang mga domain ang mahimo nimo ug dili mahimo nga apilan.
  • Mga dominyo - Sa SELinux, usa ka domain ang konteksto sa pagpatuman sa usa ka hilisgutan, i.e. usa ka proseso. Direkta nga gitino sa domain ang pag-access nga naa sa usa ka proseso. Ang usa ka domain usa ka lista kung unsa ang mahimo sa mga proseso o kung unsa ang mahimo sa usa ka proseso sa lainlaing mga lahi. Ang pipila ka mga pananglitan sa mga dominyo mao ang sysadm_t alang sa pagdumala sa sistema, ug user_t nga usa ka normal nga dili pribilihiyo nga domain sa tiggamit. Ang init nga sistema nagdagan sa init_t domain, ug ang ginganlan nga proseso nagdagan sa named_t domain.
  • Mga Papel β€” Unsa ang nagsilbi nga tigpataliwala tali sa mga dominyo ug mga tiggamit sa SELinux. Ang mga tahas nagtino kung unsang mga dominyo ang mahimo sa usa ka tiggamit ug kung unsang mga klase sa mga butang ang mahimo nilang ma-access. Kini nga mekanismo sa pagkontrol sa pag-access nagpugong sa hulga sa mga pag-atake sa pagtaas sa pribilehiyo. Ang mga tahas gisulat sa Role Based Access Control (RBAC) nga modelo sa seguridad nga gigamit sa SELinux.
  • Mga matang - Usa ka Type Enforcement list attribute nga gi-assign sa usa ka butang ug nagtino kung kinsa ang maka-access niini. Susama sa kahulugan sa domain, gawas nga ang domain magamit sa usa ka proseso, ug ang tipo magamit sa mga butang sama sa mga direktoryo, file, socket, ug uban pa.
  • Mga hilisgutan ug mga butang - Ang mga proseso mao ang mga hilisgutan ug gipadagan sa usa ka piho nga konteksto, o domain sa seguridad. Mga kapanguhaan sa operating system: mga file, mga direktoryo, mga socket, ug uban pa, mga butang nga gi-assign sa usa ka piho nga tipo, sa ato pa, usa ka lebel sa pagkapribado.
  • Mga Patakaran sa SELinux β€” Gigamit sa SELinux ang lainlaing mga palisiya aron mapanalipdan ang sistema. Ang palisiya sa SELinux naghubit sa pag-access sa mga tiggamit sa mga tahas, mga tahas sa mga dominyo, ug mga dominyo sa mga tipo. Una, gitugotan ang tiggamit nga makakuha usa ka tahas, unya gitugotan ang tahas sa pag-access sa mga domain. Sa katapusan, ang usa ka domain mahimo ra nga adunay access sa pipila nga mga klase sa mga butang.

LSM ug SELinux nga arkitektura

Bisan pa sa ngalan, ang mga LSM dili kasagaran nga makarga nga mga module sa Linux. Bisan pa, sama sa SELinux, direkta kini nga gisagol sa kernel. Ang bisan unsang pagbag-o sa LSM source code nagkinahanglan og bag-ong kernel compilation. Ang katugbang nga kapilian kinahanglan nga magamit sa mga setting sa kernel, kung dili ang LSM code dili ma-aktibo pagkahuman sa boot. Apan bisan sa kini nga kaso, mahimo kini pinaagi sa kapilian sa OS bootloader.

Mga sistema sa seguridad sa Linux
LSM check stack

Ang LSM adunay mga kaw-it sa kinauyokan nga mga gimbuhaton sa kernel nga mahimong may kalabotan sa mga tseke. Usa sa mga nag-unang bahin sa mga LSM mao nga sila gi-stack. Sa ingon, ang mga sumbanan nga pagsusi gihimo gihapon, ug ang matag layer sa LSM nagdugang lamang og dugang nga mga kontrol ug kontrol. Kini nagpasabot nga ang pagdili dili mahimong i-roll back. Gipakita kini sa numero; kung ang resulta sa naandan nga pagsusi sa DAC usa ka kapakyasan, nan ang butang dili gani makaabot sa LSM hooks.

Gisagop sa SELinux ang arkitektura sa seguridad sa Flask sa operating system sa panukiduki sa Fluke, labi na ang prinsipyo nga labing gamay nga pribilehiyo. Ang diwa niini nga konsepto, sumala sa gisugyot sa ngalan niini, mao ang paghatag sa tiggamit o pagproseso lamang sa mga katungod nga gikinahanglan aron matuman ang gituyo nga mga aksyon. Kini nga prinsipyo gipatuman gamit ang pinugos nga pag-type sa pag-access, busa ang kontrol sa pag-access sa SELinux gibase sa domain => type nga modelo.

Salamat sa pinugos nga pag-type sa pag-access, ang SELinux adunay mas daghang kapabilidad sa pagkontrol sa pag-access kaysa sa tradisyonal nga modelo sa DAC nga gigamit sa mga operating system sa Unix/Linux. Pananglitan, mahimo nimong limitahan ang numero sa port sa network diin ang ftp server magkonektar, tugotan ang pagsulat ug pagbag-o sa mga file sa usa ka piho nga folder, apan dili kini tangtangon.

Ang mga nag-unang sangkap sa SELinux mao ang:

  • Server sa Pagpatuman sa Polisiya - Ang nag-unang mekanismo sa pag-organisar sa kontrol sa pag-access.
  • Database sa polisiya sa seguridad sa sistema.
  • Interaksyon sa LSM event interceptor.
  • Selinuxfs - Pseudo-FS, parehas sa /proc ug gitaod sa /sys/fs/selinux. Dinamikong gipuy-an sa Linux kernel sa runtime ug adunay mga file nga adunay SELinux status nga impormasyon.
  • Pag-access sa Vector Cache - Usa ka auxiliary nga mekanismo alang sa pagdugang sa produktibo.

Mga sistema sa seguridad sa Linux
Giunsa ang pagtrabaho sa SELinux

Ang tanan nagtrabaho sama niini.

  1. Usa ka piho nga hilisgutan, sa mga termino sa SELinux, naghimo sa usa ka gitugotan nga aksyon sa usa ka butang pagkahuman sa usa ka pagsusi sa DAC, ingon sa gipakita sa taas nga litrato. Kini nga hangyo sa paghimo sa usa ka operasyon moadto sa LSM event interceptor.
  2. Gikan didto, ang hangyo, kauban ang hilisgutan ug konteksto sa seguridad sa butang, gipasa sa module sa SELinux Abstraction ug Hook Logic, nga responsable sa pakig-uban sa LSM.
  3. Ang awtoridad sa paghimog desisyon sa pag-access sa usa ka hilisgutan sa usa ka butang mao ang Policy Enforcement Server ug nakadawat kini og datos gikan sa SELinux AnHL.
  4. Aron makahimo og mga desisyon bahin sa pag-access o pagdumili, ang Policy Enforcement Server modangop sa Access Vector Cache (AVC) caching subsystem alang sa labing gigamit nga mga lagda.
  5. Kung ang usa ka solusyon alang sa katugbang nga lagda wala makit-an sa cache, nan ang hangyo ipasa sa database sa polisiya sa seguridad.
  6. Ang resulta sa pagpangita gikan sa database ug AVC gibalik sa Policy Enforcement Server.
  7. Kung ang nakit-an nga palisiya motakdo sa gihangyo nga aksyon, nan ang operasyon gitugotan. Kung dili, ang operasyon gidili.

Pagdumala sa SELinux Settings

Ang SELinux naglihok sa usa sa tulo ka mga mode:

  • Pagpatuman - Hugot nga pagsunod sa mga palisiya sa seguridad.
  • Permissive - Gitugotan ang paglapas sa mga pagdili; usa ka katugbang nga nota gihimo sa journal.
  • Nabaldadoβ€”Walay epekto ang mga polisiya sa seguridad.

Makita nimo kung unsa nga mode ang SELinux gamit ang mosunud nga mando.

[admin@server ~]$ getenforce
Permissive

Pag-ilis sa mode sa dili pa mag-reboot, pananglitan, i-set kini sa pagpatuman, o 1. Ang permissive parameter katumbas sa numeric code 0.

[admin@server ~]$ setenfoce enforcing
[admin@server ~]$ setenfoce 1 #Ρ‚ΠΎ ΠΆΠ΅ самоС

Mahimo usab nimo usbon ang mode pinaagi sa pag-edit sa file:

[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=target

Ang kalainan sa setenfoce mao nga kung ang operating system boots, ang SELinux mode itakda sumala sa kantidad sa SELINUX parameter sa configuration file. Dugang pa, ang mga pagbag-o sa pagpatuman <=> disabled kay mu-epekto lang pinaagi sa pag-edit sa /etc/selinux/config file ug human sa reboot.

Tan-awa ang mubo nga report sa status:

[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

Aron matan-aw ang mga hiyas sa SELinux, ang ubang mga standard utilities naggamit sa -Z parameter.

[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

Kung itandi sa normal nga output sa ls -l, adunay daghang dugang nga mga natad sa mosunod nga pormat:

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

Ang katapusan nga field nagpasabot sa usa ka butang sama sa usa ka klasipikasyon sa seguridad ug naglangkob sa usa ka kombinasyon sa duha ka mga elemento:

  • s0 - kamahinungdanon, gisulat usab ingon nga lowlevel-highlevel interval
  • c0, c1… c1023 - kategorya.

Pag-usab sa configuration sa access

Gamita ang semodule sa pagkarga, pagdugang, ug pagtangtang sa mga module sa 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 - ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ

Unang team semanage login nagkonektar sa SELinux user ngadto sa operating system user, ang ikaduha nagpakita sa usa ka listahan. Sa katapusan, ang katapusan nga sugo nga adunay -r switch nagtangtang sa mapping sa mga tiggamit sa SELinux sa mga OS account. Ang katin-awan sa syntax alang sa MLS/MCS Range values ​​anaa sa miaging seksyon.

[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

team semanage user gigamit sa pagdumala sa mga mapping tali sa mga tiggamit ug mga tahas sa 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

Mga parameter sa command:

  • -usa ka pagdugang custom nga papel mapping entry;
  • -l listahan sa magkaparehas nga tiggamit ug mga tahas;
  • -d kuhaa ang user role mapping entry;
  • -R listahan sa mga tahas nga gilakip sa user;

Files, Ports ug Boolean Values

Ang matag module sa SELinux naghatag usa ka hugpong sa mga lagda sa pag-tag sa file, apan mahimo usab nimo idugang ang imong kaugalingon nga mga lagda kung kinahanglan. Pananglitan, gusto namo nga ang web server adunay mga katungod sa pag-access sa /srv/www folder.

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

Ang una nga sugo nagrehistro sa bag-ong mga lagda sa pagmarka, ug ang ikaduha nag-reset, o hinoon nagtakda, ang mga tipo sa file sumala sa kasamtangang mga lagda.

Sa samang paagi, ang mga TCP/UDP nga mga pantalan gimarkahan sa paagi nga ang angay nga mga serbisyo lamang ang makapaminaw niini. Pananglitan, aron ang web server makapaminaw sa port 8080, kinahanglan nimo nga ipadagan ang command.

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

Ang usa ka mahinungdanon nga gidaghanon sa mga module sa SELinux adunay mga parameter nga makakuha sa mga kantidad sa Boolean. Ang tibuok listahan sa maong mga parametro makita gamit ang getsebool -a. Mahimo nimong usbon ang mga kantidad sa boolean gamit ang 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

Workshop, pag-angkon og access sa Pgadmin-web interface

Atong tan-awon ang usa ka praktikal nga pananglitan: among gi-install ang pgadmin7.6-web sa RHEL 4 aron madumala ang database sa PostgreSQL. Naglakaw mi gamay pagpangita uban sa mga setting sa pg_hba.conf, postgresql.conf ug config_local.py, itakda ang mga permiso sa folder, i-install ang nawala nga Python modules gikan sa pip. Andam na ang tanan, gilusad ug gidawat namo 500 Internal Server sayop.

Mga sistema sa seguridad sa Linux

Nagsugod kami sa kasagaran nga mga suspetsado, pagsusi sa /var/log/httpd/error_log. Adunay pipila ka makapaikag nga mga entries didto.

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

Niini nga punto, kadaghanan sa mga administrador sa Linux kusganon nga matintal sa pagpadagan sa setencorce 0, ug kana ang katapusan niini. Sa tinuod lang, gibuhat nako kana sa unang higayon. Siyempre kini usa usab ka paagi sa paggawas, apan layo sa labing kaayo.

Bisan pa sa lisud nga mga disenyo, ang SELinux mahimong user-friendly. I-install lang ang setroubleshoot package ug tan-awa ang system log.

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

Palihug timan-i nga ang auditd nga serbisyo kinahanglang i-restart niining paagiha, ug dili gamit ang systemctl, bisan pa sa presensya sa systemd sa OS. Sa log sa sistema ipaila dili lamang ang kamatuoran sa blocking, apan usab ang rason ug paagi sa pagbuntog sa pagdili.

Mga sistema sa seguridad sa Linux

Gipatuman namo kini nga mga sugo:

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

Gisusi namon ang pag-access sa pgadmin4-web web page, ang tanan nagtrabaho.

Mga sistema sa seguridad sa Linux

Mga sistema sa seguridad sa Linux

Source: www.habr.com

Idugang sa usa ka comment