БистСмы Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Linux

Одна ΠΈΠ· ΠΏΡ€ΠΈΡ‡ΠΈΠ½ Π³Ρ€Π°Π½Π΄ΠΈΠΎΠ·Π½ΠΎΠ³ΠΎ успСха Linux ОБ Π½Π° встроСнных, ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… устройствах ΠΈ сСрвСрах состоит Π² достаточно высокой стСпСни бСзопасности ядра, ΡΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… слуТб ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Но Ссли ΠΏΡ€ΠΈΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒΡΡ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ ядра Linux, Ρ‚ΠΎ нСльзя Π² Π½Π΅ΠΌ Π½Π°ΠΉΡ‚ΠΈ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΈΠΊ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ, ΠΊΠ°ΠΊ Ρ‚Π°ΠΊΠΎΠ²ΡƒΡŽ. Π“Π΄Π΅ ΠΆΠ΅ прячСтся подсистСма бСзопасности Linux ΠΈ ΠΈΠ· Ρ‡Π΅Π³ΠΎ ΠΎΠ½Π° состоит?

ΠŸΡ€Π΅Π΄Ρ‹ΡΡ‚ΠΎΡ€ΠΈΡ Linux Security Modules ΠΈ SELinux

Security Enhanced Linux прСдставляСт собой Π½Π°Π±ΠΎΡ€ ΠΏΡ€Π°Π²ΠΈΠ» ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ доступа, основанный Π½Π° модСлях ΠΌΠ°Π½Π΄Π°Ρ‚Π½ΠΎΠ³ΠΎ ΠΈ Ρ€ΠΎΠ»Π΅Π²ΠΎΠ³ΠΎ доступа, для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ систСм Linux ΠΎΡ‚ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΡƒΠ³Ρ€ΠΎΠ· ΠΈ исправлСния нСдостатков Discretionary Access Control (DAC) β€” Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы бСзопасности Unix. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ зародился Π² Π½Π΅Π΄Ρ€Π°Ρ… АгСнтства ΠΠ°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ БСзопасности БША, нСпосрСдствСнно Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ занимались, Π² основном, подрядчики Secure Computing Corporation ΠΈ MITRE, Π° Ρ‚Π°ΠΊΠΆΠ΅ ряд ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΈΠΉ.

БистСмы Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Linux
Linux Security Modules

Линус Π’ΠΎΡ€Π²Π°Π»ΡŒΠ΄Ρ внСс ряд Π·Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠΉ ΠΎ Π½ΠΎΠ²Ρ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ… АНБ, с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ ядра Linux. Он описал ΠΎΠ±Ρ‰ΡƒΡŽ срСду, с Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ² для управлСния опСрациями с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΈ Π½Π°Π±ΠΎΡ€ΠΎΠΌ Π½Π΅ΠΊΠΈΡ… Π·Π°Ρ‰ΠΈΡ‚Π½Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ Π² структурах Π΄Π°Π½Π½Ρ‹Ρ… ядра для хранСния ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ². Π—Π°Ρ‚Π΅ΠΌ эта срСда ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹ΠΌΠΈ модулями ядра для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ любой ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ бСзопасности. LSM ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎ вошСл Π² ядро Linux v2.6 Π² 2003 Π³ΠΎΠ΄Ρƒ.

