Karatasi ya kudanganya ya SELinux kwa wasimamizi wa mfumo: Majibu 42 kwa maswali muhimu

Tafsiri ya makala hiyo ilitayarishwa mahsusi kwa ajili ya wanafunzi wa kozi hiyo "Msimamizi wa Linux".

Karatasi ya kudanganya ya SELinux kwa wasimamizi wa mfumo: Majibu 42 kwa maswali muhimu

Hapa utapata majibu kwa maswali muhimu kuhusu maisha, ulimwengu na kila kitu kwenye Linux kwa usalama ulioimarishwa.

"Ukweli muhimu kwamba mambo sio kila wakati yanaonekana ni maarifa ya kawaida ..."

-Douglas Adams, Mwongozo wa Hitchhiker kwa Galaxy

Usalama. Kuongezeka kwa kuaminika. Mawasiliano. Sera. Wapanda farasi wanne wa sysadmin ya Apocalypse. Mbali na kazi zetu za kila siku - ufuatiliaji, kuhifadhi nakala, utekelezaji, usanidi, kusasisha, n.k. - pia tunawajibika kwa usalama wa mifumo yetu. Hata mifumo hiyo ambapo mtoa huduma mwingine anapendekeza kwamba tuzime usalama ulioimarishwa. Inahisi kama kazi Ethan Hunt kutoka kwa "Misheni: Haiwezekani."

Wanakabiliwa na tatizo hili, baadhi ya wasimamizi wa mfumo huamua kuchukua kidonge cha bluu, kwa sababu wanafikiri hawatawahi kujua jibu la swali kuu la uhai, ulimwengu na hayo yote. Na kama tunavyojua, jibu hilo ni 42.

Kwa mujibu wa Mwongozo wa The Hitchhiker's to the Galaxy, hapa kuna majibu 42 kwa maswali muhimu kuhusu udhibiti na matumizi. SELinux kwenye mifumo yako.

1. SELinux ni mfumo wa kudhibiti ufikiaji wa kulazimishwa, ambayo inamaanisha kuwa kila mchakato una lebo. Kila faili, saraka na kitu cha mfumo pia kina lebo. Sheria za sera hudhibiti ufikiaji kati ya michakato na vitu vilivyowekwa lebo. Kernel inatekeleza sheria hizi.

2. Dhana mbili muhimu zaidi ni: Kuandika - alama (faili, michakato, bandari, nk) na Utekelezaji wa aina (ambayo hutenganisha michakato kutoka kwa kila mmoja kulingana na aina).

3. Umbizo sahihi la lebo user:role:type:level (hiari).

4. Madhumuni ya kutoa usalama wa ngazi mbalimbali (Usalama wa Ngazi nyingi - MLS) ni kusimamia michakato (vikoa) kulingana na kiwango cha usalama wa data watakazotumia. Kwa mfano, mchakato wa siri hauwezi kusoma data ya siri ya juu.

5. Kuhakikisha usalama wa aina nyingi (Usalama wa Aina nyingi - MCS) hulinda michakato sawa kutoka kwa kila mmoja (kwa mfano, mashine za kawaida, injini za OpenShift, sandbox za SELinux, vyombo, nk).

6. Chaguzi za Kernel za kubadilisha aina za SELinux kwenye buti:

  • autorelabel=1 → husababisha mfumo kufanya kazi ya kuweka lebo upya
  • selinux=0 → kernel haipakii miundombinu ya SELinux
  • enforcing=0 → kupakia katika hali ya kuruhusu

7. Ikiwa unahitaji kuweka lebo ya mfumo mzima:

# touch /.autorelabel
#reboot

Ikiwa uwekaji alama wa mfumo una idadi kubwa ya hitilafu, huenda ukahitaji kuwasha katika hali ya kuruhusu ili kuweka alama upya ili kufaulu.

8. Ili kuangalia ikiwa SELinux imewezeshwa: # getenforce

9. Ili kuwezesha / kuzima SELinux kwa muda: # setenforce [1|0]

10. Kuangalia hali ya SELinux: # sestatus

11. Faili ya usanidi: /etc/selinux/config

12. SELinux inafanya kazi vipi? Hapa kuna mfano wa kuashiria kwa seva ya wavuti ya Apache:

  • Uwakilishi wa binary: /usr/sbin/httpd→httpd_exec_t
  • Saraka ya usanidi: /etc/httpd→httpd_config_t
  • Saraka ya faili ya kumbukumbu: /var/log/httpd → httpd_log_t
  • Saraka ya yaliyomo: /var/www/html → httpd_sys_content_t
  • Fungua hati: /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
  • Mchakato: /usr/sbin/httpd -DFOREGROUND → httpd_t
  • Bandari: 80/tcp, 443/tcp → httpd_t, http_port_t

Mchakato unaoendelea katika muktadha httpd_t, inaweza kuingiliana na kitu kilicho na lebo httpd_something_t.

13. Amri nyingi hukubali hoja -Z kutazama, kuunda na kubadilisha muktadha:

  • ls -Z
  • id -Z
  • ps -Z
  • netstat -Z
  • cp -Z
  • mkdir -Z

Muktadha huanzishwa faili zinapoundwa kulingana na muktadha wa saraka ya wazazi (isipokuwa baadhi ya tofauti). RPM zinaweza kuanzisha miktadha kama wakati wa usakinishaji.

14. Kuna sababu nne kuu za makosa ya SELinux, ambayo yameelezewa kwa undani zaidi katika nukta 15-21 hapa chini:

  • Masuala ya kuweka lebo
  • Kwa sababu ya kitu ambacho SELinux inahitaji kujua
  • Hitilafu katika sera/programu ya SELinux
  • Maelezo yako yanaweza kuathiriwa

15. Tatizo la kuweka lebo: ikiwa faili zako ziko ndani /srv/myweb zimetiwa alama vibaya, ufikiaji unaweza kukataliwa. Hapa kuna baadhi ya njia za kurekebisha hii:

  • Ikiwa unajua lebo:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • Ikiwa unajua faili iliyo na alama sawa:
    # semanage fcontext -a -e /srv/myweb /var/www
  • Kurejesha muktadha (kwa visa vyote viwili):
    # restorecon -vR /srv/myweb

16. Tatizo la kuweka lebo: ukihamisha faili badala ya kuinakili, faili itahifadhi muktadha wake asilia. Ili kurekebisha tatizo hili:

  • Badilisha amri ya muktadha na lebo:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • Badilisha amri ya muktadha na lebo ya kiungo:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • Rejesha muktadha (kwa visa vyote viwili): # restorecon -vR /var/www/html/

17. Kama SELinux unahitaji kujuakwamba HTTPD inasikiza kwenye bandari 8585, iambie SELinux:

# semanage port -a -t http_port_t -p tcp 8585

18. SELinux unahitaji kujua Thamani za Boolean zinazoruhusu sehemu za sera ya SELinux kubadilishwa wakati wa utekelezaji bila ufahamu wa sera ya SELinux kubatilishwa. Kwa mfano, ikiwa unataka httpd kutuma barua pepe, ingiza: # setsebool -P httpd_can_sendmail 1

19. SELinux unahitaji kujua maadili ya kimantiki ya kuwezesha / kulemaza mipangilio ya SELinux:

  • Ili kuona maadili yote ya boolean: # getsebool -a
  • Ili kuona maelezo ya kila: # semanage boolean -l
  • Ili kuweka thamani ya boolean: # setsebool [_boolean_] [1|0]
  • Kwa usakinishaji wa kudumu, ongeza -P. Kwa mfano: # setsebool httpd_enable_ftp_server 1 -P

20. Sera/programu za SELinux zinaweza kuwa na makosa, ikiwa ni pamoja na:

  • Njia za nambari zisizo za kawaida
  • Mipangilio
  • Inaelekeza upya stdout
  • Uvujaji wa maelezo ya faili
  • Kumbukumbu inayoweza kutekelezwa
  • Maktaba zilizojengwa vibaya

Fungua tiketi (usiwasilishe ripoti kwa Bugzilla; Bugzilla haina SLA).

21. Maelezo yako yanaweza kuathiriwaikiwa una vikoa vikwazo vinavyojaribu:

  • Pakia moduli za kernel
  • Zima hali ya SELinux iliyotekelezwa
  • Andika kwa etc_t/shadow_t
  • Badilisha sheria za iptables

22. Zana za SELinux za kuunda moduli za sera:

# yum -y install setroubleshoot setroubleshoot-server

Washa upya au uwashe upya auditd baada ya ufungaji.

23. Tumia

journalctl

kuonyesha orodha ya kumbukumbu zote zinazohusiana na setroubleshoot:

# journalctl -t setroubleshoot --since=14:20

24. Tumia journalctl kuorodhesha kumbukumbu zote zinazohusiana na lebo maalum ya SELinux. Kwa mfano:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. Ikiwa kosa la SELinux litatokea, tumia logi setroubleshoot kutoa suluhisho kadhaa zinazowezekana.
Kwa mfano, kutoka journalctl:

Jun 14 19:41:07 web1 setroubleshoot: SELinux is preventing httpd from getattr access on the file /var/www/html/index.html. For complete message run: sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e

# sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
SELinux is preventing httpd from getattr access on the file /var/www/html/index.html.

***** Plugin restorecon (99.5 confidence) suggests ************************

If you want to fix the label,
/var/www/html/index.html default label should be httpd_syscontent_t.
Then you can restorecon.
Do
# /sbin/restorecon -v /var/www/html/index.html

26. Kuingia: SELinux hurekodi habari katika sehemu nyingi:

  • / var / logi / ujumbe
  • /var/log/audit/audit.log
  • /var/lib/setroubleshoot/setroubleshoot_database.xml

27. Kuingia: kutafuta makosa ya SELinux kwenye logi ya ukaguzi:

# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today

28. Ili kupata ujumbe wa SELinux Access Vector Cache (AVC) kwa huduma maalum:

# ausearch -m avc -c httpd

29. Huduma audit2allow hukusanya taarifa kutoka kwa kumbukumbu za shughuli zilizopigwa marufuku na kisha kutoa sheria za sera za ruhusa za SELinux. Kwa mfano:

  • Ili kuunda maelezo yanayoweza kusomeka na binadamu ya kwa nini ufikiaji unakataliwa: # audit2allow -w -a
  • Ili kuona aina ya sheria ya utekelezaji inayoruhusu ufikiaji uliokataliwa: # audit2allow -a
  • Ili kuunda moduli maalum: # audit2allow -a -M mypolicy
  • Chaguo -M huunda aina ya faili ya utekelezaji (.te) yenye jina lililobainishwa na kujumuisha sheria katika kifurushi cha sera (.pp): mypolicy.pp mypolicy.te
  • Ili kusakinisha moduli maalum: # semodule -i mypolicy.pp

30. Ili kusanidi mchakato tofauti (kikoa) kufanya kazi katika hali ya kuruhusu: # semanage permissive -a httpd_t

31. Ikiwa hutaki tena kikoa kiwe na ruhusa: # semanage permissive -d httpd_t

32. Ili kuzima vikoa vyote vinavyoruhusu: # semodule -d permissivedomains

33. Kuwezesha sera ya MLS SELinux: # yum install selinux-policy-mls
в /etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls

Hakikisha SELinux inafanya kazi katika hali ya kuruhusu: # setenforce 0
Tumia hati fixfilesili kuhakikisha kuwa faili zimewekwa lebo kwenye kuwasha tena:

# fixfiles -F onboot # reboot

34. Unda mtumiaji na safu mahususi ya MLS: # useradd -Z staff_u john

Kwa kutumia amri useradd, ramani ya mtumiaji mpya kwa mtumiaji aliyepo wa SELinux (katika kesi hii, staff_u).

35. Kuangalia ramani kati ya watumiaji wa SELinux na Linux: # semanage login -l

36. Bainisha fungu mahususi la mtumiaji: # semanage login --modify --range s2:c100 john

37. Kurekebisha lebo ya saraka ya nyumbani ya mtumiaji (ikiwa ni lazima): # chcon -R -l s2:c100 /home/john

38. Ili kutazama kategoria za sasa: # chcat -L

39. Ili kubadilisha kategoria au kuanza kuunda yako mwenyewe, hariri faili kama ifuatavyo:

/etc/selinux/_<selinuxtype>_/setrans.conf

40. Kuendesha amri au hati katika faili maalum, jukumu, na muktadha wa mtumiaji:

# runcon -t initrc_t -r system_r -u user_u yourcommandhere

  • -t muktadha wa faili
  • -r muktadha wa jukumu
  • -u muktadha wa mtumiaji

41. Vyombo vinavyoendesha na SELinux vimezimwa:

  • Podman: # podman run --security-opt label=disable …
  • Doksi: # docker run --security-opt label=disable …

42. Ikiwa unahitaji kutoa ufikiaji kamili wa kontena kwa mfumo:

  • Podman: # podman run --privileged …
  • Doksi: # docker run --privileged …

Na sasa tayari unajua jibu. Kwa hivyo tafadhali: usiogope na uwashe SELinux.

Marejeo:

Chanzo: mapenzi.com

Kuongeza maoni