RHEL 8 Π±Π΅Ρ‚Π° сСминар: Π˜Π·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΈ ΡƒΠ΅Π± прилоТСния

RHEL 8 Beta ΠΏΡ€Π΅Π΄Π»Π°Π³Π° Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π½ΠΎΠ²ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‡ΠΈΠΉΡ‚ΠΎ списък ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΡ‚Π½Π΅ΠΌΠ΅ страници, Π½ΠΎ Π½Π°ΡƒΡ‡Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½ΠΎΠ²ΠΈ Π½Π΅Ρ‰Π° Π²ΠΈΠ½Π°Π³ΠΈ Π΅ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€ΠΎ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΠΌΠ΅ сСминар Π·Π° дСйствитСлно създаванС Π½Π° инфраструктура Π·Π° прилоТСния, Π±Π°Π·ΠΈΡ€Π°Π½Π° Π½Π° Red Hat Enterprise Linux 8 Beta.

RHEL 8 Π±Π΅Ρ‚Π° сСминар: Π˜Π·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΈ ΡƒΠ΅Π± прилоТСния

НСка Π²Π·Π΅ΠΌΠ΅ΠΌ Π·Π° основа Python, популярСн Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ срСд Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅, комбинация ΠΎΡ‚ Django ΠΈ PostgreSQL, доста чСсто срСщана комбинация Π·Π° създаванС Π½Π° прилоТСния, ΠΈ Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°ΠΌΠ΅ RHEL 8 Beta Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ с тях. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΎΡ‰Π΅ няколко (нСкласифицирани) ΡΡŠΡΡ‚Π°Π²ΠΊΠΈ.

ВСстовата срСда Ρ‰Π΅ сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π΅ интСрСсно Π΄Π° сС изслСдват Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅ Π·Π° автоматизация, Ρ€Π°Π±ΠΎΡ‚Π° с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ ΠΈ ΠΈΠ·ΠΏΡ€ΠΎΠ±Π²Π°Π½Π΅ Π½Π° срСди с мноТСство ΡΡŠΡ€Π²ΡŠΡ€ΠΈ. Π—Π° Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ с Π½ΠΎΠ² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅, ΠΊΠ°Ρ‚ΠΎ ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ малък, прост ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ Π½Π° Ρ€ΡŠΠΊΠ°, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΊΠ°ΠΊΠ²ΠΎ трябва Π΄Π° сС случи ΠΈ ΠΊΠ°ΠΊ взаимодСйства, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅Ρ‚Π΅ към Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°Π½Π΅ ΠΈ създаванС Π½Π° ΠΏΠΎ-слоТни ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. ДнСс Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚Π°ΠΊΡŠΠ² ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ.

НСка Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ с внСдряванСто Π½Π° RHEL 8 Beta VM ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° инсталиратС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина ΠΎΡ‚ Π½ΡƒΠ»Π°Ρ‚Π° ΠΈΠ»ΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π·Π° гости Π½Π° KVM, Π½Π°Π»ΠΈΡ‡Π½ΠΎ с вашия Π±Π΅Ρ‚Π° Π°Π±ΠΎΠ½Π°ΠΌΠ΅Π½Ρ‚. ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π° гост, Ρ‰Π΅ трябва Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π΅Π½ компактдиск, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈ ΠΈ потрСбитСлски Π΄Π°Π½Π½ΠΈ Π·Π° инициализация Π² ΠΎΠ±Π»Π°ΠΊ (cloud-init). НС Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π½ΠΈΡ‰ΠΎ спСциално със структурата Π½Π° диска ΠΈΠ»ΠΈ Π½Π°Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ; всяка конфигурация Ρ‰Π΅ ΡΠ²ΡŠΡ€ΡˆΠΈ Ρ€Π°Π±ΠΎΡ‚Π°.

НСка Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΠΎ-ΠΎΡ‚Π±Π»ΠΈΠ·ΠΎ цСлия процСс.

Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½Π΅ Π½Π° Django

Π‘ Π½Π°ΠΉ-Π½ΠΎΠ²Π°Ρ‚Π° вСрсия Π½Π° Django Ρ‰Π΅ Π²ΠΈ трябва Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° срСда (virtualenv) с Python 3.5 ΠΈΠ»ΠΈ ΠΏΠΎ-Π½ΠΎΠ²Π° вСрсия. Π’ Π±Π΅Ρ‚Π° Π±Π΅Π»Π΅ΠΆΠΊΠΈΡ‚Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Π΅ Python 3.6 Π΅ Π½Π°Π»ΠΈΡ‡Π΅Π½, Π½Π΅ΠΊΠ° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Π΄Π°Π»ΠΈ Ρ‚ΠΎΠ²Π° наистина Π΅ Ρ‚Π°ΠΊΠ°:

[cloud-user@8beta1 ~]$ python
-bash: python: command not found
[cloud-user@8beta1 ~]$ python3
-bash: python3: command not found