Π€Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ 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

  • Π˜Π΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ β€” ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ SELinux Π½Π΅ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹ΠΉ Unix/Linux user id, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ систСмС, Π½ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ ΠΏΠΎ сути. КаТдая стандартная учСтная запись Linux ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ»ΠΈ нСскольким Π² SELinux. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ SELinux являСтся составной Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΎΠ±Ρ‰Π΅Π³ΠΎ контСкста бСзопасности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСт Π² ΠΊΠ°ΠΊΠΈΠ΅ Π΄ΠΎΠΌΠ΅Π½Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ, Π° Π² ΠΊΠ°ΠΊΠΈΠ΅ β€” нСльзя.
  • Π”ΠΎΠΌΠ΅Π½Ρ‹ β€” Π’ SELinux Π΄ΠΎΠΌΠ΅Π½ являСтся контСкстом выполнСния ΡΡƒΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‚. Π΅. процСсса. Π”ΠΎΠΌΠ΅Π½ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ опрСдСляСт доступ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ процСсс. Π”ΠΎΠΌΠ΅Π½ β€” это Π² основном список Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ процСссы ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ дСйствия процСсс ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ. НСкоторыС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π΄ΠΎΠΌΠ΅Π½ΠΎΠ²: sysadm_t для систСмного администрирования, ΠΈ user_t, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ Π½Π΅ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ Π΄ΠΎΠΌΠ΅Π½ΠΎΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. БистСма ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ init запускаСтся Π² Π΄ΠΎΠΌΠ΅Π½Π΅ init_t, Π° процСсс named запускаСтся Π² Π΄ΠΎΠΌΠ΅Π½Π΅ named_t.
  • Π ΠΎΠ»ΠΈ β€” Π’ΠΎ, Ρ‡Ρ‚ΠΎ слуТит посрСдником ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄ΠΎΠΌΠ΅Π½Π°ΠΌΠΈ ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ SELinux. Π ΠΎΠ»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚, Π² ΠΊΠ°ΠΊΠΈΡ… Π΄ΠΎΠΌΠ΅Π½Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΈ ΠΊ ΠΊΠ°ΠΊΠΈΠΌ Ρ‚ΠΈΠΏΠ°ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΎΠ½ смоТСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ разграничСния доступов ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠ³Ρ€ΠΎΠ·Ρƒ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ Π°Ρ‚Π°ΠΊΡƒ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ. Π ΠΎΠ»ΠΈ вписаны Π² модСль бСзопасности Role Based Access Control (RBAC), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π² SELinux.
  • Π’ΠΈΠΏΡ‹ β€” Атрибут списка Type Enforcement, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ назначаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ ΠΈ опрСдСляСт, ΠΊΡ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ ΠΊ Π½Π΅ΠΌΡƒ доступ. ΠŸΠΎΡ…ΠΎΠΆΠ΅ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΌΠ΅Π½Π°, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠΌΠ΅Π½ примСняСтся ΠΊ процСссу, Π° Ρ‚ΠΈΠΏ примСняСтся ΠΊ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ, ΠΊΠ°ΠΊ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ, Ρ„Π°ΠΉΠ»Ρ‹, сокСты ΠΈ Ρ‚. Π΄.
  • Π‘ΡƒΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ β€” ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡΡƒΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ контСкстС, ΠΈΠ»ΠΈ Π΄ΠΎΠΌΠ΅Π½Π΅ бСзопасности. РСсурсы ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы: Ρ„Π°ΠΉΠ»Ρ‹, Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, сокСты ΠΈ ΠΏΡ€., ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ставится Π² соотвСтствиС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ, ΠΈΠ½Π°Ρ‡Π΅ говоря β€” ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ сСкрСтности.
  • ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ SELinux β€” Для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ систСмы SELinux ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ. ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° SELinux опрСдСляСт доступ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΊ ролям, Ρ€ΠΎΠ»Π΅ΠΉ β€” ΠΊ Π΄ΠΎΠΌΠ΅Π½Π°ΠΌ ΠΈ Π΄ΠΎΠΌΠ΅Π½ΠΎΠ² β€” ΠΊ Ρ‚ΠΈΠΏΠ°ΠΌ. Π’ Π½Π°Ρ‡Π°Π»Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ авторизуСтся для получСния Ρ€ΠΎΠ»ΠΈ, Π΄Π°Π»Π΅Π΅ Ρ€ΠΎΠ»ΡŒ авторизуСтся для доступа ΠΊ Π΄ΠΎΠΌΠ΅Π½Π°ΠΌ. НаконСц Π΄ΠΎΠΌΠ΅Π½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ доступ лишь ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Ρ‚ΠΈΠΏΠ°ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

LSM ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° SELinux

НСсмотря Π½Π° Π½Π°Π·Π²Π°Π½ΠΈΠ΅ LSM Π² ΠΎΠ±Ρ‰Π΅ΠΌ-Ρ‚ΠΎ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹ΠΌΠΈ модулями Linux. Однако Ρ‚Π°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ SELinux, ΠΎΠ½ нСпосрСдствСнно ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ Π² ядро. Π›ΡŽΠ±ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ исходного ΠΊΠΎΠ΄Π° LSM Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π½ΠΎΠ²ΠΎΠΉ компиляции ядра. Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ опция Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π² настройках ядра, ΠΈΠ½Π°Ρ‡Π΅ ΠΊΠΎΠ΄ LSM Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½ послС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. Но Π΄Π°ΠΆΠ΅ Π² этом случаС Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΎΠΏΡ†ΠΈΠ΅ΠΉ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ° ОБ.

БистСмы Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Linux
Π‘Ρ‚Π΅ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ LSM

