Π ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‰ΠΈ ΠΏΠΎ SELinux

Π ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ Π·Π° Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‰ΠΈ ΠΏΠΎ SELinux

ΠŸΡ€Π΅Π²ΠΎΠ΄ΡŠΡ‚ Π½Π° статията Π΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½ Π·Π° студСнти Π² курса β€žΠ‘ΠΈΠ³ΡƒΡ€Π½ΠΎΡΡ‚ Π½Π° Linuxβ€œ

SELinux ΠΈΠ»ΠΈ Security Enhanced Linux Π΅ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ°, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π΅Π½ ΠΎΡ‚ АгСнцията Π·Π° Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»Π½Π° сигурност Π½Π° БАЩ (NSA) с Ρ†Π΅Π» прСдотвратяванС Π½Π° Π·Π»ΠΎΠ½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈ Π°Ρ‚Π°ΠΊΠΈ. Π’ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π° ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»Π΅Π½ (ΠΈΠ»ΠΈ ΠΌΠ°Π½Π΄Π°Ρ‚Π΅Π½) ΠΌΠΎΠ΄Π΅Π» Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ° (Π°Π½Π³Π». Mandatory Access Control, MAC) Π²ΡŠΡ€Ρ…Ρƒ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈΡ дискрСционСн (ΠΈΠ»ΠΈ ΠΈΠ·Π±ΠΈΡ€Π°Ρ‚Π΅Π»Π΅Π½) ΠΌΠΎΠ΄Π΅Π» (Π°Π½Π³Π». Discretionary Access Control, DAC), Ρ‚.Π΅. Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅, запис ΠΈ изпълнСниС.

SELinux ΠΈΠΌΠ° Ρ‚Ρ€ΠΈ Ρ€Π΅ΠΆΠΈΠΌΠ°:

  1. ΠŸΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»Π΅Π½ β€” забранява Π΄ΠΎΡΡ‚ΡŠΠΏΠ° Π½Π° основаниС ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π°.
  2. ΠŸΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚Π΅Π»Π΅Π½ β€” запис Π½Π° дСйствия, Π½Π°Ρ€ΡƒΡˆΠ°Π²Π°Ρ‰ΠΈ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π°, ΠΊΠΎΠΈΡ‚ΠΎ Π² принудитСлния Ρ€Π΅ΠΆΠΈΠΌ Π±ΠΈΡ…Π° Π±ΠΈΠ»ΠΈ Π·Π°Π±Ρ€Π°Π½Π΅Π½ΠΈ.
  3. Π”Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ΠΎ β€” пълно ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° SELinux.

По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ настройкитС са Π² /etc/selinux/config

ΠŸΡ€ΠΎΠΌΡΠ½Π° Π½Π° Ρ€Π΅ΠΆΠΈΠΌΠΈΡ‚Π΅ Π½Π° SELinux

Π—Π° Π΄Π° Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ тСкущия Ρ€Π΅ΠΆΠΈΠΌ, стартирайтС

$ getenforce

Π—Π° Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Ρ€Π΅ΠΆΠΈΠΌΠ° Π½Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚Π΅Π»Π΅Π½, стартирайтС слСдната ΠΊΠΎΠΌΠ°Π½Π΄Π°

$ setenforce 0

ΠΈΠ»ΠΈ, Π·Π° Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Ρ€Π΅ΠΆΠΈΠΌΠ° ΠΎΡ‚ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚Π΅Π»Π΅Π½ Π½Π° ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»Π΅Π½, ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Ρ‚Π΅

$ setenforce 1

Ако трябва Π΄Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ напълно SELinux, Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ само Ρ‡Ρ€Π΅Π· конфигурационния Ρ„Π°ΠΉΠ»

$ vi /etc/selinux/config

Π—Π° Π΄Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅, ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Ρ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° SELINUX ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½:

SELINUX=disabled

Настройка Π½Π° SELinux

