SELinux cheat sheet Π·Π° систСмни администратори: 42 ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π° Π½Π° Π²Π°ΠΆΠ½ΠΈ Π²ΡŠΠΏΡ€ΠΎΡΠΈ

ΠŸΡ€Π΅Π²ΠΎΠ΄ΡŠΡ‚ Π½Π° статията Π΅ ΠΈΠ·Π³ΠΎΡ‚Π²Π΅Π½ спСциално Π·Π° студСнтитС ΠΎΡ‚ курса β€žLinux Π°Π΄ΠΌΠΈΠ½ΠΈΡΡ‚Ρ€Π°Ρ‚ΠΎΡ€β€œ.

SELinux cheat sheet Π·Π° систСмни администратори: 42 ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π° Π½Π° Π²Π°ΠΆΠ½ΠΈ Π²ΡŠΠΏΡ€ΠΎΡΠΈ

Π’ΡƒΠΊ Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈ Π½Π° Π²Π°ΠΆΠ½ΠΈ Π²ΡŠΠΏΡ€ΠΎΡΠΈ Π·Π° ΠΆΠΈΠ²ΠΎΡ‚Π°, всСлСната ΠΈ всичко Π² Linux с ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½Π° сигурност.

β€žΠ’Π°ΠΆΠ½Π°Ρ‚Π° истина, Ρ‡Π΅ Π½Π΅Ρ‰Π°Ρ‚Π° Π½Π΅ Π²ΠΈΠ½Π°Π³ΠΈ са Ρ‚Π°ΠΊΠΈΠ²Π°, ΠΊΠ°ΠΊΠ²ΠΈΡ‚ΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°Ρ‚, Π΅ общоизвСстна...β€œ

-Π”ΡŠΠ³Π»Π°Ρ Адамс, ΠŸΡŠΡ‚Π΅Π²ΠΎΠ΄ΠΈΡ‚Π΅Π» Π½Π° галактичСския стопадТия

БСзопасност. ПовишСна надСТдност. ΠšΠΎΡ€Π΅ΡΠΏΠΎΠ½Π΄Π΅Π½Ρ†ΠΈΡ. ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°. Π§Π΅Ρ‚ΠΈΡ€ΠΈΠΌΠ° ΠΊΠΎΠ½Π½ΠΈΡ†ΠΈ Π½Π° Апокалипсиса систСмСн администратор. Π’ допълнСниС към Π½Π°ΡˆΠΈΡ‚Π΅ Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ - наблюдСниС, Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€Π°Π½Π΅, внСдряванС, ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅, Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ ΠΈ Ρ‚.Π½. - Π½ΠΈΠ΅ носим отговорност ΠΈ Π·Π° сигурността Π½Π° Π½Π°ΡˆΠΈΡ‚Π΅ систСми. Π”ΠΎΡ€ΠΈ Ρ‚Π΅Π·ΠΈ систСми, ΠΏΡ€ΠΈ ΠΊΠΎΠΈΡ‚ΠΎ Π΄ΠΎΡΡ‚Π°Π²Ρ‡ΠΈΠΊΡŠΡ‚ Ρ‚Ρ€Π΅Ρ‚Π° страна ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π° Π΄Π° Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°ΠΌΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½Π°Ρ‚Π° Π·Π°Ρ‰ΠΈΡ‚Π°. УсСща сС Ρ€Π°Π±ΠΎΡ‚Π° Π˜Ρ‚ΡŠΠ½ Π₯ΡŠΠ½Ρ‚ ΠΎΡ‚ β€žΠœΠΈΡΠΈΡΡ‚Π° Π½Π΅Π²ΡŠΠ·ΠΌΠΎΠΆΠ½Π°β€œ.

Π˜Π·ΠΏΡ€Π°Π²Π΅Π½ΠΈ ΠΏΡ€Π΅Π΄ Ρ‚Π°Π·ΠΈ Π΄ΠΈΠ»Π΅ΠΌΠ°, някои систСмни администратори Ρ€Π΅ΡˆΠ°Π²Π°Ρ‚ Π΄Π° Π²Π·Π΅ΠΌΠ°Ρ‚ синьо Ρ…Π°ΠΏΡ‡Π΅, Π·Π°Ρ‰ΠΎΡ‚ΠΎ смятат, Ρ‡Π΅ Π½ΠΈΠΊΠΎΠ³Π° няма Π΄Π° знаят ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π° Π½Π° голСмия Π²ΡŠΠΏΡ€ΠΎΡ Π·Π° ΠΆΠΈΠ²ΠΎΡ‚Π°, всСлСната ΠΈ всичко останало. И ΠΊΠ°ΠΊΡ‚ΠΎ всички Π·Π½Π°Π΅ΠΌ, Ρ‚ΠΎΠ·ΠΈ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ Π΅ 42.

Π’ Π΄ΡƒΡ…Π° Π½Π° β€žΠŸΡŠΡ‚Π΅Π²ΠΎΠ΄ΠΈΡ‚Π΅Π» Π½Π° Π³Π°Π»Π°ΠΊΡ‚ΠΈΠΊΠ°Ρ‚Π° Π½Π° ΡΡ‚ΠΎΠΏΠ°Π΄ΠΆΠΈΡβ€œ, Π΅Ρ‚ΠΎ 42 ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π° Π½Π° Π²Π°ΠΆΠ½ΠΈ Π²ΡŠΠΏΡ€ΠΎΡΠΈ относно ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π° ΠΈ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°Ρ‚Π°. SELinux Π½Π° Π²Π°ΡˆΠΈΡ‚Π΅ систСми.

1. SELinux Π΅ систСма Π·Π° ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»Π΅Π½ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ» Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ°, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ всСки процСс ΠΈΠΌΠ° Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚. ВсСки Ρ„Π°ΠΉΠ», дирСктория ΠΈ систСмСн ΠΎΠ±Π΅ΠΊΡ‚ ΡΡŠΡ‰ΠΎ ΠΈΠΌΠ° Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ. ΠŸΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° Π·Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Ρ‚ Π΄ΠΎΡΡ‚ΡŠΠΏΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½ΠΈ процСси ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ. Π―Π΄Ρ€ΠΎΡ‚ΠΎ Π½Π°Π»Π°Π³Π° Ρ‚Π΅Π·ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°.

2. Π”Π²Π΅Ρ‚Π΅ Π½Π°ΠΉ-Π²Π°ΠΆΠ½ΠΈ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ са: Π•Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈΡ€Π°Π½Π΅ β€” ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ (Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, процСси, ΠΏΠΎΡ€Ρ‚ΠΎΠ²Π΅ ΠΈ Ρ‚.Π½.) ΠΈ Π’ΠΈΠΏ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»Π½ΠΎ изпълнСниС (ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΈΠ·ΠΎΠ»ΠΈΡ€Π° процСситС Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ въз основа Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅).

3. ΠŸΡ€Π°Π²ΠΈΠ»Π΅Π½ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π½Π° Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚Π° user:role:type:level (ΠΏΠΎ ΠΈΠ·Π±ΠΎΡ€).

4. Π¦Π΅Π»Ρ‚Π° Π½Π° осигуряванСто Π½Π° многостСпСнна сигурност (ΠœΠ½ΠΎΠ³ΠΎΡΡ‚Π΅ΠΏΠ΅Π½Π½Π° сигурност - MLS) Π΅ Π΄Π° управлява процСси (Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ) въз основа Π½Π° Π½ΠΈΠ²ΠΎΡ‚ΠΎ Π½Π° сигурност Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚. НапримСр Ρ‚Π°Π΅Π½ процСс Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ‡Π΅Ρ‚Π΅ строго сСкрСтни Π΄Π°Π½Π½ΠΈ.

5. ΠžΡΠΈΠ³ΡƒΡ€ΡΠ²Π°Π½Π΅ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉΠ½Π° сигурност (ΠœΠ½ΠΎΠ³ΠΎΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉΠ½Π° сигурност - MCS) Π·Π°Ρ‰ΠΈΡ‚Π°Π²Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ процСси Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини, OpenShift Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π»ΠΈ, SELinux ΠΏΡΡΡŠΡ‡Π½ΠΈΡ†ΠΈ, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ ΠΈ Π΄Ρ€.).

6. ΠžΠΏΡ†ΠΈΠΈ Π½Π° ядрото Π·Π° промяна Π½Π° Ρ€Π΅ΠΆΠΈΠΌΠΈΡ‚Π΅ Π½Π° SELinux ΠΏΡ€ΠΈ Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅:

  • autorelabel=1 β†’ ΠΊΠ°Ρ€Π° систСмата Π΄Π° стартира ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈΡ€Π°Π½Π΅
  • selinux=0 β†’ ядрото Π½Π΅ Π·Π°Ρ€Π΅ΠΆΠ΄Π° SELinux инфраструктурата
  • enforcing=0 β†’ Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ Π² Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚Π΅Π»Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ

7. Ако трябва Π΄Π° ΠΏΡ€Π΅ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Ρ‚Π΅ цялата систСма:

# touch /.autorelabel
#reboot

Ако систСмното ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° голям Π±Ρ€ΠΎΠΉ Π³Ρ€Π΅ΡˆΠΊΠΈ, ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°Π»ΠΎΠΆΠΈ Π΄Π° стартиратС Π² Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚Π΅Π»Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ, Π·Π° Π΄Π° успСС ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ.

8. Π—Π° Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ Π΄Π°Π»ΠΈ SELinux Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½: # getenforce

9. Π—Π° Π΄Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Ρ‚Π΅/Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Ρ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ SELinux: # setenforce [1|0]

10. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° SELinux: # sestatus

11. ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π΅Π½ Ρ„Π°ΠΉΠ»: /etc/selinux/config

12. Как Ρ€Π°Π±ΠΎΡ‚ΠΈ SELinux? Π•Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½Π° ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π·Π° ΡƒΠ΅Π± ΡΡŠΡ€Π²ΡŠΡ€Π° Apache:

  • Π”Π²ΠΎΠΈΡ‡Π½ΠΎ прСдставянС: /usr/sbin/httpdβ†’httpd_exec_t
  • ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Π° дирСктория: /etc/httpdβ†’httpd_config_t
  • ДирСктория с рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅: /var/log/httpd β†’ httpd_log_t
  • ДирСктория със ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅: /var/www/html β†’ httpd_sys_content_t
  • Π‘ΠΊΡ€ΠΈΠΏΡ‚ Π·Π° стартиранС: /usr/lib/systemd/system/httpd.service β†’ httpd_unit_file_d
  • процСс: /usr/sbin/httpd -DFOREGROUND β†’ httpd_t
  • ΠŸΡ€ΠΈΡΡ‚Π°Π½ΠΈΡ‰Π°: 80/tcp, 443/tcp β†’ httpd_t, http_port_t

ΠŸΡ€ΠΎΡ†Π΅ΡΡŠΡ‚ сС изпълнява Π² контСкст httpd_t, ΠΌΠΎΠΆΠ΅ Π΄Π° взаимодСйства с Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈΡ€Π°Π½ ΠΎΠ±Π΅ΠΊΡ‚ httpd_something_t.

13. Много ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΏΡ€ΠΈΠ΅ΠΌΠ°Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ -Z Π·Π° ΠΏΡ€Π΅Π³Π»Π΅Π΄, създаванС ΠΈ промяна Π½Π° контСкст:

  • ls -Z
  • id -Z
  • ps -Z
  • netstat -Z
  • cp -Z
  • mkdir -Z

ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ΠΈΡ‚Π΅ сС установяват, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ сС ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ въз основа Π½Π° контСкста Π½Π° тяхната родитСлска дирСктория (с някои ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ). RPM ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° установяват контСксти, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° инсталацията.

14. Има Ρ‡Π΅Ρ‚ΠΈΡ€ΠΈ основни ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ Π·Π° Π³Ρ€Π΅ΡˆΠΊΠΈ Π² SELinux, ΠΊΠΎΠΈΡ‚ΠΎ са описани ΠΏΠΎ-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π² Ρ‚ΠΎΡ‡ΠΊΠΈ 15-21 ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ:

  • ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ
  • ΠŸΠΎΡ€Π°Π΄ΠΈ Π½Π΅Ρ‰ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ SELinux трябва Π΄Π° Π·Π½Π°Π΅
  • Π“Ρ€Π΅ΡˆΠΊΠ° Π² ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π°/прилоТСнията Π½Π° SELinux
  • Π’Π°ΡˆΠ°Ρ‚Π° информация ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΊΠΎΠΌΠΏΡ€ΠΎΠΌΠ΅Ρ‚ΠΈΡ€Π°Π½Π°

15. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌ с Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ: Π°ΠΊΠΎ Π²Π°ΡˆΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ са Π²ΡŠΡ‚Ρ€Π΅ /srv/myweb са ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ, Π΄ΠΎΡΡ‚ΡŠΠΏΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΎΡ‚ΠΊΠ°Π·Π°Π½. Π•Ρ‚ΠΎ няколко Π½Π°Ρ‡ΠΈΠ½Π° Π΄Π° ΠΏΠΎΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π°:

  • Ако Π·Π½Π°Π΅Ρ‚Π΅ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚Π°:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • Ако Π·Π½Π°Π΅Ρ‚Π΅ Ρ„Π°ΠΉΠ» с Π΅ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΈ ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ:
    # semanage fcontext -a -e /srv/myweb /var/www
  • Π’ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ Π½Π° контСкста (ΠΈ Π² Π΄Π²Π°Ρ‚Π° случая):
    # restorecon -vR /srv/myweb

16. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌ с Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ: Π°ΠΊΠΎ прСмСститС Ρ„Π°ΠΉΠ»Π°, вмСсто Π΄Π° Π³ΠΎ ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚Π΅, Ρ„Π°ΠΉΠ»ΡŠΡ‚ Ρ‰Π΅ Π·Π°ΠΏΠ°Π·ΠΈ оригиналния си контСкст. Π—Π° Π΄Π° ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Ρ‚Π΅ Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ:

  • ΠŸΡ€ΠΎΠΌΠ΅Π½Π΅Ρ‚Π΅ контСкстната ΠΊΠΎΠΌΠ°Π½Π΄Π° с Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚Π°:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • ΠŸΡ€ΠΎΠΌΠ΅Π½Π΅Ρ‚Π΅ контСкстната ΠΊΠΎΠΌΠ°Π½Π΄Π° с Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚Π° Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π°:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • Π’ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²Π΅Ρ‚Π΅ контСкста (ΠΈ Π² Π΄Π²Π°Ρ‚Π° случая): # restorecon -vR /var/www/html/

17. Π°ΠΊΠΎ SELinux, ΠΊΠΎΠΉΡ‚ΠΎ трябва Π΄Π° Π·Π½Π°Π΅Ρ‚Π΅Ρ‡Π΅ HTTPD ΡΠ»ΡƒΡˆΠ° Π½Π° ΠΏΠΎΡ€Ρ‚ 8585, ΠΊΠ°ΠΆΠ΅Ρ‚Π΅ Π½Π° SELinux:

# semanage port -a -t http_port_t -p tcp 8585

18. SELinux, ΠΊΠΎΠΉΡ‚ΠΎ трябва Π΄Π° Π·Π½Π°Π΅Ρ‚Π΅ Π‘ΡƒΠ»Π΅Π²ΠΈ стойности, ΠΊΠΎΠΈΡ‚ΠΎ позволяват части ΠΎΡ‚ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π° Π½Π° SELinux Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ промСняни ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° изпълнСниС, Π±Π΅Π· Π΄Π° знаят, Ρ‡Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π° Π½Π° SELinux Π΅ прСзаписана. НапримСр, Π°ΠΊΠΎ искатС httpd Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° ΠΈΠΌΠ΅ΠΉΠ», Π²ΡŠΠ²Π΅Π΄Π΅Ρ‚Π΅: # setsebool -P httpd_can_sendmail 1

19. SELinux, ΠΊΠΎΠΉΡ‚ΠΎ трябва Π΄Π° Π·Π½Π°Π΅Ρ‚Π΅ логичСски стойности Π·Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π΅/Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π΅ Π½Π° настройкитС Π½Π° SELinux:

  • Π—Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ всички Π±ΡƒΠ»Π΅Π²ΠΈ стойности: # getsebool -a
  • Π—Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ описаниС Π½Π° всСки: # semanage boolean -l
  • Π—Π° Π΄Π° Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ Π±ΡƒΠ»Π΅Π²Π° стойност: # setsebool [_boolean_] [1|0]
  • Π—Π° постоянна инсталация Π΄ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ -P, НапримСр: # setsebool httpd_enable_ftp_server 1 -P

20. ΠŸΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π°/прилоТСнията Π½Π° SELinux ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚ Π³Ρ€Π΅ΡˆΠΊΠΈ, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ:

  • НСобичайни ΠΊΠΎΠ΄ΠΎΠ²ΠΈ ΠΏΡŠΡ‚ΠΈΡ‰Π°
  • ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ
  • ΠŸΡ€Π΅Π½Π°ΡΠΎΡ‡Π²Π°Π½Π΅ Π½Π° stdout
  • Π˜Π·Ρ‚ΠΈΡ‡Π°Π½Π΅ Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ² дСскриптор
  • Изпълнима ΠΏΠ°ΠΌΠ΅Ρ‚
  • Π›ΠΎΡˆΠΎ ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

