2007 03 Stawiamy bezpieczny serwer plików [Bezpieczenstwo]


Bezpieczeństwo
Stawiamy bezpieczny serwer plików
Stawiamy bezpieczny
serwer plików
Michał Miszewski
Tradycyjnie do przesyłania plików między serwerami stosuje się protokół FTP. Niestety ma on
istotną wadę - zarówno hasło, jak i pliki przesyłane są w postaci jawnej, bez jakiegokolwiek
szyfrowania. Z tego powodu lepiej nie stosować protokołu FTP do łączenia się przez nie budzące
zaufania sieci, takie jak Internet.
stnieją serwery i klienty FTP rozszerzające ten pro- " brak dostępu do pozostałej części systemu plików
tokół o szyfrowanie SSL. My jednak postawimy bez- (katalogi /proc, /tmp, /etc itp.)
pieczny serwer plików korzystając z innego rozwią-
Izania - użyjemy SSH i podsystemu przesyłania pli- O ile postawienie SFTP jest proste, ograniczenie go w po-
ków SFTP. wyższy sposób wymaga więcej pracy. Program sftp-server
W domyślnej konfiguracji OpenSSH zawiera obsłu- dostarczany wraz z pakietem OpenSSH nie zapewnia taki-
gę SFTP. Odpowiada za nią program /usr/lib/sftp-server. ej możliwości. Na szczęście istnieje patch chrootssh rozwi-
Otwarcie sesji SFTP polega na zestawieniu połączenia jany przez Jamesa Dennisa. Wykorzystuje on mechanizm
SSH ze zdalnym hostem. Następnie uruchamiany jest prog- chroot systemu operacyjnego do zamknięcia użytkownika
ram sftp-server po zdalnej stronie. Interpretuje on polece- w  klatce . Więcej na temat jego działania znajdziesz w ram-
nia wydawane przez klienta, m in. żądania operacji na ce  jak działa chroot . yródła OpenSSH z nałożonym pa-
plikach. tchem znajdują się na stronie projektu chrootssh.
Załóżmy, że nasz serwer będzie platformą do hostingu
stron WWW. Użytkownicy muszą mieć możliwość bezpiecz- SSH w klatce
nego przesyłania plików do swojego katalogu domowego. Zacznijmy od skompilowania zmodyfikowanej wersji
Dostęp do konta powinien jednak podlegać następującym OpenSSH. Procedura jest standardowa - rozpakowujemy
ograniczeniom: archiwum i konfigurujemy zródła skryptem ./configure.
Należy zwrócić uwagę na opcje, które mogą różnić się
" użytkownicy nie mają dostępu do shella w zależności od rodzaju wykorzystywanej dystrybucji
" nie jest dostępny forwarding portów oferowany przez systemu. W moim przypadku (system Debian GNU/Li-
SSH nux) należało wywołać skrypt z parametrami --with-pam
" dostęp tylko do własnego katalogu domowego --sysconfdir=/etc/ssh --without-zlib-version-check (włączenie
26 marzec 2007
linux@software.com.pl
Bezpieczeństwo
Stawiamy bezpieczny serwer plików
Listing 1. Kopiowanie bibliotek
$ ldd sftp-server
libresolv.so.2 => /lib/tls/libresolv.so.2 (0x40026000)
libcrypto.so.0.9.7 => /usr/lib/i686/cmov/libcrypto.so.0.9.7 (0x40038000)
libutil.so.1 => /lib/tls/libutil.so.1 (0x40138000)
libz.so.1 => /usr/lib/libz.so.1 (0x4013b000)
libnsl.so.1 => /lib/tls/libnsl.so.1 (0x4014d000)
libcrypt.so.1 => /lib/tls/libcrypt.so.1 (0x40161000)
libc.so.6 => /lib/tls/libc.so.6 (0x4018e000)
libdl.so.2 => /lib/tls/libdl.so.2 (0x402c3000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
$ cp /lib/tls/libresolv.so.2 lib/tls/
$ cp /lib/tls/libutil.so.1 lib/tls/
Rysunek 1. Drzewo katalogów w środowisku chroot
$ cp /usr/lib/libz.so.1 usr/lib/
Potrzebny jest jeszcze plik urządzenia
$ cp /lib/tls/libnsl.so.1 lib/tls/
/dev/null - możemy zwyczajnie skopiować go
$ cp /lib/tls/libcrypt.so.1 lib/tls/
z systemu: cp -p /dev/null /home/chroot/dev/
$ cp /lib/tls/libc.so.6 lib/tls/
$ cp /lib/tls/libdl.so.2 lib/tls/
Konta użytkowników
$ cp /lib/ld-linux.so.2 lib/
Pozostaje utworzyć konto użytkownika (tutaj
$ cp /usr/lib/i686/cmov/libcrypto.so.0.9.7 usr/lib/i686/cmov/
przykładowo o nazwie jan). Jako katalog do-
mechanizmu PAM, wskazanie katalogu z pli- czasowo umieszczając w chroocie shell (np. mowy użytkownika powinna zostać ustawio-
kami konfiguracyjnymi oraz pominięcie spra- /bin/bash) i program strace. Następnie wpisuje- na ścieżka /home/chroot/./home/jan. Jako shell
wdzania wersji biblioteki zlib). Następnie my polecenie chroot /home/chroot /bin/bash ustawiamy /usr/lib/sftp-server  pozwoli to jedy-
wykonujemy polecenia make i make install. (uzyskamy ograniczoną interaktywną powło- nie na połączenia SFTP, odbierając dostęp do
Podczas logowania przez SSH kod doda- kę), a następnie używamy narzędzia strace do interaktywnej powłoki. Ostatecznie wpis w /etc/
ny przez chrootssh sprawdza w /etc/passwd, czy przeanalizowania, jakie pliki otwiera dany pro- passwd powinien wyglądać następująco:
katalog domowy użytkownika zawiera ciąg gram.
znaków /./. Jeśli tak jest, następuje wywołanie Sftp-server wymaga dostępu do sysloga po- jan:x:1003:100::/home/chroot/./home/
funkcji chroot() dla katalogu przed kropką. Dru- przez socket /dev/log. Ze względu na ograni- jan:/usr/lib/sftp-server
ga część ścieżki (po kropce) to katalog domo- czone środowisko standardowa lokalizacja
wy użytkownika względem nowego katalogu gniazdka nie jest dostępna. Musimy więc do- Plik /etc/passwd jest potrzebny do działania
głównego. dać socket w naszym chroocie - można to zrobić także programowi sftp-server. Jako, że jest on
Utwórzmy zamknięte środowisko, w któ- uruchamiając syslogd z parametrem -a /home/ wywoływany już w zamkniętym środowisku,
rym będzie działał nasz serwer SFTP. Zakła- chroot/dev/log. Plik specjalny zostanie utworzo- potrzebuje drugiej kopii pliku passwd z od-
damy katalog dla chroot: mkdir /home/chroot. ny automatycznie przez program syslogd. powiednim wpisem. Odpowiednie wpisy dla
Muszą się tam znalezć wszystkie pliki binarne
i biblioteki potrzebne do działania SFTP. Two- Listing 2. Przykładowa sesja sftp
rzymy katalogi bin, etc, home, lib, lib/tls, usr, usr/
jkowalski@galaxy:tmp$ sftp jan@box
lib i usr/lib/i686/cmov. Do katalogu bin kopiu-
Connecting to box...
jemy podstawowe pliki binarne potrzebne do
jan@box's password:
działania SFTP: ls, mkdir, mv, rm, rmdir i chmod.
sftp> pwd
Potrzebujemy też samego serwera sftp - kopiu-
Remote working directory: /home/jan
jemy /usr/lib/sftp-server do /home/chroot/usr/lib/.
sftp> put info.txt
Należy jeszcze dodać wymagane bibli-
Uploading info.txt to /home/jan/info.txt
oteki dynamiczne. Korzystamy w tym celu
info.txt 100% 153 0.2KB/s 00:00
z narzędzia ldd. Sprawdzamy, jakich biblio-
sftp> ls -l
tek wymaga każdy z programów i kopiujemy
drwxr-xr-x 0 1003 100 4096 Dec 26 23:28 .
je do odpowiednich katalogów. Przykład, jak
drwxr-xr-x 0 0 0 4096 Dec 26 19:38 ..
należy to zrobić, znajduje się na Listingu 1.
-rw-r--r-- 0 1003 100 153 Dec 26 23:28 info.txt
Czynności powtarzamy dla wszystkich pli-
sftp> cd /
ków wykonywalnych w chroot.
sftp> ls
Program sftp-server wymaga jeszcze jed-
. .. bin dev etc home lib usr
nej biblioteki: libnss_files. Biblioteka ta jest łado-
sftp> ls etc
wana pózniej i ldd nie pokazuje jej na liście.
etc/. etc/.. etc/passwd
Bez niej sftp-server zakończy działanie nie zwra-
sftp> exit
cając żadnego komunikatu o błędzie. Tego ro-
dzaju brakujące pliki można odnalezć np. tym-
www.lpmagazine.org 27
Bezpieczeństwo
Stawiamy bezpieczny serwer plików
Przykład konfiguracji Apache
dla kont w chroocie
Użycie poniższej dyrektywy w pliku konfi-
guracyjnym httpd.conf umożliwi dostęp do
stron WWW znajdujących się na ogranic-
zonych kontach.

UserDir /home/chroot/home

Taka konfiguracja spowoduje, że przy pró-
bie wczytania adresu URL http://serwer.pl/
~jan/strona.html Apache wyświetli plik /ho-
me/chroot/home/jan/strona.html. Możemy
także dodać wirtualny host odpowiadający
katalogowi użytkownika:
Rysunek 2. Sesja SFTP w programie WinSCP

wszystkich użytkowników trzeba więc dodać Port forwarding ServerAdmin jan@serwer.pl
do /home/chroot/etc/passwd np. poleceniem: potencjalna luka DocumentRoot /home/chroot/home/jan
getent passwd jan >> /home/chroot/etc/passwd. Jest Każde konto należy zabezpieczyć przed uży- ServerName jan.serwer.pl
to jedyny plik w /etc w chroot wymagany do ciem mechanizmów, takich jak port forwar- ErrorLog /var/log/apache/jan-
działania naszego serwera plików. Oczywiście ding. Można to zrobić umieszczając następu- error.log
tworzymy także katalog /home/chroot/home/jan jące linie w pliku konfiguracyjnym sshd: CustomLog /var/log/apache/jan-
i ustawiamy właściciela  jan . access.log common
Należy upewnić się, że w pliku konfigura- " Match User jan

cyjnym demona SSH (w tym przypadku /etc/ " AllowTcpForwarding no
Spowoduje to, że ta sama strona będzie
ssh/sshd_config) znajduje się linijka:
dostępna pod adresem http://jan.serwer.pl/
Należy pamiętać o dopisywaniu po przecinku
strona.html (oczywiście domena jan.ser-
Subsystem sftp /usr/lib/sftp-server wszystkich dodawanych użytkowników. Jeśli
wer.pl musi wskazywać na adres IP nasze-
tego nie zrobimy, właściciel konta będzie mógł
go serwera).
Po uruchomieniu demona sshd powinna ist- otworzyć szyfrowany tunel TCP i połączyć się
nieć możliwość zalogowania na ograniczone od wewnątrz na dowolny port naszego serwe-
konto. Przykładowa sesja SFTP znajduje się ra lub dowolnego innego hosta dostępnego Ograniczenie port forwardingu można
na listingu 2. z naszej maszyny. rozwiązać także w inny sposób  wyłączając
je całkowicie (opcja AllowTcpForwarding no)
i ewentualnie włączając dla wybranych użyt-
kowników z pełnym dostępem do shella. Kon-
Jak działa chroot?
ta dla pozostałych użytkowników zakładamy
Chroot to mechanizm służący do ogranic- ny program, korzystamy z narzędzia ldd(1).
analogicznie.
zania procesom dostępu do części syste- Jeśli zamknięty w chroot program nie działa
W tym momencie bezpieczny serwer pli-
mu plików. Proces, którego katalog główny poprawnie, możemy skorzystać z narzędzia
ków można uznać za skonfigurowany. Sesje
(root directory) został zmieniony, nie może strace w celu sprawdzenia, czy nie próbuje
SFTP powinny działać w ograniczonym śro-
odwoływać się do plików znajdujących się on otwierać jakichś brakujących plików.
dowisku, a dostęp do shella i forwardowania
poza tym katalogiem. Zamknięte w chroo- Mechanizm chroot ma swoje słabe strony
portów został zablokowany. Ewentualne pro-
cie procesy mogą jednak tworzyć nowe de- - jedną z nich jest możliwość "wydostania
blemy możemy zdiagnozować na podstawie
skryptory plików, połączenia sieciowe itp. się" z zamkniętego środowiska procesów
komunikatów sysloga. Należy jeszcze ws-
Mogą też czytać i modyfikować wszystkie działających z prawami użytkownika root.
zystko dokładnie sprawdzić i można wpuścić
pliki, które otworzyły jeszcze przed wywo- Z tego powodu należy unikać umieszcza-
użytkowników.
łaniem funkcji chroot(). Uruchamianie prog- nia w chroocie plików wykonywalnych z usta-
ramu w środowisku chroot jest dość kłopot- wionym bitem SUID i właścicielem root.
liwe, ponieważ wybrany katalog musi za- Chroot nie ogranicza listy wywołań syste-
W Sieci
wierać wszystkie wymagane do jego dzi- mowych, jakie mogą uruchamiać działające
ałania pliki. Trzeba więc utworzyć strukturę procesy. Nie chroni także przed nadmier- " Strona projektu OpenSSH:
katalogów podobną do '/' i skopiować tam nym wykorzystaniem CPU, pamięci, miej- http://openssh.org/
" Strona projektu chrootssh:
potrzebne binarki, pliki urządzeń i biblioteki. sca na dysku i innych zasobów.
http://chrootssh.sourceforge.net/ -
Aby sprawdzić, jakich bibliotek wymaga da-
28 marzec 2007


Wyszukiwarka

Podobne podstrony:
2007 08 Podstawy zabezpieczenia serwerów [Bezpieczenstwo]
2007 04 Qmail – nowoczesny serwer pocztowy [Bezpieczenstwo]
Ustawa z dnia 20 03 2009 o bezpieczeństwie imprez masowych
2007 02?zpieczne SSH [Bezpieczenstwo]
03 Linux Konfiguracja serwera FTP PROFTPD
2007 03 Naturalne wody butelkowane cz 1
Artykuł Dolar międzynarodowy (2007 03 05)
2007 03 05 gazeta prawna
Lekcja 3 Serwer Plików
2007 03 What s the Diff Examining the Algorithms of the Diff Utility
2007 03 01
2007 03 Pozycje ułożeniowe w masażu leczniczym cz 1
2007 03 Pozycje ułożeniowe w masażu leczniczym cz 1
2007 03 Pomysły na szybkie C [Programowanie]
2007 03 Inspekcje kodu jako skuteczna metoda weryfikacji oprogramowania [Inzynieria Oprogramowania]
2007 03 Łatanie pingwina–patchsety dla kernela [Administracja]
2007 03 Unbreakable

więcej podobnych podstron