RHEL 8 á¤áł áááá˘áá˝ áĽá á áłá˛áľ áŁá áŞáŤáľá áŤáááŁá, áááአáážá˝á áááľáľ áá˝áá, ááá áá á áłá˛áľ áááŽá˝á ááá áááá á á°ááŁá á¨á°áťá áá, áľááá á¨áá á áłá˝ á Red Hat Enterprise Linux 8 Beta áá á¨á°áá°á¨á° á¨áá°áá áŞáŤ áá á¨á° áááľá á áľááá áľáááá á á áá° áĽááľ á á áá áá.
á ááá˘áá˝ áááľ áłáá á¨áááá á¨ááŽááŤá á ááŁáĽ ááá ááááá áĽáá° áá°á¨áľ á áľááá á¨Django áĽá PostgreSQL áĽááᣠá áááŹá˝áá˝á áááá á á áŁá á¨á°ááá° áĽáá¨áľ áĽá RHEL 8 Beta á á¨ááą áá áĽááá
áᢠá¨ááŤá áááľ á°á¨á᪠(áŤáá°áá°áĄ) ááĽá¨ áááŽá˝á áĽáá¨ááŤáá.
á¨áá¨áŤ á áŤáŁá˘á ááááŁáᣠááááŤáąá á ááśáá˝áᣠá¨áĽá ááŤáŁáá˝ áá á áĽáŽ ááľáŤáľ áĽá á áŤáŁá˘áá˝á á¨á ááŤáł á ááááŽá˝ áá ááá¨á á áľá°áłá˝ áľáááᢠá á á˛áľ ááŽáááľ áááááᣠáá ááá áĽááłáá áľ áĽá áĽáá´áľ áĽáá°áááá á áľááá áá¨áľ áĽáá˛á˝á áľáá˝ áĽá ááá ááŽáśáłáá á áĽá
á ááá á áááá áá˝áá áĽá á¨á፠áá° á ááśáá˛á áĽá á¨á áá ááľáĽáľáĽ áá
áŽá˝á ááá á áá˝ááᢠáᏠáľá áĽáá°áá
ááááľ ááŽáśáłáá ááá á áĽá¨á°ááááá áá.
ᨠRHEL 8 á¤áł áŞá¤á ááľáá á áá°ááŤáľ áĽááááᢠáááŁá áá˝áá á¨áŁáś ááŤá ááá á¨á áľá-ááááł ááááŁá áá á¨ááááá á¨KVM áĽáááł ááľá áá áá áá˝ááᢠá¨áĽáááł ááľá á˛á áá ááłáłáł áĽá á¨á°á áá ááἠáCloud ááľáááŞáŤ (cloud-init) á¨áŤá áááŁá á˛á˛ áááá áŤáľáááááłáᢠá á˛áľá ááá á ááá á ááá áĽá áá˝ áአááá ááľá¨á á áŤáľáááááľáᤠááááá áá á áá°áŤáá˘
á á ááá áá°áąá á áĽáááľ áĽáááá¨á°áá˘
áááá á ááŤá áá
á á á˛áą á¨ááá áľáŞáľáŁ á¨áááá 3.5 ááá á¨á፠á áá áŤáá áááŁá á áŤáŁá˘ (virtualenv) áŤáľáááááłáᢠá á áľá-ááááł ááľáłááťáá˝ ááľáĽ Python 3.6 áĽááłá áá¨áľ áá˝ááᣠáá á áĽááἠáá áááá áĽáááľá˝áĄ
[cloud-user@8beta1 ~]$ python
-bash: python: command not found
[cloud-user@8beta1 ~]$ python3
-bash: python3: command not found
áá áŽá፠Pythoná á RHEL ááľáĽ áĽáá° á¨áĽáááľ ááŁáŞáŤ áľáĽáľáĽ á áááľ áá áááᣠáłá˛áŤ áá ááá áŤáľááá?
áĽáááłá áá áĽá á¨áááá á áááá˝ á¨áááá 2 áá° áááá 2 á¨áá°á¨ááá á˝ááá áĽáŤá°áá°á áá ᣠáĽáą áŤáą áááá 3 á áááľ áááľ áá áá ᣠáĽá áĽá áĽá á°á¨á᪠á áłá˛áľ áľáŞáśá˝ á á¨ááá áĽá¨áłáŠ ááᢠáľááá
ᣠáá°á áááá˝ á¨á°ááŤáŠ á á˛áľ á¨áááá áľáŞáśá˝á á˛áŤáá á¨á°á¨áá á¨áľáááľ ááłáŞáŤáá˝á ááááľ áááááľáŁ á˛áľá°á Python áá° á á˛áľ áĽá
á á°ááľáś áááąáá Python 2.7 áĽá 3.6 á¨ááŤá á˝ááł á á
áá§áᢠáľá áááŚáš áĽá ááá áĽáá°á°á°á¨á á°á¨á᪠áá¨á á á
áľááľ ááľáĽ ááááá˘
áľááá ᣠPythoná áááľáŤáľ áááľ ááŹáá˝á áĽáť ááŤá áŤáľáááááłáᣠpython3-pip áĽáá° áĽááááľ á°áŤáˇáá˘
sudo yum install python36 python3-virtualenv
ááá áĽáá° ááááśá áĽáá°áá ááá á¨ááĽáł ááá áĽáŞáá˝á á áá áá áĽá pip3 á á ááŤáá? á¨ááŞáá á ááśááľá˝á á¨áááľ ááľáĽ á ááľááŁáľáŁ á¨ááá ááá áĽá áá ááťááá á¨áášáááááľ áľáááá°áá Ansible ááá áĽáá˛á°áŤ áĽáá°ááŤáľááá ááłáááá˘
á áá°áŤ python3 á áľá°ááá á ááŤáááľ á ááá á¨ááŤá áá°áľ ááá á áĽá á¨ááá˝ ááááťá˝á áá á¨á á°áŤá áľáááľ áĽáá˛ááááľ ááľá¨á áá˝ááᢠá áááá¨áĽ áá áĽá á¨ááľáá¸á፠á ááŤáŽá˝ á áᢠáĽáá á¨áá¨á á á ááľ áľáŞáľ á á, ááá áá á°á áááá˝ á¨áŤáłá¸áá áá°áśá˝ áá áá áá˝áá.
Yumá á áá áá á RHEL 8 á¨ááááľá PostgreSQL áĽá Nginx áľáŞáśá˝á á ááŁáŞ áĽááááááá˘
sudo yum install nginx postgresql-server
PostgreSQL psycopg2 áŤáľááááááŁááá áá ááááľ áŤáá áľ á á¨áá˝ááá¤áá á áŤáŁá˘ áĽáť áááŁáľááá áá3á á áá áá á¨ááá áĽá áááŽáá áá áĽááááááᢠáá ááááŞáŤ á¨áášáŞááá áááááľ á ááĽáá˘
á¨ááá ááŽáááśá˝á áááľá¨á áľáááááá áŚáł á ááá¨áĽ áááľ áá áá áá áĽá ááááŽá˝ á á ᣠáá áĽááŁáŹ á˛ááááľ áá áá áá° ááááľ ááá áľáááľ á°áá¨áľ á°á¨á ááá áá˝ááᢠá á°ááá FHS áĽáá˛á ááá /srv á: "á áľá°ááá -á°áŽá ááἠ- áľáááą á¨ááŤááá¨áá áĽáá° á¨áľá á áááá ááἠáĽá áľááŞááśá˝, á á¤áá˛á á ááááŽá˝ áá á¨á°á¨áḠááἠáĽá á¨áľáááľ áá¨ááťáá˝á ááááŁá á" áľáŞáśá˝ (á 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 á á˛áá á ááľ ááá ááľáłááľ áŤááĽááľ ááá á˘áá á ááľáľááŹáľql-á áááá ááŹá á¨á°áŤáá á¨ááľáľááŹáľql áááá áľááŞááľ ááᢠáá áľááŞááľ á¨áłáłá¤á áááľá°á á áľá°áłá°á áá á¨á°áŤáŤá áĽáá° áááľá°á ááľáááŞáŤ ááá á¨ááťáťáŤ áá°áľ áŤá áá°á¨áłá á°ááŁáŤáľá áĽáá˛áŤá¨ááá áŤááááłáᢠá á˛áľ ᨠPostgreSQL ááłáá á RHEL áľáááľ áá ááááá áľáááá ááľáŹáľ á ááĽááĄ-
sudo /usr/bin/postgresql-setup -initdb
á¨á፠systemd á á áá áá PostgreSQL á ááááᣠáłáłá¤á ááá á áĽá á ááá ááľáĽ ááŽáááľ áááááľ áá˝ááᢠááá°áá áŞáŤá á°á áá á¨ááá áá áá¨ááťá ááááá á á°áá áá á¨áá¨áá፠áá á ááá (á á°áááś pg_hba.conf) áá áááŚá˝á áŤá°á¨á á áá PostgreSQL á áĽáá°áá ááľááááá áŤáľáłááąá˘ ááá˝ á˝ááŽá˝ áŤáá áááľáŁ á pg_hba.conf ááá ááľáĽ á¨IPv4 áĽá IPv6 á ááĽáŽá˝á ááá¨ááá áŤá¨áááĄá˘
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 ááá˘
á¨áἠá°áá¨á ááľáá á áááá˝ áľáŤ á¨áľá á áááá áĽáŤááá˝á áá° áááá áľá áááá ááľá°ááá ááᢠWSGI á¨á˛áá á áá°áŽá˝ á áá áŠá áľ áá áŤááá á áľá¨á áłáŞá á ááľ ááᣠáĽá áᏠWSGI á¨áἠá áááá ááá á¨áááá áááá ááá ááá áá á¨áĽááá°á á°á¨á ááᢠáá á á°áá áĽá á áá á˘ááá ᣠá¨áĽááá ááááá˝ áá á˛á°áŠ á ááá áĽá ááŠááśá˝ áĽá áĽá áááŤáá˝ á áᢠá áá á ááŁá á Gunicorn áĽá Nginx ááŤá¨á á áśáŹáľ á áŠá ááľá°ááĽá áááá á áĽááááŤááá˘
áĽááá áááąá áááá˝ á á ááľ á áááá áá áľáá°áŤáᣠá¨ááľááá áśáŹáľ ááá UNIX áśáŹáľ ááá áá áĽááááᢠá ááááá áááł áááááą áśáŹáľ áľáááŤáľáááá á ááľ á°á¨á᪠áĽááá áááá°áľ áĽáááá áĽá áGunicorn á systemd á¨áśáŹáľ ááá áá áĽááá áá˘
á¨áśáŹáľ áá˘á á áááááśá˝á á¨ááá á áá°áľ á áŁá ááá ááᢠá ááááŞáŤáŁ á¨áŠáááľ áśáŹáľ á¨ááá áá áľá ááĽáĽ á¨ááŤáááá°á ᨠListenStream áááŞáŤá á¨áŤá á¨áŠááľ ááá ááá áŤáᣠá¨ááŤá á¨ááŤáľáááá á¨á áááááľ ááá ááá áá° áśáŹáľ ááá ááá áá áááᢠá¨ááŤá á á áááááľ ááá ááá ááľáĽ á¨áá¨á áááŽáá á¨áááŁáá á áŤáŁá˘ áá°áá áĽá á UNIX áśáŹáľ áĽá áááá áá°áá áŞáŤ WSGI áá°áŞáŤ ááá á ááá˘
áĽáá° áá°á¨áľ áá áááŁá¸á á¨áá˝áá¸á á ááłááľ á¨ááá áááá˝ ááłááá˝ áĽáá á áᢠááááŞáŤ áśáŹáąá á ááá á°áá.
[Unit]
Description=Gunicorn WSGI socket
[Socket]
ListenStream=/run/gunicorn.sock
[Install]
WantedBy=sockets.target
á áá Gunicorn daemon á áááá áŤáľáááááłáá˘
[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 {
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;
}
}
systemd á á áá áá á¨Gunicorn socket áĽá Nginxá áŤáľááአáĽá ááá¨á ááááá ááá áááľá˘
ááĽá á¨ááľáá áľá á°áľ?
á áľáŤáťáá áá° á áłá˝á áŤáľááŁá ááááŁáľ 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
áá áá áľá˝áľ áĽá á¨á°á áĽáᣠááŤáľá¨áľá áá˝áá, ááá áá áá ááŽáśáłááá áá¨á áĽáť áá. á˝áአáá áááá ááá¨ááἠáĽáť áźáŠá áĽáá°áááá á¨á፠á áá áááá ááá áá° áŚáłá áĽáááá°áááá˘
áášá á á áłáš ááľáĽ á áá°áľ ááá á¨áá á¨áá áľáááá áĽáá°áá á ááľááá á¨áááá á¨áá¨áŤ áá˝ áá¨áľ áá˝ááá˘
áľááá ᣠááá ááá áĽáá°áá°áŤ áĽá ááá á°á¨á᪠á¨áááľ á˝ááŽá˝ áĽáá°áá áŤá¨áááĽá á áá SELinuxá áĽáá°áá áĽáááááá˘
sudo setenforce 1
á á áá áá áľááááá á¨ááá áá°áá áŞáŤ áľááá áááŽáá áá ááááľ áĽáá°áááá áĽá áá ááľá¨áľ áĽááłáá áľ á¨áááá˝ áá áŤááł áľááá áĽáá á¨á´áááá áá áľá áŚá˛áľ2allow ááá ááá፠áá á¨á°áá°á¨áą ááá˛áá˝á áááá á á áááááᢠáľááá , áľáááąá ááá á á 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 á Gunicorn áá°á°á ááá áľ UNIX áśáŹáľ áá¨áá áĽááłáá˝á áá¨ááááᢠá á°áááś áĽáá°áá áŁá ááłáŽá˝ áá ááá˛áá˝ áááἠááááŤá, ááá áá áá°ááľ ááá˝ áá°ááá˝ á á. áĽáá˛áá á¨á፠á ááĽáŽá˝á á¨áá°áĽ á፠áá° áááľ á፠ááá¨á áá˝ááᢠá áá httpd_tá áá° áááśá˝ á፠áĽááááłá áľá˘ áá Nginx á áľááááá ááłá¨áť áá°á áá áĽá á°á¨á᪠á¨áá¨á áľáŤá ááá á áĽáá˝ááá.
sudo semanage permissive -a httpd_t
áľááá ᣠá áá´ á¨SELinux áĽá á ááľá¨á á¨áťá (á áĽááἠá¨SELinux ááŽáááľá á á°áá°á áááł áá°á á¨ááĽááľá) áĽá á¨áááľ ááŤááš á¨á°áŤá ááá ááá á áľááá áĽáá˛á°áŤ á áľááá áĽáá° gunicorn_exec_t ááááľ áá°á¨á áĽááłáá áľ ááá áŤáľáááááłáᢠáĽáá°ááᢠáľá ááłá¨áť áá°áŚá˝ á áłá˛áľ áááááśá˝á ááá¨áľ áľá ᨠáášá ááááĽááľ áĽááááá˘
sudo ausearch -m AVC -c gunicorn
á /srv/djangoapp ááľáĽ á áááá˝ áá á¨á°ááŤáŠ áááŽá˝á á¨áá°áŠ 'comm="gunicorn" á¨áŤá áĽá áááááśá˝á áłáŤáá áŁáľááá áá á ááá˝ áá áá á¨áááŁá¸á áľáááá˝ ááľáĽ á ááą ááá˘
áá á á°á¨á᪠ᣠáĽáá°áá áŤá áááĽááľ ááłáŤá-
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 áľáááá áŤáľáŹáą ááá á ááľ áá°áśá˝á á áŤáŠáᢠáááŽáá á¨áááá á áľá°ááááá á áĽá á¨áá˝ááá¤áá á áŤáŁá˘ áááááľ áĽá¨áá¨á¨ áŤá áááľááᣠááááŁáľá á¨á°áŤá°á áľááŞááśá˝á áááľáŹáľá˘ áľááá á áá áĽááá á áááľ áá°áá አá¨áá˝á áááá˝á ááááľ áĽááľáá áĽá á¨áááá á¨áá¨áŤ ááťá˝áá ááááľ áĽáá°ááá˝á áĽáááľá˝á˘
chcon -t gunicorn_exec_t /srv/djangoapp/django/bin/gunicorn /srv/djangoapp/django/bin/python3.6
á á˛áą áá፠á¨ááá¨áĄ á ááľ á¨áááŽáá á áááááľ áĽáá°áá áááá á áá áľá˘ áá˛áŤáá áĽáá°áá ááľááá ááá á áááááąá ááá áĽá á á áłáš ááľáĽ áŁá˘áŤáá á˛á¨ááą áśáŹáą áĽáá˛ááá ááľá¨á áá˝áá. ps á áá áá áá°áśá˝ áľáááá áááŤáá˝á ááá áá¸áá áŤá¨áááĄá˘
ps -efZ | grep gunicorn
á áá áá°á á á¨SELinux ááᲠááá áá á áááą!
á¨AVC áááááśá˝á á áá á¨á°ááá¨áąáŁ á¨áá¨á¨áťá áááĽááľ á¨áá°áá áŞáŤá áá áá°áŤáŤááľ áááŽá˝ áá ááá°á=1 áĽá áááŞá áľáááľ áááľ=0 áááᢠá ááľ áĽááá°á áá°áá áŞáŤ áá ááááľ ááłá¨áť áĽáá°ááŤáľáááá á¨á°á¨áą, áĽáá°áá áŤá á˝ááŽá˝á ááááłáľ áááĄá ááááľ á ááĽááľ ááááľ áá˝áá. áá áĽáľá¨á፠áľá¨áľ á¨áľáááąá á°á áááľ áá á á áĽá á¨ááá ááŽáááľ ááá˝ á¨áá áĽá á áá ááá á¨áá˝á áŚá˛áľ ááááľ áĽáŠ ááá˘
sudo ausearch -m AVC
á°á¨á°á°!
á¨áá°áŤ á¨ááá ááŽáááľ á Nginx áĽá Gunicorn WSGI áá á¨á°áá°á¨á° á¨ááľ áááľ áá
áł áłááˇáᢠPython 3 á áĽá PostgreSQL 10á á¨RHEL 8 á¤áł áá¨ááťáá˝ á áá
á¨ááᢠá áá áá°ááľ áááľ áĽá á¨Django á áááŹá˝áá˝á ááá á (ááá á ááá áá°ááŤáľ) ááá ááá˝ á¨ááá ááłáŞáŤáá˝á á RHEL 8 Beta áá°áľ á¨áááá áá°áąá á áŤáľ á°á áááľáŤáľáŁ á ááááá áááťáťá ááá áá
á áá
á á áááľ áááŤá áá˝ááá˘
ááá: hab.com