Spis treści
Apache mod_itk
Ostrzeżenie. Mod-itk to już martwy projekt. Nadal działa jednak bardzo dobrze i może być przydatny na środowiskach bez kontenerów, gdzie jest potrzeba izolacji poszczególnych aplikacji.
Pakiety RPM httpd-itk można pobrać z https://rpm.baszarek.pl/, lub z https://copr.fedorainfracloud.org/coprs/seem/httpd-itk/. Niektóre dystrybucje jeszcze je dostarczają, ale już coraz rzadziej.
Opis działania
- Apache otrzymują żądanie http przez protokół https. Wówczas mod-itk niczego jeszcze nie robi.
- Apache rozszywa zapytanie używając modułu mod_ssl.
- Używając dyrektywy AssignUserId z konfiguracji wirtualnego hosta Apache używa uprawnień dedykowanego użytkownika do operacji na plikach oraz proxy fcgi.
Biorąc pod uwagę mankament z pierwszego punktu, warto rozszywać ruch https za pomocą dedykowanego proxy, na przykład Nginxa, HAProxy, lub nawet innego Apache.
Instalacja i konfiguracja
Należy zainstalować pakiety httpd, httpd-itk, php-fpm, potrzebne moduły PHP-a oraz Apacha.
Po instalacji pakiety httpd-itk, należy zmienić moduł MPM w pliku /etc/httpd/conf.modules.d/00-mpm.conf z:
LoadModule mpm_event_module modules/mod_mpm_event.so
na
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
Moduł prefork działa wolniej, niż event, ale do prostych stron typu Wordpress, Mantis, czy Nextcloud w zupełności wystarczy.
Teraz trzeba odkomentować linijkę
LoadModule mpm_itk_module modules/mod_mpm_itk.so
w pliku /etc/httpd/conf.modules.d/00-mpm-itk.conf. Potem trzeba zrestartować Apache. Przeładowanie nie wystarczy i Apache się zawiesi.
systemctl restart httpd
Tworzenie użytkownika aplikacyjnego:
useradd -u 2001 -d /var/www/mojastronapl/ -s /sbin/nologin mojastronapl mkdir /var/www/mojastronapl/public_html chown -R mojastronapl:mojastronapl /var/www/mojastronapl chmod 700 /var/www/mojastronapl chmod 700 /var/www/mojastronapl/public_html semanage fcontext -m -t httpd_sys_rw_content_t '/var/www/mojastronapl(/.*)?' restorecon -Rv /var/www/mojastronapl
W pliku wirtualnego hosta, w sekcji <VirtualHost *:80> (tam, gdzie jest również ServerName), dodać linijkę
AssignUserId mojastronapl mojastronapl
W pliku /etc/php-fpm.d/mojastrona.pl.conf można dodać dwie nowe linijki:
listen.owner = mojastronapl listen.group = mojastronapl
Teoretycznie wystarczy teraz przeładować php-fpm oraz httpd, ale restart zapewni zabicie starych procesów, używających jeszcze uprawnień Apache.