Coding with Titans

so breaking things happens constantly, but never on purpose

Synology i ograniczenie dostępu do strony WWW

Synology NAS pozwala za pomocą panelu administracyjnego w bardzo łatwy sposób skonfigurować domyślną stronę WWW dla naszego urządzenia. Tak samo możemy tam włączyć strony domowe dla użytkowników.

Do wybranego katalogu serwera WWW (np. /volume1/web) wrzucamy cały kod strony html/css/php i to w zasadzie wszystko.

Problem pojawia się niestety, gdy chcemy ograniczyć dostęp do tych zasobów za pomocą najprostszego logowania. Ponieważ pod maską chodzi Apache wydawać by się mogło, że wystarczy dorzucić odpowiednio przygotowane pliki .htaccess i .htpasswd.

Nic bardziej mylnego. Tzn. one zadziałają, ale zaraz po wpisaniu hasła zostaniemy automatycznie przekierowaniu z portu 80 (lub 8080) na port 5000 albo 5001, gdzie uruchomiona jest konsola administrowania urządzeniem. Podsłuchując, co się wtedy dzieje od strony protokołu HTTP okazuje się, że zaraz po zalogowaniu otrzymujemy klasyczny “redirect” (tj. odpowiedź z kodem 302 (3xx)).

Rozwiązanie jak uniknąć przekierowania znalazłem tutaj. Polega ono na edycji pliku PHP strony próbkowania Synology Manager, który gdy nie znajdzie nic w domyślnym folderze stron WWW, to właśnie przekierowuje na panel administratora (lub definitywnie zmieniamy mu nazwę na sample.php.bak).

vi /usr/syno/synoman/phpsrc/web/sample.php

i wykomentowujemy na samym końcu tego pliku:

# else 
# {
#    header("Location: ".$admin_link);
# }

A na koniec restartujemy serwer Apache:

/usr/syno/etc/rc.d/S97apache-user.sh restart

Podpowiedzi:

  • Ponieważ .htaccess wymusza logowanie dla całego podrzewa katalogów, dlatego lepiej użyć podfolderu w katalogu głównej witryny WWW i w nim umieścić dostęp przez hasło.

    Użycie np. katalogu “secure” i umieszenie tam .htaccess, spowoduje, że domyślny folder http://www.mój-nas.pl będzie miał dostęp wolny, natomiast http://www.mój-nas.pl/secure/ będzie wymagał logowania.

    Jest to o tyle pomocne, że inne aplikacje (jak chociażby PhotoStation nie będą wymagały podania tego hasła!)

  • Zwyczajowo w pliku .htaccess umieszczamy lokalizację do pliku z hasłami bez podawania pełnej ścieżki, czyli np.

AuthUserFile .htpasswd
ale, nie oznacza to, że katalogiem, w którym poszukiwany będzie ten plik jest folder witryny WWW!. Wręcz przeciwnie, domyślnie jest nim katalog: **/usr/syno/apache**.

I tak oto uzyskaliśmy dostęp za hasłem!