LSM оснащСн Ρ…ΡƒΠΊΠ°ΠΌΠΈ Π² основных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ядра, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π»Π΅Π²Π°Π½Ρ‚Π½Ρ‹ΠΌΠΈ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ. Одна ΠΈΠ· основных особСнностСй LSM состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ устроСны ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ стСка. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, стандартныС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ, ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ слой LSM лишь добавляСт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ элСмСнты управлСния ΠΈ контроля. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π·Π°ΠΏΡ€Π΅Ρ‚ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒ Π½Π°Π·Π°Π΄. Π­Ρ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рисункС, Ссли Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Ρ€ΡƒΡ‚ΠΈΠ½Π½Ρ‹Ρ… DAC ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ станСт ΠΎΡ‚ΠΊΠ°Π·, Ρ‚ΠΎ Π΄Π΅Π»ΠΎ Π΄Π°ΠΆΠ΅ Π½Π΅ Π΄ΠΎΠΉΠ΄Π΅Ρ‚ Π΄ΠΎ Ρ…ΡƒΠΊΠΎΠ² LSM.

SELinux пСрСнял Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ бСзопасности Flask ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Fluke, Π² частности ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π½Π°ΠΈΠΌΠ΅Π½ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ. Π‘ΡƒΡ‚ΡŒ этой ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, ΠΊΠ°ΠΊ слСдуСт ΠΈΡ… названия, Π² прСдоставлСнии ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΈΠ»ΠΈ процСссу лишь Ρ‚Π΅Ρ… ΠΏΡ€Π°Π², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ для осущСствлСния ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΡ‹Ρ… дСйствий. Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ доступа, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ допусков Π² SELinux базируСтся Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄ΠΎΠΌΠ΅Π½ => Ρ‚ΠΈΠΏ.

Благодаря ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ доступа SELinux ΠΈΠΌΠ΅Π΅Ρ‚ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ возмоТности ΠΏΠΎ Ρ€Π°Π·Π³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡŽ доступа, Π½Π΅ΠΆΠ΅Π»ΠΈ традиционная модСль DAC, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ Π² ОБ Unix/Linux. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€ сСтСвого ΠΏΠΎΡ€Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ftp сСрвСр, Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ запись ΠΈ измСнСния Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅, Π½ΠΎ Π½Π΅ ΠΈΡ… ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ SELinux Ρ‚Π°ΠΊΠΎΠ²Ρ‹:

  • Policy Enforcement Server β€” Основной ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ контроля доступа.
  • Π‘Π” ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ бСзопасности систСмы.
  • ВзаимодСйствиС с ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠΌ событий LSM.
  • Selinuxfs β€” ПсСвдо-Π€Π‘, такая ΠΆΠ΅, ΠΊΠ°ΠΊ /proc ΠΈ примонтированная Π² /sys/fs/selinux. ДинамичСски заполняСтся ядром Linux Π²ΠΎ врСмя выполнСния ΠΈ содСрТит Ρ„Π°ΠΉΠ»Ρ‹, содСрТащиС свСдСния ΠΎ статусС SELinux.
  • Access Vector Cache β€” Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

БистСмы Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Linux
Π‘Ρ…Π΅ΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ SELinux

ВсС это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

  1. НСкий ΡΡƒΠ±ΡŠΠ΅ΠΊΡ‚, Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… SELinux, выполняСт Π½Π°Π΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½ΠΎΠ΅ дСйствиС послС DAC ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π΅ Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅. Π­Ρ‚ΠΎΡ‚ запрос Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ ΠΊ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‡ΠΈΠΊΡƒ событий LSM.
  2. ΠžΡ‚Ρ‚ΡƒΠ΄Π° запрос вмСстС с контСкстом бСзопасности ΡΡƒΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° пСрСдаСтся Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΡŒ SELinux Abstraction and Hook Logic, отвСтствСнный Π·Π° взаимодСйствиС с LSM.
  3. Π˜Π½ΡΡ‚Π°Π½Ρ†ΠΈΠ΅ΠΉ принятия Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΎ доступС ΡΡƒΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ являСтся Policy Enforcement Server ΠΈ ΠΊ Π½Π΅ΠΌΡƒ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΡ‚ SELinux AnHL.
  4. Для принятия Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΎ доступС, ΠΈΠ»ΠΈ Π·Π°ΠΏΡ€Π΅Ρ‚Π΅ Policy Enforcement Server обращаСтся ΠΊ подсистСмС ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΡ€Π°Π²ΠΈΠ» Access Vector Cache (AVC).
  5. Если Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ Π² кэшС, Ρ‚ΠΎ запрос пСрСдаСтся дальшС Π² Π‘Π” ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ бСзопасности.
  6. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ поиска ΠΈΠ· Π‘Π” ΠΈ AVC возвращаСтся Π² Policy Enforcement Server.
  7. Если найдСнная ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° согласуСтся с Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΌ дСйствиСм, Ρ‚ΠΎ опСрация Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС опСрация запрСщаСтся.

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ настройками SELinux

SELinux Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… Ρ€Π΅ΠΆΠΈΠΌΠΎΠ²:

  • Enforcing β€” Π‘Ρ‚Ρ€ΠΎΠ³ΠΎΠ΅ соблюдСниС ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ бСзопасности.
  • Permissive β€” ДопускаСтся Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ, Π² ΠΆΡƒΡ€Π½Π°Π»Π΅ дСлаСтся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ ΠΏΠΎΠΌΠ΅Ρ‚ΠΊΠ°.
  • Disabled β€” ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ бСзопасности Π½Π΅ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π² ΠΊΠ°ΠΊΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ находится SELinux ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ.

[admin@server ~]$ getenforce
Permissive

ИзмСнСниС Ρ€Π΅ΠΆΠΈΠΌΠ° Π΄ΠΎ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π½Π° enforcing, ΠΈΠ»ΠΈ 1. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ permissive соотвСтствуСт числовой ΠΊΠΎΠ΄ 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=targete

Π Π°Π·Π½ΠΈΡ†Π° с setenfoce Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ систСмы Ρ€Π΅ΠΆΠΈΠΌ SELinux Π±ΡƒΠ΄Π΅Ρ‚ выставлСн Π² соотвСтствии со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° SELINUX ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. Помимо Ρ‚ΠΎΠ³ΠΎ, измСнСния enforcing <=> disabled Π²ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ Π² силу Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€Π°Π²ΠΊΡƒ Ρ„Π°ΠΉΠ»Π° /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 β€” Π·Π½Π°Ρ‡ΠΈΠΌΠΎΡΡ‚ΡŒ, Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠΌ lowlevel-highlevel
  • c0, c1… c1023 β€” катСгория.

ИзмСнСниС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ доступов

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ semodule, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ SELinux, Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΈΡ….

[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 login связываСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ SELinux с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, вторая Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ список. НаконСц послСдняя ΠΊΠΎΠΌΠ°Π½Π΄Π° с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ -r удаляСт связку ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ SELinux Π½Π° ΡƒΡ‡Π΅Ρ‚Π½Ρ‹Π΅ записи ОБ. ОбъяснСниС синтаксиса Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ MLS/MCS Range находится Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅.

[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 user ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для управлСния ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ ΠΈ ролями 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

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

  • -a Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΡƒΡŽ запись соотвСтствия Ρ€ΠΎΠ»Π΅ΠΉ;
  • -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

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ, ΠΌΡ‹ установили Π½Π° RHEL 7.6 pgadmin4-web для администрирования Π‘Π” PostgreSQL. ΠœΡ‹ ΠΏΡ€ΠΎΡˆΠ»ΠΈ нСбольшой квСст с настройкой pg_hba.conf, postgresql.conf ΠΈ config_local.py, выставили ΠΏΡ€Π°Π²Π° Π½Π° ΠΏΠ°ΠΏΠΊΠΈ, установили ΠΈΠ· pip Π½Π΅Π΄ΠΎΡΡ‚Π°ΡŽΡ‰ΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Python. ВсС Π³ΠΎΡ‚ΠΎΠ²ΠΎ, запускаСм ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ 500 Internal Server error.

БистСмы Π·Π°Ρ‰ΠΈΡ‚Ρ‹ 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 ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ друТСствСнным ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ. Достаточно ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ setroubleshoot ΠΈ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ систСмный ΠΆΡƒΡ€Π½Π°Π».

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

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ сСрвис auditd Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ, Π° Π½Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ systemctl, нСсмотря Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ systemd Π² ОБ. Π’ систСмном ΠΆΡƒΡ€Π½Π°Π»Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Π½ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„Π°ΠΊΡ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° ΠΈ способ прСодолСния Π·Π°ΠΏΡ€Π΅Ρ‚Π°.

БистСмы Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Linux

ВыполняСм эти ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

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

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ доступ Π½Π° Π²Π΅Π± страницу pgadmin4-web, всё Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

БистСмы Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Linux

БистСмы Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Linux

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com