--=REKLAMA=--

Jak działają prawa dostępu do plików w UNIX?

Z Joomla!WikiPL

Prawa dostępu do plików w systemach Unix/Linux mogą wydawać się zagmatwane. Są trzy podstawowe rodzaje praw w systemie UNIX;

Prawa właściciela (Owner) : regulują Twój dostęp do plików.
Prawa grupy       (Group) : regulują Twój dostęp i dostęp członków Twojej grupy.
Inne prawa        (Other) : regulują dostęp dla wszystkich innych.

W systemie UNIX, kiedy prawa zostaną skonfigurowane, serwer zezwala ci na definiowanie różnych praw dla każdej z tych trzech kategorii użytkowników. W środowisku serwera sieciowego prawa te określają, którzy właściciele witryn mają dostęp do jakich katalogów i plików?

Jak wygląda zapis praw dostępu w UNIX?

Kiedy przeglądasz swoje pliki przez klienta FTP lub z wiersza poleceń serwera, zobaczysz coś takiego:

filename.php username usergroup rwx r-x r-x

Pierwszy człon to nazwa pliku, następny to Twoja nazwa użytkownika na serwerze, kolejny to nazwa grupy, której jesteś członkiem, i ostatni to prawa przyporządkowane do danego pliku (lub katalogu). Zwróć uwagę, że celowo rozdzieliłem spacjami ostatni człon. Zgrupowałem 9 znaków w trzy grupy po 3 znaki. To rozdzielenie jest kluczem do zrozumienia, jak działają prawa dostępu. Pierwszy zestaw 3 znaków (rwx) odnosi się do użytkownika, drugi zestaw (r-x) do grupy, a trzeci (r-x) do kogokolwiek, kto nie jest użytkownikiem ani członkiem grupy.

Nazwa użytkownika (username) odnosi się do właściciela (użytkownika)

Właściciel (użytkownik) to Ty, te prawa dostępu zostaną skonfigurowane pod nazwą Twojego konta na serwerze.

Nazwa grupy (usergroup) odnosi się do grupy

Prawa dostępu dla grupy zostaną skonfigurowane dla osób, które są w tej samej grupie co Ty, w ramach środowiska serwera, ale bardzo rzadko rozszerza się grupę o inne osoby. Taka praktyka chroni Twoje pliki i katalogi przed dostępem kogokolwiek, kto posiada konto na tym samym serwerze, co Ty.

Nazwa "Inni" (Other) odnosi się do każdego innego

Prawa dostępu dla innych, są skonfigurowane dla tych, którzy nie są użytkownikiem (Tobą), ani członkami Twojej grupy. Pamiętając o tym, że z reguły nikt inny nie jest członkiem Twojej grupy, prawa te regulują dostęp dla tego, kto próbuje uzyskać dostęp do serwera oprócz Ciebie. Każdy z tych trzech zestawów praw jest definiowany w następujący sposób.

r = prawo do czytania (Read)
w = prawo do zapisu (Write)
x = prawo do uruchamiania (eXecute)
Właściciel  Grupa     Inni
  r w x     r w x     r w x

Jak wielu z Was już wie, prawa są normalnie wyrażane przez wartość numeryczną, coś jak 755 czy 644. Jaki związek ma to z tym, co przedstawiliśmy wyżej? Każdy znak prawa jest przyporządkowany do wartości numerycznej, takie samo przyporządkowanie jest w każdym zestawie, tak więc możemy używać tylko trzech wartości numerycznych w każdym zestawie.

Właściciel   Grupa   Inni
  r w x      r w x   r w x
  4 2 1      4 2 1   4 2 1

Teraz mamy wartość która odzwierciedla dane prawo, możemy je wyrazić w sposób numeryczny. Wartości te w każdym zestawie są dodawane, co daje nam trzy cyfry - po jednej dla każdego zestawu - które określają dane prawo. Jeżeli mówimy, że plik ma prawa 777 to to, co zapisano niżej, jest prawdziwe:

Właściciel   Grupa   Inni
  r w x      r w x   r w x
  4 2 1      4 2 1   4 2 1

Bo...

  4+2+1 4+2+1 4+2+1
=   7     7     7

Właściciel pliku miałby w tym przypadku prawo czytać (Read), zapisywać (Write) i uruchamiać (Execute) dany plik, każdy członek grupy miałby również takie same prawa, a także identyczne mieliby inni. Standardowe, domyślne prawa, jakie serwer przyporządkowuje do plików i katalogów są następujące:

Pliki = 644
Katalogi = 755

Te prawa zezwolą na działania na plikach;

644 = rw- r-- r--
Właściciel może czytać (Read) i zapisywać (Write)
Grupa może tylko czytać (Read)
Inni mogą tylko czytać (Read)

i dla katalogów;

755 = rwx r-x r-x
Właściciel może czytać (Read), zapisywać (Write) i uruchamiać (Execute)
Grupa może tylko czytać (Read) i uruchamiać (eXecute)
Inni mogą tylko czytać (Read) i uruchamiać (eXecute)

