Linux коопсуздук системалары

Киргизилген, мобилдик түзмөктөрдө жана серверлерде Linux OSтин эбегейсиз ийгилигинин себептеринин бири - ядронун, тиешелүү кызматтардын жана тиркемелердин коопсуздугунун кыйла жогорку даражасы. Бирок эгер жакшыраак карап көрүңүз Linux ядросунун архитектурасына туура келсе, анда коопсуздук үчүн жооптуу квадратты табуу мүмкүн эмес. Linux коопсуздук подсистемасы кайда жашырылган жана ал эмнеден турат?

Linux коопсуздук модулдары жана SELinux жөнүндө маалымат

Security Enhanced Linux - бул Linux тутумдарын потенциалдуу коркунучтардан коргоо жана Unix салттуу коопсуздук тутуму болгон Дискрециялык мүмкүндүктү башкаруунун (DAC) кемчиликтерин оңдоо үчүн милдеттүү жана ролго негизделген кирүү моделдерине негизделген эрежелердин жана мүмкүндүк алуу механизмдеринин жыйындысы. Долбоор АКШнын Улуттук коопсуздук агенттигинде пайда болгон жана түздөн-түз негизинен Secure Computing Corporation жана MITER подрядчылары, ошондой эле бир катар илимий лабораториялар тарабынан иштелип чыккан.

Linux коопсуздук системалары
Linux коопсуздук модулдары

Линус Торвалдс жаңы NSA иштеп чыгуулары жөнүндө бир катар комментарийлерди берди, ошондуктан алар негизги Linux ядросуна киргизилиши мүмкүн. Ал объекттер менен операцияларды башкаруу үчүн тосмолордун жыйындысы жана тиешелүү атрибуттарды сактоо үчүн өзөктүк маалымат структураларындагы белгилүү бир коргоочу талаалардын жыйындысы бар жалпы чөйрөнү сүрөттөгөн. Бул чөйрөнү жүктөөчү ядро ​​модулдары каалаган коопсуздук моделин ишке ашыруу үчүн колдонсо болот. LSM 2.6-жылы Linux ядросу v2003га толугу менен кирген.

LSM алкагы маалымат структураларындагы күзөт талааларын жана аларды башкаруу жана кирүү мүмкүнчүлүгүн көзөмөлдөө үчүн ядро ​​кодунун критикалык пункттарында кармап калуу функцияларына чакырууларды камтыйт. Ал ошондой эле коопсуздук модулдарын каттоо үчүн функцияларды кошот. /sys/kernel/security/lsm интерфейси системадагы активдүү модулдардын тизмесин камтыйт. LSM илгичтери CONFIG_LSMде көрсөтүлгөн тартипте чакырылган тизмелерде сакталат. Илгичтер боюнча деталдуу документтер include/linux/lsm_hooks.h баш файлында камтылган.

LSM подсистемасы SELinuxтун туруктуу Linux ядросунун v2.6 бир эле версиясы менен толук интеграциясын аяктоого мүмкүндүк берди. Дээрлик ошол замат SELinux коопсуз Linux чөйрөсү үчүн де-факто стандарты болуп калды жана эң популярдуу дистрибуцияларга кирди: RedHat Enterprise Linux, Fedora, Debian, Ubuntu.

