SELinux cheat sheet para sa mga tagapangasiwa ng system: 42 mga sagot sa mahahalagang tanong

Ang pagsasalin ng artikulo ay partikular na inihanda para sa mga mag-aaral ng kurso "Linux Administrator".

SELinux cheat sheet para sa mga tagapangasiwa ng system: 42 mga sagot sa mahahalagang tanong

Dito makakakuha ka ng mga sagot sa mahahalagang tanong tungkol sa buhay, uniberso at lahat ng bagay sa Linux na may pinahusay na seguridad.

"Ang mahalagang katotohanan na ang mga bagay ay hindi palaging kung ano ang tila ay karaniwang kaalaman..."

-Douglas Adams, The Hitchhiker's Guide to the Galaxy

Kaligtasan. Tumaas na pagiging maaasahan. Korespondensiya. Patakaran. Apat na Horsemen ng Apocalypse sysadmin. Bilang karagdagan sa aming mga pang-araw-araw na gawain - pagsubaybay, pag-backup, pagpapatupad, pagsasaayos, pag-update, atbp. - responsable din kami para sa seguridad ng aming mga system. Maging ang mga system kung saan inirerekomenda ng third-party na provider na i-disable namin ang pinahusay na seguridad. Parang trabaho Ethan Hunt mula sa “Mission: Impossible.”

Nahaharap sa problemang ito, nagpasya ang ilang mga administrator ng system na kunin asul na tableta, dahil iniisip nila na hindi nila malalaman ang sagot sa malaking tanong ng buhay, ang uniberso at lahat ng iyon. At tulad ng alam nating lahat, ang sagot na iyon ay 42.

Sa diwa ng The Hitchhiker's Guide to the Galaxy, narito ang 42 na sagot sa mahahalagang tanong tungkol sa kontrol at paggamit. SELinux sa iyong mga system.

1. Ang SELinux ay isang forced access control system, na nangangahulugan na ang bawat proseso ay may label. Ang bawat file, direktoryo at system object ay mayroon ding mga label. Kinokontrol ng mga patakaran ng patakaran ang pag-access sa pagitan ng mga naka-tag na proseso at mga bagay. Ipinapatupad ng kernel ang mga panuntunang ito.

