Ji bo rêveberên pergalê pelika xapandinê ya SELinux: 42 bersivên pirsên girîng

Wergera gotarê bi taybetî ji bo xwendekarên qursê hatiye amadekirin "Rêveberê Linux".

Ji bo rêveberên pergalê pelika xapandinê ya SELinux: 42 bersivên pirsên girîng

Li vir hûn ê bersivên pirsên girîng ên li ser jiyan, gerdûn û her tiştê li Linux-ê bi ewlekariya pêşkeftî bistînin.

"Rastiya girîng ku tişt her gav ne ew in ku ew xuya dikin zanîna hevpar e ..."

-Hûn min nas dikin, Rêbernameya Hitchhiker ya Galaxy

Ewlekarî. pêbaweriya zêde. Lihevhatinî. Tektîk. Çar Siwarên Apocalypse sysadmin. Ji bilî karên me yên rojane - çavdêrîkirin, paşvegirtin, bicihanîn, veavakirin, nûvekirin, hwd.- em ji ewlehiya pergalên xwe jî berpirsiyar in. Tewra ew pergalên ku pêşkêşkarê sêyemîn pêşniyar dike ku em ewlehiya pêşkeftî neçalak bikin. Ew mîna xebatê hîs dike Ethan Hunt ji "Mîsyon: Ne gengaze."

Li hember vê dubendiyê, hin rêveberên pergalê biryar didin ku bigirin heba şîn, ji ber ku ew difikirin ku ew ê tu carî bersiva pirsa mezin a jiyanê, gerdûn û her tiştî nizanin. Û wekî ku em hemî dizanin, ew bersiv 42 ye.

Bi ruhê The Hitchhiker's Guide to Galaxy, li vir 42 bersivên pirsên girîng ên di derbarê kontrol û karanîna de hene. SELinux li ser pergalên we.

1. SELinux pergalek kontrolkirina gihîştina zorê ye, ku tê vê wateyê ku her pêvajoyek xwedan etîketek e. Her pel, peldank û pergala pergalê jî etîket hene. Rêgezên polîtîk gihîştina di navbera pêvajoyên nîşankirî û tiştan de kontrol dikin. Kernel van qaîdeyan pêk tîne.

2. Du têgehên herî girîng ev in: Labelkirin - nîşankirin (pel, pêvajo, port, hwd.) û Binpêkirina tîpê (ku li ser bingeha cûreyan pêvajoyên ji hev vediqetîne).

3. Forma labelê ya rast user:role:type:level (bixwe).

4. Armanca peydakirina ewlehiya pir-ast (Ewlekariya Pir-Asta - MLS) birêvebirina pêvajoyên (domînan) li ser bingeha asta ewlehiya daneyên ku ew ê bikar bînin e. Mînakî, pêvajoyek veşartî nikare daneyên top veşartî bixwîne.

5. Dabînkirina ewlehiya pir-kategorî (Ewlekariya Pir-Kategorî - MCS) pêvajoyên wekhev ji hev diparêze (mînak, makîneyên virtual, motorên OpenShift, sandboxên SELinux, konteynir, hwd.).

6. Vebijarkên kernel ji bo guheztina modên SELinux di bootê de:

  • autorelabel=1 → dibe sedem ku pergal ji nû ve nîşankirinê bixebite
  • selinux=0 → kernel binesaziya SELinux bar nake
  • enforcing=0 → di moda destûr de barkirin

7. Heke hûn hewce ne ku tevahiya pergalê ji nû ve nîşan bikin:

# touch /.autorelabel
#reboot

Ger nîşankirina pergalê hejmareke mezin ji xeletiyan vedihewîne, dibe ku hûn hewce ne ku di moda destûrdar de boot bikin da ku nîşankirin biserkeve.

8. Ji bo kontrol bikin ka SELinux çalak e: # getenforce

9. Ji bo demkî çalak / neçalak SELinux: # setenforce [1|0]

10. Kontrolkirina rewşa SELinux: # sestatus

11. Pelê veavakirinê: /etc/selinux/config