Red Hat Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Python ΠΊΠ°Ρ‚ΠΎ систСмСн инструмСнтариум Π² RHEL, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π·Π°Ρ‰ΠΎ сС ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° Ρ‚ΠΎΠ²Π°?

Π€Π°ΠΊΡ‚ Π΅, Ρ‡Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ Π½Π° Python всС ΠΎΡ‰Π΅ обмислят ΠΏΡ€Π΅Ρ…ΠΎΠ΄Π° ΠΎΡ‚ Python 2 към Python 2, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ самият Python 3 Π΅ Π² процСс Π½Π° Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ ΠΈ Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚ΠΎ сС появяват Π½ΠΎΠ²ΠΈ ΠΈ Π½ΠΎΠ²ΠΈ вСрсии. Π•Ρ‚ΠΎ Π·Π°Ρ‰ΠΎ, Π·Π° Π΄Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈ Π½Π° Π½ΡƒΠΆΠ΄Π°Ρ‚Π° ΠΎΡ‚ стабилни систСмни инструмСнти, ΠΊΠ°Ρ‚ΠΎ ΡΡŠΡ‰Π΅Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΡ€Π΅Π΄Π»Π°Π³Π° Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π½ΠΎΠ²ΠΈ вСрсии Π½Π° Python, систСмният Python бСшС прСмСстСн Π² Π½ΠΎΠ² ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΈ прСдостави Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° инсталиранС Π½Π° Python 2.7 ΠΈ 3.6. ΠŸΠΎΠ²Π΅Ρ‡Π΅ информация Π·Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΈ Π·Π°Ρ‰ΠΎ са Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π² публикацията Π² Π‘Π»ΠΎΠ³ΡŠΡ‚ Π½Π° Π›Π°Π½Π³Π΄ΡŠΠ½ Π£Π°ΠΉΡ‚ (Π›Π°Π½Π³Π΄ΡŠΠ½ Π£Π°ΠΉΡ‚).

Π’Π°ΠΊΠ° Ρ‡Π΅, Π·Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ Python, трябва само Π΄Π° инсталиратС Π΄Π²Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π°, ΠΊΠ°Ρ‚ΠΎ python3-pip Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΊΠ°Ρ‚ΠΎ зависимост.

sudo yum install python36 python3-virtualenv

Π—Π°Ρ‰ΠΎ Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΈ извиквания Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΏΡ€Π΅Π΄Π»Π°Π³Π° Langdon, ΠΈ Π½Π΅ инсталиратС pip3? ΠšΠ°Ρ‚ΠΎ сС ΠΈΠΌΠ° ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ прСдстоящата автоматизация, извСстно Π΅, Ρ‡Π΅ Ansible Ρ‰Π΅ изисква инсталиран pip, Π·Π° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŠΡ‚ pip Π½Π΅ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° virtualenvs с пСрсонализиран изпълним pip Ρ„Π°ΠΉΠ».

Π‘ Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π½Π° python3 Π½Π° вашС Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅ с инсталационния процСс Π½Π° Django ΠΈ Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰Π° систСма Π·Π°Π΅Π΄Π½ΠΎ с Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ Π½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ. Π’ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π·Π° изпълнСниС. Π’ΡƒΠΊ Π΅ прСдставСна Π΅Π΄Π½Π° вСрсия, Π½ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ свои собствСни процСси.

НиС Ρ‰Π΅ инсталирамС вСрсиитС Π½Π° PostgreSQL ΠΈ Nginx, Π½Π°Π»ΠΈΡ‡Π½ΠΈ Π² RHEL 8 ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Yum.

sudo yum install nginx postgresql-server

PostgreSQL Ρ‰Π΅ изисква psycopg2, Π½ΠΎ трябва Π΄Π° Π΅ Π½Π°Π»ΠΈΡ‡Π΅Π½ само във Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° срСда, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Ρ‰Π΅ Π³ΠΎ инсталирамС с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° pip3 Π·Π°Π΅Π΄Π½ΠΎ с Django ΠΈ Gunicorn. Но ΠΏΡŠΡ€Π²ΠΎ трябва Π΄Π° настроим virtualenv.

Π’ΠΈΠ½Π°Π³ΠΈ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π΅Π±Π°Ρ‚ΠΈ ΠΏΠΎ Ρ‚Π΅ΠΌΠ°Ρ‚Π° Π·Π° ΠΈΠ·Π±ΠΎΡ€Π° Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎΡ‚ΠΎ място Π·Π° инсталиранС Π½Π° Django ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, Π½ΠΎ ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС ΡΡŠΠΌΠ½ΡΠ²Π°Ρ‚Π΅, Π²ΠΈΠ½Π°Π³ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° сС ΠΎΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ към Linux Filesystem Hierarchy Standard. По-ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ, FHS ΠΊΠ°Π·Π²Π°, Ρ‡Π΅ /srv сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π°: β€žΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½Π΅ Π½Π° спСцифични Π·Π° хоста Π΄Π°Π½Π½ΠΈ – Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ систСмата ΠΏΡ€ΠΎΠΈΠ·Π²Π΅ΠΆΠ΄Π°, ΠΊΠ°Ρ‚ΠΎ Π΄Π°Π½Π½ΠΈ ΠΈ скриптовС Π½Π° ΡƒΠ΅Π± ΡΡŠΡ€Π²ΡŠΡ€, Π΄Π°Π½Π½ΠΈ, ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½ΠΈ Π½Π° FTP ΡΡŠΡ€Π²ΡŠΡ€ΠΈ ΠΈ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π½Π° систСмата Π·Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ».β€œ вСрсии (появяващи сС във FHS -2.3 ΠΏΡ€Π΅Π· 2004 Π³.)."