SELinux Глоссарий

  • Identity — SELinux колдонуучусу кадимки Unix/Linux колдонуучу идентификаторуна окшош эмес; алар бир системада чогуу жашай алышат, бирок маңызы боюнча таптакыр башкача. Ар бир стандарттуу Linux каттоо эсеби SELinux ичинде бир же бир нечесине туура келиши мүмкүн. SELinux идентификациясы жалпы коопсуздук контекстинин бир бөлүгү болуп саналат, ал сиз кайсы домендерге кошула аларыңызды жана кошула албасыңызды аныктайт.
  • Домендер - SELinuxта домен бул субъекттин, б.а. процесстин аткаруу контексти. Домен процесстин кирүү мүмкүнчүлүгүн түздөн-түз аныктайт. Домен - бул процесстер эмнелерди кыла аларын же процесстин ар кандай түрлөрү менен эмне кыла аларын тизмеси. Домендердин кээ бир мисалдары тутумдук башкаруу үчүн sysadm_t жана колдонуучунун кадимки артыкчылыктуу домени болгон user_t. Init системасы init_t доменинде иштейт, ал эми аталган процесс named_t доменинде иштейт.
  • ролу — Домендер менен SELinux колдонуучуларынын ортосунда ортомчу болуп кызмат кылат. Ролдор колдонуучу кайсы домендерге таандык боло аларын жана объекттердин кандай түрлөрүнө кире аларын аныктайт. Бул кирүүнү башкаруу механизми артыкчылыктарды кеңейтүү чабуулдарынын коркунучун алдын алат. Ролдор SELinuxта колдонулган Role Based Access Control (RBAC) коопсуздук моделине жазылган.
  • түрлөрү — Объектке ыйгарылган жана ага кире аларын аныктаган Type Enforcement тизмеси атрибуту. Домендин аныктамасына окшош, домен процесске, ал эми түрү каталогдор, файлдар, розеткалар ж.б.у.с. сыяктуу объекттерге колдонулат.
  • Субъекттер жана объекттер - Процесстер субъект болуп саналат жана белгилүү бир контекстте же коопсуздук доменинде иштейт. Операциялык системанын ресурстары: файлдар, каталогдор, розеткалар ж.
  • SELinux саясаттары — SELinux системаны коргоо үчүн ар кандай саясаттарды колдонот. SELinux саясаты колдонуучулардын ролдорго, ролдордон домендерге жана домендерден типтерге кирүү мүмкүнчүлүгүн аныктайт. Биринчиден, колдонуучу роль алууга укуктуу, андан кийин ролго домендерге кирүү укугу берилет. Акыр-аягы, домен объектилердин айрым түрлөрүнө гана кире алат.

LSM жана SELinux архитектурасы

Атына карабастан, LSMs көбүнчө жүктөөчү Linux модулдары эмес. Бирок, SELinux сыяктуу, ал түздөн-түз ядрого интеграцияланган. LSM булак кодуна ар кандай өзгөртүү жаңы ядро ​​компиляциясын талап кылат. Тиешелүү опция ядро ​​орнотууларында иштетилиши керек, антпесе LSM коду жүктөлгөндөн кийин иштетилбейт. Бирок бул учурда да, аны OS жүктөөчү опциясы иштетсе болот.

Linux коопсуздук системалары
LSM текшерүү стек

LSM негизги ядро ​​функцияларындагы илгичтер менен жабдылган, алар текшерүүлөр үчүн актуалдуу болушу мүмкүн. LSMлердин негизги өзгөчөлүктөрүнүн бири - алардын тизилгендиги. Ошентип, стандарттык текшерүүлөр дагы эле аткарылып, LSMдин ар бир катмары кошумча башкаруу элементтерин жана башкаруу элементтерин гана кошот. Бул тыюуну артка кайтарууга болбойт дегенди билдирет. Бул сүрөттө көрсөтүлгөн; эгерде күнүмдүк DAC текшерүүлөрүнүн натыйжасы ийгиликсиз болсо, анда маселе LSM илгичтерине да жетпей калат.

SELinux Fluke изилдөө операциялык тутумунун Flask коопсуздук архитектурасын, атап айтканда, эң аз артыкчылык принцибин кабыл алат. Бул концепциянын маңызы, аты айтып тургандай, колдонуучуга же көздөлгөн аракеттерди ишке ашыруу үчүн зарыл болгон укуктарды гана иштетүүдө. Бул принцип мажбурлап кирүүнү терүүнүн жардамы менен ишке ашырылат, ошондуктан SELinuxта мүмкүндүктү башкаруу => типтеги домендин моделине негизделген.