12. SELinux çawa dixebite? Li vir nîşanek nimûne ji bo servera webê Apache ye:

  • Nûnertiya binary: /usr/sbin/httpd→httpd_exec_t
  • Peldanka veavakirinê: /etc/httpd→httpd_config_t
  • Peldanka pelê têketinê: /var/log/httpd → httpd_log_t
  • Peldanka naverokê: /var/www/html → httpd_sys_content_t
  • Nivîsara destpêkirinê: /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
  • Pêvajoya /usr/sbin/httpd -DFOREGROUND → httpd_t
  • Port: 80/tcp, 443/tcp → httpd_t, http_port_t

Pêvajo di çarçoveyê de dimeşe httpd_t, dikare bi hêmanek nîşankirî re têkilî daynin httpd_something_t.

13. Gelek ferman argumanek qebûl dikin -Z ji bo dîtin, afirandin û guhertina çarçoveyê:

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

Dema ku pelan li ser bingeha pelrêça dêûbavê (bi hin îstîsnayan) ve têne çêkirin, navok têne damezrandin. RPM dikarin di dema sazkirinê de çarçoveyek saz bikin.

14. Çar sedemên sereke yên xeletiyên SELinux hene, ku bi hûrgulî di xalên 15-21 li jêr de têne diyar kirin:

  • Pirsgirêkên etîketkirinê
  • Ji ber tiştek ku divê SELinux bizanibe
  • Di polîtîkaya SELinux / sepanê de çewtî
  • Dibe ku agahdariya we têk bibe

15. Pirsgirêka labelê: heke pelên we tê de bin /srv/myweb bi xeletî têne nîşankirin, dibe ku gihîştin were red kirin. Li vir çend rê hene ku vê yekê rast bikin:

  • Ger hûn labelê dizanin:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • Ger hûn pelek bi nîşaneyên wekhev dizanin:
    # semanage fcontext -a -e /srv/myweb /var/www
  • Vegerandina konteksê (ji bo her du rewşan):
    # restorecon -vR /srv/myweb

16. Pirsgirêka nîşankirinê: heke hûn pelê li şûna kopî bikin biguhezînin, pel dê naveroka xweya orîjînal biparêze. Ji bo çareserkirina vê pirsgirêkê:

  • Fermana kontekstê bi etîketê biguherînin:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • Bi etîketa lînkê fermana çarçoveyê biguherînin:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • Veguhastina konteksê (ji bo her du rewşan): # restorecon -vR /var/www/html/

17. ger SELinux divê hûn zanibinku HTTPD li porta 8585 guhdarî dike, ji SELinux re bêje:

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

18. SELinux divê hûn zanibin Nirxên Boolean ên ku dihêle ku beşên polîtîkaya SELinux-ê di dema xebitandinê de bêyî agahdariya ku polîtîkaya SELinux-ê were nivîsandin were guheztin. Mînakî, heke hûn dixwazin httpd e-nameyê bişîne, têkevin: # setsebool -P httpd_can_sendmail 1

19. SELinux divê hûn zanibin nirxên mentiqî yên ji bo çalakkirin / neçalakkirina mîhengên SELinux:

  • Ji bo dîtina hemî nirxên boolean: # getsebool -a
  • Ji bo dîtina danasînek her yekê: # semanage boolean -l
  • Ji bo danîna nirxek boolean: # setsebool [_boolean_] [1|0]
  • Ji bo sazkirina daîmî, lê zêde bike -P. Bo nimûne: # setsebool httpd_enable_ftp_server 1 -P

20. Polîtîkayên / sepanên SELinux dibe ku xeletî hebin, di nav de:

  • Rêyên kodê yên neasayî
  • Configurations
  • Beralîkirina stdout
  • Danasîna pelê diherike
  • Bîra îcrakar
  • Pirtûkxaneyên xerab hatine çêkirin

Bilêtên vekirî (raporek ji Bugzilla re neşînin; Bugzilla SLA tune).

21. Dibe ku agahdariya we têk bibeheke we domainên sînordar hene ku hewl didin:

  • Modulên kernel barkirin
  • Moda SELinux a bi zorê neçalak bike
  • Binivîsin etc_t/shadow_t
  • Biguherînin qaîdeyên iptables

22. Amûrên SELinux ji bo pêşxistina modulên polîtîkayê:

# yum -y install setroubleshoot setroubleshoot-server