Π’ΠΎΠ²Π° Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ Π½Π°ΡˆΠΈΡΡ‚ случай, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ поставямС всичко Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π² /srv, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ собствСност Π½Π° нашия ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π» Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ (cloud-user).

sudo mkdir /srv/djangoapp
sudo chown cloud-user:cloud-user /srv/djangoapp
cd /srv/djangoapp
virtualenv django
source django/bin/activate
pip3 install django gunicorn psycopg2
./django-admin startproject djangoapp /srv/djangoapp

НастройванСто Π½Π° PostgreSQL ΠΈ Django Π΅ лСсно: ΡΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, ΡΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π», ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. Π•Π΄Π½ΠΎ Π½Π΅Ρ‰ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ трябва Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ инсталиратС PostgreSQL, Π΅ ΡΠΊΡ€ΠΈΠΏΡ‚ΡŠΡ‚ Π·Π° настройка Π½Π° postgresql, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ инсталиран с ΠΏΠ°ΠΊΠ΅Ρ‚Π° postgresql-ΡΡŠΡ€Π²ΡŠΡ€. Π’ΠΎΠ·ΠΈ скрипт Π²ΠΈ ΠΏΠΎΠΌΠ°Π³Π° Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚Π΅ основни Π·Π°Π΄Π°Ρ‡ΠΈ, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с администриранСто Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, ΠΊΠ°Ρ‚ΠΎ инициализация Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ ΠΈΠ»ΠΈ процСс Π½Π° Π½Π°Π΄Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅. Π—Π° Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°ΠΌΠ΅ Π½ΠΎΠ² СкзСмпляр Π½Π° PostgreSQL Π² RHEL систСма, трябва Π΄Π° изпълним ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°:

sudo /usr/bin/postgresql-setup -initdb

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° стартиратС PostgreSQL с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° systemd, Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΈ Π΄Π° настроитС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² Django. НС забравяйтС Π΄Π° рСстартиратС PostgreSQL, слСд ΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² конфигурационния Ρ„Π°ΠΉΠ» Π·Π° удостовСряванС Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° (ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ pg_hba.conf), Π·Π° Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΠ°Ρ€ΠΎΠ»ΠΈ Π·Π° потрСбитСля Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ. Ако срСщнСтС Π΄Ρ€ΡƒΠ³ΠΈ затруднСния, Π½Π΅ забравяйтС Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ настройкитС Π·Π° IPv4 ΠΈ IPv6 във Ρ„Π°ΠΉΠ»Π° pg_hba.conf.

systemctl enable -now postgresql

sudo -u postgres psql
postgres=# create database djangoapp;
postgres=# create user djangouser with password 'qwer4321';
postgres=# alter role djangouser set client_encoding to 'utf8';
postgres=# alter role djangouser set default_transaction_isolation to 'read committed';
postgres=# alter role djangouser set timezone to 'utc';
postgres=# grant all on DATABASE djangoapp to djangouser;
postgres=# q

Π’ΡŠΠ² Ρ„Π°ΠΉΠ»Π° /var/lib/pgsql/data/pg_hba.conf:

# IPv4 local connections:
host    all        all 0.0.0.0/0                md5
# IPv6 local connections:
host    all        all ::1/128                 md5

Π’ΡŠΠ² Ρ„Π°ΠΉΠ»Π° /srv/djangoapp/settings.py:

# Database
DATABASES = {
   'default': {
       'ENGINE': 'django.db.backends.postgresql_psycopg2',
       'NAME': '{{ db_name }}',
       'USER': '{{ db_user }}',
       'PASSWORD': '{{ db_password }}',
       'HOST': '{{ db_host }}',
   }
}

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ Ρ„Π°ΠΉΠ»Π° settings.py Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ настроитС конфигурацията Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° стартиратС ΡΡŠΡ€Π²ΡŠΡ€Π° Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, Π·Π° Π΄Π° стС сигурни, Ρ‡Π΅ всичко Ρ€Π°Π±ΠΎΡ‚ΠΈ. Π‘Π»Π΅Π΄ стартиранС Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΅ Π΄ΠΎΠ±Ρ€Π° идСя Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ администраторски ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π», Π·Π° Π΄Π° тСстватС Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° с Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ.

./manage.py runserver 0.0.0.0:8000
./manage.py createsuperuser

WSGI? Π£Π°ΠΉ?

