Жүйе әкімшілеріне арналған SELinux хит парағы: маңызды сұрақтарға 42 жауап

Мақаланың аудармасы курс студенттері үшін арнайы дайындалған «Linux әкімшісі».

Жүйе әкімшілеріне арналған SELinux хит парағы: маңызды сұрақтарға 42 жауап

Мұнда сіз өмір, ғалам және Linux жүйесіндегі барлық нәрселер туралы маңызды сұрақтарға жақсартылған қауіпсіздікпен жауап аласыз.

«Заттар әрқашан көрінгендей бола бермейтіні туралы маңызды шындық - бұл жалпыға ортақ ...»

- Дуглас Адамс, Автохикиктің Галактикаға нұсқауы

Қауіпсіздік. Сенімділікті арттыру. Корреспонденция. Саясат. Апокалипсистің төрт серілері жүйесі. Күнделікті міндеттерімізден басқа - бақылау, сақтық көшірме жасау, енгізу, конфигурациялау, жаңарту және т.б. - біз жүйелеріміздің қауіпсіздігіне де жауаптымыз. Тіпті үшінші тарап провайдері күшейтілген қауіпсіздікті өшіруді ұсынатын жүйелер. Бұл жұмыс сияқты Этан Хант «Миссия: мүмкін емес» фильмінен.

Осы дилеммаға тап болған кейбір жүйелік әкімшілер шешім қабылдауға шешім қабылдайды көк таблетка, өйткені олар өмір, ғалам және осының бәрі деген үлкен сұрақтың жауабын ешқашан білмейді деп ойлайды. Және бәріміз білетіндей, бұл жауап 42.

Автостопшының Галактикаға арналған нұсқаулығының рухында басқару және пайдалану туралы маңызды сұрақтарға 42 жауап берілген. SELinux жүйелеріңізде.

1. SELinux - бұл мәжбүрлі қол жеткізуді басқару жүйесі, яғни әрбір процесте белгі бар. Әрбір файлдың, каталогтың және жүйелік объектінің де белгілері болады. Саясат ережелері тегтелген процестер мен нысандар арасындағы қатынасты басқарады. Ядро осы ережелерді орындайды.

2. Ең маңызды екі ұғым: Таңбалау — белгілер (файлдар, процестер, порттар және т.б.) және Типті орындау (түрлері бойынша процестерді бір-бірінен оқшаулайды).

3. Дұрыс белгі пішімі user:role:type:level (міндетті емес).

4. Көп деңгейлі қауіпсіздікті қамтамасыз ету мақсаты (Көп деңгейлі қауіпсіздік - MLS) олар пайдаланатын деректердің қауіпсіздік деңгейіне негізделген процестерді (домендерді) басқару болып табылады. Мысалы, құпия процесс өте құпия деректерді оқи алмайды.

5. Көп санатты қауіпсіздікті қамтамасыз ету (Көп санатты қауіпсіздік - MCS) ұқсас процестерді бір-бірінен қорғайды (мысалы, виртуалды машиналар, OpenShift қозғалтқыштары, SELinux құм жәшіктері, контейнерлер және т.б.).

6. Жүктеу кезінде SELinux режимдерін өзгертуге арналған ядро ​​опциялары:

  • autorelabel=1 → жүйені қайта таңбалауды іске қосады
  • selinux=0 → ядро ​​SELinux инфрақұрылымын жүктемейді
  • enforcing=0 → рұқсат ету режимінде жүктеу

7. Бүкіл жүйені қайта таңбалау қажет болса:

# touch /.autorelabel
#reboot

Жүйе таңбалауында қателер көп болса, ескерту сәтті болуы үшін рұқсат ету режимінде жүктеу қажет болуы мүмкін.

8. SELinux қосылғанын тексеру үшін: # getenforce

9. SELinux қолданбасын уақытша қосу/өшіру үшін: # setenforce [1|0]

10. SELinux күйін тексеру: # sestatus

11. Конфигурация файлы: /etc/selinux/config

12. SELinux қалай жұмыс істейді? Мұнда Apache веб-серверіне арналған таңбалау үлгісі берілген:

  • Екілік бейнелеу: /usr/sbin/httpd→httpd_exec_t
  • Конфигурация каталогы: /etc/httpd→httpd_config_t
  • Журнал файлының каталогы: /var/log/httpd → httpd_log_t
  • Мазмұн каталогы: /var/www/html → httpd_sys_content_t
  • Скриптті іске қосу: /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
  • Процесс: /usr/sbin/httpd -DFOREGROUND → httpd_t
  • Порттар: 80/tcp, 443/tcp → httpd_t, http_port_t

Контексте орындалатын процесс httpd_t, белгіленген нысанмен әрекеттесе алады httpd_something_t.

13. Көптеген пәрмендер аргументті қабылдайды -Z контекстті көру, жасау және өзгерту үшін:

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

Мәтінмәндер файлдар өздерінің негізгі каталогының мәтінмәніне негізделген (кейбір ерекшеліктерді қоспағанда) жасалған кезде орнатылады. RPM контексттерді орнату кезіндегідей орната алады.

14. SELinux қателерінің төрт негізгі себебі бар, олар төменде 15-21 тармақтарда толығырақ сипатталған:

  • Белгілеу мәселелері
  • SELinux білуі керек нәрсеге байланысты
  • SELinux саясатындағы/қолданбасындағы қате
  • Сіздің ақпаратыңыз бұзылған болуы мүмкін

15. Белгілеу мәселесі: файлдарыңыз болса /srv/myweb қате белгіленсе, кіруге тыйым салынуы мүмкін. Мұны түзетудің бірнеше жолы бар:

  • Егер сіз белгіні білсеңіз:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • Баламалы таңбалары бар файлды білсеңіз:
    # semanage fcontext -a -e /srv/myweb /var/www
  • Мәтінмәнді қалпына келтіру (екі жағдайда да):
    # restorecon -vR /srv/myweb

16. Белгілеу мәселесі: егер файлды көшірудің орнына жылжытсаңыз, файл өзінің бастапқы контекстін сақтайды. Бұл мәселені шешу үшін:

  • Мәтінмәндік пәрменді белгімен өзгертіңіз:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • Мәтінмәндік пәрменді сілтеме белгісімен өзгертіңіз:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • Мәтінмәнді қалпына келтіріңіз (екі жағдайда да): # restorecon -vR /var/www/html/

17. егер SELinux сіз білуіңіз керекHTTPD 8585 портында тыңдап жатқанын, SELinux-ке айтыңыз:

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

18. SELinux сіз білуіңіз керек SELinux саясатының қайта жазылуын білмей SELinux саясатының бөліктерін орындау уақытында өзгертуге мүмкіндік беретін логикалық мәндер. Мысалы, httpd электрондық поштасын жібергіңіз келсе, мынаны енгізіңіз: # setsebool -P httpd_can_sendmail 1

19. SELinux сіз білуіңіз керек SELinux параметрлерін қосу/өшіру үшін логикалық мәндер:

  • Барлық логикалық мәндерді көру үшін: # getsebool -a
  • Әрқайсысының сипаттамасын көру үшін: # semanage boolean -l
  • Логикалық мәнді орнату үшін: # setsebool [_boolean_] [1|0]
  • Тұрақты орнату үшін қосыңыз -P. Мысалы: # setsebool httpd_enable_ftp_server 1 -P

20. SELinux саясаттарында/қолданбаларында қателер болуы мүмкін, соның ішінде:

  • Әдеттен тыс код жолдары
  • Конфигурациялар
  • Stdout қайта бағытталуда
  • Файл дескрипторы ағып кетеді
  • Орындалатын жады
  • Нашар салынған кітапханалар

Ашық билеттер (Bugzilla-ға есеп бермеңіз; Bugzilla-да SLA жоқ).

21. Сіздің ақпаратыңыз бұзылған болуы мүмкінегер сізде шектелген домендер болса:

  • Ядро модульдерін жүктеңіз
  • Міндетті SELinux режимін өшіріңіз
  • -ге жазыңыз etc_t/shadow_t
  • iptables ережелерін өзгертіңіз

22. Саясат модульдерін әзірлеуге арналған SELinux құралдары:

# yum -y install setroubleshoot setroubleshoot-server

Қайта жүктеңіз немесе қайта іске қосыңыз auditd орнатқаннан кейін.

23. Пайдаланыңыз

journalctl

байланыстырылған барлық журналдардың тізімін көрсету үшін setroubleshoot:

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

24. Пайдаланыңыз journalctl арнайы SELinux тегіне байланысты барлық журналдарды тізімдеу үшін. Мысалы:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. SELinux қатесі орын алса, журналды пайдаланыңыз setroubleshoot бірнеше ықтимал шешімдерді ұсынады.
Мысалы, бастап 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. Журнал жүргізу: SELinux ақпаратты көптеген жерлерде жазады:

  • / var / log / хабарламалар
  • /var/log/audit/audit.log
  • /var/lib/setroubleshoot/setroubleshoot_database.xml

27. Журнал жүргізу: аудит журналында SELinux қателерін іздеу:

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

28. Арнайы қызмет үшін SELinux Access Vector Cache (AVC) хабарларын табу үшін:

# ausearch -m avc -c httpd

29. Утилита audit2allow тыйым салынған операциялар журналдарынан ақпаратты жинайды, содан кейін SELinux рұқсат саясаты ережелерін жасайды. Мысалы:

  • Неліктен қол жеткізуге тыйым салынғанының адам оқи алатын сипаттамасын жасау үшін: # audit2allow -w -a
  • Қабылданбаған қатынасқа рұқсат беретін түрді орындау ережесін көру үшін: # audit2allow -a
  • Пайдаланушы модулін жасау үшін: # audit2allow -a -M mypolicy
  • Опция -M көрсетілген атаумен түрді орындау файлын (.te) жасайды және ережені саясат бумасына (.pp) құрастырады: mypolicy.pp mypolicy.te
  • Пайдаланушы модулін орнату үшін: # semodule -i mypolicy.pp

30. Рұқсат беру режимінде жұмыс істеу үшін бөлек процесті (доменді) конфигурациялау үшін: # semanage permissive -a httpd_t

31. Доменнің рұқсат етілген болуын қаламасаңыз: # semanage permissive -d httpd_t

32. Барлық рұқсат етілген домендерді өшіру үшін: # semodule -d permissivedomains

33. MLS SELinux саясатын қосу: # yum install selinux-policy-mls
в /etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls

SELinux рұқсат беру режимінде жұмыс істеп тұрғанын тексеріңіз: # setenforce 0
Сценарийді пайдаланыңыз fixfilesкелесі қайта жүктеуде файлдардың қайта таңбалануын қамтамасыз ету үшін:

# fixfiles -F onboot # reboot

34. Арнайы MLS ауқымы бар пайдаланушыны жасаңыз: # useradd -Z staff_u john

Пәрменді пайдалану useradd, жаңа пайдаланушыны бар SELinux пайдаланушысымен салыстырыңыз (бұл жағдайда, staff_u).

35. SELinux және Linux пайдаланушылары арасындағы салыстыруды көру үшін: # semanage login -l

36. Пайдаланушы үшін арнайы ауқымды анықтаңыз: # semanage login --modify --range s2:c100 john

37. Пайдаланушының негізгі каталог белгісін түзету үшін (қажет болса): # chcon -R -l s2:c100 /home/john

38. Ағымдағы санаттарды көру үшін: # chcat -L

39. Санаттарды өзгерту немесе өзіңізді жасауды бастау үшін файлды келесідей өңдеңіз:

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

40. Нақты файлда, рөлде және пайдаланушы контекстінде пәрменді немесе сценарийді іске қосу үшін:

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

  • -t файл контексі
  • -r рөлдік контекст
  • -u пайдаланушы контексті

41. SELinux өшірілген жұмыс істейтін контейнерлер:

  • Подман: # podman run --security-opt label=disable …
  • Docker: # docker run --security-opt label=disable …

42. Контейнерге жүйеге толық рұқсат беру қажет болса:

  • Подман: # podman run --privileged …
  • Docker: # docker run --privileged …

Ал енді сіз жауапты білесіз. Сондықтан: үрейленбеңіз және SELinux қосыңыз.

сілтемелер:

Ақпарат көзі: www.habr.com

пікір қалдыру