Teraz sprawy się nieco komplikują, jeżeli mówimy o serwerach współdzielonych, oprogramowanie serwera będzie uruchamiane ze swoimi własnymi nazwami użytkownika i grupy, większość serwerów jest skonfigurowana w ten sposób, że używają nazw "apache" i "apache" lub "nobody" i "nobody" jako nazwy użytkownika i odpowiednio grupy. I tu powstaje problem. Twój serwer działa jako swój własny użytkownik, i ten użytkownik to nie Ty, ani nie Twoja grupa, tak więc dwa pierwsze zestawy praw do niego się nie stosują, a jedynie stosuje się zestaw inni (Other)(albo świat). Dlatego, jeśli skonfigurujesz zestaw praw 640 dla Twoich plików, Twój serwer nie będzie w stanie ich uruchomić.

640 = rw- r-- ---
Właściciel może czytać (Read) i zapisywać (Write)
Grupa może tylko czytać (Read)
Inni (serwer) nie mają żadnych praw

Serwerowi nie przyporządkowano żadnych praw, nie może on zapisywać ani uruchamiać plików, a co ważniejsze nawet ich czytać, żeby móc dostarczyć ich zawartość przeglądarce internauty. Jeżeli katalogowi zostaną przyporządkowane prawa 750, da to taki sam efekt, ponieważ serwer nie ma prawa czytać plików w tym katalogu, nawet, jeśli te pliki mają ustawione prawa zezwalające na czytanie.

750 = rw- r-x ---
Właściciel może czytać (Read) i zapisywać (Write)
Grupa może tylko czytać (Read) i uruchamiać (eXecute)
Inni (serwer) nie mają żadnych praw

Katalogi mają pewną ciekawą cechę, jeżeli katalog nie ma ustawionego prawa do Uruchamiania (eXecute) w zestawie Inni (Other) - wtedy, gdy nawet są ustawione prawa czytania (Read) i zapisu (Write) - to jeżeli program nie jest użytkownikiem ani członkiem grupy, nie otrzyma prawa dostępu do plików znajdujących się w tym katalogu. Ustawienie uruchom (eXecute) pozwala programowi "uruchamiać" nie tylko pliki, ale także polecenia w danym katalogu, więc bez tego prawa program nie może uruchomić polecenia czytaj (Read), co powoduje, że nie może dostarczyć pliku do przeglądarki.

Co to ma wspólnego z Joomla!?

Dobre pytanie, hmm..., w pierwszym podejściu będzie miało to znaczenie przy instalacji systemu. Przypomnij sobie, że w czasie uruchomienia instalatora szukaliśmy określonych katalogów, które miały być zapisywalne. Mieliśmy wiele postów, w których zgłaszano problemy związane z prawami dostępu przy instalacji, lub w których pytano, jak te prawa ustawić. Niektórzy uważali nawet, że komunikat pytający o prawo do "zapisywalności" jest niezbyt jasny.

Niestety, instalator Joomla! nie wie, jak skonfigurowany jest Twój serwer, dlatego nie może działać bardziej precyzyjnie, jednakże jeżeli zrozumiesz system ustawiania praw dostępu i będziesz wiedział trochę o środowisku serwerów sieciowych, zrozumiesz także, że termin "zapisywalny" jest w rzeczywistości bardzo dokładny i bardziej niż odpowiedni dla potrzeb Joomla!. Cofając się do wyżej podanych informacji, przypomnij sobie o trzech miejscach gdzie prawo zapisu (Write) może zostać ustawione;

Właściciel zapisywalny (Write)
Grupa      zapisywalny (Write)
Inni       zapisywalny (Write)

Pamiętaj także, że serwer sieciowy generalnie nie pracuje jako Twój użytkownik, ani w tej samej grupie. Kiedy uruchamiasz instalatora Joomla! z przeglądarki, to serwer próbuje uzyskać dostęp do plików, dlatego zestaw praw dla inni (Other) ma tu znaczenie. Jeżeli zestaw praw inni (Other) nie zezwoli serwerowi czytać (Read), zapisywać (Write) lub uruchamiać (Execute) poleceń w katalogach Joomla!, otrzymasz komunikat, że te katalogi są niezapisywalne.

W tej sytuacji będziesz musiał skonfigurować prawa dla inni (Other) na "7" dla katalogów wylistowanych w instalatorze. Tak więc ogólnie prawa mogą być ustawione np. na 757, w najgorszym przypadku możesz potrzebować ustawienia 777. Te bardzo otwarte ustawienie powinno być ustawione na powrót (cofnięte) na 755 zaraz po zakończeniu pracy instalatora, aby chronić Twoje katalogi i pliki.

757 = rwx r-x rwx
Właściciel może czytać (Read), zapisywać (Write) i uruchamiać (eXecute)
Grupa      może czytać (Read) i uruchamiać (eXecute)
Inni       mogą czytać (Read), zapisywać (Write) i uruchamiać (eXecute)

