Problemy z uprawnieniami w Symfony2

To pytanie było zadawane kilka razy, ale żadne z rozwiązań nie naprawia go w mojej sytuacji.

Uruchamiam Apache na Mac OSX Lion. Ten http://localhost/Symfony/web/config.php URL wyzwala 2 główne problemy:

Change the permissions of the "app/cache/" directory so that the web server can write into it.
Change the permissions of the "app/logs/" directory so that the web server can write into it.

Postępuj zgodnie z instrukcją w sekcji "Konfigurowanie uprawnień":

rm -rf app/cache/*
rm -rf app/logs/*
sudo chmod +a "_www allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs

To nie rozwiązuje problemów, więc spróbowałem:

sudo chmod -R 777 app/cache
To też nie działa. Jakieś pomysły, jak to naprawić?
Author: Yves M., 2012-07-13

3 answers

Niektóre wstępne wyjaśnienia:

  • aby zwiększyć wydajność Twojej witryny, Symfony2 musi buforować wiele danych i robi to poprzez zapis skompilowanych plików do katalogu app/cache.
  • aby zaproponować zaawansowane funkcje debugowania i monitorowania, Symfony2 musi śledzić zachowanie Twojej witryny i robi to poprzez zapis pliki śledzenia do katalogu app/logs.

Kilka słów o Apache:

  • Apache działa pod określonym user i określonym group (Zwykle www-data dla obu, ale musisz sprawdzić instalację, aby znaleźć używane. Na przykład, jeśli wyszukasz /etc/apache2/envvars w Linuksie, będziesz miał dwie zmienne APACHE_RUN_USER=www-data i APACHE_RUN_GROUP=www-data).
  • oznacza to, że kiedy budujesz swoją stronę na ramionach Symfony2 i uruchamiasz ją pod Apache, każdy zapis i odczyt odbywa się w imieniu Apache user i group.

Analizuj swoje problemy:

  • Po pierwsze masz błędy typu:

    Change the permissions of the "app/cache/" directory so that the web server can write into it.
    Change the permissions of the "app/logs/" directory so that the web server can write into it.
    

    Ponieważ twoje app/cache i app/logs foldery nie są zapisywalne dla Twojego Apache user i group.

  • Po Drugie, wykonując:

    sudo chmod +a "_www allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
    sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
    

    Modyfikujesz listę kontroli dostępu (ACL) folderów app/cache i app/logs w celu nadania pewnych uprawnień whoami (w zasadzie Tobie) i _www. Takie podejście nie działa i może mieć dwa pochodzenie:

    1. Modyfikujesz ACLs, ale czy twoje jądro i system plików są skonfigurowane tak, aby uwzględniały ACLs?

    2. Dajesz pewne uprawnienia whoami i _www, ale czy sprawdziłeś, czy Twoja instancja Apache działa pod jednym z tych użytkowników?

  • Po Trzecie twoi koledzy rozwiązują problem wykonując:

    sudo chmod -R 777 app/cache 
    
    To podejście działa z dwóch powodów:]}
    1. dajesz wszystko uprawnienia (Odczyt i zapis) dla każdego użytkownika w Twoim systemie (777), więc jesteś pewien, że przynajmniej twój użytkownik Apache i grupa mają również wymagane uprawnienia do zapisu w app/cache.
    2. robisz to rekurencyjnie (-R), więc wszystkie zagnieżdżone foldery utworzone w katalogu app/cache są również objęte nowymi uprawnieniami.

Proste rozwiązanie:

  1. Usuń zawartość folderów app/cache i app/logs:

    rm -rf app/cache/*
    rm -rf app/logs/*
    
  2. Give all uprawnienia (Odczyt i zapis) do folderów app/cache i app/logs:

    chmod 777 app/cache
    chmod 777 app/logs
    

Uwagi:

  • istnieją również inne rozwiązania (z większą trudnością), takie jak udzielanie uprawnień konkretnemu użytkownikowi i grupie Apache oraz używanie ACLs do precyzyjnego dostrajania.
 50
Author: fsenart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-13 23:31:29

Przewodnik pod "Konfigurowanie uprawnień" mówi, że jeśli Twój system nie obsługuje chmod +a, musisz to zrobić:

HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1`

sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX app/cache app/logs
sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX app/cache app/logs

Jeśli to nie zadziała spróbuj tego:

umask(0002); // This will let the permissions be 0775

// or

umask(0000); // This will let the permissions be 0777
Pierwsze rozwiązanie zadziałało. Mam nadzieję, że to pomoże komuś z tego samego typu problemem.
 9
Author: javidazac,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-18 13:28:15
rm -rf app/cache/*
rm -rf app/logs/*


APACHEUSER=`ps aux | grep -E '[a]pache|[h]ttpd' | grep -v root | head -1 | cut -d\  -f1`
sudo setfacl -R -m u:$APACHEUSER:rwX -m u:`whoami`:rwX app/cache app/logs
sudo setfacl -dR -m u:$APACHEUSER:rwX -m u:`whoami`:rwX app/cache app/logs

Source: http://symfony.com/doc/current/book/installation.html#configuration-and-setup

 1
Author: Farid Movsumov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-12 18:08:02