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

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

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

SELinux ΠΈΠ»ΠΈ Security Enhanced Linux Π΅ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ°, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π΅Π½ ΠΎΡ‚ АмСриканската агСнция Π·Π° Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»Π½Π° сигурност (NSA) Π·Π° прСдотвратяванС Π½Π° Π·Π»ΠΎΠ½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈ прониквания. Π’ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π° Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π΅Π½ (ΠΈΠ»ΠΈ ΠΌΠ°Π½Π΄Π°Ρ‚Π΅Π½) ΠΌΠΎΠ΄Π΅Π» Π½Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ° (Π½Π° английски: 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 Π½Π° Π½Π°, ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Ρ‚Π΅

$ 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 Π·Π° ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½Π΅, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ€Π΅ΠΆΠΈΠΌ Π½Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ срив Π½Π° систСмата ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° рСстартиранС.

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

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

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

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

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