Sistèm sekirite Linux

Youn nan rezon ki fè yo pou siksè nan fòmidab nan OS la Linux sou entegre, aparèy mobil ak sèvè se degre nan jistis segondè nan sekirite nan nwayo a, sèvis ki gen rapò ak aplikasyon yo. Men, si pran yon gade pi pre nan achitekti a nan nwayo a Linux, Lè sa a, li enposib jwenn nan li yon kare ki responsab pou sekirite kòm sa yo. Ki kote sous-sistèm sekirite Linux kache epi ki sa li konpoze?

Jan nou koumanse sou modil sekirite Linux ak SELinux

Security Enhanced Linux se yon seri règ ak mekanis aksè ki baze sou modèl aksè obligatwa ak ki baze sou wòl pou pwoteje sistèm Linux kont menas potansyèl yo epi korije enpèfeksyon Kontwòl Aksè Diskresyonè (DAC), sistèm sekirite tradisyonèl Unix la. Pwojè a soti nan zantray Ajans Sekirite Nasyonal Ameriken an, e li te dirèkteman devlope sitou pa kontraktè Secure Computing Corporation ak MITRE, ansanm ak yon kantite laboratwa rechèch.

Sistèm sekirite Linux
Modil Sekirite Linux

Linus Torvalds te fè yon kantite kòmantè sou nouvo devlopman NSA pou yo ka enkli nan nwayo Linux prensipal la. Li te dekri yon anviwònman jeneral, ak yon seri entèsèpteur pou kontwole operasyon ak objè ak yon seri sèten jaden pwoteksyon nan estrikti done nwayo pou estoke atribi korespondan yo. Lè sa a, anviwònman sa a ka itilize pa modil nwayo chaje pou aplike nenpòt modèl sekirite vle. LSM te antre konplètman Linux Kernel v2.6 an 2003.

Fondasyon LSM a gen ladan jaden gad nan estrikti done ak apèl nan fonksyon entèsepsyon nan pwen kritik nan kòd nwayo a pou manipile yo epi fè kontwòl aksè. Li ajoute tou fonksyonalite pou anrejistre modil sekirite yo. Koòdone /sys/kernel/security/lsm genyen yon lis modil aktif sou sistèm nan. Kwòk LSM yo estoke nan lis yo rele nan lòd ki espesifye nan CONFIG_LSM. Dokimantasyon detaye sou kwòk yo enkli nan dosye header include/linux/lsm_hooks.h.

Sou-sistèm LSM la te fè li posib pou konplete entegrasyon konplè SELinux ak menm vèsyon an ki estab Linux Kernel v2.6. Prèske imedyatman, SELinux te vin estanda defakto pou yon anviwònman Linux an sekirite e li te enkli nan distribisyon ki pi popilè yo: RedHat Enterprise Linux, Fedora, Debian, Ubuntu.

SELinux Glosè

  • Idantite — Itilizatè SELinux la pa menm ak id itilizatè abityèl Unix/Linux la; yo ka viv ansanm sou menm sistèm nan, men yo konplètman diferan nan sans. Chak kont estanda Linux ka koresponn ak youn oswa plis nan SELinux. Idantite SELinux se yon pati nan kontèks sekirite jeneral la, ki detèmine ki domèn ou kapab epi ou pa kapab rantre nan.
  • Domèn - Nan SELinux, yon domèn se kontèks ekzekisyon yon sijè, sa vle di yon pwosesis. Domèn nan detèmine dirèkteman aksè a ke yon pwosesis genyen. Yon domèn se fondamantalman yon lis sa pwosesis yo ka fè oswa sa yon pwosesis ka fè ak diferan kalite. Gen kèk egzanp domèn yo se sysadm_t pou administrasyon sistèm, ak user_t ki se yon domèn itilizatè nòmal ki pa privilejye. Sistèm init la kouri nan domèn init_t, ak pwosesis named la kouri nan domèn named_t.
  • Wòl — Ki sa ki sèvi kòm yon entèmedyè ant domèn ak itilizatè SELinux. Wòl yo detèmine ki domèn yon itilizatè ka fè pati ak ki kalite objè yo ka jwenn aksè. Mekanis kontwòl aksè sa a anpeche menas atak privilèj eskalade. Wòl yo ekri nan modèl sekirite kontwòl ki baze sou wòl (RBAC) yo itilize nan SELinux.
  • Kalite — Yon atribi lis Kalite Ranfòsman ki asiyen nan yon objè epi ki detèmine ki moun ki ka jwenn aksè nan li. Menm jan ak definisyon domèn, eksepte ke domèn aplike a yon pwosesis, ak kalite aplike a objè tankou anyè, fichye, sipò, elatriye.
  • Sijè ak objè yo - Pwosesis yo se sijè epi kouri nan yon kontèks espesifik, oswa domèn sekirite. Resous sistèm operasyon: fichye, anyè, sipò, elatriye, se objè yo bay yon sèten kalite, nan lòt mo, yon nivo vi prive.
  • Règ SELinux — SELinux itilize yon varyete politik pou pwoteje sistèm nan. Règ SELinux la defini aksè itilizatè yo nan wòl, wòl nan domèn, ak domèn nan kalite. Premyèman, itilizatè a otorize pou jwenn yon wòl, Lè sa a, wòl la otorize pou jwenn aksè nan domèn. Finalman, yon domèn ka sèlman gen aksè a sèten kalite objè.

LSM ak achitekti SELinux la

Malgre non an, LSM yo pa jeneralman chajman modil Linux. Sepandan, tankou SELinux, li se dirèkteman entegre nan nwayo a. Nenpòt chanjman nan kòd sous LSM mande pou yon nouvo konpilasyon nwayo. Opsyon ki koresponn lan dwe aktive nan anviwònman nwayo yo, otreman kòd LSM la pa pral aktive apre bòt. Men, menm nan ka sa a, li ka aktive pa opsyon nan bootloader OS.

Sistèm sekirite Linux
Pile chèk LSM

LSM ekipe ak kwòk nan fonksyon nwayo debaz ki ka enpòtan pou chèk yo. Youn nan karakteristik prensipal yo nan LSM yo se ke yo anpile. Kidonk, chèk estanda yo toujou fèt, epi chak kouch LSM sèlman ajoute kontwòl adisyonèl ak kontwòl. Sa vle di ke entèdiksyon an pa ka woule tounen. Sa a montre nan figi a; si rezilta chèk DAC woutin yo se yon echèk, Lè sa a, pwoblèm nan pa pral menm rive nan zen LSM yo.

SELinux adopte achitekti sekirite Flask nan sistèm operasyon rechèch Fluke, an patikilye prensip pi piti privilèj. Sans konsèp sa a, jan non li sijere, se bay itilizatè a oswa trete sèlman dwa sa yo ki nesesè pou fè aksyon yo gen entansyon. Prensip sa a aplike lè l sèvi avèk tape aksè fòse, kidonk kontwòl aksè nan SELinux baze sou domèn => modèl kalite.

Mèsi a sezisman aksè fòse, SELinux gen pi gwo kapasite kontwòl aksè pase modèl DAC tradisyonèl yo itilize nan sistèm operasyon Unix/Linux. Pou egzanp, ou ka limite nimewo pò rezo a ki sèvè ftp la pral konekte, pèmèt ekri ak chanje dosye nan yon katab sèten, men pa efase yo.

Konpozan prensipal SELinux yo se:

  • Sèvè Ranfòsman Règleman — Mekanis prensipal la pou òganize kontwòl aksè.
  • Baz done politik sekirite sistèm.
  • Entèaksyon ak entèsèpteur evènman LSM.
  • Selinuxfs - Pseudo-FS, menm jan ak /proc ak monte nan /sys/fs/selinux. Dinamik peple pa nwayo Linux la nan kouri epi ki gen dosye ki gen enfòmasyon sou estati SELinux.
  • Aksè Vektè Cache — Yon mekanis oksilyè pou ogmante pwodiktivite.

Sistèm sekirite Linux
Ki jan SELinux travay

Li tout travay tankou sa a.

  1. Yon sèten sijè, nan tèm SELinux, fè yon aksyon pèmèt sou yon objè apre yon chèk DAC, jan yo montre nan foto an tèt la. Demann sa a pou fè yon operasyon ale nan entèseptè evènman LSM.
  2. Soti nan la, demann lan, ansanm ak kontèks sekirite sijè a ak objè a, pase nan modil SELinux Abstraction ak Hook lojik, ki responsab pou kominike avèk LSM la.
  3. Otorite pou pran desizyon sou aksè yon sijè a yon objè se Sèvè Ranfòsman Règleman epi li resevwa done nan men SELinux AnHL.
  4. Pou pran desizyon sou aksè oswa refi, Policy Enforcement Server vire nan sou-sistèm kachèt Aksè Vector Cache (AVC) pou jwenn règ ki pi itilize yo.
  5. Si yo pa jwenn yon solisyon pou règ korespondan an nan kachèt la, Lè sa a, demann lan pase nan baz done politik sekirite a.
  6. Rezilta rechèch la ki soti nan baz done a ak AVC yo retounen nan Sèvè Ranfòsman Règleman an.
  7. Si yo jwenn politik la matche ak aksyon yo mande a, lè sa a operasyon an pèmèt. Sinon, operasyon an entèdi.

Jere Paramèt SELinux

SELinux opere nan youn nan twa mòd:

  • Ranfòse - Aderans strik nan règleman sekirite yo.
  • Permisif - Vyolasyon restriksyon yo pèmèt; yo fè yon nòt korespondan nan jounal la.
  • Andikape — Règleman sekirite yo pa anvigè.

