Consentire SFTP ma non consentire SSH?


94

Sto avviando una piccola società di hosting per pochi amici e piccoli clienti, niente di grosso.

Voglio dare ai miei "clienti" il diritto di gestire i loro file sul server. Odio FTP perché non è sicuro ed è a mio avviso obsoleto.

Quindi vorrei consentire ai miei utenti di connettersi tramite SFTP ma non consentire loro di connettersi tramite SSH. (Lo so, lo so, SFTP sta usando SSH). Ma mi stavo solo chiedendo, è possibile?

Quindi non dovrei installare un servizio FTP sul server e tutto sarebbe fantastico!

Risposte:


121

A partire dalla versione 4.9 OpenSSH (non disponibile in centos 5.x ma la funzionalità ChrootDirectory era backported) ha un internal-sftpsottosistema:

Subsystem sftp internal-sftp

E quindi bloccare altri usi:

Match group sftponly
     ChrootDirectory /home/%u
     X11Forwarding no
     AllowTcpForwarding no
     ForceCommand internal-sftp

Aggiungi i tuoi utenti al sftponlygruppo. Devi modificare la home directory dell'utente a /causa del chroot e /home/userdovrebbe essere di proprietà di root. Vorrei anche impostare /bin/falsecome shell dell'utente.


Wow! Super-awesome! Lo testerò e tornerò qui per confermare. Molte grazie!
Tommy B.

+1 per la cosa ChrootDirectory!
Kyle Hodgson,

1
Dopo aver fatto ciò, il mio utente sftponly non può accedere tramite ssh ed è in grado di connettersi tramite sftp. Tuttavia non può vedere alcun file! Nonostante questi file abbiano il permesso per questo utente. :-(
Emilio Nicolás,

3
Se vuoi farlo e trovare una voce nel tuo sshd_config con "/ usr / lib / openssh / sftp-server" già esistente, controlla qui: serverfault.com/questions/660160/… - internal-sftp is "newer , migliore e più facile "
Xosofox,

19

C'è un guscio scponly che cosa fa questo. Può anche chroot .


Questo sarebbe fantastico se hai bisogno sia di utenti SFTP che di utenti SSH. Basta sostituire la shell in / etc / passwd per quelli limitati solo a SFTP.
Dragos,

4

Dai un'occhiata a rssh che è una shell falsa che consente sftp ma nega ssh

Maggiori informazioni su RSSH

http://www.pizzashack.org/rssh/

RPM

http://pkgs.repoforge.org/rssh/

Puoi configurare rssh per consentire / negare comportamenti diversi come sft, scp ecc.


Bello. Questo è il modo più semplice per configurare senza toccare affatto sshd_config. Basta cambiare la shell nel file passwd e il gioco è fatto.
Tomofumi,

2

Puoi modificare / etc / passwd e dare a quell'utente una shell falsa in modo che non possa usare ssh.


11
Hai provato questo?
splattne,

8
Quando provo a impostare la shell su /bin/falsessh o sftp non funziona
Brad Mace

2
/ bin / false significa non consentire alcun tipo di accesso, che qui non è l'approccio corretto. La risposta accettata da Rob Wouters è come limitare gli utenti a SFTP, non cambiando la shell. Se volessi cambiare shell asnwer di Stone sarebbe una buona idea.
jwbensley,

1
quindi QUALE shell dovrebbe essere usata supponendo / bin / bash non accettabile e / bin / false o / sbin / nologin negano l'accesso?
Putnik,

1

Uso il metodo per specificare la shell utente come / bin / false come menzionato. Tuttavia, è necessario assicurarsi che / bin / shell sia in / etc / shells. Quindi funziona ssh = no ftp = ok.

Uso anche vsftpd e aggiungo
chroot_local_user = YES a /etc/vsftpd/vsftpd.conf in modo che ftp-ers non possa vedere la data diversa dalla propria.

Il vantaggio di queste semplici modifiche non è la fastidiosa configurazione di ssh config per ogni utente.


1

Non dimenticare di trovare la linea UsePAM yese commentarla:

#UsePAM yes

Senza disabilitarlo, il server SSH si arresterebbe in modo anomalo durante il ricaricamento / riavvio. Dato che non hai bisogno di fantasiose funzioni di PAM, questo va bene.


0

Configurare ssh per abilitare solo sftp per alcuni utenti selezionati è una buona idea e funziona correttamente, a condizione che tu installi uno scponlyo rssh.

rsshfunziona bene, a meno che non sia necessario configurare il jail, in questo caso provare a seguire le istruzioni fornite dai manuali CHROOT è folle, portando a "copiare" gran parte degli eseguibili di sistema e la libreria appena sotto "ogni jail utente", inclusa la rsshshell stessa. È un metodo che fa sprecare spazio.

scponly ha bisogno di una profonda comprensione della configurazione che porta al sempre presente problema di rifiuto dell'accesso in caso di installazione della jail.

Il modo più semplice per consentire le funzionalità "ftp" con jail correttamente funzionante, supporto SSL / TLS per transazioni sicure e login è utilizzare un VSFTPD "vecchio ma funzionante", che si installa rapidamente e in modo pulito e offre tutta la configurabilità secondo necessità e, ultimo ma non meno importante: funziona!

Maurizio.


0

Purtroppo, tutte le risposte sono estremamente fuorvianti: si prega di fare quanto segue:

  1. Innanzitutto creare sftp utente e raggruppare sftp

  2. Crea una directory separata come root per i file SFTP: sudo mkdir -p /home/sftpdir

  3. Avere un file sshd_config testato che consente SSH sulla porta 22 ma anche SFTP sulla porta casuale per motivi di sicurezza
#$OpenBSD: sshd_config,v 1.101 2017/03/14 07:19:07 djm Exp $
# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

Port 38250 Port 22 PasswordAuthentication no 
ChallengeResponseAuthentication no

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'. UsePAM yes X11Forwarding yes PrintMotd no
# Allow client to pass locale environment variables AcceptEnv LANG LC_*
#DenyUsers sftpuser

# override default of no subsystems Subsystem       sftp    internal-sftp 
Match group sftp 
Match User sftpuser 
Match LocalPort 38250 
ForceCommand internal-sftp 
ChrootDirectory /home/sftpdir 
PermitTunnel no 
AllowAgentForwarding no 
X11Forwarding no    
AllowTcpForwarding no
  1. Riavvia e controlla lo stato del servizio sshd

    sudo service sshd restart

    stato del servizio sshd

  2. Crea un file Shell. Aggiungi esecuzione per ripetere un messaggio di notifica

    sudo touch / bin / sftponly echo -e '#! / bin / sh \ necho "Questo account è limitato solo all'accesso SFTP."' | sudo tee -a / bin / sftponly

  3. Concedere le autorizzazioni di esecuzione e aggiungere al file shell

    sudo chmod a + x / bin / sftponly echo "/ bin / sftponly" | sudo tee -a / etc / shells

  4. infine prova e non dovresti riuscire a connetterti.

  5. Un modello per utilizzare il client SFTP con una chiave SSH e la verbosità di base:

    sftp -v -oPort = $ RANDOM_PORT -i ~ / .ssh / $ SSH_KEY.pem sftpuser @ $ HOST

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.