Π‘ΡŠΡ€Π²ΡŠΡ€ΡŠΡ‚ Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΅ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π·Π° тСстванС, Π½ΠΎ Π·Π° Π΄Π° стартиратС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, трябва Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ подходящия ΡΡŠΡ€Π²ΡŠΡ€ ΠΈ прокси Π·Π° интСрфСйса Π½Π° шлюза Π½Π° ΡƒΠ΅Π± ΡΡŠΡ€Π²ΡŠΡ€Π° (WSGI). Има няколко ΠΎΠ±Ρ‰ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Apache HTTPD с uWSGI ΠΈΠ»ΠΈ Nginx с Gunicorn.

Π—Π°Π΄Π°Ρ‡Π°Ρ‚Π° Π½Π° интСрфСйса Π½Π° шлюза Π½Π° ΡƒΠ΅Π± ΡΡŠΡ€Π²ΡŠΡ€Π° Π΅ Π΄Π° ΠΏΡ€Π΅ΠΏΡ€Π°Ρ‰Π° заявки ΠΎΡ‚ ΡƒΠ΅Π± ΡΡŠΡ€Π²ΡŠΡ€Π° към ΡƒΠ΅Π± Ρ€Π°ΠΌΠΊΠ°Ρ‚Π° Π½Π° Python. WSGI Π΅ Ρ€Π΅Π»ΠΈΠΊΠ²Π° ΠΎΡ‚ уТасното ΠΌΠΈΠ½Π°Π»ΠΎ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ CGI Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π»ΠΈΡ‚Π΅ са Π±ΠΈΠ»ΠΈ Π½Π°ΠΎΠΊΠΎΠ»ΠΎ, Π° днСс WSGI Π΅ Π΄Π΅ Ρ„Π°ΠΊΡ‚ΠΎ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚ΡŠΡ‚, нСзависимо ΠΎΡ‚ използвания ΡƒΠ΅Π± ΡΡŠΡ€Π²ΡŠΡ€ ΠΈΠ»ΠΈ Ρ€Π°ΠΌΠΊΠ° Π½Π° Python. Но Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ ΡˆΠΈΡ€ΠΎΠΊΠΎΡ‚ΠΎ ΠΈΠΌ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅, всС ΠΎΡ‰Π΅ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ нюанси ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с Ρ‚Π΅Π·ΠΈ Ρ€Π°ΠΌΠΊΠΈ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π·Π° ΠΈΠ·Π±ΠΎΡ€. Π’ Ρ‚ΠΎΠ·ΠΈ случай Ρ‰Π΅ сС ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ Π΄Π° установим взаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ Gunicorn ΠΈ Nginx Ρ‡Ρ€Π΅Π· сокСт.

Въй ΠΊΠ°Ρ‚ΠΎ ΠΈ Π΄Π²Π°Ρ‚Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° са инсталирани Π½Π° Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ΠΈ ΡΡŠΡ€Π²ΡŠΡ€, Π½Π΅ΠΊΠ° ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ UNIX сокСт вмСсто ΠΌΡ€Π΅ΠΆΠΎΠ² сокСт. Въй ΠΊΠ°Ρ‚ΠΎ комуникацията във всСки случай изисква сокСт, Π½Π΅ΠΊΠ° сС ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ ΠΎΡ‰Π΅ Π΅Π΄Π½Π° ΡΡ‚ΡŠΠΏΠΊΠ° ΠΈ Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°ΠΌΠ΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π΅ Π½Π° сокСт Π·Π° Gunicorn Ρ‡Ρ€Π΅Π· systemd.

ΠŸΡ€ΠΎΡ†Π΅ΡΡŠΡ‚ Π½Π° създаванС Π½Π° услуги, Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ΠΈ ΠΎΡ‚ сокСт, Π΅ доста прост. ΠŸΡŠΡ€Π²ΠΎ сС създава Π΅Π΄ΠΈΠ½ΠΈΡ‡Π΅Π½ Ρ„Π°ΠΉΠ», ΠΊΠΎΠΉΡ‚ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° ListenStream, сочСща към Ρ‚ΠΎΡ‡ΠΊΠ°Ρ‚Π°, Π² която Ρ‰Π΅ бъдС създадСн UNIX ΡΠΎΠΊΠ΅Ρ‚ΡŠΡ‚, слСд Ρ‚ΠΎΠ²Π° Π΅Π΄ΠΈΠ½ΠΈΡ‡Π΅Π½ Ρ„Π°ΠΉΠ» Π·Π° услугата, Π² която Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°Ρ‚Π° Requires Ρ‰Π΅ сочи към сокСтния Π΅Π΄ΠΈΠ½ΠΈΡ‡Π΅Π½ Ρ„Π°ΠΉΠ». Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π°, във Ρ„Π°ΠΉΠ»Π° Π½Π° сСрвизната Π΅Π΄ΠΈΠ½ΠΈΡ†Π°, всичко, ΠΊΠΎΠ΅Ρ‚ΠΎ остава, Π΅ Π΄Π° ΠΈΠ·Π²ΠΈΠΊΠ°Ρ‚Π΅ Gunicorn ΠΎΡ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π°Ρ‚Π° срСда ΠΈ Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ WSGI ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Π·Π° UNIX сокСта ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Django.

Π•Ρ‚ΠΎ няколко ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π·Π° ΠΌΠΎΠ΄ΡƒΠ»Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΊΠ°Ρ‚ΠΎ основа. ΠŸΡŠΡ€Π²ΠΎ настроихмС Π³Π½Π΅Π·Π΄ΠΎΡ‚ΠΎ.

[Unit]
Description=Gunicorn WSGI socket

[Socket]
ListenStream=/run/gunicorn.sock

[Install]
WantedBy=sockets.target

Π‘Π΅Π³Π° трябва Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ Π΄Π΅ΠΌΠΎΠ½Π° Gunicorn.

[Unit]
Description=Gunicorn daemon
Requires=gunicorn.socket
After=network.target

[Service]
User=cloud-user
Group=cloud-user
WorkingDirectory=/srv/djangoapp

ExecStart=/srv/djangoapp/django/bin/gunicorn 
         β€”access-logfile - 
         β€”workers 3 
         β€”bind unix:gunicorn.sock djangoapp.wsgi

[Install]
WantedBy=multi-user.target

Π—Π° Nginx Ρ‚ΠΎΠ²Π° Π΅ прост Π²ΡŠΠΏΡ€ΠΎΡ Π·Π° създаванС Π½Π° прокси ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ настройка Π½Π° дирСктория Π·Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½Π΅ Π½Π° статично ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅, Π°ΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Ρ‚Π°ΠΊΠ°Π²Π°. Π’ RHEL ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° Nginx сС Π½Π°ΠΌΠΈΡ€Π°Ρ‚ Π² /etc/nginx/conf.d. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚Π΅ слСдния ΠΏΡ€ΠΈΠΌΠ΅Ρ€ във Ρ„Π°ΠΉΠ»Π° /etc/nginx/conf.d/default.conf ΠΈ Π΄Π° стартиратС услугата. Π£Π²Π΅Ρ€Π΅Ρ‚Π΅ сС, Ρ‡Π΅ стС Π·Π°Π΄Π°Π»ΠΈ server_name Π΄Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π° Π½Π° ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° вашия хост.

server {
   listen 80;
   server_name 8beta1.example.com;

   location = /favicon.ico { access_log off; log_not_found off; }
   location /static/ {
       root /srv/djangoapp;
   }

   location / {
       proxy_set_header Host $http_host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_pass http://unix:/run/gunicorn.sock;
   }
}

Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΉΡ‚Π΅ сокСта Gunicorn ΠΈ Nginx с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° systemd ΠΈ стС Π³ΠΎΡ‚ΠΎΠ²ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ тСстванСто.

Π“Ρ€Π΅ΡˆΠΊΠ° Π² лошия шлюз?

Ако Π²ΡŠΠ²Π΅Π΄Π΅Ρ‚Π΅ адрСса Π² Π±Ρ€Π°ΡƒΠ·ΡŠΡ€Π° си, Π½Π°ΠΉ-вСроятно Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π³Ρ€Π΅ΡˆΠΊΠ° 502 Bad Gateway. МоТС Π΄Π° Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅Π½ΠΎ ΠΎΡ‚ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π° UNIX сокСт ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС дълТи Π½Π° ΠΏΠΎ-слоТни ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π° Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ° Π² SELinux.

Π’ Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π° Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈΡ‚Π΅ Π½Π° nginx ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ Ρ€Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΎΠ·ΠΈ:

2018/12/18 15:38:03 [crit] 12734#0: *3 connect() to unix:/run/gunicorn.sock failed (13: Permission denied) while connecting to upstream, client: 192.168.122.1, server: 8beta1.example.com, request: "GET / HTTP/1.1", upstream: "http://unix:/run/gunicorn.sock:/", host: "8beta1.example.com"

Ако тСствамС Gunicorn Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ, Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΏΡ€Π°Π·Π΅Π½ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€.

curl β€”unix-socket /run/gunicorn.sock 8beta1.example.com

НСка Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Π·Π°Ρ‰ΠΎ сС случва Ρ‚ΠΎΠ²Π°. Ако ΠΎΡ‚Π²ΠΎΡ€ΠΈΡ‚Π΅ Π΄Π½Π΅Π²Π½ΠΈΠΊΠ°, Π½Π°ΠΉ-вСроятно Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ Π΅ ΡΠ²ΡŠΡ€Π·Π°Π½ със SELinux. Въй ΠΊΠ°Ρ‚ΠΎ изпълнявамС Π΄Π΅ΠΌΠΎΠ½, Π·Π° ΠΊΠΎΠΉΡ‚ΠΎ Π½Π΅ Π΅ създадСна ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°, Ρ‚ΠΎΠΉ Π΅ ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½ ΠΊΠ°Ρ‚ΠΎ init_t. НСка ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Ρ‚Π°Π·ΠΈ тСория Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°.