ВсСки Ρ„Π°ΠΉΠ» ΠΈ процСс Π΅ ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½ с контСкста Π½Π° SELinux, ΠΊΠΎΠΉΡ‚ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½Π° информация, ΠΊΠ°Ρ‚ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π», роля, Ρ‚ΠΈΠΏ ΠΈ Ρ‚.Π½. Ако Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚Π΅ SELinux Π·Π° ΠΏΡŠΡ€Π²ΠΈ ΠΏΡŠΡ‚, трябва ΠΏΡŠΡ€Π²ΠΎ Π΄Π° настроитС контСкста ΠΈ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈΡ‚Π΅. ΠŸΡ€ΠΎΡ†Π΅ΡΡŠΡ‚ Π½Π° Π½Π°Π·Π½Π°Ρ‡Π°Π²Π°Π½Π΅ Π½Π° Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ ΠΈ контСкст Π΅ извСстСн ΠΊΠ°Ρ‚ΠΎ ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½Π΅. Π—Π° Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ, ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Ρ‚Π΅ Ρ€Π΅ΠΆΠΈΠΌΠ° Π² конфигурационния Ρ„Π°ΠΉΠ» Π½Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚Π΅Π»Π΅Π½.

$ vi /etc/selinux/config
SELINUX=permissive

Π‘Π»Π΅Π΄ установяванС Π½Π° Ρ€Π΅ΠΆΠΈΠΌΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚Π΅Π»Π΅Π½, ΡΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ Π² ΠΊΠΎΡ€Π΅Π½Π° ΠΏΡ€Π°Π·Π΅Π½ скрит Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Ρ‚ΠΎ .autorelabel

$ touch /.autorelabel

ΠΈ рСстартирайтС ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€Π°

$ init 6

Π—Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°: ИзползвамС Ρ€Π΅ΠΆΠΈΠΌ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚Π΅Π»Π΅Π½ Π·Π° ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½Π΅, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ€Π΅ΠΆΠΈΠΌ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»Π΅Π½ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ срив Π½Π° систСмата ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° рСстартиранС.

НС сС притСснявайтС, Π°ΠΊΠΎ Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π·Π°Ρ†ΠΈΠΊΠ»ΠΈ Π½Π° някой Ρ„Π°ΠΉΠ», ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ ΠΎΡ‚Π½Π΅ΠΌΠ° Π²Ρ€Π΅ΠΌΠ΅. Π‘Π»Π΅Π΄ Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ ΠΈ Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° систСмата, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΎΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π΄ΠΎ конфигурационния Ρ„Π°ΠΉΠ» ΠΈ Π΄Π° Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ Ρ€Π΅ΠΆΠΈΠΌΠ° ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»Π΅Π½, Π° ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π΄Π° стартиратС:

$ 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       Позволява Π½Π° ftp Π΄Π° Ρ‡Π΅Ρ‚Π΅ ΠΈ пишС Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π² Π΄ΠΎΠΌΠ°ΡˆΠ½Π°Ρ‚Π° дирСктория Π½Π° потрСбитСля

Π’ΠΎΠ·ΠΈ ΠΏΡ€Π΅Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚Π΅Π» Π΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½, Π·Π°Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Π³ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΠΌ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° 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), Π½ΠΈΠ΅ Π³Ρ€Π΅ΠΏΠ°ΠΌΠ΅ Π³Ρ€Π΅ΡˆΠΊΠΈΡ‚Π΅ ΠΈ създавамС ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Π·Π° тях:

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 ΠΈΠ»ΠΈ denial Π² audit.log.

Π’ΠΎΠ²Π° бСшС моят ΠΎΠΏΠΈΡ‚ Π΄Π° Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ SELinux. Надявам сС, Ρ‡Π΅ слСд ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π΅ Π½Π° Ρ‚Π°Π·ΠΈ статия Ρ‰Π΅ сС чувстватС ΠΏΠΎ-ΠΊΠΎΠΌΡ„ΠΎΡ€Ρ‚Π½ΠΎ с SELinux.

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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster