Руководство для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… ΠΏΠΎ SELinux

Руководство для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… ΠΏΠΎ SELinux

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½ для студСнтов курса Β«Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ LinuxΒ»

SELinux ΠΈΠ»ΠΈ Security Enhanced Linux β€” это ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ управлСния доступом, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ АгСнтством Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ бСзопасности БША (АНБ БША) для прСдотвращСния Π·Π»ΠΎΠ½Π°ΠΌΠ΅Ρ€Π΅Π½Π½Ρ‹Ρ… Π²Ρ‚ΠΎΡ€ΠΆΠ΅Π½ΠΈΠΉ. Он Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ (ΠΈΠ»ΠΈ ΠΌΠ°Π½Π΄Π°Ρ‚Π½ΡƒΡŽ) модСль управлСния доступом (Π°Π½Π³Π». Mandatory Access Control, MAC) ΠΏΠΎΠ²Π΅Ρ€Ρ… ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ дискрСционной (ΠΈΠ»ΠΈ ΠΈΠ·Π±ΠΈΡ€Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ) ΠΌΠΎΠ΄Π΅Π»ΠΈ (Π°Π½Π³Π». Discretionary Access Control, DAC), Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, запись, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅.

Π£ SELinux Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ Ρ€Π΅ΠΆΠΈΠΌΠ°:

  1. Enforcing β€” Π·Π°ΠΏΡ€Π΅Ρ‚ доступа Π½Π° основании ΠΏΡ€Π°Π²ΠΈΠ» ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ.
  2. Permissive β€” Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π»ΠΎΠ³Π° дСйствий, Π½Π°Ρ€ΡƒΡˆΠ°ΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ enforcing Π±Ρ‹Π»ΠΈ Π±Ρ‹ Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Ρ‹.
  3. Disabled β€” ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ SELinux.

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ настройки находятся Π² /etc/selinux/config

ИзмСнСниС Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² SELinux

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ€Π΅ΠΆΠΈΠΌ запуститС

$ getenforce

Для измСнСния Ρ€Π΅ΠΆΠΈΠΌΠ° Π½Π° permissive запуститС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ

$ setenforce 0

ΠΈΠ»ΠΈ, для измСнСния Ρ€Π΅ΠΆΠΈΠΌΠ° с permissive Π½Π° enforcing, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅

$ setenforce 1

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ SELinux, Ρ‚ΠΎ это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ€Π΅Π· Ρ„Π°ΠΉΠ» ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ

$ vi /etc/selinux/config

Для ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ SELINUX ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

SELINUX=disabled

Настройка SELinux

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΈ процСсс помСчаСтся контСкстом SELinux, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ содСрТится Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ информация, такая ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ, Ρ€ΠΎΠ»ΡŒ, Ρ‚ΠΈΠΏ ΠΈ Ρ‚.Π΄. Если Π²Ρ‹ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚Π΅ SELinux, Ρ‚ΠΎ сначала Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ контСкст ΠΈ ΠΌΠ΅Ρ‚ΠΊΠΈ. ΠŸΡ€ΠΎΡ†Π΅ΡΡ назначСния ΠΌΠ΅Ρ‚ΠΎΠΊ ΠΈ контСкста извСстСн ΠΊΠ°ΠΊ ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ, Π² Ρ„Π°ΠΉΠ»Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ Ρ€Π΅ΠΆΠΈΠΌ Π½Π° permissive.

$ vi /etc/selinux/config
SELINUX=permissive

ПослС установки Ρ€Π΅ΠΆΠΈΠΌΠ° permissive, создадим Π² ΠΊΠΎΡ€Π½Π΅ пустой скрытый Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ autorelabel

$ touch /.autorelabel

ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€

$ init 6

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ€Π΅ΠΆΠΈΠΌ permissive для ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ использованиС Ρ€Π΅ΠΆΠΈΠΌΠ° enforcing ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΊΡ€Π°Ρ…Ρƒ систСмы Π²ΠΎ врСмя ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ.

НС Π±Π΅ΡΠΏΠΎΠΊΠΎΠΉΡ‚Π΅ΡΡŒ, Ссли Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° застрянСт Π½Π° ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ Ρ„Π°ΠΉΠ»Π΅, ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя. ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ вашСй систСмы Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ€Π΅ΠΆΠΈΠΌ enforcing, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ:

$ setenforce 1

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ SELinux Π½Π° своСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅.

ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠΌ Π»ΠΎΠ³ΠΈ

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρƒ вас Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ ошибки Π²ΠΎ врСмя ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈΠ»ΠΈ Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ систСмы. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π»ΠΈ ваш SELinux ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈ Π½Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ Π»ΠΈ ΠΎΠ½ доступ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ-Π»ΠΈΠ±ΠΎ ΠΏΠΎΡ€Ρ‚Ρƒ, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ ΠΈ Ρ‚. Π΄. Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π»ΠΎΠ³ΠΈ. Π›ΠΎΠ³ SELinux находится Π² /var/log/audit/audit.log, Π½ΠΎ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ ошибки. МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ audit2why для поиска ошибок. ЗапуститС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

$ audit2why < /var/log/audit/audit.log

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ список ошибок. Если ошибок Π² Π»ΠΎΠ³Π΅ Π½Π΅ Π±Ρ‹Π»ΠΎ, Ρ‚ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… сообщСний ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚.

Настройка ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ SELinux

ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° SELinux β€” это Π½Π°Π±ΠΎΡ€ ΠΏΡ€Π°Π²ΠΈΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ руководствуСтся ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ бСзопасности SELinux. ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° опрСдСляСт Π½Π°Π±ΠΎΡ€ ΠΏΡ€Π°Π²ΠΈΠ» для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ окруТСния. БСйчас ΠΌΡ‹ ΠΈΠ·ΡƒΡ‡ΠΈΠΌ ΠΊΠ°ΠΊ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ доступ ΠΊ Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Π½Ρ‹ΠΌ сСрвисам.

1. ЛогичСскиС значСния (ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΠΈ)

ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΠΈ (booleans) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ части ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π±Π΅Π· нСобходимости создания Π½ΠΎΠ²Ρ‹Ρ… ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ. Они ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Π½ΠΎΡΠΈΡ‚ΡŒ измСнСния Π±Π΅Π· ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠ»ΠΈ пСрСкомпиляции ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ SELinux.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€
ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ доступ ΠΊ Π΄ΠΎΠΌΠ°ΡˆΠ½Π΅ΠΌΡƒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΏΠΎ FTP Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ запись, ΠΈ ΠΌΡ‹ ΡƒΠΆΠ΅ Ρ€Π°ΡΡˆΠ°Ρ€ΠΈΠ»ΠΈ Π΅Π³ΠΎ, Π½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ доступа ΠΌΡ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π²ΠΈΠ΄ΠΈΠΌ. Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° SELinux Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ FTP-сСрвСру Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² домашнСм ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Нам Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ FTP-сСрвСр ΠΌΠΎΠ³ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ домашним ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°ΠΌ. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, Π΅ΡΡ‚ΡŒ Π»ΠΈ для этого ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΠΈ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ²

$ semanage boolean -l

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° выдаст список доступных ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Π΅ΠΉ с ΠΈΡ… Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ состояниСм (Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ/on ΠΈΠ»ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ/off) ΠΈ описаниСм. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡ‚ΠΎΡ‡Π½ΠΈΡ‚ΡŒ поиск, Π΄ΠΎΠ±Π°Π²ΠΈΠ² grep, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, относящиСся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ftp:

$ semanage boolean -l | grep ftp

ΠΈ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅

ftp_home_dir        -> off       Allow ftp to read & write file in user home directory

Π­Ρ‚ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½, поэтому ΠΌΡ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΠΌ Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ setsebool $ setsebool ftp_home_dir on

Π’Π΅ΠΏΠ΅Ρ€ΡŒ наш ftp-Π΄Π΅ΠΌΠΎΠ½ смоТСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π΄ΠΎΠΌΠ°ΡˆΠ½Π΅ΠΌΡƒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.
ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список доступных ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Π΅ΠΉ Π±Π΅Π· описания, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² getsebool -a

2. ΠœΠ΅Ρ‚ΠΊΠΈ ΠΈ контСкст

Π­Ρ‚ΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнный способ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ SELinux. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΏΠ°ΠΏΠΊΠ°, процСсс ΠΈ ΠΏΠΎΡ€Ρ‚ ΠΏΠΎΠΌΠ΅Ρ‡Π°ΡŽΡ‚ΡΡ контСкстом SELinux:

  • Для Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΏΠ°ΠΏΠΎΠΊ ΠΌΠ΅Ρ‚ΠΊΠΈ хранятся ΠΊΠ°ΠΊ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ просмотрСны ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:
    $ ls -Z /etc/httpd
  • Для процСссов ΠΈ ΠΏΠΎΡ€Ρ‚ΠΎΠ² ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ управляСт ядро, ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ эти ΠΌΠ΅Ρ‚ΠΊΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

процСсс

$ ps –auxZ | grep httpd

ΠΏΠΎΡ€Ρ‚

$ netstat -anpZ | grep httpd

ΠŸΡ€ΠΈΠΌΠ΅Ρ€
Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΈ контСкст. Допустим, Ρƒ нас Π΅ΡΡ‚ΡŒ Π²Π΅Π±-сСрвСр, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вмСсто ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° /var/www/html/ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ /home/dan/html/. SELinux сочтСт это Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ, ΠΈ Π²Ρ‹ Π½Π΅ смоТСтС ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ваши Π²Π΅Π±-страницы. Π­Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ установили контСкст бСзопасности, связанный с HTML-Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ. Для просмотра контСкста бСзопасности ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

$ ls –lz /var/www/html
 -rw-rβ€”rβ€”. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ httpd_sys_content_t Π² качСствС контСкста для html-Ρ„Π°ΠΉΠ»ΠΎΠ². Нам Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ этот контСкст бСзопасности для нашСго Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сСйчас ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ контСкст:

-rw-rβ€”rβ€”. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/

ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ контСкста бСзопасности Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°:

$ semanage fcontext -l | grep '/var/www'

ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ semanage для измСнСния контСкста, послС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π½Π°ΠΉΠ΄Π΅ΠΌ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ контСкст бСзопасности. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ контСкст /home/dan/html, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

$ semanage fcontext -a -t httpd_sys_content_t β€˜/home/dan/html(/.*)?’
$ semanage fcontext -l | grep β€˜/home/dan/html’
/home/dan/html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
$ restorecon -Rv /home/dan/html

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ контСкст ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ semanage, ΠΊΠΎΠΌΠ°Π½Π΄Π° restorecon Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ контСкст ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ². Наш Π²Π΅Π±-сСрвСр Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ смоТСт Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· ΠΏΠ°ΠΏΠΊΠΈ /home/dan/html, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ контСкст бСзопасности для этой ΠΏΠ°ΠΏΠΊΠΈ Π±Ρ‹Π» ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ Π½Π° httpd_sys_content_t.

3. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ

ΠœΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ситуации, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ бСсполСзны для вас, ΠΈ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ ошибки (avc/denial) Π² audit.log. Когда Ρ‚Π°ΠΊΠΎΠ΅ происходит, Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ (Local policy). ВсС ошибки Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ audit2why, ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΎ описано Π²Ρ‹ΡˆΠ΅.

Для устранСния ошибок ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ. НапримСр, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΡΠ²ΡΠ·Π°Π½Π½ΡƒΡŽ с httpd (apache) ΠΈΠ»ΠΈ smbd (samba), ΠΌΡ‹ grep’аСм ошибки ΠΈ создаСм для Π½ΠΈΡ… ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ:

apache
$ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy
samba
$ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policy

Π—Π΄Π΅ΡΡŒ http_policy ΠΈ smb_policy β€” это названия Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ создали. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ эти созданныС Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π² Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ SELinux. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

$ semodule –I http_policy.pp
$ semodule –I smb_policy.pp

Наши Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π±Ρ‹Π»ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Ρ‹, ΠΈ ΠΌΡ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ большС ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… avc ΠΈΠ»ΠΈ denail Π² audit.log.

Π­Ρ‚ΠΎ Π±Ρ‹Π»Π° моя ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π²Π°ΠΌ ΠΏΠΎΠ½ΡΡ‚ΡŒ SELinux. Π― надСюсь, Ρ‡Ρ‚ΠΎ послС прочтСния этой ΡΡ‚Π°Ρ‚ΡŒΠΈ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ сСбя с SELinux Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΡ„ΠΎΡ€Ρ‚Π½ΠΎ.

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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