ΠžΡ‚Π²ΠΎΡ€Π΅Ρ‚Π΅ Π±ΠΈΠ»Π΅Ρ‚ΠΈ (Π½Π΅ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°ΠΉΡ‚Π΅ ΠΎΡ‚Ρ‡Π΅Ρ‚ Π΄ΠΎ Bugzilla; Bugzilla няма SLA).

21. Π’Π°ΡˆΠ°Ρ‚Π° информация ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΊΠΎΠΌΠΏΡ€ΠΎΠΌΠ΅Ρ‚ΠΈΡ€Π°Π½Π°Π°ΠΊΠΎ ΠΈΠΌΠ°Ρ‚Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈ Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ сС ΠΎΠΏΠΈΡ‚Π²Π°Ρ‚ Π΄Π°:

  • Π—Π°Ρ€Π΅Π΄Π΅Ρ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π½Π° ядрото
  • Π”Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°ΠΉΡ‚Π΅ принудитСлния Ρ€Π΅ΠΆΠΈΠΌ SELinux
  • Пиши Π½Π° etc_t/shadow_t
  • ΠŸΡ€ΠΎΠΌΠ΅Π½Π΅Ρ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° Π½Π° iptables

22. Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ΠΈ Π½Π° SELinux Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½Π΅ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π·Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ:

# yum -y install setroubleshoot setroubleshoot-server

РСстартирайтС ΠΈΠ»ΠΈ рСстартирайтС auditd слСд ΠΌΠΎΠ½Ρ‚Π°ΠΆΠ°.

23. ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°

journalctl

Π·Π° ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° списък с всички рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с setroubleshoot:

# journalctl -t setroubleshoot --since=14:20

24. ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° journalctl Π·Π° Π΄Π° ΠΈΠ·Π±Ρ€ΠΎΠΈΡ‚Π΅ всички рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ SELinux Ρ‚Π°Π³. НапримСр:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. Ако възникнС Π³Ρ€Π΅ΡˆΠΊΠ° Π½Π° SELinux, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ Π΄Π½Π΅Π²Π½ΠΈΠΊΠ° setroubleshoot ΠΏΡ€Π΅Π΄Π»Π°Π³Π° няколко възмоТни Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.
НапримСр ΠΎΡ‚ journalctl:

Jun 14 19:41:07 web1 setroubleshoot: SELinux is preventing httpd from getattr access on the file /var/www/html/index.html. For complete message run: sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e

# sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
SELinux is preventing httpd from getattr access on the file /var/www/html/index.html.

***** Plugin restorecon (99.5 confidence) suggests ************************

If you want to fix the label,
/var/www/html/index.html default label should be httpd_syscontent_t.
Then you can restorecon.
Do
# /sbin/restorecon -v /var/www/html/index.html

26. РСгистриранС: SELinux записва информация Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ мСста:

  • / VAR / Π΄Π½Π΅Π²Π½ΠΈΠΊ / ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ
  • /var/log/audit/audit.log
  • /var/lib/setroubleshoot/setroubleshoot_database.xml

27. РСгистриранС: Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° SELinux Π³Ρ€Π΅ΡˆΠΊΠΈ Π² ΠΆΡƒΡ€Π½Π°Π»Π° Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°:

# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today

28. Π—Π° Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ SELinux Access Vector Cache (AVC) ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π·Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π° услуга:

# ausearch -m avc -c httpd

29. ΠŸΠΎΠ»Π΅Π·Π½ΠΎΡΡ‚ audit2allow ΡΡŠΠ±ΠΈΡ€Π° информация ΠΎΡ‚ рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° Π·Π°Π±Ρ€Π°Π½Π΅Π½ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ слСд Ρ‚ΠΎΠ²Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° ΠΏΡ€Π°Π²ΠΈΠ»Π° Π·Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Π·Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π° SELinux. НапримСр:

  • Π—Π° Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌΠΎ Π·Π° Ρ‡ΠΎΠ²Π΅ΠΊΠ° описаниС Π½Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°Ρ‚Π° Π·Π° ΠΎΡ‚ΠΊΠ°Π·Π°Π½ Π΄ΠΎΡΡ‚ΡŠΠΏ: # audit2allow -w -a
  • Π—Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π·Π° ΠΏΡ€ΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° Ρ‚ΠΈΠΏ, ΠΊΠΎΠ΅Ρ‚ΠΎ позволява ΠΎΡ‚ΠΊΠ°Π·Π°Π½ Π΄ΠΎΡΡ‚ΡŠΠΏ: # audit2allow -a
  • Π—Π° Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ пСрсонализиран ΠΌΠΎΠ΄ΡƒΠ»: # audit2allow -a -M mypolicy
  • Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ -M създава Ρ„Π°ΠΉΠ» Π·Π° изпълнСниС Π½Π° Ρ‚ΠΈΠΏΠ° (.te) с посочСното ΠΈΠΌΠ΅ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π° ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΡ‚ΠΎ Π² ΠΏΠ°ΠΊΠ΅Ρ‚ с ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ (.pp): mypolicy.pp mypolicy.te
  • Π—Π° Π΄Π° инсталиратС пСрсонализиран ΠΌΠΎΠ΄ΡƒΠ»: # semodule -i mypolicy.pp