Reboot an ji nû ve dest pê bike auditd piştî sazkirinê.

23. Bikar bînin

journalctl

ji bo nîşandana navnîşek hemî têketinên ku pê re têkildar in setroubleshoot:

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

24. Bikar bînin journalctl ji bo navnîşkirina hemî têketinên ku bi tagek taybetî ya SELinux ve girêdayî ne. Bo nimûne:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. Ger xeletiyek SELinux çêbibe, têketinê bikar bînin setroubleshoot pêşkêşkirina çend çareseriyên gengaz.
Ji bo nimûne, ji 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. Têketin: SELinux li gelek cihan agahdarî tomar dike:

  • / var / têketin / peyam
  • /var/log/audit/audit.log
  • /var/lib/setroubleshoot/setroubleshoot_database.xml

27. Têketin: lêgerîna xeletiyên SELinux di têketina kontrolê de:

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

28. Ji bo dîtina peyamên SELinux Access Vector Cache (AVC) ji bo karûbarek taybetî:

# ausearch -m avc -c httpd

29. Utility audit2allow agahiyê ji têketinên operasyonên qedexe kom dike û dûv re qaîdeyên polîtîkaya destûra SELinux diafirîne. Bo nimûne:

  • Ji bo afirandina danasînek ku ji hêla mirovan ve tê xwendin ka çima gihîştina qedexe ye: # audit2allow -w -a
  • Ji bo dîtina qaîdeyek bicîhkirina celebek ku destûrê dide gihîştina qedexekirî: # audit2allow -a
  • Ji bo afirandina modulek xwerû: # audit2allow -a -M mypolicy
  • Dibe -M dosyayek bicîhkirinê (.te) bi navê diyarkirî diafirîne û qaîdeyê di pakêtek polîtîkayê (.pp) de berhev dike: mypolicy.pp mypolicy.te
  • Ji bo sazkirina modulek xwerû: # semodule -i mypolicy.pp

30. Ji bo mîhengkirina pêvajoyek (domînek) veqetandî ku di moda destûrdar de bixebite: # semanage permissive -a httpd_t

31. Ger hûn êdî naxwazin domain destûrdar be: # semanage permissive -d httpd_t

32. Ji bo neçalakkirina hemî domên destûrdar: # semodule -d permissivedomains

33. Çalakkirina polîtîkaya MLS SELinux: # yum install selinux-policy-mls
в /etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls

Piştrast bikin ku SELinux di moda destûr de dixebite: # setenforce 0
Skrîptek bikar bînin fixfilesda ku pê ewle bibin ku pelan di nûvekirina paşîn de ji nû ve têne nîşankirin:

# fixfiles -F onboot # reboot

34. Bikarhênerek bi rêzek taybetî ya MLS-ê biafirînin: # useradd -Z staff_u john

Bi kar tînin emrê useradd, nexşeya bikarhênerê nû ji bikarhênerek SELinux-ê ya heyî re (di vê rewşê de, staff_u).

35. Ji bo dîtina nexşeyê di navbera bikarhênerên SELinux û Linux de: # semanage login -l

36. Ji bo bikarhêner rêzek taybetî diyar bikin: # semanage login --modify --range s2:c100 john

37. Ji bo rastkirina etîketa pelrêça malê ya bikarhêner (heke pêwîst be): # chcon -R -l s2:c100 /home/john

38. Ji bo dîtina kategoriyên heyî: # chcat -L

39. Ji bo ku kategoriyan biguhezînin an dest bi afirandina xweya xwe bikin, pelê bi vî rengî biguherînin:

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

40. Ji bo birêvebirina fermanek an skrîptekê di pel, rol û çarçoveyek bikarhênerek taybetî de:

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

  • -t naveroka pelê
  • -r çarçoveya rola
  • -u naveroka bikarhêner

41. Konteynirên ku bi SELinux neçalak têne xebitandin:

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

42. Heke hûn hewce ne ku konteynerê bi tevahî pergalê bigihînin:

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

Û niha hûn jixwe bersiv dizanin. Ji ber vê yekê ji kerema xwe: netirsin û SELinux çalak bikin.

References:

Source: www.habr.com

Add a comment