Mać... alem ślepy.
Krótka odpowiedź: nie, nie tędy droga. Tędy się nie da

Po pierwsze, należy wytłumaczyć, na czym polega wywołanie z PHP polecenia system($command), a także na czym polega wywołanie polecenia w Luniksie (i uniksach w ogólności). Załóżmy, że z procesu A chcemy wywołać nowy proces B (u Ciebie jako A występuje Apache+PHP, a jako B to co masz w $command, czyli w tym konkretnym przypadku "cd"). Otóż: wywołanie polecenia potomnego polega (w dużym uproszczeniu, ale na nasze potrzeby wystarczy) na:
1. stworzeniu kopii wszystkich zmiennych w systemie. Pisząc "w systemie" mam na myśli te zmienne, które "zna" proces A. Oczywiście piszę o zmiennych systemowych Linuksa, czyli np. łapie się zmienna $PATH (domyślna ścieżka poszukiwań binarek). Niekoniecznie muszą zostać przekazane zmienne $_SERVER i podobne (choć zapewne gdzieś to można ustawiać - nie wiem, nie testowałem).
2. Jeśli polecenie zaczyna się od "/", to oznacza podanie pełnej ścieżki do pliku - Apache przez polecenie system() to wykona.
3. Jeśli polecenie nie zaczyna się od "/", to zaczyna się próba jego lokalizacji w każdym katalogu wyszczególnionym w zmiennej $PATH i możliwe, że jest to robione via shell - czyli Apache uruchamia shella (np. bash), a ten dopiero sam wykonuje czarną robotę
4. Polecenie B może próbować zmieniać wartość
SWOICH zmiennych - ale nie będzie nigdy w stanie zmodyfikować zmiennyh procesu A. Tak się nie da

Czyli: nawet gdyby cd się wykonało, to i tak nie ma to wpływu na to, co widzi Apache+PHP. Oczywiście z plikami (tworzeniem/kasowaniem) jest inaczej - zarówno A i B mają dostęp do systemu plików i tylko kwestia ścieżek i/lub praw dostępu mogą spowodować brak dostępu do pliku, bo domyślnie pliki tworzy system plików, i procesy mają (bo muszą) mieć dostęp do funkcji systemowych. No chyba że operujemy na systemie zamontowanym read-only, wtedy wiadomo, że się nie da.
Możesz sprawdzić, czy polecenie się wykonało pozytywnie, czy nie - możesz użyć
Kod
string system ( string $command [, int &$return_var ] )
w $return_var będziesz miał jakąś wartość zwrotną - porównaj tę wartość po wykonaniu obu poleceń.
Poza tym, to osobiście wątpię, by polecenie
system ("cd /") się wykonało. Z tej prostej przyczyny, że...
cd nie jest poleceniem systemu, tylko POWŁOKI (shella).Kod
[user@host ~] $ which cd
[user@host ~] $ which ls
/bin/ls
[user@host ~] $ which tar
/bin/tar
[user@host ~] $ which whoami
/usr/bin/whoami
A co do tego, że "ls /" jest u Ciebie równoważne "ls /public_html"... no cóż. Być może Apache jest uwięziony w chroot'cie (poczytaj o tym, warto) i po prostu tego się nie da zrobić. Ale teraz to naprawdę gdybam - nie wiem, czy da się tak chrootować Apacha, by dało się serwować strony użytkowników i by te strony też były "uwięzione" w katalogu użytkownika - tu musiałaby być jakaś silna interakcja chroota z mod_userdir...
Ech, rozpisałem się, ale mam nadzieję, że czytelnie.