Come configurare un server SFTP con restrizioni su Ubuntu?


81

Vorrei sapere come impostare account utente root, sudo, solo sftp che non richiederanno l'autenticazione con chiave pubblica all'accesso. Vorrei anche sapere come impostare le home directory degli utenti solo sftp dove impossibile accedere ad altre directory di livello superiore.

Risposte:


91

La risorsa migliore per aiutarti a iniziare a configurare un servizio ssh su una macchina Host usando Ubuntu è OpenSSH Server . Ciò consentirà di utilizzare il protocollo di trasferimento file SSH (anche Secure File Transfer Protocol o SFTP) per accedere, trasferire e gestire i file su SSH da un computer client.

Panoramica della soluzione

  • Su Ubuntu è possibile impostare un OpenSSH servercomputer su un host e un utente può quindi utilizzare sshper connettersi dal server client al server host utilizzando solo un nome utente e una password. Si noti, tuttavia, che è consigliata l'autenticazione con chiave pubblica,

"Assicurati di avere una password complessa prima di installare un server SSH (potresti voler disabilitare del tutto le password )"

  • Gli account utente amministrativi creati sull'host avranno privilegi sudo, gli account utente standard creati sull'host no.

Installa e configura il tuo server OpenSSH su Host

Per installare un server OpenSSH su Host:

sudo apt-get install openssh-server

Assegna al tuo host un indirizzo IP statico in modo da poterti connettere in modo affidabile ad esso:

nm-connection-editor

Per configurare il tuo server OpenSSH , "prima fai un backup del tuo file sshd_config copiandolo nella tua home directory, o eseguendo una copia di sola lettura in / etc / ssh facendo:"

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

"Una volta eseguito il backup del sshd_configfile, è possibile apportare modifiche con qualsiasi editor di testo, ad esempio:"

sudo -H gedit /etc/ssh/sshd_config

È necessario riavviare il servizio ssh su Host affinché queste modifiche abbiano effetto

sudo service ssh restart

Considera le seguenti misure di sicurezza

  • Non abilitare il port forwarding sul tuo router: quando l'outsider chiede al tuo router di connetterlo alla porta 22, ecc., Il tuo router non si conformerà a meno che tu non abbia abilitato il port forwarding
  • Disabilita login root: commenta PermitRootLogin without-password; aggiungere PermitRootLogin noa Host/etc/ssh/sshd_config
  • Scegli una porta SSH non standard: commentare Port 22; aggiungere Port <new-port-number>a Host/etc/ssh/sshd_config
  • Consenti solo connessioni locali: Aggiungi ListenAddress 192.168.0.10
  • Consenti a determinati utenti su determinate porte: Aggiungi AllowUsers <username>@<IP_address_1> <username>@<IP_address_2>o AllowUsers <username>@111.222.333.*a Host/etc/ssh/sshd_config
  • Consenti solo connessioni chiave RSA (senza password): aggiungi il contenuto di ~/.ssh/id_rsa.pubciascun client come una nuova linea di host ~/.ssh/authorized_keys. Quindi aggiungi PasswordAuthentication noa Host/etc/ssh/sshd_config
  • Tentativi di cracking degli attaccanti lenti: Usa ufw (firewall semplice) su Host per limitare la velocità delle connessioni in entrata a 10 / minuto: sudo apt-get install ufw && sudo ufw limit OpenSSH
  • Per ulteriori idee, vedere Protezione dell'accesso SSH

Se ritieni di doverlo fare, abilita PasswordAuthenticationnel tuo sshd_configfile

Trova la riga con la frase PasswordAuthenticatione falla leggere:

PasswordAuthentication yes

Salvare il nuovo sshd_configfile e quindi riavviare il sshservizio Host :

sudo service ssh restart

Se è necessario l'accesso da qualsiasi luogo su Internet, impostare il port forwarding sul router locale per indirizzare il traffico al server OpenSSH

Si noti che il sshservizio Host della porta ascolta nel sshd_configfile e configura il router per inoltrare il traffico TCP / UDP diretto a questa porta all'indirizzo IP del server OpenSSH.

Connetti a Host e accedi tramite riga di comando o terminale

  • Per aprire un terminale shell SFTP come <username>su Host, aprire un Terminale su Client e immettere il comando seguente, sostituendolo 123.123.1.23con l'indirizzo IP dell'host:

    sftp <username>@123.123.1.23
    
    • Se hai modificato il numero di porta che il server OpenSSH dell'host è in ascolto, esegui:

      sftp -P <port_number_in_Host's_sshd_config_file> <username>@123.123.1.23
      
  • Per aprire un terminale shell SSH come <username>sull'host, aprire un terminale sul client e immettere il comando seguente, sostituendolo 123.123.1.23con l'indirizzo IP dell'host:

    ssh <username>@123.123.1.23
    
    • Se hai modificato il numero di porta che il server OpenSSH dell'host è in ascolto, esegui:

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

