Системаҳои амнияти Linux

Яке аз сабабҳои муваффақияти бузурги OS Linux дар дастгоҳҳои дохилӣ, мобилӣ ва серверҳо ин дараҷаи хеле баланди амнияти ядро, хидматҳо ва замимаҳои алоқаманд аст. Аммо агар бодиккат назар кунед ба меъмории ядрои Linux, пас дар он як майдони масъули амниятро пайдо кардан ғайриимкон аст. Зерсистемаи амнияти Linux дар куҷо пинҳон аст ва он аз чӣ иборат аст?

Замина дар бораи модулҳои амнияти Linux ва SELinux

Security Enhanced Linux маҷмӯи қоидаҳо ва механизмҳои дастрасӣ дар асоси моделҳои ҳатмӣ ва нақшӣ барои ҳифзи системаҳои Linux аз таҳдидҳои эҳтимолӣ ва ислоҳи камбудиҳои Назорати дастрасии ихтиёрӣ (DAC), системаи анъанавии амнияти Unix мебошад. Лоиҳа дар сохторҳои Агентии Амнияти Миллии ИМА ба вуҷуд омада, бевосита аз ҷониби пудратчиёни Secure Computing Corporation ва MITER, инчунин як қатор лабораторияҳои тадқиқотӣ таҳия шудааст.

Системаҳои амнияти Linux
Модулҳои амнияти Linux

Линус Торвалдс дар бораи пешрафтҳои нави NSA як қатор шарҳҳо дод, то онҳо ба ядрои асосии Linux дохил карда шаванд. Ӯ муҳити умумиро бо маҷмӯи интерсепторҳо барои идоракунии амалиёт бо объектҳо ва маҷмӯи майдонҳои муайяни муҳофизатӣ дар сохторҳои додаҳои ядроӣ барои нигоҳ доштани атрибутҳои мувофиқ тавсиф кард. Пас аз он ин муҳит метавонад аз ҷониби модулҳои ядрои пурборшаванда барои татбиқи ҳама гуна модели амнияти дилхоҳ истифода шавад. LSM пурра ба ядрои Linux v2.6 дар соли 2003 ворид шуд.

Чаҳорчӯбаи LSM майдонҳои муҳофизатиро дар сохторҳои додаҳо дар бар мегирад ва зангҳо ба функсияҳои боздошт дар нуқтаҳои муҳими коди ядро ​​​​барои идора кардани онҳо ва иҷрои назорати дастрасӣ. Он инчунин функсияҳоро барои сабти модулҳои амниятӣ илова мекунад. Интерфейси /sys/kernel/security/lsm дорои рӯйхати модулҳои фаъоли система мебошад. Қалмоқҳои LSM дар рӯйхатҳое нигоҳ дошта мешаванд, ки бо тартиби дар CONFIG_LSM муайяншуда даъват карда мешаванд. Ҳуҷҷатҳои муфассал оид ба қалмоқҳо дар файли сарлавҳа дохил/linux/lsm_hooks.h.

Зерсистемаи LSM имкон дод, ки ҳамгироии пурраи SELinux бо ҳамон версияи ядрои устувори Linux v2.6 анҷом дода шавад. Қариб дарҳол, SELinux стандарти воқеии муҳити бехатари Linux гардид ва ба паҳнкунии маъмултарин дохил карда шуд: RedHat Enterprise Linux, Fedora, Debian, Ubuntu.

Луғати SELinux

  • Ҳайати шахсӣ — Истифодабарандаи SELinux бо идентификатсияи корбари маъмулии Unix/Linux яксон нест; онҳо метавонанд дар як система ҳамзистӣ кунанд, аммо дар асл комилан фарқ мекунанд. Ҳар як ҳисоби стандартии Linux метавонад ба як ё якчанд дар SELinux мувофиқат кунад. Шахсияти SELinux як қисми контексти умумии амният аст, ки муайян мекунад, ки кадом доменҳоро шумо метавонед ва ҳамроҳ карда наметавонед.
  • Доменҳо - Дар SELinux, домен контексти иҷрои субъект, яъне раванд аст. Домен бевосита дастрасии равандро муайян мекунад. Домен аслан номгӯи он аст, ки равандҳо чӣ кор карда метавонанд ё раванд бо намудҳои гуногун чӣ кор карда метавонад. Баъзе мисолҳои доменҳо sysadm_t барои маъмурияти система ва user_t, ки домени муқаррарии корбари ғайриимтиёзӣ мебошад. Системаи init дар домени init_t кор мекунад ва раванди номбаршуда дар домени name_t кор мекунад.
  • Нақшаҳо — Он чизе ки ҳамчун миёнарав байни доменҳо ва корбарони SELinux хизмат мекунад. Нақшҳо муайян мекунанд, ки корбар ба кадом доменҳо тааллуқ дошта метавонад ва ба кадом намуди объектҳо дастрасӣ пайдо карда метавонад. Ин механизми назорати дастрасӣ аз таҳдиди ҳамлаҳои густариши имтиёзҳо пешгирӣ мекунад. Нақшҳо дар модели бехатарии назорати дастрасӣ ба нақш (RBAC) навишта шудаанд, ки дар SELinux истифода мешаванд.
  • Намудҳо — Аттрибути рӯйхат оид ба намуди иҷроиш, ки ба объект таъин шудааст ва муайян мекунад, ки кӣ ба он дастрасӣ дорад. Монанд ба таърифи домен, ба истиснои он, ки домен ба раванд дахл дорад ва намуд ба объектҳо ба монанди директорияҳо, файлҳо, розеткаҳо ва ғайра дахл дорад.
  • Объектҳо ва объектҳо - Равандҳо субъектҳо мебошанд ва дар контексти мушаххас ё домени амниятӣ иҷро мешаванд. Захираҳои системаи амалиётӣ: файлҳо, директорияҳо, розеткаҳо ва ғайра объектҳое мебошанд, ки як навъи муайян, ба ибораи дигар, сатҳи махфият таъин карда мешаванд.
  • Сиёсати SELinux — SELinux барои ҳифзи система сиёсатҳои гуногунро истифода мебарад. Сиёсати SELinux дастрасии корбаронро ба нақшҳо, нақшҳо ба доменҳо ва доменҳоро ба намудҳо муайян мекунад. Аввалан, корбар барои гирифтани нақш ваколатдор аст, пас ин нақш барои дастрасӣ ба доменҳо иҷозат дода мешавад. Ниҳоят, домен метавонад танҳо ба намудҳои муайяни объектҳо дастрасӣ дошта бошад.

LSM ва меъмории SELinux

Сарфи назар аз ном, LSMҳо умуман модулҳои Linux-ро бор намекунанд. Аммо, ба монанди SELinux, он бевосита ба ядро ​​​​интегратсия шудааст. Ҳама гуна тағирот ба рамзи сарчашмаи LSM маҷмӯи нави ядроро талаб мекунад. Опсияи мувофиқ бояд дар танзимоти ядро ​​фаъол карда шавад, вагарна рамзи LSM пас аз боркунӣ фаъол карда намешавад. Аммо ҳатто дар ин ҳолат, он метавонад тавассути опсияи пурборкунандаи OS фаъол карда шавад.

Системаҳои амнияти Linux
Стеки санҷиши LSM

LSM бо қалмоқҳо дар функсияҳои асосии ядро ​​муҷаҳҳаз шудааст, ки метавонанд барои санҷиш мувофиқ бошанд. Яке аз хусусиятҳои асосии LSMҳо дар он аст, ки онҳо ҷамъ карда шудаанд. Ҳамин тариқ, санҷишҳои стандартӣ ҳоло ҳам иҷро мешаванд ва ҳар як қабати LSM танҳо назорат ва назорати иловагӣ илова мекунад. Ин маънои онро дорад, ки мамнӯъиятро бозпас гирифтан мумкин нест. Ин дар расм нишон дода шудааст; агар натиҷаи санҷишҳои муқаррарии DAC ноком бошад, пас масъала ҳатто ба қалмоқҳои LSM намерасад.

