Jak skonfigurować ograniczony serwer SFTP na Ubuntu?

81

Chciałbym wiedzieć, jak skonfigurować konta użytkowników root, sudo, tylko dla sftp, które nie będą wymagały uwierzytelnienia kluczem publicznym podczas logowania. Chciałbym również wiedzieć, jak skonfigurować katalogi domowe dla użytkowników tylko dla sftp, w których nie mogę uzyskać dostępu do innych katalogów wyższego poziomu.

Yuya Kobayashi
źródło

Odpowiedzi:

91

Najlepszym zasobem, który pomoże Ci rozpocząć konfigurację usługi ssh na maszynie hosta za pomocą Ubuntu, jest serwer OpenSSH . Umożliwi to korzystanie z protokołu przesyłania plików SSH (również bezpiecznego protokołu przesyłania plików lub SFTP) w celu uzyskiwania dostępu, przesyłania i zarządzania plikami przez SSH z komputera klienta.

Przegląd rozwiązania

  • W systemie Ubuntu można skonfigurować OpenSSH serverkomputer hosta, a użytkownik może następnie użyć sshdo połączenia klienta z serwerem hosta za pomocą tylko nazwy użytkownika i hasła. Należy jednak pamiętać, że zalecane jest uwierzytelnianie za pomocą klucza publicznego,

„ Przed zainstalowaniem serwera SSH upewnij się, że masz silne hasło (możesz całkowicie wyłączyć hasła )”

  • Konta użytkowników administracyjnych utworzone na hoście będą miały uprawnienia sudo, standardowe konta użytkowników utworzone na hoście nie będą.

Zainstaluj i skonfiguruj serwer OpenSSH na hoście

Aby zainstalować serwer OpenSSH na hoście:

sudo apt-get install openssh-server

Nadaj hostowi statyczny adres IP, abyś mógł się z nim niezawodnie połączyć:

nm-connection-editor

Aby skonfigurować serwer OpenSSH , „najpierw wykonaj kopię zapasową pliku sshd_config, kopiując go do katalogu domowego lub wykonując kopię tylko do odczytu w / etc / ssh, wykonując:”

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.factory-defaults
sudo chmod a-w /etc/ssh/sshd_config.factory-defaults

„Po utworzeniu kopii zapasowej sshd_configpliku możesz wprowadzić zmiany w dowolnym edytorze tekstu, na przykład:”

sudo -H gedit /etc/ssh/sshd_config

Musisz ponownie uruchomić usługę ssh na hoście, aby zmiany zostały wprowadzone

sudo service ssh restart

Rozważ następujące środki bezpieczeństwa

  • Nie włączaj przekierowywania portów na routerze: gdy outsider poprosi router o połączenie outsider z portem 22 itp., Router nie spełnia wymagań, chyba że włączyłeś przekierowanie portów
  • Wyłącz logowanie do roota: skomentuj PermitRootLogin without-password; dodaj PermitRootLogin nodo hosta/etc/ssh/sshd_config
  • Wybierz niestandardowy port SSH: Skomentuj Port 22; dodaj Port <new-port-number>do hosta/etc/ssh/sshd_config
  • Zezwalaj tylko na połączenia lokalne: Dodaj ListenAddress 192.168.0.10
  • Zezwalaj określonym użytkownikom na określonych portach: Dodaj AllowUsers <username>@<IP_address_1> <username>@<IP_address_2>lub AllowUsers <username>@111.222.333.*do hosta/etc/ssh/sshd_config
  • Zezwalaj tylko na połączenia z kluczem RSA (bez hasła): dołącz zawartość ~/.ssh/id_rsa.pubkażdego klienta jako nowy wiersz hosta ~/.ssh/authorized_keys. Następnie dodaj PasswordAuthentication nodo Hosta/etc/ssh/sshd_config
  • Powolne próby włamań atakujących: Użyj ufw (nieskomplikowana zapora ogniowa) na hoście, aby ograniczyć liczbę połączeń przychodzących do 10 / minutę: sudo apt-get install ufw && sudo ufw limit OpenSSH
  • Aby uzyskać więcej pomysłów, zobacz Zabezpieczanie dostępu SSH

Jeśli uważasz, że musisz, Włącz PasswordAuthenticationw swoim sshd_configpliku

Znajdź wiersz ze zwrotem PasswordAuthenticationi spraw, aby brzmiał:

PasswordAuthentication yes

Zapisz nowy sshd_configplik, a następnie ponownie uruchom sshusługę hosta :

sudo service ssh restart

Jeśli potrzebujesz dostępu z dowolnego miejsca przez Internet, skonfiguruj przekierowanie portów na lokalnym routerze, aby skierować ruch do serwera OpenSSH

Zwróć uwagę, że sshusługa hosta portu nasłuchuje w sshd_configpliku i skonfiguruj router, aby przekazywał ruch TCP / UDP skierowany do tego portu na adres IP serwera OpenSSH.

Połącz się z Hostem i zaloguj za pomocą wiersza polecenia lub terminala

  • Aby otworzyć terminal powłoki SFTP jak <username>na hoście, otwórz terminal na kliencie i wprowadź następującą komendę, zastępując 123.123.1.23adres IP hosta:

    sftp <username>@123.123.1.23
    
    • Jeśli zmieniłeś numer portu, na którym nasłuchuje serwer OpenSSH hosta, wykonaj:

      sftp -P <port_number_in_Host's_sshd_config_file> <username>@123.123.1.23
      
  • Aby otworzyć terminal powłoki SSH jak <username>na hoście, otwórz terminal na kliencie i wprowadź następującą komendę, zastępując 123.123.1.23adres IP hosta:

    ssh <username>@123.123.1.23
    
    • Jeśli zmieniłeś numer portu, na którym nasłuchuje serwer OpenSSH hosta, wykonaj:

      ssh -p <port_number_in_Host's_sshd_config_file> <username>@123.123.1.23
      

