Ustawienie 0777 na folder
(a mówię tutaj o folderze, a nie pliku) nie wiąże się z żadnym ryzykiem bezpieczeństwa wykonania, jak niektórzy by twierdzili.
Execute is needed on a directory to access the inode information of the files within. You need this to search a directory to read the inodes of the files within. For this reason the execute permission on a directory is often called search permission instead.
Zobacz http://content.hccfl.edu/pollock/aunix1/filepermissions.htm
Ryzyko to:
- każdy może czytać pliki w tym folderze (pod warunkiem, że sam plik ma
r
uprawnienia użytkownika / grupy próbującej go odczytać lub dla others
)
- każdy może tworzyć pliki w tym folderze (i opcjonalnie je wykonywać, ale tylko te utworzone przez tego konkretnego użytkownika)
- każdy może usunąć pliki należące do innych osób w tym folderze (twoje pliki nie są zabezpieczone, niezależnie od właściciela / pozwolenia)
Jeśli chcesz zabezpieczyć niektóre pliki, musisz utworzyć inny folder z „normalnymi” uprawnieniami (rw tylko dla ciebie lub rw dla ciebie i twojej grupy) i umieścić w nim swoje pliki.
Z drugiej strony nikt nie mógł zamienić pliku niewykonywalnego na plik wykonywalny (chmod nie jest dozwolony, jeśli nie jesteś właścicielem pliku).
Jakie ryzyko nie jest?
Niektórzy uważają, że 0777 jest dziedziczony przez każdy plik w folderze. Jest źle . Nie możesz edytować pliku, jeśli nie masz w
uprawnień tylko dlatego, że jego folder nadrzędny to 0777. Nie możesz odczytać pliku, jeśli nie ma on r
uprawnień.
Jak to zabezpieczyć?
Jeśli masz dostęp do jakiejś powłoki lub jeśli twój klient FTP pozwala ci zmienić właściciela plików i wiesz, którego właściciela potrzebujesz, możesz utworzyć folder i ustawić jego właściciela na proces apache (zazwyczaj nobody
, daemon
lub apache
) i po prostu ustaw uprawnienia 0700. Problem polega na tym, że inni użytkownicy, tacy jak ty, podczas przeglądania za pomocą klienta FTP, nie będą mogli odczytać plików utworzonych później przez PHP, co niekoniecznie jest problemem.
OK, ale co z plikami?
Nie mówię o ryzyku związanym z files
wykonywaniem, ponieważ nie ma powodu, dla którego chciałbyś wymusić x
zezwolenie na plik, który nie powinien być wykonywany w pierwszej kolejności.
Jeśli jakaś aplikacja internetowa musi zapisać w istniejącym pliku, wystarczy ustawić go na 0666 (lub 0600, jeśli właścicielem jest użytkownik Apache).
Każdy, kto ma dostęp do folderu (tj.
x
Uprawnienie do każdego folderu na ścieżce) może odczytać, zmodyfikować i wykonać plik.Jeśli jest to coś, co faktycznie można wykonać, istnieje duże ryzyko, że złośliwi użytkownicy dodadzą zły kod, a następnie poczekają na jego wykonanie, abyś mógł wykonać jakiś zły kod (np. Utworzenie kopii
bash
tego pliku jest ustawione na setuid i możliwe do wykonania przez atakującego) .Jeśli korzystasz z hostingu współdzielonego, sprawdź, czy 0770 nie jest wystarczające - jeśli użytkownik FTP należy do tej samej grupy co serwer WWW, wystarczy. W takim przypadku wyżej wymienione zagrożenia zwykle nie mają zastosowania, ponieważ nigdy nie zamierzasz wykonywać czynności w docelowym folderze przesyłania, a PHP musi
open_basedir
ograniczać dostęp innych użytkowników do twoich plików. Jeśli jednak host obsługuje również skrypty CGI (np. Przy użyciu Perla), można je łatwo obejść.źródło
owner
lubgroup
lubuser
.nobody
,daemon
lubapache
) i ustawić uprawnienia 0700. Problem polega na tym, że inni użytkownicy, tacy jak Ty, podczas przeglądania za pomocą klienta FTP, nie będą mogli odczytać plików utworzonych przez PHP.Prawdopodobnie nie odpowiadam na twoje pytanie dotyczące ryzyka, ale zgaduję, dlaczego nie możesz pisać.
Prawdopodobnie folder nadrzędny nie ma dostępu do zapisu dla tego użytkownika ...
użyj
chmod ugo+w whateverfile
rekursywnie czegoś w linii do folderu nadrzędnego, aż będziesz mógł w nim tworzyć pliki :)źródło
/var/www/cgi-bin/
. Musiałem więc ustawić folder www, aby był zapisywalny!Zakładając, że wykluczyłeś już kilka podstawowych ustawień bezpieczeństwa PHP (ograniczenia open_basedir i in.) - debugowanie i
error_reporting(E_ALL);
(upewnij się, że rejestrujesz błędy zamiast wyświetlania ich w systemach produkcyjnych) są całkiem przydatne, aby to sprawdzić: p.Jeśli ustawisz uprawnienia do folderu na 777 (do zapisu na całym świecie), a proces nadal nie będzie mógł zapisać do tego folderu, może być uruchomiona implementacja MAC, która zapobiega właśnie tego rodzaju problemom (SELinux lub AppArmor są prawdopodobnie kandydatami, jeśli jesteś za pomocą Linuksa). W takim przypadku zmiana wprowadzonych przez nie zasad pomoże rozwiązać ten problem. Ustawienie folderu do zapisu na świecie jest możliwym problemem bezpieczeństwa (szczególnie, gdy dany folder jest wystawiony na świat zewnętrzny), a także najprawdopodobniej można go uniknąć.
źródło