2. Ang dalawang pinakamahalagang konsepto ay: Paglalagay ng label — mga marka (mga file, proseso, port, atbp.) at Uri ng pagpapatupad (na naghihiwalay ng mga proseso sa isa't isa batay sa mga uri).

3. Tamang format ng label user:role:type:level (opsyonal).

4. Ang layunin ng pagbibigay ng multi-level na seguridad (Multi-Level Security - MLS) ay upang pamahalaan ang mga proseso (mga domain) batay sa antas ng seguridad ng data na kanilang gagamitin. Halimbawa, hindi maaaring basahin ng isang lihim na proseso ang nangungunang sikretong data.

5. Pagtitiyak ng multi-category na seguridad (Multi-Category Security - MCS) pinoprotektahan ang magkatulad na proseso mula sa isa't isa (halimbawa, mga virtual machine, OpenShift engine, SELinux sandbox, container, atbp.).

6. Mga pagpipilian sa kernel para sa pagbabago ng mga mode ng SELinux sa boot:

  • autorelabel=1 → nagiging sanhi ng system na magpatakbo ng relabeling
  • selinux=0 → hindi nilo-load ng kernel ang imprastraktura ng SELinux
  • enforcing=0 → naglo-load sa permissive mode

7. Kung kailangan mong i-relabel ang buong system:

# touch /.autorelabel
#reboot

Kung ang system marking ay naglalaman ng malaking bilang ng mga error, maaaring kailanganin mong mag-boot sa permissive mode para magtagumpay ang pagpuna.

8. Upang tingnan kung pinagana ang SELinux: # getenforce

9. Upang pansamantalang paganahin/i-disable ang SELinux: # setenforce [1|0]

10. Sinusuri ang katayuan ng SELinux: # sestatus

11. File ng configuration: /etc/selinux/config

12. Paano gumagana ang SELinux? Narito ang isang halimbawang pagmamarka para sa Apache web server:

  • Binary na representasyon: /usr/sbin/httpd→httpd_exec_t
  • Direktoryo ng configuration: /etc/httpd→httpd_config_t
  • Direktoryo ng log file: /var/log/httpd → httpd_log_t
  • Direktoryo ng nilalaman: /var/www/html → httpd_sys_content_t
  • Ilunsad ang script: /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
  • Proseso: /usr/sbin/httpd -DFOREGROUND → httpd_t
  • Mga Port: 80/tcp, 443/tcp → httpd_t, http_port_t

Ang proseso ay tumatakbo sa konteksto httpd_t, ay maaaring makipag-ugnayan sa isang may label na bagay httpd_something_t.

13. Maraming utos ang tumatanggap ng argumento -Z upang tingnan, lumikha at baguhin ang konteksto:

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

Ang mga konteksto ay itinatag kapag ang mga file ay ginawa batay sa konteksto ng kanilang pangunahing direktoryo (na may ilang mga pagbubukod). Ang mga RPM ay maaaring magtatag ng mga konteksto tulad ng sa panahon ng pag-install.

14. Mayroong apat na pangunahing sanhi ng mga error sa SELinux, na inilalarawan nang mas detalyado sa mga punto 15-21 sa ibaba:

  • Mga isyu sa pag-label
  • Dahil sa isang bagay na kailangang malaman ng SELinux
  • Error sa patakaran/application ng SELinux
  • Maaaring makompromiso ang iyong impormasyon

15. Problema sa pag-label: kung ang iyong mga file ay nasa /srv/myweb ay namarkahan nang hindi tama, maaaring tanggihan ang pag-access. Narito ang ilang paraan para ayusin ito:

  • Kung alam mo ang label:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • Kung may alam kang file na may katumbas na mga marka:
    # semanage fcontext -a -e /srv/myweb /var/www
  • Pagpapanumbalik ng konteksto (para sa parehong mga kaso):
    # restorecon -vR /srv/myweb

16. Problema sa pag-label: kung ililipat mo ang file sa halip na kopyahin ito, mapapanatili ng file ang orihinal nitong konteksto. Upang ayusin ang problemang ito:

  • Baguhin ang utos ng konteksto gamit ang label:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • Baguhin ang command ng konteksto gamit ang label ng link:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • Ibalik ang konteksto (para sa parehong mga kaso): # restorecon -vR /var/www/html/

17. Kung SELinux na kailangan mong malamanna ang HTTPD ay nakikinig sa port 8585, sabihin sa SELinux:

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

18. SELinux na kailangan mong malaman Mga Boolean na halaga na nagpapahintulot sa mga bahagi ng patakaran ng SELinux na baguhin sa runtime nang hindi nalalaman ang patakarang SELinux na na-overwrite. Halimbawa, kung gusto mong magpadala ng email ang httpd, ilagay ang: # setsebool -P httpd_can_sendmail 1

19. SELinux na kailangan mong malaman mga lohikal na halaga para sa pagpapagana/hindi pagpapagana ng mga setting ng SELinux:

  • Upang makita ang lahat ng boolean value: # getsebool -a
  • Upang makita ang paglalarawan ng bawat isa: # semanage boolean -l
  • Upang magtakda ng boolean value: # setsebool [_boolean_] [1|0]
  • Para sa isang permanenteng pag-install, idagdag -P. Halimbawa: # setsebool httpd_enable_ftp_server 1 -P

20. Ang mga patakaran/application ng SELinux ay maaaring maglaman ng mga error, kabilang ang:

  • Mga hindi pangkaraniwang code path
  • Mga Configuration
  • Nire-redirect ang stdout
  • Tumutulo ang descriptor ng file
  • Executable memory
  • Mga library na hindi maganda ang pagkakagawa

Buksan ang mga tiket (huwag magsumite ng ulat sa Bugzilla; Bugzilla ay walang SLA).

21. Maaaring makompromiso ang iyong impormasyonkung mayroon kang mga pinaghihigpitang domain na sinusubukang:

  • Mag-load ng mga kernel module
  • Huwag paganahin ang ipinatupad na SELinux mode
  • Sumulat sa etc_t/shadow_t
  • Baguhin ang mga panuntunan sa iptables

22. Mga tool ng SELinux para sa pagbuo ng mga module ng patakaran:

# yum -y install setroubleshoot setroubleshoot-server

I-reboot o i-restart auditd pagkatapos ng pag-install.

23. Gamitin

journalctl

upang magpakita ng listahan ng lahat ng log na nauugnay sa setroubleshoot:

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

24. Gamitin journalctl upang ilista ang lahat ng mga log na nauugnay sa isang partikular na tag ng SELinux. Halimbawa:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. Kung may nangyaring error sa SELinux, gamitin ang log setroubleshoot nag-aalok ng ilang posibleng solusyon.
Halimbawa, mula sa 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. Pag-log: Ang SELinux ay nagtatala ng impormasyon sa maraming lugar:

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

27. Pag-log: naghahanap ng mga error sa SELinux sa audit log:

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

28. Upang mahanap ang mga mensahe ng SELinux Access Vector Cache (AVC) para sa isang partikular na serbisyo:

# ausearch -m avc -c httpd

29. Kagamitan audit2allow nangongolekta ng impormasyon mula sa mga log ng mga ipinagbabawal na operasyon at pagkatapos ay bumubuo ng mga patakaran sa patakaran sa pahintulot ng SELinux. Halimbawa:

  • Upang lumikha ng isang paglalarawang nababasa ng tao kung bakit tinanggihan ang pag-access: # audit2allow -w -a
  • Upang tingnan ang uri ng pagpapatupad ng panuntunan na nagbibigay-daan sa tinanggihan na pag-access: # audit2allow -a
  • Para gumawa ng custom na module: # audit2allow -a -M mypolicy
  • Pagpipilian -M lumilikha ng uri ng enforcement file (.te) na may tinukoy na pangalan at kino-compile ang panuntunan sa isang package ng patakaran (.pp): mypolicy.pp mypolicy.te
  • Para mag-install ng custom na module: # semodule -i mypolicy.pp

30. Upang i-configure ang isang hiwalay na proseso (domain) upang gumana sa permissive mode: # semanage permissive -a httpd_t

31. Kung hindi mo na gustong maging permissive ang domain: # semanage permissive -d httpd_t

32. Upang i-disable ang lahat ng pinahihintulutang domain: # semodule -d permissivedomains

33. Paganahin ang patakaran sa MLS SELinux: # yum install selinux-policy-mls
в /etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls

Tiyaking tumatakbo ang SELinux sa permissive mode: # setenforce 0
Gumamit ng script fixfilesupang matiyak na ang mga file ay na-relabel sa susunod na pag-reboot:

# fixfiles -F onboot # reboot

34. Gumawa ng user na may partikular na hanay ng MLS: # useradd -Z staff_u john

Gamit ang command useradd, imapa ang bagong user sa isang umiiral nang user ng SELinux (sa kasong ito, staff_u).

35. Upang tingnan ang pagmamapa sa pagitan ng mga gumagamit ng SELinux at Linux: # semanage login -l

36. Tukuyin ang isang partikular na hanay para sa user: # semanage login --modify --range s2:c100 john

37. Upang itama ang label ng home directory ng user (kung kinakailangan): # chcon -R -l s2:c100 /home/john

38. Upang tingnan ang mga kasalukuyang kategorya: # chcat -L

39. Upang baguhin ang mga kategorya o simulan ang paggawa ng sarili mo, i-edit ang file tulad ng sumusunod:

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

40. Upang magpatakbo ng command o script sa isang partikular na file, tungkulin, at konteksto ng user:

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

  • -t konteksto ng file
  • -r konteksto ng papel
  • -u konteksto ng gumagamit

41. Mga container na tumatakbo na may SELinux na hindi pinagana:

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

42. Kung kailangan mong bigyan ang container ng buong access sa system:

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

At ngayon alam mo na ang sagot. Kaya't mangyaring: huwag mag-panic at paganahin ang SELinux.

Link:

Pinagmulan: www.habr.com

Magdagdag ng komento