Π¨ΠΏΠ°Ρ€Π³Π°Π»ΠΊΠ° для сисадмина ΠΏΠΎ SELinux: 42 ΠΎΡ‚Π²Π΅Ρ‚Π° Π½Π° Π²Π°ΠΆΠ½Ρ‹Π΅ вопросы

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

Π¨ΠΏΠ°Ρ€Π³Π°Π»ΠΊΠ° для сисадмина ΠΏΠΎ SELinux: 42 ΠΎΡ‚Π²Π΅Ρ‚Π° Π½Π° Π²Π°ΠΆΠ½Ρ‹Π΅ вопросы

Π—Π΄Π΅ΡΡŒ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° Π²Π°ΠΆΠ½Ρ‹Π΅ вопросы ΠΎ ΠΆΠΈΠ·Π½ΠΈ, всСлСнной ΠΈ всСм Ρ‚Π°ΠΊΠΎΠΌ Π² Linux с ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½ΠΎΠΉ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΡŽ.

«ВаТная истина, Ρ‡Ρ‚ΠΎ Π²Π΅Ρ‰ΠΈ Π½Π΅ всСгда ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚Π΅ΠΌ, Ρ‡Π΅ΠΌ каТутся, общСизвСстна…»

―Дуглас Адамс, Автостопом ΠΏΠΎ Π“Π°Π»Π°ΠΊΡ‚ΠΈΠΊΠ΅

Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ. ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ надСТности. БоотвСтствиС. ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°. Π§Π΅Ρ‚Ρ‹Ρ€Π΅ Всадника Апокалипсиса сисадмина. Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ нашим Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½Ρ‹ΠΌ Π·Π°Π΄Π°Ρ‡Π°ΠΌ β€” ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Ρƒ, Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠΌΡƒ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ, Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΡŽ, настройкС, обновлСнию ΠΈ Ρ‚. Π΄. β€” ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅ΠΌ Π·Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Π½Π°ΡˆΠΈΡ… систСм. Π”Π°ΠΆΠ΅ Ρ‚Π΅Ρ… систСм, Π³Π΄Π΅ сторонний ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ Π½Π°ΠΌ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΡƒΡΠΈΠ»Π΅Π½Π½ΡƒΡŽ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ. Π­Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ Π­Ρ‚Π°Π½Π° Π₯Π°Π½Ρ‚Π° ΠΈΠ· β€œΠœΠΈΡΡΠΈΡ нСвыполнима”.

Π‘Ρ‚ΠΎΠ»ΠΊΠ½ΡƒΠ²ΡˆΠΈΡΡŒ с этой Π΄ΠΈΠ»Π΅ΠΌΠΌΠΎΠΉ, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ систСмныС администраторы Ρ€Π΅ΡˆΠ°ΡŽΡ‚ Π²Π·ΡΡ‚ΡŒ Π³ΠΎΠ»ΡƒΠ±ΡƒΡŽ Ρ‚Π°Π±Π»Π΅Ρ‚ΠΊΡƒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π΄ΡƒΠΌΠ°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡƒΠ·Π½Π°ΡŽΡ‚ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° большой вопрос ΠΆΠΈΠ·Π½ΠΈ, всСлСнной ΠΈ всСм Ρ‚Π°ΠΊΠΎΠΌ. И, ΠΊΠ°ΠΊ ΠΌΡ‹ всС Π·Π½Π°Π΅ΠΌ, этот ΠΎΡ‚Π²Π΅Ρ‚ 42.

Π’ Π΄ΡƒΡ…Π΅ β€œΠΠ²Ρ‚ΠΎΡΡ‚ΠΎΠΏΠΎΠΌ ΠΏΠΎ галактикС”, здСсь ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ 42 ΠΎΡ‚Π²Π΅Ρ‚Π° Π½Π° Π²Π°ΠΆΠ½Ρ‹Π΅ вопросы ΠΎΠ± ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΈ использовании SELinux Π² Π²Π°ΡˆΠΈΡ… систСмах.