Połącz się z Hostem i zaloguj się za pomocą menedżera plików GUI (np. Nautilus), aby uzyskać bardziej wizualny dostęp do SFTP, aby umożliwić przesyłanie plików

  1. Otwórz Nautilus na kliencie
  2. Wybierz Plik> Połącz z serwerem
  3. Rodzaj: SSH
  4. Serwer: wprowadź adres IP hosta
  5. Port: numer portu określony w sshd_configpliku hosta
  6. Nazwa użytkownika: nazwa użytkownika
  7. Hasło: hasło

wprowadź opis zdjęcia tutaj

W 14.04:

  1. Otwórz Nautilus na kliencie
  2. Połączyć się z serwerem
  3. Wpisz: `ssh @ 123.123.1.23:

Utwórz standardowe konta użytkowników na hoście z ograniczonymi uprawnieniami do plików poza ich folderem domowym

Odpowiednie uprawnienia do plików na hoście gwarantują, że każdy standardowy użytkownik (bez uprawnień sudo) utworzony na hoście będzie właścicielem swojego /home/new_userkatalogu, ale będzie miał ograniczone uprawnienia do reszty struktury katalogu.

  • Ograniczone uprawnienia niekoniecznie oznaczają, że nie są w stanie wyświetlić nazw plików i struktury katalogów.

Mam nadzieję, że to jest pomocne!

jtd
źródło
9
Wydaje mi się, że ta odpowiedź, choć wydaje się bardzo wyczerpująca, w rzeczywistości nie odpowiada na najtrudniejszą część pytania PO: „gdzie nie mogą uzyskać dostępu do innych katalogów wyższego poziomu”. Jeśli zostanie zaimplementowany jak powyżej, użytkownik będzie mógł odczytać większość struktury katalogów.
ostergaard
2
Aby rozwinąć komentarz @ ajostergaard, tworzy to zwykłego użytkownika unixowego i umożliwia mu dostęp przez SSH i SFTP. Zwykły użytkownik systemu uniksowego (nie root) może nadal uzyskiwać dostęp i wyświetlać bardzo dużą liczbę poufnych plików, takich jak konfiguracja serwera WWW i wiele więcej. To zdecydowanie nie jest bezpieczne i zdecydowanie nie spełnia ograniczeń wymaganych przez PO.
Simon Woodside,
50

Krok 1: Zainstaluj pakiet OpenSSH, jeśli nie jest zainstalowany

sudo apt-get install openssh-server

Krok 2: Utwórz osobną grupę dla użytkowników SFTP.

sudo addgroup ftpaccess

Krok 3: Edytuj /etc/ssh/sshd_configplik i wprowadź zmiany jak poniżej. Znajdź i skomentuj poniżej linii.

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

i dodaj te linie na końcu pliku.

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

Krok 4: Uruchom ponownie usługę sshd.

sudo service ssh restart

Krok 5: Dodaj użytkownika z grupą ftpaccess i utwórz hasło.

sudo adduser paul --ingroup ftpaccess --shell /usr/sbin/nologin

Krok 6: Zmodyfikuj uprawnienia do katalogu domowego.

sudo chown root:root /home/paul

Krok 7: Utwórz katalog w domu do przesyłania i zmodyfikuj uprawnienia w grupie.

sudo mkdir /home/paul/www
sudo chown paul:ftpaccess /home/paul/www

Otóż ​​to .

Patrz: Konfiguracja SFTP na ubuntu

ytgmuabm
źródło
To wydaje się być poprawna odpowiedź. Nie testowałem tego, ale przynajmniej wspomniałem o głównej trudności, ograniczając ścieżkę przeglądania.
Mohammed Noureldin,
Przetestowałem to i było zdecydowanie zbyt liberalne, ze względu na domyślne uprawnienia do folderu domowego wynoszące 755. Zrobiłem to sudo chmod 711w folderze domowym i pozwoliło mi to tylko na ftp do folderu www. Na razie wydaje się dobry, ale może inni mogą dzwonić w ...
moodboom 18.10.17
0

Denyhosts to kolejne narzędzie oprócz tych wymienionych przez „jtd”, na które warto spojrzeć. Może automatycznie blokować powtarzające się próby połączenia z serwerem SSH. Można go zainstalować w repozytoriach Ubuntu.

firefly2442
źródło
Pakiety denyhosts są dostępne tylko dla świadomych (10.04LTS) i precyzyjnych (12.04LTS). packages.ubuntu.com/search?suite=all&ke
AB
Denyhosts nie jest już dostępny w repozytoriach Ubuntu, chociaż nadal można go zainstalować inną metodą, ale od dawna nie był aktualizowany. Dlatego używanie Denyhosts nie jest rozsądne.
Faizan Akram Dar
0

Ogranicz dostęp do użytkownika

Tutaj pozwolimy tylko użytkownikowi na przesyłanie plików i wyłączymy dostęp do terminala.

W tym celu dodaj następujące kody na dole pliku konfiguracyjnego.

$ sudo nano /etc/ssh/sshd_config

Teraz plik otworzy się i wklei kod.

/etc/ssh/sshd_config

. . .

Match User filemg

ForceCommand internal-sftp

PasswordAuthentication yes

ChrootDirectory /var/sftp

PermitTunnel no

AllowAgentForwarding no

AllowTcpForwarding no

X11Forwarding no

Zastąp filemgswoją nazwą użytkownika. Następnie zapisz i zamknij plik.

Otóż ​​to.

Odniesienia: Jak korzystać z SFTP w Ubuntu 16.04

Aimal
źródło