SELinux trompfolio por sistemaj administrantoj: 42 respondoj al gravaj demandoj

La traduko de la artikolo estis preparita specife por la kursanoj "Linuksa Administranto".

SELinux trompfolio por sistemaj administrantoj: 42 respondoj al gravaj demandoj

Ĉi tie vi ricevos respondojn al gravaj demandoj pri vivo, universo kaj ĉio en Linukso kun plibonigita sekureco.

"La grava vero, ke aferoj ne ĉiam estas tio, kion ili ŝajnas, estas komuna scio..."

-Douglas Adams, La Petveturista Gvidilo pri la Galaksio

Sekureco. Pliigita fidindeco. Korespondado. Politiko. Kvar Rajdantoj de la Apokalipso sysadmin. Krom niaj ĉiutagaj taskoj - monitorado, sekurkopio, efektivigo, agordo, ĝisdatigo, ktp. - ni ankaŭ respondecas pri la sekureco de niaj sistemoj. Eĉ tiuj sistemoj, kie la triaparta provizanto rekomendas, ke ni malŝaltu plibonigitan sekurecon. Ĝi sentas kiel laboro Ethan Hunt de "Misio: Neebla."

Fronte al ĉi tiu dilemo, iuj sistemadministrantoj decidas preni blua pilolo, ĉar ili pensas, ke ili neniam scios la respondon al la granda demando pri vivo, la universo kaj ĉio tio. Kaj kiel ni ĉiuj scias, tiu respondo estas 42.

En la spirito de The Hitchhiker's Guide to the Galaxy, jen 42 respondoj al gravaj demandoj pri kontrolo kaj uzo. SELinux sur viaj sistemoj.

1. SELinux estas deviga alirkontrola sistemo, kio signifas, ke ĉiu procezo havas etikedon. Ĉiu dosiero, dosierujo kaj sistema objekto ankaŭ havas etikedojn. Politikreguloj kontrolas aliron inter etikeditaj procezoj kaj objektoj. La kerno devigas tiujn regulojn.

2. La du plej gravaj konceptoj estas: Etikedado — markoj (dosieroj, procezoj, havenoj, ktp.) kaj Tajpu devigon (kiu izolas procezojn unu de la alia surbaze de tipoj).

3. Ĝusta etikedo formato user:role:type:level (laŭvola).

4. La celo provizi plurnivelan sekurecon (Plurnivela Sekureco - MLS) estas administri procezojn (domajnojn) surbaze de la nivelo de sekureco de la datumoj kiujn ili uzos. Ekzemple, sekreta procezo ne povas legi sekretegajn datumojn.

5. Certigante multkategorian sekurecon (Multi-Kategoria Sekureco - MCS) protektas similajn procezojn unu de la alia (ekzemple, virtualajn maŝinojn, OpenShift-motorojn, SELinux-sablokestojn, ujojn ktp.).

6. Kernel-opcioj por ŝanĝi SELinux-reĝimojn ĉe lanĉo:

  • autorelabel=1 → igas la sistemon ruli remarkadon
  • selinux=0 → la kerno ne ŝarĝas la SELinux-infrastrukturon
  • enforcing=0 → ŝarĝo en permesa reĝimo

7. Se vi bezonas remarki la tutan sistemon:

# touch /.autorelabel
#reboot

Se la sistema markado enhavas grandan nombron da eraroj, vi eble bezonos ekŝalti en permesema reĝimo por ke rimarkado sukcesu.

8. Por kontroli ĉu SELinux estas ebligita: # getenforce

9. Por provizore ebligi/malŝalti SELinux: # setenforce [1|0]

10. Kontrolante SELinux-statuson: # sestatus

11. Dosiero de agordo: /etc/selinux/config

12. Kiel funkcias SELinux? Jen ekzemplo de markado por la retservilo Apache:

  • Binara prezento: /usr/sbin/httpd→httpd_exec_t
  • Agorda dosierujo: /etc/httpd→httpd_config_t
  • Dosierujo de protokolo: /var/log/httpd → httpd_log_t
  • Enhava dosierujo: /var/www/html → httpd_sys_content_t
  • Lanĉa skripto: /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
  • Procezo: /usr/sbin/httpd -DFOREGROUND → httpd_t
  • Havenoj: 80/tcp, 443/tcp → httpd_t, http_port_t

Procezo funkcianta en kunteksto httpd_t, povas interagi kun etikedita objekto httpd_something_t.

13. Multaj komandoj akceptas argumenton -Z por vidi, krei kaj ŝanĝi kuntekston:

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

Kuntekstoj estas establitaj kiam dosieroj estas kreitaj surbaze de la kunteksto de sia gepatra dosierujo (kun kelkaj esceptoj). RPMoj povas establi kuntekstojn kiel dum instalado.

14. Estas kvar ĉefaj kaŭzoj de SELinux-eraroj, kiuj estas priskribitaj pli detale en punktoj 15-21 sube:

  • Etikedaj aferoj
  • Pro io, kion SELinux bezonas scii
  • Eraro en SELinux-politiko/aplikaĵo
  • Viaj informoj povas esti endanĝerigitaj

15. Problemo pri etikedado: se viaj dosieroj estas en /srv/myweb estas markitaj malĝuste, aliro povas esti malakceptita. Jen kelkaj manieroj ripari ĉi tion:

  • Se vi konas la etikedon:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • Se vi konas dosieron kun ekvivalentaj markoj:
    # semanage fcontext -a -e /srv/myweb /var/www
  • Restarigante la kuntekston (por ambaŭ kazoj):
    # restorecon -vR /srv/myweb