sudo setenforce 0

Всичко Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ° ΠΊΡ€ΠΈΡ‚ΠΈΠΊΠΈ ΠΈ ΠΊΡŠΡ€Π²Π°Π²ΠΈ сълзи, Π½ΠΎ Ρ‚ΠΎΠ²Π° Π΅ само отстраняванС Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ Π² ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ°. НСка Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°ΠΌΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ‚Π° само Π·Π° Π΄Π° сС ΡƒΠ²Π΅Ρ€ΠΈΠΌ, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ Π²ΡŠΡ€Π½Π΅ΠΌ всичко Π½Π° мястото ΠΌΡƒ.

ΠšΠ°Ρ‚ΠΎ опрСснитС страницата Π² Π±Ρ€Π°ΡƒΠ·ΡŠΡ€Π° ΠΈΠ»ΠΈ ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ ΠΎΡ‚Π½ΠΎΠ²ΠΎ Π½Π°ΡˆΠ°Ρ‚Π° curl ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ тСстовата страница Π½Π° Django.

И Ρ‚Π°ΠΊΠ°, слСд ΠΊΠ°Ρ‚ΠΎ сС ΡƒΠ²Π΅Ρ€ΠΈΡ…ΠΌΠ΅, Ρ‡Π΅ всичко Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΈ няма ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΡ‚Π°, Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°ΠΌΠ΅ SELinux ΠΎΡ‚Π½ΠΎΠ²ΠΎ.

sudo setenforce 1

Π’ΡƒΠΊ няма Π΄Π° говоря Π·Π° audit2allow ΠΈΠ»ΠΈ създаванС Π½Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ, Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° прСдупрСТдСния, със sepolgen, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° няма дСйствитСлно ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Django, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ няма пълна ΠΊΠ°Ρ€Ρ‚Π° Π½Π° Ρ‚ΠΎΠ²Π° Π΄ΠΎ ΠΊΠ°ΠΊΠ²ΠΎ Gunicorn ΠΌΠΎΠΆΠ΅ Π΄Π° иска Π΄ΠΎΡΡ‚ΡŠΠΏ ΠΈ Π΄ΠΎ ΠΊΠ°ΠΊΠ²ΠΎ трябва Π΄Π° ΠΎΡ‚ΠΊΠ°ΠΆΠ΅ Π΄ΠΎΡΡ‚ΡŠΠΏ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚Π΅ SELinux Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰, Π·Π° Π΄Π° Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚Π΅ систСмата, ΠΊΠ°Ρ‚ΠΎ Π² ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ позволяватС Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΈ Π΄Π° оставя ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π² ΠΆΡƒΡ€Π½Π°Π»Π° Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ дСйствитСлната ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС създадСна ΠΎΡ‚ тях.

Π£ΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚Π΅Π»Π½ΠΈ Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ

НС всСки Π΅ Ρ‡ΡƒΠ²Π°Π» Π·Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈ Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ Π² SELinux, Π½ΠΎ Ρ‚Π΅ Π½Π΅ са Π½Π΅Ρ‰ΠΎ Π½ΠΎΠ²ΠΎ. Много Π΄ΠΎΡ€ΠΈ са Ρ€Π°Π±ΠΎΡ‚ΠΈΠ»ΠΈ с тях, Π±Π΅Π· Π΄ΠΎΡ€ΠΈ Π΄Π° Π³ΠΎ ΠΎΡΡŠΠ·Π½Π°Π²Π°Ρ‚. ΠšΠΎΠ³Π°Ρ‚ΠΎ сС създава ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° въз основа Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°, ΡΡŠΠ·Π΄Π°Π΄Π΅Π½Π°Ρ‚Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° прСдставлява Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π΄ΠΎΠΌΠ΅ΠΉΠ½. НСка сС ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ Π΄Π° създадСм проста Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚Π΅Π»Π½Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°.

Π—Π° Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ Π΄ΠΎΠΌΠ΅ΠΉΠ½ Π·Π° Gunicorn, ΠΈΠΌΠ°Ρ‚Π΅ Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ някаква ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° ΠΈ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° трябва Π΄Π° ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Ρ‚Π΅ подходящитС Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅. ОсвСн Ρ‚ΠΎΠ²Π° са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ инструмСнти Π·Π° сглобяванС Π½Π° Π½ΠΎΠ²ΠΈ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ.