Ou ka wè nan ki mòd SELinux se ak lòd sa a.

[admin@server ~]$ getenforce
Permissive

Chanje mòd la anvan rdemare, pou egzanp, mete li nan ranfòsman, oswa 1. Paramèt tolerans la koresponn ak kòd nimerik 0 la.

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

Ou kapab tou chanje mòd nan modifye fichye a:

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

Diferans ak setenfoce se ke lè sistèm operasyon an kòmanse, mòd SELinux yo pral mete an akò ak valè paramèt SELINUX nan fichye konfigirasyon an. Anplis de sa, chanjman nan ranfòsman <=> enfim sèlman pran efè lè yo modifye fichye /etc/selinux/config la epi apre yon rdemare.

Gade yon rapò sou sitiyasyon tou kout:

[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

Pou wè atribi SELinux, kèk sèvis piblik estanda itilize paramèt -Z la.

[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

Konpare ak pwodiksyon nòmal ls -l, gen plizyè jaden adisyonèl nan fòma sa a:

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

Dènye jaden an vle di yon bagay tankou yon klasifikasyon sekirite epi li konsiste de yon konbinezon de eleman:

  • s0 - siyifikasyon, ekri tou kòm entèval lowlevel-highlevel
  • c0, c1... c1023 - kategori.

Chanje konfigirasyon aksè

Sèvi ak semodul pou chaje, ajoute, epi retire modil SELinux yo.

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

Premye ekip weekge login konekte itilizatè SELinux la ak itilizatè sistèm operasyon an, dezyèm lan montre yon lis. Finalman, dènye kòmandman an ak switch la -r retire kat itilizatè SELinux nan kont OS yo. Yon eksplikasyon sou sentaks pou valè MLS/MCS Range se nan seksyon anvan an.

[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

Ekip semanage itilizatè itilize pou jere kat ant itilizatè SELinux ak wòl yo.

[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

Paramèt kòmandman:

  • -a ajoute yon antre kat wòl koutim;
  • -l lis itilizatè matche ak wòl;
  • -d efase antre kat wòl itilizatè;
  • -R lis wòl ki tache ak itilizatè a;

Fichye, pò ak valè Boolean

Chak modil SELinux bay yon seri règ tagging dosye, men ou ka ajoute pwòp règ ou tou si sa nesesè. Pou egzanp, nou vle sèvè entènèt la gen dwa aksè nan katab la /srv/www.

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

Premye kòmandman an anrejistre nouvo règ regilye nèf semenn klas, epi dezyèm lan reset, oswa pito mete, kalite dosye yo an akò ak règ aktyèl yo.

Menm jan an tou, pò TCP/UDP yo make nan yon fason ke sèlman sèvis apwopriye yo ka koute sou yo. Pou egzanp, nan lòd pou sèvè entènèt la koute sou pò 8080, ou bezwen kouri lòd la.

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

Yon kantite siyifikatif modil SELinux gen paramèt ki ka pran valè Boolean. Ou ka wè tout lis paramèt sa yo lè l sèvi avèk getsebool -a. Ou ka chanje valè booleyen yo lè l sèvi avèk 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

Atelye, jwenn aksè nan koòdone Pgadmin-web la

Ann gade nan yon egzanp pratik: nou enstale pgadmin7.6-web sou RHEL 4 pou administre baz done PostgreSQL la. Nou te mache yon ti kras demand ak anviwònman pg_hba.conf, postgresql.conf ak config_local.py, mete otorizasyon katab, enstale modil Python ki manke yo nan pip. Tout bagay pare, nou lanse e resevwa 500 Erè sèvè entèn.

Sistèm sekirite Linux

Nou kòmanse ak sispèk tipik yo, tcheke /var/log/httpd/error_log. Gen kèk antre enteresan la.

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

Nan pwen sa a, pifò administratè Linux yo pral tante anpil pou yo kouri setencorce 0, e sa pral fini. Franchman, mwen te fè sa premye fwa. Sa a se, nan kou, tou yon fason soti, men lwen soti nan pi bon an.

Malgre desen yo ankonbran, SELinux ka itilizatè-zanmitay. Jis enstale pakè setroubleshoot la epi gade boutèy demi lit sistèm lan.

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

Tanpri sonje ke sèvis auditd la dwe rekòmanse fason sa a, epi yo pa itilize systemctl, malgre prezans systemd nan OS la. Nan boutèy demi lit sistèm lan pral endike pa sèlman reyalite a nan bloke, men tou, rezon an ak fason pou simonte entèdiksyon an.

Sistèm sekirite Linux

Nou egzekite kòmandman sa yo:

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

Nou tcheke aksè nan paj wèb pgadmin4-web, tout bagay ap mache.

Sistèm sekirite Linux

Sistèm sekirite Linux

Sous: www.habr.com

Add nouvo kòmantè