1. SELinux β€” это систСма ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ управлСния доступом, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ процСсс ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΊΡƒ (lable). ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΈ систСмный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΊΠΈ. ΠŸΡ€Π°Π²ΠΈΠ»Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ доступом ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ процСссами ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ. Π―Π΄Ρ€ΠΎ обСспСчиваСт соблюдСниС этих ΠΏΡ€Π°Π²ΠΈΠ».

2. Двумя Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹ΠΌΠΈ концСпциями ΡΠ²Π»ΡΡŽΡ‚ΡΡ: Labeling β€” ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° (Ρ„Π°ΠΉΠ»Ρ‹, процСссы, ΠΏΠΎΡ€Ρ‚Ρ‹ ΠΈ Ρ‚. Π΄.) ΠΈ Type enforcement (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ процСссы Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° Π½Π° основС Ρ‚ΠΈΠΏΠΎΠ²).

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

4. ЦСлью обСспСчСния ΠΌΠ½ΠΎΠ³ΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΉ бСзопасности (Multi-Level Security β€” MLS) являСтся ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ процСссами (Π΄ΠΎΠΌΠ΅Π½Π°ΠΌΠΈ) Π½Π° основС уровня бСзопасности Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. НапримСр, сСкрСтный процСсс Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ свСрхсСкрСтныС Π΄Π°Π½Π½Ρ‹Π΅.

5. ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉΠ½ΠΎΠΉ бСзопасности (Multi-Category Security β€” MCS) Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅ процСссы Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹, ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ OpenShift, пСсочницы SELinux, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΈ Ρ‚. Π΄.).

6. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ядра для измСнСния Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² SELinux ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅:

  • autorelabel=1 β†’ заставляСт систСму Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ
  • selinux=0 β†’ ядро Π½Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ инфраструктуру SELinux
  • enforcing=0 β†’ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π² permissive Ρ€Π΅ΠΆΠΈΠΌΠ΅

7. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всю систСму:

# touch /.autorelabel
#reboot

Если систСмная ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° содСрТит большоС количСство ошибок, Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π² permissive Ρ€Π΅ΠΆΠΈΠΌΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΡ€ΠΎΡˆΠ»Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ.

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. Π’Π°ΡˆΠ° информация ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ скомпромСтирована, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Π΅ Π΄ΠΎΠΌΠ΅Π½Ρ‹, ΠΏΡ‹Ρ‚Π°ΡŽΡ‰ΠΈΠ΅ΡΡ:

  • Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ядра
  • ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ enforced Ρ€Π΅ΠΆΠΈΠΌ 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/log/messages
  • /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. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ процСсс (Π΄ΠΎΠΌΠ΅Π½) для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² permissive Ρ€Π΅ΠΆΠΈΠΌΠ΅: # semanage permissive -a httpd_t

31. Если Π²Ρ‹ большС Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠΌΠ΅Π½ Π±Ρ‹Π» permissive: # semanage permissive -d httpd_t

32. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ всС permissive Π΄ΠΎΠΌΠ΅Π½Ρ‹: # semodule -d permissivedomains

33. Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ MLS ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ SELinux: # yum install selinux-policy-mls
Π² /etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls

Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ SELinux Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² permissive Ρ€Π΅ΠΆΠΈΠΌΠ΅: # 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: # podman run --security-opt label=disable …
  • Docker: # docker run --security-opt label=disable …

42. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ доступ ΠΊ систСмС:

  • Podman: # podman run --privileged …
  • Docker: # docker run --privileged …

И Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΡƒΠΆΠ΅ Π·Π½Π°Π΅Ρ‚Π΅ ΠΎΡ‚Π²Π΅Ρ‚. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, поТалуйста: Π½Π΅ ΠΏΠ°Π½ΠΈΠΊΡƒΠΉΡ‚Π΅ ΠΈ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ SELinux.

Бсылки:

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