Ja tylko dopowiem, że jeśli chodzi o uniksy (Linux też) i prawa do katalogów, to prawa dostępu zapisujemy w trzech liczbach ósemkowych:
- pierwsza sekcja odpowiada za prawa dla użytkownika/właściciela pliku
- druga sekcj odpowiada za wszystkich członków grupy, do której należy plik
- trzecia sekcja odpowiada za, ogólnie nazywając, "wszystkich pozostałych".
I tak, jeśli chodzi o prawa dostępu do katalogów, to zasady są takie:
- "r" pozwala na czytanie katalogu
- "w" pozwala na zapisanie do katalogu
- "x" pozwala na WEJŚCIE do katalogu (i wykonywanie w nim operacji zgodnie z prawami j/w)
Odnośnie plików, to:
- "r" pozwala na odczyt
- "w" pozwala na zapis
- "x" pozwala na uruchomienie programu (w odróżnieniu od Windows, to atrybut "x", a nie rozszerzenie decyduje o tym, czy dany plik można uruchomić)
samo "x" na katalogu pozwala nam na robienie wszystkiego w trybie "READ-ONLY",
chyba że prawa dostępu do pliku nam to ograniczają"w" na katalogu pozwala nam na SKASOWANIE PLIKU nawet wtedy, gdy nie jesteśmy jego właścicielem (uwaga: czasami do polecenia "rm" należy dodać opcję "-f" - force). Wynika to z faktu, że skasowanie pliku to tak naprawdę skasowanie wpisu w strukturze katalogu odnośnie istnienia pliku.
Można sobie wyobrazić sytuację, kiedy na katalogu będziemy mieli prawo "x" (i tylko "x"), a na pliku prawa "rw" - tu jest (dla nieobznajomionych) ciekawa rzecz: pliku nie możemy skasować (nie mamy praw zapisu do katalogu), ale... możemy go
wyzerować - wszak prawo dostępu do pliku posiadamy

Oczywiście posiadanie UID=0 (czyli praw administratora systemu) usuwa wszelkie restrykcje.
W Twoim przypadku myślę, że minimalnym wymaganiem jest, byś nadał:
- na katalog nadasz prawa "wx" dla "other" (musisz odczytać z niego zawartość i move_uploaded_file() musi umieć coś w nim zapisać)
- na pliki nadasz prawa "r"