Prawa dostępu do plików

Większość serwerów WWW pracuje pod kontrolą systemów unixowych, gdzie dostęp do plików obwarowany jest mechanizmem uprawnień. Serwer WWW pracuje zwykle z uprawnieniami swojego własnego, specjalnego konta użytkownika (konto to zwykle nazywa się "nobody", "www" lub podobnie). Z tymi samymi uprawnieniami uruchamiane są także wszystkie skrypty CGI. Aby serwer WWW bądź skrypty mogły operować na naszych plikach, niezbędne jest więc przydzielenie odpowiednich praw dostępu.

Mechanizm uprawnień Unixa rozróżnia trzy kategorie użytkowników, którym można niezależnie nadawać prawa dostępu do plików. Kategorie te to:

Każdej z tych trzech kategorii użytkowników można nadać dowolną kombinację trzech praw dostępu: prawa odczytu (read, r), zapisu (write, w) oraz wykonania (execute, x) pliku. Można też nie nadawać żadnych uprawnień - wtedy określona kategoria użytkowników nie będzie miała w ogóle dostępu do pliku.

Zwykłym plikom danych (np. HTML czy GIF) umieszczanym na serwerze nadaje się zazwyczaj uprawnienia read i write dla właściciela pliku (co oczywiste) oraz read dla innych użytkowników, co umożliwia odczytanie pliku przez serwer WWW ("na wszelki wypadek" dodaje się czasami prawo read dla grupy, choć zwykle nie jest to niezbędne). Są to z reguły uprawnienia domyślne, automatycznie nadawane przez system w chwili umieszczenia pliku na serwerze - chyba, że serwer oferuje konta z dostępem do shella; wówczas domyślna konfiguracja jest na ogół taka, że prawa dostępu do pliku ma jedynie jego właściciel.

W przypadku plików zawierających skrypty CGI, do prawa read trzeba dodać prawo execute, aby umożliwić serwerowi WWW ich wykonywanie. Z kolei dla plików z danymi modyfikowanych przez skrypty, takich jak plik licznik.dat używany przez omawiany w tekście skrypt licznika odwiedzin strony, prawo execute jest niepotrzebne, niezbędne jest za to prawo write umożliwiające zapis danych do pliku.

Nadanie prawa write dla innych użytkowników jest względnie bezpieczne, jeżeli na serwerze nie ma kont z dostępem do shella. Gdy taki dostęp istnieje, występuje potencjalne zagrożenie, iż inni użytkownicy serwera mogą mieć możliwość niepożądanego modyfikowania naszego pliku z danymi licznika. O pomoc w tej sytuacji należy poprosić administratora serwera, który może "przepisać" interesujący nas plik z naszej domyślnej grupy do grupy systemowej odpowiadającej użytkownikowi, "pod" którym pracuje serwer WWW (ma on zwykle swoją własną grupę). Wówczas przyznanie praw read i write tylko dla właściciela pliku oraz dla grupy (bez przyznawania ich innym użytkownikom) umożliwi bezpieczne modyfikowanie zawartości pliku przez skrypty CGI.

Jeżeli plik ma mieć inne prawa dostępu niż domyślne, musimy je ustawić w sposób jawny. Osoby, które mają na swoim koncie dostęp do shella, mogą wykorzystać do tego celu unixową komendę chmod. Ma ona następującą postać:

     chmod {komu}{dać lub zabrać}{jakie prawa} nazwa_pliku
Pole komu może zawierać dowolną kombinację liter u, g oraz o. Litera u oznacza właściciela pliku, g - grupę, o - innych użytkowników. Bezpośrednio po tej kombinacji liter występuje znak +, jeżeli chcemy uprawnienia nadawać, a -, jeżeli chcemy je odbierać. Kolejne pole zawiera dowolną kombinację liter r, w oraz x, określających dawane lub zabierane prawa. Pomiędzy tymi trzema elementami komendy nie występują spacje - spację stawiamy dopiero przed nazwą pliku. Przykładowo, aby nadać innym użytkownikom prawo read do pliku index.html, użyjemy komendy:

     chmod o+r index.html
zaś aby nadać grupie prawa read i write do pliku licznik.dat napiszemy:

     chmod g+rw licznik.dat
Podana w komendzie nazwa_pliku może być również nazwą globalną, np. "chmod o+r *.html", czy wręcz "chmod o+r *" (pojedyncza gwiazdka oznacza wszystkie pliki w katalogu).

Jeżeli nie mamy dostępu do shella, modyfikacji praw musimy dokonać za pomocą klienta FTP, przy użyciu którego umieszczamy pliki na serwerze. Większość lepszych programów FTP posiada taką opcję - przykładowo w CuteFTP znajduje się ona w menu jako Commands/Advanced Commands/Change File Attributes. Na rysunku możemy zobaczyć przykład ustawiania praw dostępu przy użyciu tego programu (ustawiane są prawa read i write dla właściciela pliku oraz grupy).