sudo yum install selinux-policy-devel

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡŠΡ‚ Π·Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈ Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ Π΅ чудСсСн инструмСнт Π·Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, особСно ΠΊΠΎΠ³Π°Ρ‚ΠΎ става Π²ΡŠΠΏΡ€ΠΎΡ Π·Π° пСрсонализирано ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ прилоТСния, ΠΊΠΎΠΈΡ‚ΠΎ сС доставят Π±Π΅Π· Π²Π΅Ρ‡Π΅ създадСни ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ. Π’ Ρ‚ΠΎΠ·ΠΈ случай Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π°Ρ‚Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Π·Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½ Π·Π° Gunicorn Ρ‰Π΅ бъдС възмоТно Π½Π°ΠΉ-проста - Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€Π°ΠΉΡ‚Π΅ основСн Ρ‚ΠΈΠΏ (gunicorn_t), Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€Π°ΠΉΡ‚Π΅ Ρ‚ΠΈΠΏ, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π·Π° ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½Π΅ Π½Π° мноТСство изпълними Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ (gunicorn_exec_t), ΠΈ слСд Ρ‚ΠΎΠ²Π° настройтС ΠΏΡ€Π΅Ρ…ΠΎΠ΄, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ систСмата Π΄Π° ΠΌΠ°Ρ€ΠΊΠΈΡ€Π° ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ изпълнявани процСси. ΠŸΠΎΡΠ»Π΅Π΄Π½ΠΈΡΡ‚ Ρ€Π΅Π΄ Π·Π°Π΄Π°Π²Π° ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° ΠΊΠ°Ρ‚ΠΎ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π½Π° Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ ΠΈΠΌ.

gunicorn.te:

policy_module(gunicorn, 1.0)

type gunicorn_t;
type gunicorn_exec_t;
init_daemon_domain(gunicorn_t, gunicorn_exec_t)
permissive gunicorn_t;

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Ρ‚Π΅ Ρ‚ΠΎΠ·ΠΈ Ρ„Π°ΠΉΠ» с ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΈ Π΄Π° Π³ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ към Π²Π°ΡˆΠ°Ρ‚Π° систСма.

make -f /usr/share/selinux/devel/Makefile
sudo semodule -i gunicorn.pp

sudo semanage permissive -a gunicorn_t
sudo semodule -l | grep permissive

НСка ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Π΄Π°Π»ΠΈ SELinux Π±Π»ΠΎΠΊΠΈΡ€Π° Π½Π΅Ρ‰ΠΎ Π΄Ρ€ΡƒΠ³ΠΎ освСн Ρ‚ΠΎΠ²Π°, Π΄ΠΎ ΠΊΠΎΠ΅Ρ‚ΠΎ Π½Π°ΡˆΠΈΡΡ‚ нСизвСстСн Π΄Π΅ΠΌΠΎΠ½ ΠΈΠΌΠ° Π΄ΠΎΡΡ‚ΡŠΠΏ.

sudo ausearch -m AVC

type=AVC msg=audit(1545315977.237:1273): avc:  denied { write } for pid=19400 comm="nginx" name="gunicorn.sock" dev="tmpfs" ino=52977 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:var_run_t:s0 tclass=sock_file permissive=0

SELinux Π½Π΅ позволява Π½Π° Nginx Π΄Π° записва Π΄Π°Π½Π½ΠΈ Π² UNIX сокСта, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ ΠΎΡ‚ Gunicorn. ОбикновСно Π² Ρ‚Π°ΠΊΠΈΠ²Π° случаи ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈΡ‚Π΅ Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‚ Π΄Π° сС промСнят, Π½ΠΎ прСдстоят Π΄Ρ€ΡƒΠ³ΠΈ прСдизвикатСлства. ΠœΠΎΠΆΠ΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ настройкитС Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½Π° ΠΎΡ‚ Π΄ΠΎΠΌΠ΅ΠΉΠ½ Π·Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π°Π½Π΅ Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½ Π·Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° прСмСстим httpd_t Π² Π΄ΠΎΠΌΠ΅ΠΉΠ½Π° с Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. Π’ΠΎΠ²Π° Ρ‰Π΅ Π΄Π°Π΄Π΅ Π½Π° Nginx нСобходимия Π΄ΠΎΡΡ‚ΡŠΠΏ ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΠΌ с ΠΏΠΎ-Π½Π°Ρ‚Π°Ρ‚ΡŠΡˆΠ½Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΠΎ отстраняванС Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ.

sudo semanage permissive -a httpd_t

И Ρ‚Π°ΠΊΠ°, слСд ΠΊΠ°Ρ‚ΠΎ стС успСли Π΄Π° Π·Π°ΠΏΠ°Π·ΠΈΡ‚Π΅ SELinux Π·Π°Ρ‰ΠΈΡ‚Π΅Π½ (наистина Π½Π΅ трябва Π΄Π° оставятС SELinux ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ) ΠΈ Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈΡ‚Π΅ Π·Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ са Π·Π°Ρ€Π΅Π΄Π΅Π½ΠΈ, трябва Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΊΠ°ΠΊΠ²ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ трябва Π΄Π° бъдС ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½ΠΎ ΠΊΠ°Ρ‚ΠΎ gunicorn_exec_t, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ всичко Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ ΠΎΡ‚Π½ΠΎΠ²ΠΎ. НСка ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ Π΄Π° посСтим уСбсайта, Π·Π° Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ Π½ΠΎΠ²ΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π·Π° ограничСния Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ°.

sudo ausearch -m AVC -c gunicorn

