SFTP – czyli SSH File Transfer Protocol – to protokół komunikacyjny, który umożliwia przesyłanie plików za pomocą SSH. Jego zaletą jest szyfrowanie transmisji za pomocą klucza szyfrującego jak i możliwość uwierzytelniania za pomocą certyfikatów.

SFTP jest dostępny w OpenSSH ale przy domyślnej konfiguracji ma kilka niepożądanych cech. Użytkownicy mając dostęp do SSH – mogą się zdalnie zalogować w systemie i surfować po całym drzewie katalogów. Wystarczy kilka drobnych zmian w ustawieniach sshd, aby uwięzić użytkownika w jego domowym katalogu i zabronić mu dostępu przez ssh – jednocześnie pozwalając na bezproblemowe korzystanie z SFTP i zalogowanie lokalnie w systemie.

*Wszystkie polecenia są wykonane w systemie Ubuntu 12.04.1.

Logujemy się do systemu i instalujemy OpenSSH-Server następującym poleceniem (jeśli ktoś nie ma):

sudo apt-get install openssh-server

Dodajemy teraz grupę, która będzie miała dostęp tylko do SFTP, ale nie będzie mogła się logować poprzez SSH w systemie:

sudo groupadd sftponly

Dodajemy też testowego użytkownika, nadajemy mu hasło i dodajemy go do grupy sftponly

sudo useradd -m sftptest
sudo passwd sftptest
sudo usermod -aG sftponly sftptest

W tym momencie można się bez problemu zalogować przez SSH oraz korzystać z SFTP. Teraz zmodyfikujemy ustawienia demona SSH. Za pomocą swojego ulubionego edytora tekstu otwieramy plik konfiguracyjny poleceniem:

sudo vi /etc/ssh/sshd_config

Odnajdujemy linię :

"Subsystem sftp /usr/lib/openssh/sftp-server"

i zmieniamy na:

"Subsystem sftp internal-sftp"

Na końcu pliku dopisujemy:

Match group sftponly
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

Zapisujemy plik i restartujemy demona ssh poleceniem:

sudo service ssh restart

Musimy jeszcze zmienić ustawienia katalogu domowego użytkownika – robimy to poleceniami:

sudo chown root:root /home/sftptest
sudo chmod 755 /home/sftptest

Ostatnim krokiem jest dodanie kilku przykładowych katalogów i nadanie im uprawnień dla użytkownika sftptest.

cd /home/sftptest
sudo mkdir Dokumenty public_html
sudo chown sftptest:sftptest *

Gotowe! Od tej pory użytkownik może korzystać z SFTP ale nie ma dostępu do SSH. W tutorialu SFTP więzi użytkownika w jego katalogu domowym, ale nic nie stoi na przeszkodzie, aby udostępnić inny katalog np /var/www – wystarczy tylko pamiętać o odpowiednich uprawnieniach, czyli – katalog, w którym ma być uwięziony użytkownik, musi mieć koniecznie właściciela i grupę root.

Podobne artykuły

Linux Tux

przez -
0 595
  • Krzysztof

    Więzienie więzieniem, ale np i tak nie da się kontrolować maksymalnego transferu po sftp. Zostaje proftpd :/

    • Chodzi Ci o przepustowość czy ile zjadł łącza?

    • Chodzi mi o ograniczenie np ilości jednoczesnych połączeń i maksymalnego transferu na połączenie

  • Tombo

    Do sftp polecam MySecureShell. Bardzo elastyczny, łatwa konfiguracja.

    • Czy mi się wydaje czy to ma GUI? :D

    • Tombo

      Jeśli ktoś nie lubi plików konfiguracyjnych , to jakieś gui do konfiguracji MySecureShell jest . Osobiście gui do konfiguracji nie używałem ( plik konfiguracyjny jest bardzo czytelny ).

    • Artur Głowacki

      Dziwnie się czuję jak widzę GUI do konfiguracji serwera na Linuksie :P

    • Artur Głowacki

      No właśnie powiem coś od siebie. Zawsze szukałem GUI do konfigurowania czegoś na Linuksie. Czy to do Samby czy to PHP. Ale potem zobaczyłem, że np. w takim konfiguratorze do PHP mam np. checkbox:

      [ ] safe_mode

      a w pliku

      safe_mode = On.

      Zamiast zaznaczać myszką można wpisać On. Konfiguracja z palca nie jest trudna i można więcej niż przez GUI.