Аргасыз кирүүнү терүүнүн аркасында, SELinux Unix/Linux операциялык тутумдарында колдонулган салттуу DAC моделине караганда бир топ чоң мүмкүнчүлүктөрдү башкаруу мүмкүнчүлүгүнө ээ. Мисалы, сиз ftp сервери туташа турган тармак портунун номерин чектеп, белгилүү бир папкадагы файлдарды жазууга жана өзгөртүүгө уруксат бере аласыз, бирок аларды жок кылбай.

SELinux негизги компоненттери болуп төмөнкүлөр саналат:

  • Саясатты аткаруу сервери — Кирууну башкарууну уюштуруунун негизги механизми.
  • Системанын коопсуздук саясатынын маалымат базасы.
  • LSM окуяны тосуучу менен өз ара аракеттенүү.
  • Selinuxfs - Pseudo-FS, /proc менен бирдей жана /sys/fs/selinux ичинде орнотулган. Иштөө убагында Linux ядросу тарабынан динамикалык түрдө толтурулган жана SELinux статусун камтыган файлдарды камтыган.
  • Вектор кэшине кирүү — Эмгек ендурумдуулугун жогорулатуунун жардамчы механизми.

Linux коопсуздук системалары
SELinux кантип иштейт

Мунун баары ушундай иштейт.

  1. Белгилүү бир субъект, SELinux терминдеринде, жогорку сүрөттө көрсөтүлгөндөй, DAC текшерүүсүнөн кийин объектке уруксат берилген аракетти аткарат. Операцияны аткаруу үчүн бул сурам LSM окуясын тосуучуга барат.
  2. Ал жерден сурам, предмет жана объект коопсуздук контексти менен бирге LSM менен өз ара аракеттенүү үчүн жооптуу SELinux абстракция жана Hook Logic модулуна өтөт.
  3. Субъекттин объектиге кирүү мүмкүнчүлүгү боюнча чечим кабыл алуу органы саясатты аткаруу сервери болуп саналат жана ал SELinux AnHLден маалыматтарды алат.
  4. Кирүү же баш тартуу жөнүндө чечим кабыл алуу үчүн, Саясаттарды аткаруу сервери эң көп колдонулган эрежелер үчүн Access Vector Cache (AVC) кэштөө подсистемасына кайрылат.
  5. Тиешелүү эреженин чечими кэште табылбаса, анда сурам коопсуздук саясатынын маалымат базасына өткөрүлүп берилет.
  6. Маалыматтар базасынан жана AVCден издөө натыйжасы Саясаттын аткарылышы серверине кайтарылат.
  7. Табылган саясат суралган аракетке дал келсе, операцияга уруксат берилет. Болбосо, операцияга тыюу салынат.

SELinux Орнотууларын башкаруу

SELinux үч режимдин биринде иштейт:

  • Күчтүү - коопсуздук саясатын катуу сактоо.
  • Уруксат берүүчү - чектөөлөрдү бузууга жол берилет, журналга тиешелүү белги коюлат.
  • Өчүрүлгөн — Коопсуздук саясаттары иштебейт.

Сиз төмөнкү буйрук менен SELinux кандай режимде экенин көрө аласыз.

[admin@server ~]$ getenforce
Permissive

Кайра жүктөөдөн мурун режимди өзгөртүү, мисалы, аны аткарууга коюу же 1. Уруксат берүүчү параметр 0 сандык кодуна туура келет.

[admin@server ~]$ setenfoce enforcing
[admin@server ~]$ setenfoce 1 #то же самое

Сиз ошондой эле файлды түзөтүү менен режимди өзгөртө аласыз:

[admin@server ~]$ cat /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.

SELINUXTYPE=максат

setenfoce менен айырмачылык, операциялык система жүктөлгөндө, SELinux режими конфигурация файлындагы SELINUX параметринин маанисине ылайык орнотулат. Кошумчалай кетсек, <=> өчүрүлгөн күчтөргө өзгөртүүлөр /etc/selinux/config файлын түзөтүү жана кайра жүктөөдөн кийин гана күчүнө кирет.