SELinux меъмории амнияти Flask-и системаи оператсионии тадқиқотии Fluke, бахусус принсипи имтиёзи камтаринро қабул мекунад. Моҳияти ин консепсия, чунон ки аз номаш бармеояд, додани он ба корбар ё коркард танҳо он ҳуқуқҳое мебошад, ки барои иҷрои амалҳои пешбинишуда заруранд. Ин принсип бо истифода аз чопкунии дастрасии маҷбурӣ амалӣ карда мешавад, аз ин рӯ назорати дастрасӣ дар SELinux ба модели навъи => домен асос ёфтааст.

Бо шарофати чопкунии дастрасии маҷбурӣ, SELinux дорои қобилиятҳои назорати дастрасӣ нисбат ба модели анъанавии DAC, ки дар системаҳои оператсионии Unix/Linux истифода мешавад, хеле бештар аст. Масалан, шумо метавонед рақами порти шабакаро, ки сервери ftp ба он пайваст мешавад, маҳдуд кунед, ба навиштан ва тағир додани файлҳо дар ҷузвдони муайян иҷозат диҳед, аммо онҳоро нест накунед.

Қисмҳои асосии SELinux инҳоянд:

  • Сервери иҷрои сиёсат — Механизми асосии ташкили назорати дастрасӣ.
  • Пойгоҳи сиёсати амнияти система.
  • Мулоқот бо интерсептори рӯйдодҳои LSM.
  • Selinuxfs - Pseudo-FS, ҳамон тавре ки /proc ва дар /sys/fs/selinux насб шудааст. Дар вақти кор бо ядрои Linux ба таври динамикӣ пур карда мешавад ва дорои файлҳои дорои маълумоти ҳолати SELinux.
  • Дастрасӣ ба кэши векторӣ — Механизми ёрирасони баланд бардоштани хосилнокии мехнат.

Системаҳои амнияти Linux
Чӣ тавр SELinux кор мекунад

Ҳамааш чунин кор мекунад.

  1. Субъекти муайян, бо истилоҳи SELinux, амалҳои иҷозатдодашударо дар объект пас аз санҷиши DAC иҷро мекунад, тавре ки дар расми боло нишон дода шудааст. Ин дархост барои иҷрои амалиёт ба интерсептори ҳодисаи LSM меравад.
  2. Аз он ҷо, дархост дар баробари контексти амнияти мавзӯъ ва объект ба модули SELinux Abstraction and Hook Logic интиқол дода мешавад, ки барои ҳамкорӣ бо LSM масъул аст.
  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 - удалить модуль

Дастаи якум воридшавиро идора кунед корбари SELinux-ро ба корбари системаи оператсионӣ мепайвандад, дуюм рӯйхатро намоиш медиҳад. Ниҳоят, фармони охирин бо гузариши -r харитасозии корбарони SELinux-ро ба ҳисобҳои ОС хориҷ мекунад. Шарҳи синтаксиси арзишҳои диапазони 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

Параметрҳои фармон:

  • - илова кардани вуруди харитасозии нақш;
  • -l рӯйхати корбарон ва нақшҳои мувофиқ;
  • -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-web

Биёед як мисоли амалиро бубинем: мо pgadmin7.6-web-ро дар RHEL 4 насб кардем, то базаи PostgreSQL-ро идора кунад. Мо каме пиёда рафтем ҷустуҷӯ бо танзимоти pg_hba.conf, postgresql.conf ва config_local.py, иҷозати ҷузвдонҳоро муқаррар кунед, модулҳои гумшудаи Pythonро аз pip насб кунед. Ҳама чиз омода аст, мо оғоз мекунем ва қабул мекунем 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

Манбаъ: will.com

Илова Эзоҳ