30. Π—Π° Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ ΠΎΡ‚Π΄Π΅Π»Π΅Π½ процСс (Π΄ΠΎΠΌΠ΅ΠΉΠ½) Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ Π² Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚Π΅Π»Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ: # semanage permissive -a httpd_t

31. Ако Π²Π΅Ρ‡Π΅ Π½Π΅ искатС Π΄ΠΎΠΌΠ΅ΠΉΠ½ΡŠΡ‚ Π΄Π° Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚Π΅Π»Π΅Π½: # semanage permissive -d httpd_t

32. Π—Π° Π΄Π° Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Ρ‚Π΅ всички Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈ Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ: # semodule -d permissivedomains

33. АктивиранС Π½Π° MLS SELinux ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°: # yum install selinux-policy-mls
Π² /etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls

Π£Π²Π΅Ρ€Π΅Ρ‚Π΅ сС, Ρ‡Π΅ SELinux Ρ€Π°Π±ΠΎΡ‚ΠΈ Π² Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚Π΅Π»Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ: # setenforce 0
Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ скрипт fixfilesΠ·Π° Π΄Π° стС сигурни, Ρ‡Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈΡ€Π°Π½ΠΈ ΠΏΡ€ΠΈ слСдващото рСстартиранС:

# fixfiles -F onboot # reboot

34. Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π» с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ MLS Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½: # useradd -Z staff_u john

Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° useradd, ΡΠ²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅ новия ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π» към ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π» Π½Π° SELinux (Π² Ρ‚ΠΎΠ·ΠΈ случай, staff_u).

35. Π—Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΡΡŠΠΏΠΎΡΡ‚Π°Π²ΡΠ½Π΅Ρ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ Π½Π° SELinux ΠΈ Linux: # semanage login -l

36. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Ρ‚Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π·Π° потрСбитСля: # semanage login --modify --range s2:c100 john

37. Π—Π° Π΄Π° ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Ρ‚Π΅ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚Π° Π½Π° Π½Π°Ρ‡Π°Π»Π½Π°Ρ‚Π° дирСктория Π½Π° потрСбитСля (Π°ΠΊΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ): # chcon -R -l s2:c100 /home/john

38. Π—Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ‚Π΅ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ: # chcat -L

39. Π—Π° Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈΡ‚Π΅ ΠΈΠ»ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ Π΄Π° ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚Π΅ свои собствСни, Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ»Π°, ΠΊΠ°ΠΊΡ‚ΠΎ слСдва:

/etc/selinux/_<selinuxtype>_/setrans.conf

40. Π—Π° Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΠ»ΠΈ скрипт Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ Ρ„Π°ΠΉΠ», роля ΠΈ потрСбитСлски контСкст:

# runcon -t initrc_t -r system_r -u user_u yourcommandhere

  • -t Ρ„Π°ΠΉΠ»ΠΎΠ² контСкст
  • -r Ρ€ΠΎΠ»Π΅Π²ΠΈ контСкст
  • -u потрСбитСлски контСкст

41. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΈ с Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ SELinux:

  • Подман: # podman run --security-opt label=disable …
  • Docker: # docker run --security-opt label=disable …

42. Ако трябва Π΄Π° Π΄Π°Π΄Π΅Ρ‚Π΅ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° пълСн Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ систСмата:

  • Подман: # podman run --privileged …
  • Docker: # docker run --privileged …

И сСга Π²Π΅Ρ‡Π΅ Π·Π½Π°Π΅Ρ‚Π΅ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π°. Π’Π°ΠΊΠ° Ρ‡Π΅, моля: Π½Π΅ сС ΠΏΠ°Π½ΠΈΠΊΡŒΠΎΡΠ²Π°ΠΉΡ‚Π΅ ΠΈ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°ΠΉΡ‚Π΅ SELinux.

Π·Π° справка:

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€