Кыскача абал отчетун көрүү:

[admin@server ~]$ sestatus

SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: permissive
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 31

SELinux атрибуттарын көрүү үчүн кээ бир стандарттык утилиталар -Z параметрин колдонушат.

[admin@server ~]$ ls -lZ /var/log/httpd/
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20200920
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20200927
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20201004
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20201011
[admin@server ~]$ ps -u apache -Z
LABEL                             PID TTY          TIME CMD
system_u:system_r:httpd_t:s0     2914 ?        00:00:04 httpd
system_u:system_r:httpd_t:s0     2915 ?        00:00:00 httpd
system_u:system_r:httpd_t:s0     2916 ?        00:00:00 httpd
system_u:system_r:httpd_t:s0     2917 ?        00:00:00 httpd
...
system_u:system_r:httpd_t:s0     2918 ?        00:00:00 httpd

ls -l нормалдуу чыгышына салыштырмалуу, төмөнкү форматта бир нече кошумча талаалар бар:

<user>:<role>:<type>:<level>

Акыркы талаа коопсуздук классификациясы сыяктуу нерсени билдирет жана эки элементтин айкалышынан турат:

  • s0 - маани, ошондой эле төмөнкү-жогорку деңгээл интервалы катары жазылат
  • c0, c1… c1023 - категория.

Кирүү конфигурациясын өзгөртүү

SELinux модулдарын жүктөө, кошуу жана алып салуу үчүн semodule колдонуңуз.

[admin@server ~]$ semodule -l |wc -l #список всех модулей
408
[admin@server ~]$ semodule -e abrt #enable - активировать модуль
[admin@server ~]$ semodule -d accountsd #disable - отключить модуль
[admin@server ~]$ semodule -r avahi #remove - удалить модуль

Биринчи команда semanage логин SELinux колдонуучусун иштетүү тутумунун колдонуучусуна туташтырат, экинчиси тизмени көрсөтөт. Акыр-аягы, -r которуштуруусу менен акыркы буйрук SELinux колдонуучуларынын OS эсептерине картографиясын жок кылат. MLS/MCS диапазонунун маанилеринин синтаксисинин түшүндүрмөсү мурунку бөлүмдө.

[admin@server ~]$ semanage login -a -s user_u karol
[admin@server ~]$ semanage login -l

Login Name SELinux User MLS/MCS Range Service
__default__ unconfined_u s0-s0:c0.c1023 *
root unconfined_u s0-s0:c0.c1023 *
system_u system_u s0-s0:c0.c1023 *
[admin@server ~]$ semanage login -d karol

команда semanage колдонуучу SELinux колдонуучуларынын жана ролдорунун ортосундагы карталарды башкаруу үчүн колдонулат.

[admin@server ~]$ semanage user -l
                Labeling   MLS/       MLS/                          
SELinux User    Prefix     MCS Level  MCS Range             SELinux Roles
guest_u         user       s0         s0                    guest_r
staff_u         staff      s0         s0-s0:c0.c1023        staff_r sysadm_r
...
user_u          user       s0         s0                    user_r
xguest_u        user       s0         s0                    xguest_r
[admin@server ~]$ semanage user -a -R 'staff_r user_r'
[admin@server ~]$ semanage user -d test_u

Буйрук параметрлери:

  • - ыңгайлаштырылган ролдун картасын кошуу;
  • -л дал келген колдонуучулардын жана ролдордун тизмеси;
  • -d колдонуучунун ролунун картасын жок кылуу;
  • -R колдонуучуга тиркелген ролдордун тизмеси;

Файлдар, порттор жана логикалык маанилер

Ар бир SELinux модулу файлдарды белгилөө эрежелеринин топтомун камсыз кылат, бирок зарыл болсо, өз эрежелериңизди да кошо аласыз. Мисалы, биз веб-сервердин /srv/www папкасына кирүү укугуна ээ болушун каалайбыз.

