Problem
Używam Apache Web Server, który ma właściciel folderu na _www: _www. Ciągle zapominam o najlepszych praktykach, jeśli chodzi o uprawnienia do plików, na przykład, gdy tworzę nowy projekt Laravel 5.
Czy to oznacza, że Apache wymaga dostępu do folderów pamięci i dostawców, czy tylko ich bieżącej zawartości?
Laravel 5 wymaga, aby folder do przechowywania był zapisany. Pomimo tego, że nie jestem najlepszym pomysłem, ustawiłem 777 uprawnienia do folderu
Oficjalna dokumentacja mówi:
Laravel może wymagać skonfigurowania pewnych uprawnień: Foldery w pamięci i dostawcy wymagają dostępu do zapisu przez serwer WWW.
Rozumiem, że może być o wiele lepiej, gdybym po prostu zmienił właściciela zamiast uprawnień.
Ale teraz mam problemy z moim redaktorem, zawsze pytam mnie o hasła, gdy chcę zapisać plik.
Jaki byłby najlepszy sposób rozwiązania tych problemów ?
Rozwiązanie
Przed udzieleniem ostatecznej odpowiedzi chcę po prostu stwierdzić oczywiste. Jeśli chcesz udzielić dowolnego folderu uprawnienia 777, prawie uinwentujesz wszystkich do czytania, pisania i wykonywania plików w tym katalogu.
Istnieją w zasadzie dwa sposoby na konfigurowanie własności i uprawnienia:
Drugi to sposób, w jaki większość ludzi i tak sugeruje Laravel.
Zakładając, że WWW-DATA jest użytkownikiem serwera WWW, możesz uruchomić:
sudo chown -r www-data: www-data/ścieżka/do/Twoje/laravel-directory
I to jest dobre, ponieważ Twój serwer Web. Zła część polega na tym, że zalogowany użytkownik (albo za pośrednictwem FTP lub SSH) będzie prawdopodobnie innym użytkownikiem, więc to, co chcesz zrobić, to dodać tego użytkownika do grupy WebServer:
sudo usermod -a -g www -data ubuntu
Oczywiście zakłada to, że Twój serwer WWW działa jako www-Data (domyślnie domyślnie domowa), a użytkownikiem jest Ubuntu (jest Vagrant, jeśli używasz Homestead).
Następnie dobrą praktyką jest ustawienie wszystkich katalogów na 755 i wszystkie pliki na 644… Ustaw uprawnienia plików za pomocą następującego polecenia:
sudo Znajdź/ścieżka/do/laravel -directory -Type f -exec chmod 644 \;
Ustaw uprawnienia do katalogu:
sudo Znajdź/ścieżka/do/laravel -directory -Type d -exec chmod 755 \;
Twój użytkownik jako właściciela
Wolę posiadać wszystkie katalogi i pliki, z którymi pracuję (to znacznie łatwiejsza praca ze wszystkim), więc robię:
sudo chown -r my-użytkownik: www-data/ścieżka/do/Twój/laravel-directory
Wtedy mogę po prostu przekazać te uprawnienia dla siebie i użytkownikowi WebServer:
sudo Znajdź/ścieżka/do/laravel -directory -Type f -exec chmod 664 \;
sudo Znajdź/ścieżka/do/laravel -directory -Type d -exec chmod 775 \;
Jedną z rzeczy, o których nie chcesz zapomnieć, jest zapewnienie WebServer dostęp do odczytu i zapisu plików w folderze pamięci podręcznej
Twój serwer internetowy będzie musiał również przesyłać i przechowywać dane, więc upewnij się, że podajesz również uprawnienia do folderu pamięci:
sudo chgrp -r www -data magazynowanie bootstrap/pamięci podręcznej
sudo chmod -r UG+RWX Storage Bootstrap/Cache
To nie było takie trudne, prawda??