Collegati all'host e accedi tramite il file manager della GUI (ad es. Nautilus) per un accesso SFTP più visivo per abilitare i trasferimenti di file

  1. Apri Nautilus sul client
  2. Seleziona File> Connetti al server
  3. Genere: SSH
  4. Server: inserire l'indirizzo IP dell'host
  5. Porta: numero di porta specificato nel sshd_configfile host
  6. Nome utente: nome utente
  7. Password: password

inserisci qui la descrizione dell'immagine

Nel 14.04:

  1. Apri Nautilus sul client
  2. Connetti al server
  3. Digitare: `ssh @ 123.123.1.23:

Crea account utente standard sull'host con autorizzazioni file limitate al di fuori della loro cartella principale

Le autorizzazioni di file corrette in atto su Host garantiscono che ogni utente standard (senza privilegi di sudo) creato su Host possieda la propria /home/new_userdirectory ma disponga di autorizzazioni limitate con il resto della struttura di directory.

  • Le autorizzazioni limitate non significano necessariamente che non sono in grado di visualizzare i nomi dei file e la struttura delle directory.

Spero sia utile!


9
Mi sembra che questa risposta, sebbene appaia molto esaustiva, in realtà non riesce a rispondere alla parte più difficile della domanda dei PO: "dove non possono accedere ad altre directory di livello superiore". Se implementato come sopra, l'utente sarebbe in grado di leggere la stragrande maggioranza della struttura delle directory.
ostergaard,

2
Per espandere il commento di @ajostergaard, questo crea un utente unix regolare e consente loro l'accesso SSH e SFTP. Un utente unix regolare (non root) può comunque accedere e visualizzare un numero molto elevato di file sensibili come la configurazione del server Web e molto altro. Ciò non è assolutamente sicuro e sicuramente non soddisfa i limiti richiesti dal PO.
Simon Woodside,

50

Passaggio 1: installare il pacchetto OpenSSH se non installato

sudo apt-get install openssh-server

Passaggio 2: creare un gruppo separato per gli utenti SFTP.

sudo addgroup ftpaccess

Passaggio 3: modifica il /etc/ssh/sshd_configfile e apporta le modifiche come di seguito. Trova e commenta sotto la riga.

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

e aggiungi queste righe alla fine del file.

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

Passaggio 4: riavviare il servizio sshd.

sudo service ssh restart

Passaggio 5: aggiungere l'utente con il gruppo ftpaccess e creare la password.

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

Passaggio 6: modificare l'autorizzazione della directory principale.

sudo chown root:root /home/paul

Passaggio 7: creare una directory all'interno di home per il caricamento e modificare le autorizzazioni con il gruppo.

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

Questo è tutto .

Fare riferimento: Setup SFTP su Ubuntu


Questa sembra essere la risposta corretta. Non l'ho provato, ma almeno ha menzionato la principale difficoltà, limitando il percorso di navigazione.
Mohammed Noureldin,

L'ho provato ed era fin troppo permissivo, a causa delle autorizzazioni predefinite sulla cartella home che erano 755. L'ho fatto sudo chmod 711sulla cartella home e mi ha permesso di passare solo alla cartella www. Sembra buono finora, ma forse altri possono suonare in ...
moodboom

0

Denyhosts è un altro strumento oltre a quelli menzionati da "jtd" che potresti voler guardare. Può bloccare automaticamente ripetuti tentativi di connessione al server SSH. È disponibile per l'installazione nei repository Ubuntu.


Paky denyhosts è disponibile solo per lucido (10.04LTS) e preciso (12.04LTS). package.ubuntu.com/search?suite=all&keywords=denyhosts
AB

Denyhosts non è più disponibile nei repository Ubuntu, anche se può ancora essere installato con un metodo diverso ma non è stato aggiornato da molto tempo. Pertanto, non è saggio usare Denyhosts.
Faizan Akram Dar,

0

Limitare l'accesso all'utente

Qui, consentiremo solo all'utente di eseguire il trasferimento di file e disabiliteremo l'accesso al terminale.

Per questo aggiungi i seguenti codici nella parte inferiore del file di configurazione.

$ sudo nano /etc/ssh/sshd_config

Ora il file si aprirà e incollerà il codice.

/etc/ssh/sshd_config

. . .

Match User filemg

ForceCommand internal-sftp

PasswordAuthentication yes

ChrootDirectory /var/sftp

PermitTunnel no

AllowAgentForwarding no

AllowTcpForwarding no

X11Forwarding no

Sostituisci filemgcon il tuo nome utente. Quindi salva e chiudi il file.

Questo è tutto.

Riferimento: come utilizzare SFTP in Ubuntu 16.04

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.