[admin@server ~]$ semanage fcontext -a -t httpd_sys_content_t "/srv/www(/.*)?
[admin@server ~]$ restorecon -R /srv/www/

Биринчи команда жаңы белгилөө эрежелерин каттайт, ал эми экинчиси файлдын түрлөрүн учурдагы эрежелерге ылайык баштапкы абалга келтирет, тагыраак айтканда.

Ошо сыяктуу эле, TCP/UDP порттору гана тиешелүү кызматтар аларды уга тургандай белгиленет. Мисалы, веб-сервер 8080 портун угушу үчүн, сиз буйрукту иштетишиңиз керек.

[admin@server ~]$ semanage port -m -t http_port_t -p tcp 8080

SELinux модулдарынын олуттуу саны логикалык маанилерди ала турган параметрлерге ээ. Мындай параметрлердин толук тизмесин getsebool -a колдонуу менен көрүүгө болот. Сиз setsebool менен логикалык маанилерди өзгөртө аласыз.

[admin@server ~]$ getsebool httpd_enable_cgi
httpd_enable_cgi --> on
[admin@server ~]$ setsebool -P httpd_enable_cgi off
[admin@server ~]$ getsebool httpd_enable_cgi
httpd_enable_homedirs --> off

Семинар, Pgadmin-веб интерфейсине мүмкүнчүлүк алыңыз

Келгиле, практикалык мисалды карап көрөлү: биз PostgreSQL маалымат базасын башкаруу үчүн RHEL 7.6га pgadmin4-web орноттук. Бир аз бастык изденүү pg_hba.conf, postgresql.conf жана config_local.py жөндөөлөрү менен папка уруксаттарын коюп, пиптен жетишпеген Python модулдарын орнотуңуз. Баары даяр, ишке киргизебиз жана кабыл алабыз 500 Ички сервер катасы.

Linux коопсуздук системалары

Биз /var/log/httpd/error_log текшерип, типтүү шектүүлөрдөн баштайбыз. Ал жерде кызыктуу жазуулар бар.

[timestamp] [core:notice] [pid 23689] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0
...
[timestamp] [wsgi:error] [pid 23690] [Errno 13] Permission denied: '/var/lib/pgadmin'
[timestamp] [wsgi:error] [pid 23690] [timestamp] [wsgi:error] [pid 23690] HINT : You may need to manually set the permissions on
[timestamp] [wsgi:error] [pid 23690] /var/lib/pgadmin to allow apache to write to it.

Бул учурда, көпчүлүк Linux администраторлору setencorce 0 иштетүүгө катуу азгырылып, ушуну менен бүтөт. Чынын айтсам, мен биринчи жолу ушундай кылдым. Бул, албетте, чыгуунун жолу, бирок эң жакшыдан алыс.

Оңой дизайнга карабастан, SELinux колдонуучуга ыңгайлуу болот. Жөн гана орнотуулар топтомун орнотуп, тутум журналын көрүңүз.

[admin@server ~]$ yum install setroubleshoot
[admin@server ~]$ journalctl -b -0
[admin@server ~]$ service restart auditd

Сураныч, ОСте systemd бар болгонуна карабастан, текшерүү кызматы systemctl колдонбостон, ушундай жол менен кайра иштетилиши керек экенин эске алыңыз. Системанын журналында көрсөтүлөт блоктоо фактысы гана эмес, ошондой эле себеби жана тыюуну жеңүү жолу.

Linux коопсуздук системалары

Биз бул буйруктарды аткарабыз:

[admin@server ~]$ setsebool -P httpd_can_network_connect 1
[admin@server ~]$ setsebool -P httpd_can_network_connect_db 1

Биз pgadmin4-веб баракчасына кирүүнү текшеребиз, баары иштейт.

Linux коопсуздук системалары

Linux коопсуздук системалары

Source: www.habr.com

Комментарий кошуу