Zamykanie użytkowników SFTP w ich katalogach domowych, czyli chroot dla sftp

Data publikacji: 2014-07-08 | Tagi:

W czasach powszechnie królującego ftp chrootowało się użytkowników (czyli ograniczało im się dostęp do wybranych katalogów) w ustawieniach danego serwera ftp. Teraz gdy czasy ftp zdają się przemijać, a cywilizowany świat zaczyna szyfrować transmisje plików, rolę ftp przejmuje sftp. W tym poście pokażę, jak uwięzić użytkownika w jego katalogu domowym używając sftp.

Ale może od początku: co to jest sftp? Jest to SSH File Transfer Protocol, czyli protokół przesyłania plików przy użyciu ssh. Każdy serwer, który ma zainstalowane ssh ma możliwość udostępniania zasobów przy użyciu sftp.

Jak uruchomić sftp? Jest uruchomiony, jeśli jest uruchomiony serwer ssh. Można się o tym przekonać używając np. filezilli do połączenia się z serwerem (używając protokołu sftp oraz loginu i hasła ssh) - mamy wtedy dostęp do całych jego zasobów.

A teraz opis jak dla wybranego użytkownika pozwolić tylko na logowanie sftp, bez możliwości dostępu do konsoli ssh oraz bez możliwości wyjścia poza katalog domowy.

Dla wygody zakładam, że nasz przykładowy użytkownik ma login marek, hasło keram (łatwe do zgadnięcia) i katalog domowy w /home/marek. Oczywiście milcząco zakładam, że użytkownik ten jest stworzony, a serwer ssh skonfigurowany i działający.

Pierwsza rzecz - konfiguracja serwera ssh. Edytujemy plik /etc/ssh/sshd_config i na końcu dopisujemy następujące linie:

Subsystem sftp internal-sftp

Match User marek
    ChrootDirectory %h
    AllowTCPForwarding no
    X11Forwarding no
    ForceCommand internal-sftp

Przy okazji upewniamy się, czy nie mamy w tym pliku innego wpisu Subsystem sftp. Jeśli mamy, to musimy go zakomentować:

...
#Subsystem sftp /usr/lib/openssh/sftp-server
...

Teraz musimy stworzyć odpowiednie prawa dostępu do odpowiednich katalogów:

sudo chown root /home/marek
sudo chmod go-w /home/marek
sudo mkdir /home/marek/pliki
sudo chown marek /home/marek/pliki
sudo chmod ug+rwX /home/marek/pliki

Tymi poleceniami utworzyliśmy dla Marka katalog /home/marek/pliki, do którego będzie miał swobodny dostęp. Natomiast katalog /home/marek przypisaliśmy użytkownikowi root i odebraliśmy możliwość zapisu dla pozostałych użytkowników.

Teraz należy zrestartować serwer ssh:

sudo /etc/init.d/ssh restart

Po tej operacji użytkownik Marek, może się zalogować do serwera przez sftp i będzie miał dostęp jedynie do zapisu w katalogu /home/marek/pliki, przy czym nie będzie miał możliwości wyjść poza katalog /home/marek.

To jeszcze nie koniec, ponieważ Marek ma swobodny dostęp do serwera używając ssh. Zatem odbierzmy mu ten przywilej.

Edytujemy plik /etc/passwd znajdując w nim linię zaczynającą się od loginu marek:

...
ntp:x:106:109::/home/ntp:/bin/false
marek:x:1001:1001::/home/marek:/bin/bash
...

Zmieniamy ją na:

marek:x:1001:1001::/home/marek:/usr/lib/openssh/sftp-server

lub

marek:x:1001:1001::/home/marek:/bin/false

W obu przypadkach przy próbie logowania po ssh użytkownik otrzyma komunikat:

~ ssh marek@serwer.pl
marek@serwer.pl's password: 
This service allows sftp connections only.
Connection to serwer.pl closed.


Oceń ten post:
Podziel się:

comments powered by Disqus

IT w obrazkach: