ZAKTUALIZOWANO W CELU DALSZEJ PRZEJRZYSTOŚCI:
Zgodnie z http://expressionengine.com/user_guide/installation/installation.html mówi:
W przypadku większości hostów uniksowych poniższe są typowe, ale możesz sprawdzić u swojego hosta, czy można użyć bardziej restrykcyjnych uprawnień, aby zezwolić PHP na pisanie w plikach (666) i folderach (777) . Na serwerach Windows poniższe wymagania nie będą miały zastosowania, ale musisz upewnić się, że pliki i foldery są zapisywalne przez ExpressionEngine. W tym celu może być konieczne skontaktowanie się z gospodarzem.
Nie jestem pewien, co to oznacza. Mogę zmienić określone pliki i foldery odpowiednio na 666 i 777, gdzie jestem chown'er, ale powyższe dźwięki brzmią tak, jakbym musiał pozwolić PHP to zrobić?
PYTANIE ORYGINALNE:
Muszę upewnić się, że PHP może pisać do określonych plików (666) i folderów (777).
Jak mam to zrobic?
źródło
Odpowiedzi:
Uzupełnię odpowiedzi Rahmu i MV rozwiązaniem technicznym. Wszystko, co następuje, dotyczy tylko systemów typu UNIX.
Przewiń obok sekcji chmod / chown na przykład, używając list ACL - potężniejszego narzędzia niż tryby plików UNIX.
Znajdowanie nazwy użytkownika serwera WWW
Najpierw musisz znać nazwę użytkownika, pod którym działa twój serwer WWW. Jeśli używasz Apache, może to być
apache
albohttpd
,www-data
itp Na większości systemów Debian-like, Apachewww-data
. W przypadku Nginx też tak jestwww-data
.Aby to sprawdzić, spróbuj:
Upewnij się, że nazwa użytkownika zwracana przez to polecenie jest spójna (na przykład używam nginx 99% czasu, ale to polecenie zwraca
tomcat7
, serwer WWW Java zainstalowałem raz) .Nadawanie uprawnień serwerowi internetowemu: za pomocą
chmod
ichown
Wykonanie
chmod
666 lub 777 (rozwiązanie tego typu problemów w złych dokumentacjach / samouczkach) może magicznie sprawić, że wszystko zadziała, ale jest niepewne. Przyznanie uprawnień 666 lub 777 zapewni dostęp do „innych”. Więc nie tylko Apache, ale takżegrandmother
insa
(pod warunkiem, że te konta użytkowników istnieją na twoim komputerze - ale tak naprawdę, unikaj robienia tego, chyba że jest to tylko do testowania / rozwiązywania problemów).Lepiej jest być bardziej szczegółowym i dać uprawnienia tylko Tobie i Apache. Zmień grupę plików, aby zapewnić pełną kontrolę nad plikami na serwerze internetowym. Aby to zrobić, zmień właściciela rekurencyjnie:
Ale najprawdopodobniej możesz chcieć zachować pełny dostęp do swoich plików, zmieniając tylko grupę:
Następnie wykonaj odpowiednie czynności,
chmod
aby dać grupiewww-data
takie same uprawnienia jak Ty. Na przykład, jeśli bieżącym trybem jest 640 (6 dla ciebie, 4 dla danych www, 0 dla innych, co przekłada się na -rw-r -----) , ustaw na 660 (6 dla ciebie, 6 dla www- data, 0 dla innych, tłumacząc na -rw-rw ----) . Zobacz odpowiedź rahmu, aby dowiedzieć się więcej o trybach plików, jest to stary, ale elegancki mechanizm.Aby uniknąć manipulowania tajemnymi liczbami
chmod
, możesz również użyć tej składni:Oznacza „do uprawnień grupy (
g
), dodawania (+
) odczytu i zapisu (rw
) w folderzeyour/folder/
, rekurencyjnie (-R
)”.W 90% przypadków powinno to wystarczyć.
Moja preferowana metoda: korzystanie z list ACL (lista kontroli dostępu)
Czasami pierwsze rozwiązanie nie jest wystarczające. Weźmię przykład Symfony Framework, który rejestruje i buforuje wiele danych. Potrzebuje więc dostępu do zapisu do odpowiedniego folderu.
A
chmod
/chown
metoda może nie być wystarczająca, gdy używasz równolegle z Symfony Konsola CLI (pod moim kontem użytkownika) oraz Web (użytkownika serwer WWW). Powoduje to wiele problemów, ponieważ Symfony stale modyfikuje uprawnienia.W takim przypadku użyjemy listy kontroli dostępu (ACL), która jest bardziej zaawansowanym sposobem zarządzania uprawnieniami w wielu systemach UNIX.
Oto polecenia podane w oficjalnej dokumentacji Symfony ( zmień
app/cache
iapp/logs
stosownie do swoich potrzeb ):W systemie, który obsługuje
chmod +a
(tj. Nie Debian / Ubuntu)W systemie, który nie obsługuje
chmod +a
(najczęściej)Będziesz potrzebować
setfacl
narzędzia; może jest domyślnie zainstalowany w twoim systemie, więc spróbujsetfacl -v
sprawdzić, czy polecenie jest dostępne.Jeśli polecenie nie jest dostępne, a używasz Ubuntu 14.04+, wystarczy zainstalować narzędzie:
W przeciwnym razie postępuj zgodnie z dokumentacją systemu operacyjnego, ponieważ może być konieczna zmiana sposobu montowania partycji ( dokumentacja Ubuntu tutaj ).
I oto jesteśmy:
Nigdy nie miałem żadnych problemów z tą metodą, satysfakcji ani zwrotu pieniędzy.
źródło
Bez względu na to, kto jest właścicielem plików, wystarczy 666 uprawnień i 777: ostatnia cyfra zapewnia dostęp każdemu użytkownikowi w systemie. Chociaż jest to najłatwiejszy sposób na zrobienie tego, zdecydowanie nie jest to najbezpieczniejszy z tego właśnie powodu.
Lepszy sposób na zrobienie tego
Pierwszą rzeczą, którą musisz zrozumieć, jest sposób działania uprawnień Unix . W celu zrozumienia odpowiedzi, którą podałem pod tym linkiem, proszę zauważyć, że uprawnienia można tłumaczyć na liczby:
---
--x
-w-
-wx
r--
r-x
rw-
rwx
A
chmod 666
jest wtedy równoważne zmianie uprawnień narw-rw-rw
.Następnie musisz dowiedzieć się, który użytkownik wykonuje skrypt PHP. Zwykle byłby to użytkownik prowadzący twój serwer WWW. Oto przykład, jak to zrobić (możesz zastąpić Apache nazwą swojego serwera WWW).
Gdy dowiesz się, który użytkownik wykonuje skrypty, a kto jest właścicielem plików, o których wspomniałeś, od Ciebie zależy, czy ustawisz odpowiednie uprawnienia. Należy pamiętać, że udzielenie dostępu do zapisu (nawet odczytu) każdemu użytkownikowi w systemie może być katastrofalne.
źródło
Expression Engine jest tak jak wiele innych aplikacji internetowych PHP, które potrzebują dostępu do odczytu i zapisu do niektórych plików i katalogów. Na przykład EE wymaga dostępu do zapisu do swoich plików config.php i database.php oraz dostępu do zapisu do swoich katalogów przesyłania plików.
Dokumentacja stwierdza, że ponieważ większość serwerów obsługuje PHP jako mod_php (a więc działa z uprawnieniami serwera WWW), i ponieważ prawdopodobnie będziesz przesyłać swoje pliki za pomocą FTP (lub podobnego) przy użyciu własnego użytkownika, te pliki i katalogi będą musiały otrzymać uprawnienia 666 (każdy może czytać i pisać) oraz 777 (każdy może czytać, pisać i przeglądać).
Nie jest to najbezpieczniejszy sposób, ale z pewnością najłatwiejszy, szczególnie jeśli korzystasz z usługi hostingowej.
Jednak, jak podają instrukcje EE, zapytaj swojego dostawcę hostingu, ponieważ niektórzy nie używają mod_php, ale fastcgi, suphp lub innej wersji. Serwery te uruchamiają PHP jako własny użytkownik, więc wszystkie przesyłane pliki są już czytelne i zapisywane przez PHP i każdy plik utworzony przez skrypty EE. W takim przypadku pliki i katalogi, do których dostęp ma PHP, musiałyby mieć dostęp 600 i 700. Inne pliki, do których dostęp miałby bezpośredni dostęp do serwera WWW (nie środowiska wykonawczego PHP) nadal wymagałyby dostępu 666 i 777).
źródło