16. Problemo pri etikedado: se vi movas la dosieron anstataŭ kopii ĝin, la dosiero konservos sian originan kuntekston. Por solvi ĉi tiun problemon:

  • Ŝanĝu la kuntekstan komandon kun la etikedo:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • Ŝanĝu la kuntekstan komandon kun la ligilo:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • Restarigu la kuntekston (por ambaŭ kazoj): # restorecon -vR /var/www/html/

17. se SELinux vi devas sciike HTTPD aŭskultas sur la haveno 8585, diru al SELinux:

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

18. SELinux vi devas scii Buleaj valoroj kiuj permesas partojn de la SELinux-politiko esti ŝanĝitaj ĉe rultempo sen scio pri la SELinux-politiko esti anstataŭita. Ekzemple, se vi volas ke httpd sendu retpoŝton, enigu: # setsebool -P httpd_can_sendmail 1

19. SELinux vi devas scii logikaj valoroj por ebligi/malŝalti SELinux-agordojn:

  • Por vidi ĉiujn buleajn valorojn: # getsebool -a
  • Por vidi priskribon de ĉiu: # semanage boolean -l
  • Por agordi bulean valoron: # setsebool [_boolean_] [1|0]
  • Por konstanta instalado, aldonu -P. Ekzemple: # setsebool httpd_enable_ftp_server 1 -P

20. SELinux-politikoj/aplikoj povas enhavi erarojn, inkluzive de:

  • Nekutimaj kodaj vojoj
  • Agordoj
  • Redirektante stdout
  • Dosiera priskribilo fukas
  • Ekzekutebla memoro
  • Malbone konstruitaj bibliotekoj

Malfermu biletojn (ne sendu raporton al Bugzilla; Bugzilla ne havas SLA).

21. Viaj informoj povas esti endanĝerigitajse vi havas limigitajn domajnojn provante:

  • Ŝarĝu kernaj moduloj
  • Malebligu devigitan SELinux-reĝimon
  • Skribu al etc_t/shadow_t
  • Ŝanĝu regulojn de iptables

22. SELinux-iloj por disvolvi politikajn modulojn:

# yum -y install setroubleshoot setroubleshoot-server

Rekomencu aŭ rekomencu auditd post instalado.

23. Uzu

journalctl

por montri liston de ĉiuj protokoloj asociitaj kun setroubleshoot:

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

24. Uzu journalctl listigi ĉiujn protokolojn asociitajn kun specifa SELinux-etikedo. Ekzemple:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. Se SELinux-eraro okazas, uzu la protokolon setroubleshoot proponante plurajn eblajn solvojn.
Ekzemple, de 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. Registrado: SELinux registras informojn en multaj lokoj:

  • / var / log / messages
  • /var/log/audit/audit.log
  • /var/lib/setroubleshoot/setroubleshoot_database.xml

27. Registrado: serĉante SELinux-erarojn en la revizia protokolo:

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

28. Por trovi mesaĝojn de SELinux Access Vector Cache (AVC) por specifa servo:

# ausearch -m avc -c httpd

29. Utileco audit2allow kolektas informojn el protokoloj de malpermesitaj operacioj kaj poste generas regulojn pri permesaj politikoj de SELinux. Ekzemple:

  • Por krei homlegeblan priskribon de kial aliro estas malakceptita: # audit2allow -w -a
  • Por vidi tipan plenuman regulon, kiu permesas rifuzitan aliron: # audit2allow -a
  • Por krei kutiman modulon: # audit2allow -a -M mypolicy
  • Opcio -M kreas tipan devigdosieron (.te) kun la specifita nomo kaj kompilas la regulon en politikan pakaĵon (.pp): mypolicy.pp mypolicy.te
  • Por instali kutiman modulon: # semodule -i mypolicy.pp

30. Por agordi apartan procezon (domajno) por labori en permesema reĝimo: # semanage permissive -a httpd_t

31. Se vi ne plu volas, ke la domajno estu permesema: # semanage permissive -d httpd_t

32. Por malŝalti ĉiujn permesajn domajnojn: # semodule -d permissivedomains

33. Ebligante MLS SELinux-politikon: # yum install selinux-policy-mls
в /etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls

Certigu, ke SELinux funkcias en permesa reĝimo: # setenforce 0
Uzu skripton fixfilespor certigi, ke la dosieroj estas reetikeditaj dum la sekva rekomenco:

# fixfiles -F onboot # reboot

34. Kreu uzanton kun specifa MLS-gamo: # useradd -Z staff_u john

Uzante la komandon useradd, mapi la novan uzanton al ekzistanta SELinux-uzanto (en ĉi tiu kazo, staff_u).

35. Por vidi la mapadon inter uzantoj de SELinux kaj Linukso: # semanage login -l

36. Difinu specifan intervalon por la uzanto: # semanage login --modify --range s2:c100 john

37. Por korekti la hejmdosierujon de la uzanto (se necese): # chcon -R -l s2:c100 /home/john

38. Por vidi aktualajn kategoriojn: # chcat -L

39. Por ŝanĝi kategoriojn aŭ komenci krei viajn proprajn, redaktu la dosieron jene:

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

40. Por ruli komandon aŭ skripton en specifa dosiero, rolo kaj uzantkunteksto:

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

  • -t dosiero kunteksto
  • -r rola kunteksto
  • -u uzanta kunteksto

41. Ujoj kurantaj kun SELinux malŝaltita:

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

42. Se vi bezonas doni al la ujo plenan aliron al la sistemo:

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

Kaj nun vi jam scias la respondon. Do bonvolu: ne paniko kaj ebligu SELinux.

Referencoj

fonto: www.habr.com

Aldoni komenton