Transfer - Linux Magazine
Transkrypt
Transfer - Linux Magazine
SYSADMIN Admin-Workshop Transfer plików to jedno z zadań tradycyjnie zdominowanych przez oprogramowanie bezpłątne – tradycyjne narzędzia do FTP (File Pro-FTPD Transfer Transfer Protocol) radzą sobie z tym zadaniem bardzo dobrze. Jednak administratorzy chcący uruchomić serwer FTP potrzebują dużego zasobu wiedzy, aby uniknąć typowych pułapek. MARC ANDRÉ SELIG I stnieje wiele protokołów do przenoszenia plików przez Internet, nie wszystkie jednak nadają się do zastosowania w każdej sytuacji. Popularne usługi typu peer-to-peer, takie jak Gnutella, E-Donkey lub cohorts, zostały stworzone po to, aby umożliwić udostępnianie swoich plików innym osobom – każdy z użytkowników ma możliwość zarówno otrzymywania jak i udostępniania swoich plików. Udostępnianie w Internecie darmowych programów to zupełnie inna sprawa, niewielka liczba programistów i ich serwerów musi obsłużyć dużą liczbę odbiorców. W tej sytuacji zwykle używane są protokoły FTP i HTTP. Oczywistym wyborem dla prostych zadań jest HTTP. Dzięki Apache łatwo znaleźć Najpopularniejsze demony FTP Administratorzy są rozpieszczani wyborem demonów FTP. Poniższa lista przedstawia czterech powszechnie przyjętych i używanych przedstawicieli tej klasy serwisów: BSD-F FTPD: to pradziadek wielu linuksowych serwerów FTP, BSD-FTPD stanowił też inspiracje dla wielu innych projektów. Demon ten zapewnia wystarczające wsparcie dla systemów o niskiej przepustowości i z tego powodu dołączony jest do wielu dystrybucji Linuksa. Nie można jednak oczekiwać, że obsłuży bardziej złożone zadania albo większe pasmo. WU-F FTPD: The Washington University FTP daemon [2] jest implementacją, która obecnie najbardziej ze wszystkich demonów przypomina BSD-FTPD. WU-FTPD dostarcza szerokiego zakresu opcji konfiguracyjnych oraz dobrze integruje się z systemami uniksowymi. Demon ten w przeszłych latach 66 Kwiecień 2004 miał wiele luk w bezpieczeństwie, ale te problemy należą już do przeszłości. NC-F FTPD: Ten komercyjny serwer [3] jest dostępny w wersji darmowej tylko dla zastosowań domowych i edukacyjnych. Mimo że kod źródłowy jest zastrzeżony, dzięki automatycznej instalacji jest to ciągle popularny demon. Serwer ten potrafi bardzo szybko obsłużyć wiele sesji jednocześnie. Pro-F FTPD: podobnie jak NC-FTPD, Pro-FTPD [4], któremu przyjrzymy się w dalszej części artykułu, może działać jako niezależny serwer i dzięki temu jest szybszy niż konkurenci. Akceptując przychodzące połączenie, aby obsłużyć sesje, nie musi uruchamiać nowego procesu. W razie konieczności do uruchomienia demona FTP można użyć inetd. Pro-FTPD jest oprogramowaniem typu Open Source, łatwo konfigurowalnym i bezpiecznym. www.linux-magazine.pl odpowiedni serwer, a prawie każdy komputer posiada łatwego w użyciu klienta. Niestety w HTTP brakuje kilku cech, których wymagają użytkownicy do ściągania dużych plików przez przeciążone łącza. Największą dolegliwością jest tutaj sposób, w jaki HTTP obsługuje zerwane połączenia. Mimo że specyfikacja HTTP 1.1 przewiduje funkcję wznawiania dla przerwanych transferów, większość przeglądarek nie potrafi jej obsłużyć, stąd utrata dużej części użytecznego pasma i czasu. W dodatku, mimo dostępności nowoczesnego oprogramowania, uruchomienie serwera WWW pochłania dużo zasobów. Większość z tych zagadnień nie dotyczy [FTP] [1]. Ważne jest, aby zrozumieć, że FTP nie jest rozszerzeniem ani poprawioną wersją HTTP, lecz niezależnym, a także o wiele starszym protokołem. Instalacja Wiele serwerów internetowych bazuje na dostępnych demonach FTP. Jeżeli chcecie sami wybrać demona, to odsyłamy do ramki „Najpopularniejsze demony FTP”, w którym znajdziecie najczęściej używane serwery FTP dla Linuksa. W tym artykule skupimy się na jednym z silniejszych, bezpiecznych i łatwych do nauki demonów – Pro-FTP. Admin-Workshop SYSADMIN FTP protokół do transferu plików Mimo że techniki leżące u podstaw protokołów FTP i HTTP całkowicie się od siebie różnią, użytkownicy przeglądarek internetowych nie zauważą większej różnicy w połączeniach. jest także odpowiedzialne za pokazywanie zawartośći katalogów itp. FTP i nazwy użytkowników Każda sesja FTP zaczyna się od zalogowania nazwą użytkownika i hasłem. Ponieważ protokół przesyła te dane w czystej formie, sensowne jest użycie innych danych dla FTP niż dla normalnego konta. Zakładanie konta FTP dla każdego odwiedzającego, który chce ściągać lub wgrywać pliki, powodowałoby zbyt wiele pracy dla administratora. Prowadzi to do konwencji honorowanej przez większość serwerów FTP, czyli utrzymywania konta gościa pod nazwą anonymous lub ftp. Serwery FTP zazwyczaj akceptują każdy adres mailowy jako hasło; łańcuch username@ interpretowany jest jako nazwa użytkownika na danym hoście. Porty Każda z usług sieciowych używa pojedynczego lub wielu portów, np. HTTP używa portu 80 TCP. Serwer utrzymuje otwarty port 80 i nasłuchuje na tym porcie nadchodzących połączeń. Klienci na swoich lokalnych maszynach mogą używać jakiegokolwiek portu do otwarcia połączenia z portem 80 na serwerze. W przypadku FTP nie jest to jednak takie proste. Jak pokazano na rysunku 1, protokół FTP rozróżnia połączenie sterujące (dla poleceń) i połączenie dla danych, służące do przesyłania plików. Połączenie dla danych Niektóre z aktualnych dystrybucji Linuksa dostarczają wymagane pakiety, chroniąc od bólu głowy związanego z instalacją demonów FTP. W innym przypadku będzie trzeba wykonać kilka czynności, zaczynając od ściągnięcia źródeł i ich podpisów cyfrowych z [4]. Upewnijcie się, czy sprawdziliście podpisy: konieczne czynności pokazuje netowych. Mozilla, Opera, a nawet Internet Explorer pytają serwer o podanie portu dla połączeń z danymi. Pytany serwer odpowiada numerem, następnie klient otwiera drugie połączenie z dowolnego portu lokalnego do portu podanego przez serwer. Połączenie sterujące nie jest zmieniane, bez względu na status połączenia dla danych. Uwaga na reguły firewalla Rysunek 1: FTP używa połączenia sterującego (control connection) i jednego lub więcej połączeń dla danych (data connection). W trybie aktywnym (na górze) serwer otwiera kanał dla danych; w trybie pasywnym (na dole) klient otwiera kanał z danymi. Połączenie sterujące jest tu odbiciem tradycyjnego modelu klient/serwer i używa portu 21 TCP. O tym jak zostaną potraktowane dane decyduje komputer klient, który może zażądać otwarcia trybu aktywnego. W trybie aktywnym klient otwiera dowolny port lokalny i używa kanału sterującego do poinformowania serwera o numerze tego portu. Następnie serwer, używając portu 20, otworzy aktywne połączenie TCP z portem podanym przez klienta. Połączenie jest otwarte w przeciwnym, niż można by się spodziewać, kierunku. Nietypowe tutaj jest też podawanie portu źródłowego zamiast docelowego. Klienci FTP uruchamiani z linii poleceń zazwyczaj używają trybu aktywnego. Połączenia pasywne są domeną przeglądarek inter- Listing 1. Po pierwsze należy uruchomić md5sum do sprawdzenia sumy kontrolnej MD5. Da to pewność, że pakiet nie został uszkodzony podczas przesyłania i uchroni od nieoczekiwanych błędów. Sprawdzanie podpisu GPG jest bardzo ważne. W przeciwieństwie do sumy kontrolnej MD5, sprawdzana jest tu autentycz- Listing 1: Sprawdzanie podpisów mas@ishi:/tmp> md5sum -c proftpd-1.2.9.tar.bz2.md5 proftpd-1.2.9.tar.bz2: OK mas@ishi:/tmp> gpg proftpd-1.2.9.tar.bz2.asc gpg: Signature made Fri Oct 31 09:39:42 2003 CET using DSA key ID A511976A gpg: Good signature from "TJ Saunders <[email protected]>" gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: 697E 684D 1668 D696 8428 405C B78E 893F A511 976A mas@ishi:/tmp> Podczas instalacji serwera FTP należy być świadomym tej nietypowej procedury działania FTP. Wiele dystrybucji automatycznie zakłada filtry (IP filters) blokujące dodatkowe porty. Domyślnie zezwalają one tylko na określone przez serwer aktywne połączenie dla danych, połączenie to jest jednak bezużyteczne, jeżeli nie można ustanowić połączenia sterującego. Administratorzy FTP powinni zmienić swoją konfiguracje firewalla i określić odpowiednie reguły. Zakładając, że mamy do czynienia z jądrem w wersji 2.5, będą one następujące: iptables -A INPUT -p tcp U --sport 1024: --dport 21 U -j ACCEPT iptables -A INPUT -m state U --state ESTABLISHED,RELATED U -j ACCEPT iptables -A OUTPUT -m state U --state ESTABLISHED,RELATED U -j ACCEPT ność programu. Skąd jednak możemy wiedzieć, czy klucz publiczny dostarczony z pakietem należy właśnie do programisty Pro-FTPD, TJ Saunders.? Niestety nie można mieć gwarancji posiadania właściwego klucza, ale sprawdzenie podpisu pomoże nam nabrać zaufania do programu. Teraz możemy już wykonać standardowe czynności, aby skompilować źródła i zainstalować w Linuksie binaria programu. Listing 2 pokazuje nam przegląd tych czynności. W tym przypadku interesujące są opcje polecenia „configure” umieszczone w trzeciej linii listingu. Użytkownicy i katalogi Aby uporać się z instalacją, należy wykonać kilka dodatkowych czynności. Po pierwsze, należy sprawdzić, czy posiadamy konto dla demona. Zazwyczaj Pro-FTPD używa trzech kont, każde z nich przyporządkowane do określonej grupy. www.linux-magazine.pl Kwiecień 2004 67 SYSADMIN Admin-Workshop ~ftp powinna przypominać strukturę z Listingu 3. Listing 2: Instalacja Pro-FTPD $ bzip2 -cd proftpd-1.2.9.tar.bz2 | tar xf $ cd proftpd-1.2.9 $ ./configure -sysconfdir=/etc/proftpd -localstatedir=/var/run [...] $ make [...] $ su Password: # make install Do niektórych zadań Pro-FTP używa uprawnień root-a, jednym z nich jest uruchamianie serwera. Większość kodu używa konta użytkownika nobody i grupy nogroup. Pro-FTP używa konta gościa, aby obsłużyć typowe anonimowe logowania, należy zatem założyć konto użytkownika ftp w grupie ftp. Anonimowy użytkownik będzie potrzebował swojego katalogu domowego, który będzie miejscem do przechowywania plików dla publicznego dostępu. Zwróć uwagę, że demon powinien być w stanie odczytać te pliki nie będąc ich właścicielem. Pro-FTPD można skonfigurować tak, aby wymusić ochronę zapisu, w tym przypadku lepiej jednak kierować się względami bezpieczeństwa. W razie potrzeby można też utworzyć katalog do wgrywania plików. Większość serwerów używa katalogu /incoming lub /pub/incoming. Zakładamy prawa dostępu pozwalające na zapis do tego katalogu bez możliwości odczytu. Pozwoli to ustrzec się przed użytkowaniem katalogu przez hackerów jako składu dla ich nielegalnych plików. Ostatecznie nie wiadomo jaki rodzaj plików zostanie skopiowany na serwer i jakie mogą być tego prawne reperkusje. Ostateczna wersja drzewa katalogów dla Konfiguracja i uruchomienie serwera Kolejnym krokiem będzie sprawdzenie pliku konfiguracyjnego /etc/proftpd/proftpd.conf. Pro-FTPD1.2.9 instaluje domyślną wersję tego pliku. Posiada on intuicyjną składnię podobną do tej używanej przez Apache. Na początek plik zakłada tylko anonimowe ściąganie plików. Chcąc zezwolić na wczytywanie, należy dodać kilka wpisów. Na serwerze FTP Linux Magazine znajduje się próbka pliku proftpd.conf umożliwiająca wczytywanie i ściąganie plików [6]. Istnieją dwa podejścia do uruchamiania serwera FTP podczas uruchamiania komputera. Można tu zastosować podejście scentralizowane z inetd lub xinetd lub uruchamiać demona jako osobny proces w tle, co pozwala na niezależną obsługę przychodzących połączeń. Zajmiemy się tym drugim rozwiązaniem. Pomimo większemu zapotrzebowaniu na zasoby, podejście to oznacza dla użytkowników szybszą odpowiedź serwera. Systemy linuksowe zazwyczaj używają do uruchamiania usług (i innych składników systemu) tzw. skryptów inicjujących. Skrypty te korzystają z przekazywanych do nich komend: parametr start uruchamia usługę, stop kończy. Polecenie restart, jak sugeruje nazwa, uruchamia usługę ponownie – jest to często wykorzystywane do załadowania zmodyfikowanej konfiguracji. Przykład odpowiedniego skryptu jest dostępny w [6]. Można przykładowo skopiować plik do /etc/init.d/proftpd i utworzyć dowiązanie symboliczne (link) do katalogu, w którym znajduje się demon. Służą do tego, widoczne na Listingu 4, polecenia typowe dla systemu Linux. W zależności od dystrybucji może istnieć konieczność zamiany /etc/init.d/rc3.d na /etc/rc3.d w linii 4. Listing 3: Katalog FTP home # chmod 733 ~ftp/incoming # ls -la ~ftp total 20 drwxr-xr-x 4 root root drwxr-xr-x 4 root root drwx-wx-wx 2 root root drwxr-xr-x 2 root root -rw-r--r-- 1 root root # 68 Kwiecień 2004 Listing 4: Skrypt startowy # cp proftpd /etc/init.d/ # chown root:root /etc/init.d/proftpd # chmod 744 /etc/init.d/proftpd # cd /etc/init.d/rc3.d # ln -s /etc/init.d/proftpd S85proftpd # cd ../rc5.d # ln -s /etc/init.d/proftpd S85proftpd Do uruchamiania poszczególnych usług we właściwej kolejności systemy linuksowe używają tzw. skryptów sekwencyjnych (sequencer scripts). Litera S na początku linii uruchamia usługę, a za nią znajduje się numer definiujący kolejność. Reszta linii określa nazwę usługi, która ma zostać uruchomiona. Na zakończenie Posiadając uprawnienia root-a uruchamiamy serwer po raz pierwszy wpisując /etc/init.d/proftpd start. Po ponownym uruchomieniu komputera skrypt startowy automatycznie uruchomi serwer. Zakładając, że wszystko działa poprawnie, uzyskamy dostęp do naszego nowego serwera FTP jako ftp://localhost. Sprawdźmy działanie serwera z maszyny lokalnej, jak również z innych systemów. Szczególne ważne jest sprawdzenie reguł na firewallu. Teraz można już wypełnić nasz katalog domowy ~ftp/pub plikami, które mają być udostępnione na serwerze. Aby skonfigurować serwer FTP pod względem bezpieczeństwa, konieczne jeszcze będzie wykonanie kilku działań, szczegóły pod adresem [4]. ■ INFO [1] RFC 959: ftp://ftp.rfc-editor.org/in-notes/rfc959.txt [2] WU-FTPD: http://www.wu-ftpd.org [3] NC-FTPD: http://www.ncftpd.com/ncftpd/ 4096 4096 4096 4096 90 Jan Jan Jan Jan Jan 18 18 18 18 18 18:58 18:55 18:55 18:55 18:58 www.linux-magazine.pl . .. incoming pub welcome.msg [4] Pro-FTPD: http://proftpd.linux.co.uk [5] Pro-FTPD sources: ftp://ftp.proftpd.org/distrib/source/ [6] Plik konfiguracyjny i skrypt init: http://www.linux-magazine.com/ Magazine/Downloads/2004/41/Admin/