Apache a nastavení práv pro virtual hosty

Mám na VPS několik webů, některé aktualizované častěji, jiné ne. Stále jsem řešil problém s uživatelskými právy – něco upravím přes ssh, něco nakopíruji přes sftp, něco si redakční systém vytvoří sám. A problém je na světě. Soubory nahrané přes sftp mají práva uživatele, který data nakopíroval, redakční systém uložil soubory s právy uživatele, pod kterým beží Apache.

Řešení je několik – neřešit to a doufat, nastavovat práva ručně nebo pomocí scriptu, dát takový script do cronu. Nebo to vyřešit jednou provždy pomocí apache-mpm-itk.

Apache má několik modulů podle toho jak zpracovává požadavky:

Prefork – každý požadavek jeden proces, PHP může být přímo součástí Apache, není problém s částmi php, které nejsou thread save (nezvládnou běžet najednou ve více vláknech, např. ImageMagic), nejstarší modul a zatím asi nejpoužívanější

Worker – více procesů a každý proces má několik vláken, je zde problém s PHP, ne všechny části jsou thread save, musí se spouštět přes FastCgi

Event – podobně jako Prefork, každý požadavek je jeden proces, php může být součástí Apache. Navíc je odolný proti útoku Slowloris, server je méně zatěžován, nižšší paměťové nároky, jako výchozí je od Apache verze 2.4

ITK – vychází z Preforku, je oblíbený hlavně u hostingových společností, protože lze Apache říct, pod jakým uživatelem má běžet proces obsluhující daný virtualhost

Pokud je PHP součástí Apache, má to další výhodu – přímo ve virtual host lze zadávat directivy pomocí php_value hodnota, php_admin_value hodnota, php_flag hotnota On|Off atd. Při použití php_admin_* nepůjde nastavená hodnota přepsat v .htaccess.

Instalace a nastavení modulu ITK

Instalace je velice jednoduchá. U mne na Ubuntu server stačí:

sudo apt-get install apache2-mpm-itk

Pak v /etc/apache2/sites-available/nazevwebu.conf přidat do VirtualHost jméno uživatele a skupinu:

AssignUserID uzivatel skupina

Takto vypadá konfigurace virtualhostu:

<VirtualHost *:80>
        ServerName stranka.cz
        ServerAlias www.stranka.cz

        ServerAdmin petr@ok2cqr.com

        DocumentRoot /home/stranka/www
        <Directory />
                Options FollowSymLinks
                AllowOverride All
        </Directory>

        AssignUserID stranka stranka

        ErrorLog /home/stranka/logs/error.log
        LogLevel warn
        CustomLog /home/stranka/logs/access.log combined

</VirtualHost>

Znovu načteme konfiguraci

sudo service apache2 reload

a nastavíme správně vlastníka všech souborů

cd /home/stranka
chown stranka.stranka * -R

 

Teď když budete kopírovat soubory přes SFTP nebo přes webové rozhraní, budou mít vždy nastavená správně práva (vlastníka).

 

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *