Wie richte ich einen eingeschränkten SFTP-Server unter Ubuntu ein?

81

Ich möchte wissen, wie Root-, Sudo- und SFTP-Benutzerkonten eingerichtet werden, für die bei der Anmeldung keine Authentifizierung mit öffentlichem Schlüssel erforderlich ist. Ich möchte auch wissen, wie die Basisverzeichnisse von SFTP-Benutzern dort eingerichtet werden, wo sie sich befinden Ich kann nicht auf andere Verzeichnisse der oberen Ebene zugreifen.

Yuya Kobayashi
quelle

Antworten:

91

Die beste Ressource, die Sie beim Einrichten eines ssh-Dienstes auf einem Host-Computer mit Ubuntu unterstützen kann, ist OpenSSH Server . Auf diese Weise können Sie das SSH-Dateiübertragungsprotokoll (auch Secure File Transfer Protocol oder SFTP) verwenden, um von einem Client-Computer aus über SSH auf Dateien zuzugreifen, diese zu übertragen und diese zu verwalten.

Lösungsübersicht

  • Unter Ubuntu können Sie eine OpenSSH serverauf einem Host-Computer einrichten, und ein Benutzer kann dann ssheine Verbindung vom Client zum Host-Server herstellen, indem er nur einen Benutzernamen und ein Kennwort verwendet. Beachten Sie jedoch, dass die Authentifizierung mit öffentlichem Schlüssel empfohlen wird.

"Stellen Sie sicher, dass Sie ein sicheres Kennwort haben, bevor Sie einen SSH-Server installieren (möglicherweise möchten Sie Kennwörter ganz deaktivieren )"

  • Auf dem Host erstellte administrative Benutzerkonten verfügen über Sudo-Berechtigungen, auf dem Host erstellte Standardbenutzerkonten nicht.

Installieren und konfigurieren Sie Ihren OpenSSH-Server auf dem Host

So installieren Sie einen OpenSSH-Server auf dem Host:

sudo apt-get install openssh-server

Geben Sie Ihrem Host eine statische IP-Adresse, damit Sie eine zuverlässige Verbindung herstellen können:

nm-connection-editor

Um Ihren OpenSSH-Server zu konfigurieren , "erstellen Sie zuerst eine Sicherungskopie Ihrer Datei sshd_config, indem Sie sie in Ihr Ausgangsverzeichnis kopieren, oder indem Sie eine schreibgeschützte Kopie in / etc / ssh erstellen:"

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

"Sobald Sie Ihre sshd_configDatei gesichert haben , können Sie Änderungen mit einem beliebigen Texteditor vornehmen, zum Beispiel:"

sudo -H gedit /etc/ssh/sshd_config

Sie müssen Ihren ssh-Dienst auf dem Host neu starten, damit diese Änderungen wirksam werden

sudo service ssh restart

Beachten Sie die folgenden Sicherheitsmaßnahmen

  • Aktivieren Sie die Portweiterleitung auf Ihrem Router nicht: Wenn Ihr Router von einem Außenstehenden aufgefordert wird, eine Verbindung zu Port 22 usw. herzustellen, ist Ihr Router nur dann konform, wenn Sie die Portweiterleitung aktiviert haben
  • Root-Login deaktivieren: Auskommentieren PermitRootLogin without-password; PermitRootLogin nozu Hosts hinzufügen/etc/ssh/sshd_config
  • Wählen Sie einen nicht standardmäßigen SSH-Port: Auskommentieren Port 22; Port <new-port-number>zu Hosts hinzufügen/etc/ssh/sshd_config
  • Nur lokale Verbindungen zulassen: Hinzufügen ListenAddress 192.168.0.10
  • Bestimmte Benutzer an bestimmten Ports zulassen: Hosts hinzufügen AllowUsers <username>@<IP_address_1> <username>@<IP_address_2>oder AllowUsers <username>@111.222.333.*hinzufügen/etc/ssh/sshd_config
  • Nur Verbindungen mit RSA-Schlüsseln (ohne Kennwort) zulassen: Fügen Sie die Inhalte der ~/.ssh/id_rsa.pubeinzelnen Clients als neue Zeile der Hosts hinzu ~/.ssh/authorized_keys. Dann PasswordAuthentication nozu Hosts hinzufügen/etc/ssh/sshd_config
  • Langsame Angriffsversuche: Verwenden Sie ufw (unkomplizierte Firewall) auf dem Host, um eingehende Verbindungen auf 10 / Minute zu begrenzen: sudo apt-get install ufw && sudo ufw limit OpenSSH
  • Weitere Ideen finden Sie unter Sicherer SSH-Zugriff

Wenn Sie das Gefühl haben müssen, aktivieren Sie PasswordAuthenticationin Ihrer sshd_configDatei

Suchen Sie die Zeile mit der Phrase PasswordAuthenticationund lassen Sie sie lesen:

PasswordAuthentication yes

Speichern Sie Ihre neue sshd_configDatei und starten Sie den Host- sshDienst neu:

sudo service ssh restart

Wenn Sie von überall über das Internet zugreifen müssen, richten Sie die Portweiterleitung auf Ihrem lokalen Router ein, um den Datenverkehr an Ihren OpenSSH-Server zu leiten

Beachten Sie, dass der sshDienst des Port-Hosts die sshd_configDatei abhört, und richten Sie Ihren Router so ein, dass TCP / UDP-Verkehr, der auf diesen Port gerichtet ist, an die IP-Adresse Ihres OpenSSH-Servers weitergeleitet wird.

Stellen Sie eine Verbindung zum Host her und melden Sie sich über die Befehlszeile oder das Terminal an

  • Um ein SFTP-Shell-Terminal als <username>Host zu öffnen, öffnen Sie ein Terminal auf dem Client und geben Sie den folgenden Befehl ein, der 123.123.1.23durch die IP-Adresse des Hosts ersetzt wird:

    sftp <username>@123.123.1.23
    
    • Wenn Sie die Portnummer geändert haben, auf der der OpenSSH-Server des Hosts lauscht, gehen Sie wie folgt vor:

      sftp -P <port_number_in_Host's_sshd_config_file> <username>@123.123.1.23
      
  • Um ein SSH-Shell-Terminal als <username>Host zu öffnen, öffnen Sie ein Terminal auf dem Client und geben Sie den folgenden Befehl ein, der 123.123.1.23durch die IP-Adresse des Hosts ersetzt wird:

    ssh <username>@123.123.1.23
    
    • Wenn Sie die Portnummer geändert haben, auf der der OpenSSH-Server des Hosts lauscht, gehen Sie wie folgt vor:

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

Stellen Sie eine Verbindung zum Host her und melden Sie sich über den GUI-Dateimanager (z. B. Nautilus) an, um einen besseren visuellen SFTP-Zugriff für die Dateiübertragung zu erhalten

  1. Öffnen Sie Nautilus auf dem Client
  2. Wählen Sie Datei> Mit Server verbinden
  3. Art: SSH
  4. Server: Geben Sie die IP-Adresse des Hosts ein
  5. Port: Portnummer in Host der angegebenen sshd_configDatei
  6. Benutzername: Benutzername
  7. Passwort: Passwort

Bildbeschreibung hier eingeben

In 14.04:

  1. Öffnen Sie Nautilus auf dem Client
  2. Verbinden zum Server
  3. Typ: `ssh @ 123.123.1.23:

Erstellen Sie Standardbenutzerkonten auf dem Host mit eingeschränkten Dateiberechtigungen außerhalb des Basisordners

Die auf dem Host vorhandenen Dateiberechtigungen garantieren, dass jeder Standardbenutzer (ohne Sudo-Berechtigungen), den Sie auf dem Host erstellen, sein /home/new_userVerzeichnis besitzt, jedoch nur über eingeschränkte Berechtigungen für den Rest der Verzeichnisstruktur verfügt.

  • Eingeschränkte Berechtigungen bedeuten nicht unbedingt, dass sie keine Dateinamen und Verzeichnisstrukturen anzeigen können.

Hoffe das ist hilfreich!

jtd
quelle
9
Diese Antwort scheint mir zwar sehr umfassend zu sein, sie kann jedoch den schwierigsten Teil der OP-Frage nicht beantworten: "Wo können sie nicht auf andere Verzeichnisse der oberen Ebene zugreifen?" Bei der oben beschriebenen Implementierung kann der Benutzer den größten Teil der Verzeichnisstruktur lesen.
ostergaard
2
Um den Kommentar von @ ajostergaard zu erweitern, wird ein regulärer Unix-Benutzer erstellt, der ihnen SSH- und SFTP-Zugriff gewährt. Ein normaler Unix-Benutzer (nicht root) kann weiterhin auf eine sehr große Anzahl vertraulicher Dateien zugreifen und diese anzeigen, z. B. auf die Webserverkonfiguration und vieles mehr. Dies ist definitiv nicht sicher und entspricht definitiv nicht der vom OP geforderten Einschränkung.
Simon Woodside
50

Schritt 1: Installieren Sie das OpenSSH-Paket, falls es nicht installiert ist

sudo apt-get install openssh-server

Schritt 2: Erstellen Sie eine separate Gruppe für SFTP-Benutzer.

sudo addgroup ftpaccess

Schritt 3: Bearbeiten Sie die /etc/ssh/sshd_configDatei und nehmen Sie die folgenden Änderungen vor. Suchen und kommentieren Sie unter der Zeile.

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

und füge diese Zeilen am Ende der Datei hinzu.

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

Schritt 4: Starten Sie den sshd-Dienst neu.

sudo service ssh restart

Schritt 5: Fügen Sie einen Benutzer mit der Gruppe ftpaccess hinzu und erstellen Sie ein Kennwort.

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

Schritt 6: Ändern Sie die Berechtigung für das Basisverzeichnis.

sudo chown root:root /home/paul

Schritt 7: Erstellen Sie ein Verzeichnis für den Upload und ändern Sie die Berechtigung mit group.

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

Das ist es .

Siehe: SFTP auf Ubuntu einrichten

ytgmuabm
quelle
Dies scheint die richtige Antwort zu sein. Ich habe es nicht getestet, aber es erwähnte zumindest die Hauptschwierigkeit, den Browsing-Pfad einzuschränken.
Mohammed Noureldin
Ich habe es getestet und es war viel zu freizügig, da die Standardberechtigungen für den Basisordner 755 waren. Ich habe es sudo chmod 711für den Basisordner getan und es erlaubte mir, nur zum www-Ordner zu ftpen. Scheint bisher gut zu sein, aber vielleicht können andere ...
Stimmungsboom
0

Denyhosts ist neben den von "jtd" erwähnten ein weiteres Tool, das Sie sich ansehen sollten. Wiederholte Verbindungsversuche zu Ihrem SSH-Server können automatisch blockiert werden. Es kann in den Ubuntu-Repositories installiert werden.

firefly2442
quelle
Paket denyhosts ist nur für klar (10.04LTS) und genau (12.04LTS) verfügbar. packages.ubuntu.com/search?suite=all&keywords=denyhosts
AB
Denyhosts ist in Ubuntu-Repositories nicht mehr verfügbar, obwohl es immer noch mit einer anderen Methode installiert werden kann, aber seit langem nicht mehr aktualisiert wurde. Daher ist es nicht ratsam, Denyhosts zu verwenden.
Faizan Akram Dar
0

Beschränken Sie den Zugriff auf den Benutzer

Hier erlauben wir nur dem Benutzer die Dateiübertragung und deaktivieren den Terminalzugriff.

Fügen Sie dazu die folgenden Codes am Ende der Konfigurationsdatei hinzu.

$ sudo nano /etc/ssh/sshd_config

Jetzt wird die Datei geöffnet und der Code eingefügt.

/etc/ssh/sshd_config

. . .

Match User filemg

ForceCommand internal-sftp

PasswordAuthentication yes

ChrootDirectory /var/sftp

PermitTunnel no

AllowAgentForwarding no

AllowTcpForwarding no

X11Forwarding no

Ersetzen Sie filemgdurch Ihren Benutzernamen. Speichern und schließen Sie dann die Datei.

Das ist es.

Referenz: Verwendung von SFTP in Ubuntu 16.04

Aimal
quelle