Żeby to jeszcze bardziej skomplikować wielu dostawców usług internetowych używa oprogramowania nazywanego phpsuExec albo suExec, te narzędzia zmieniają sposób działania serwera, który w tym przypadku pracuje pod Twoją nazwą użytkownika. Użycie praw dla inni (Other) może nie być wymagane, teraz wystarczy, że skonfigurujesz swoje katalogi jako "zapisywalne" tylko dla Twojego użytkownika i Twojej grupy. W tym przypadku wystarczy ustawić prawa dla katalogów na 755 lub 775, zamiast na 757 czy 777.

755 = rwx r-x r-x
Właściciel  może czytać (Read), zapisywać (Write) i uruchamiać (eXecute)
Grupa       może czytać (Read) i uruchamiać (eXecute)
Inni        mogą czytać (Read) i uruchamiać (eXecute)
775 = rwx rwx r-x 
Właściciel  może czytać (Read), zapisywać (Write) i uruchamiać (eXecute)
Grupa       może czytać (Read), zapisywać (Write) i uruchamiać (eXecute)
Inni        mogą czytać (Read) i uruchamiać (eXecute)

Serwer sieciowy wciąż potrzebuje ustawienia uruchamiaj (eXecute) dla użytkownika, oraz czytaj (Read), uruchamiaj (eXecute) dla grupy, dlatego może wydawać polecenia uruchamiania i czytania na plikach wewnątrz katalogu. I znowu, ten zestaw praw może być cofnięty do 755 po ukończeniu instalacji.

To podstawowe zasady, co do katalogów, a co z plikami? Tu jest nieco prościej. Większości plików, które używa Joomla! wystarczy ustawienie praw na domyślne 644.

644 = rw- r-- r-- 
Właściciel może czytać (Read) i zapisywać (Write)
Grupa      może czytać (Read)
Inni       mogą czytać (Read)

To działa, jeżeli nie masz potrzeby zapisywania do plików z poziomu serwera sieciowego, te same zasady dotyczą katalogów. Jednym plikiem, który może być "zapisywalny" dla serwera, jest twój configuration.php. To plik konfiguracyjny Joomla!, jeżeli planujesz zmianę konfiguracji przez interfejs administratora serwera, wtedy ten plik musi być zapisywalny dla Twojego serwera.

Jeżeli Twój serwer wymaga dla instalacji, aby ustawić prawa dla inni (Other) na zapisywalne (Write), wtedy prawa dla configuration.php powinny być ustawione na 757 lub 777. Pozostawienie ustawień dla tego pliku na 757 lub na 777 jest niebezpieczne, ponieważ pozwalasz każdemu na dostęp do zapisu (Write), wiele sieciowych exploitów wykorzystuje ten fakt, nie zaleca się pozostawienie tych ustawień dla configuration.php.

Jeżeli na Twoim serwerze zainstalowano jedno z narzędzi SU (switch user - przełącznik użytkowników), i dla katalogów wystarczy przy instalacji ustawienie 755, prawa dla configuration.php będziesz prawdopodobnie musiał ustawić na 755 lub 775, aby zezwolić jego edycję przez interfejs administratora, a te ustawienia są uważane za generalnie bardziej bezpieczne niż 757 lub 777.

W końcu jakie ustawienia powinny zostać zastosowane dla instalacji Joomla!? Jak widzisz, to zależy od kilku czynników!

Wiem, że to wszystko nie jest tak pomocne jak byś oczekiwał, i nie ma definitywnej odpowiedzi, ale generalnie po instalacji, każde niebezpieczne ustawienie typu "7" powinno być cofnięte na bardziej bezpieczne. Na przykład: Pliki = 644 Katalogi = 755

Te ustawienia powinny pozwolić, dla plików:

644 = rw- r-- r--
Właściciel może czytać (Read) i zapisywać (Write)
Grupa      może tylko czytać (Read)
Inni       mogą tylko czytać (Read)

i dla katalogów

755 = rwx r-x r-x 
Właściciel może czytać (Read), zapisywać (Write) i uruchamiać (eXecute)
Grupa      może tylko czytać (Read) i uruchamiać (eXecute)
Inni       mogą tylko Cczytać (Read) i uruchamiać (eXecute)

Jeżeli masz dostęp do powłoki SSH, możesz uruchomić następujące polecenia z wiersza poleceń, resetujące ustawienia praw dla wszystkich plików i katalogów na odpowiednio 644 i 755. Przejdź do głównego katalogu instalacji Joomla! i uruchom:

find . -type f -exec chmod 644 {} \;
find . -type d -exec chmod 755 {} \;

Jeżeli masz tylko dostęp przez FTP, to praca ta może zabrać ci trochę czasu, jednakże, jeżeli podczas instalacji nie zmieniłeś praw dla większej ilości katalogów niż było wymagane, to teraz powinieneś cofnąć prawa dla około 10 katalogów i pliku configuration.php

Pamiętaj, aby zainstalować jakiekolwiek rozszerzenie lub szablon już po instalacji Joomla!, będziesz musiał zmienić domyślne prawa na określonych katalogach na czas tej instalacji, które potem możesz wycofać do poprzedniego stanu.

Jeżeli zdecydujesz się używać pamięci podręcznej - cache, katalog cache musi być ustawiony na zapisywalny (Write) przez serwer, aby pozwolić na zapisywanie plików tymczasowych.