Π©Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰ΠΈ 'comm="gunicorn"', ΠΊΠΎΠΈΡ‚ΠΎ правят Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π½Π΅Ρ‰Π° Π²ΡŠΡ€Ρ…Ρƒ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π² /srv/djangoapp, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Ρ‚ΠΎΠ²Π° ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ Π΅ Π΅Π΄Π½Π° ΠΎΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ си струва Π΄Π° ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Ρ‚Π΅.

Но освСн Ρ‚ΠΎΠ²Π° сС появява ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΎΠ²Π°:

type=AVC msg=audit(1545320700.070:1542): avc:  denied { execute } for pid=20704 comm="(gunicorn)" name="python3.6" dev="vda3" ino=8515706 scontext=system_u:system_r:init_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=file permissive=0

Ако ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° услугата gunicorn ΠΈΠ»ΠΈ ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° ps, няма Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΈ процСси. ИзглСТда, Ρ‡Π΅ gunicorn сС ΠΎΠΏΠΈΡ‚Π²Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Π½Π° Python Π² Π½Π°ΡˆΠ°Ρ‚Π° срСда virtualenv, вСроятно Π·Π° Π΄Π° изпълнява Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ скриптовС. Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°ΠΌΠ΅ Ρ‚Π΅Π·ΠΈ Π΄Π²Π° изпълними Ρ„Π°ΠΉΠ»Π° ΠΈ Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Π΄Π°Π»ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΎΡ‚Π²ΠΎΡ€ΠΈΠΌ Π½Π°ΡˆΠ°Ρ‚Π° тСстова страница Π½Π° Django.

chcon -t gunicorn_exec_t /srv/djangoapp/django/bin/gunicorn /srv/djangoapp/django/bin/python3.6

Услугата gunicorn Ρ‰Π΅ трябва Π΄Π° сС рСстартира, ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΈΠ·Π±Ρ€Π°Π½ новият Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ рСстартиратС Π²Π΅Π΄Π½Π°Π³Π° ΠΈΠ»ΠΈ Π΄Π° спрСтС услугата ΠΈ Π΄Π° оставитС сокСта Π΄Π° я стартира, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΎΡ‚Π²ΠΎΡ€ΠΈΡ‚Π΅ сайта Π² Π±Ρ€Π°ΡƒΠ·ΡŠΡ€Π°. ΠŸΡ€ΠΎΠ²Π΅Ρ€Π΅Ρ‚Π΅ Π΄Π°Π»ΠΈ процСситС са ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΈΡ‚Π΅ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ps.

ps -efZ | grep gunicorn

НС забравяйтС Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ Π½ΠΎΡ€ΠΌΠ°Π»Π½Π° SELinux ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° ΠΏΠΎ-късно!

Ако ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ AVC ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π° сСга, послСдното ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° permissive=1 Π·Π° всичко, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΎ с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΈ permissive=0 Π·Π° останалата част ΠΎΡ‚ систСмата. Ако Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚Π΅ ΠΎΡ‚ какъв Π²ΠΈΠ΄ Π΄ΠΎΡΡ‚ΡŠΠΏ сС Π½ΡƒΠΆΠ΄Π°Π΅ Π΅Π΄Π½ΠΎ истинско ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π±ΡŠΡ€Π·ΠΎ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π½Π°ΠΉ-добрия Π½Π°Ρ‡ΠΈΠ½ Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ. Но Π΄ΠΎΡ‚ΠΎΠ³Π°Π²Π° Π΅ Π½Π°ΠΉ-Π΄ΠΎΠ±Ρ€Π΅ Π΄Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚Π΅ систСмата Π·Π°Ρ‰ΠΈΡ‚Π΅Π½Π° ΠΈ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ясСн, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π΅ΠΌ ΠΎΠ΄ΠΈΡ‚ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Django.

sudo ausearch -m AVC

Π‘Π΅ случи!

Появи сС Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ Django ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ с интСрфСйс, Π±Π°Π·ΠΈΡ€Π°Π½ Π½Π° Nginx ΠΈ Gunicorn WSGI. ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ…ΠΌΠ΅ Python 3 ΠΈ PostgreSQL 10 ΠΎΡ‚ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°Ρ‚Π° Π½Π° RHEL 8 Beta. Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅ Π½Π°ΠΏΡ€Π΅Π΄ ΠΈ Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ (ΠΈΠ»ΠΈ просто Π΄Π° Π²Π½Π΅Π΄Ρ€ΠΈΡ‚Π΅) Django прилоТСния ΠΈΠ»ΠΈ Π΄Π° изслСдватС Π΄Ρ€ΡƒΠ³ΠΈ Π½Π°Π»ΠΈΡ‡Π½ΠΈ инструмСнти Π² RHEL 8 Beta, Π·Π° Π΄Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ процСса Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅, Π΄Π° ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈΡ‚Π΅ производитСлността ΠΈΠ»ΠΈ Π΄ΠΎΡ€ΠΈ Π΄Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ Ρ‚Π°Π·ΠΈ конфигурация.

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

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