OpenSSH assomiglia a 'internal-sftp' ma per SCP?


16

Sto eseguendo Debian stable e sto cercando di stabilire il seguente ambiente per gli utenti nel mio gruppo 'sftponly':

  • incarcerato
  • può trasferire con SFTP
  • può trasferire con SCP
  • impossibile accedere in modo interattivo con SSH

Dalla mia sperimentazione e ricerca, sembra che la seguente strofa in sshd_config mi porti il ​​90% lì:

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

Questo mi dà SFTP incarcerato e nessun SSH, il che è buono. Ma disabilita anche SCP, che è tutt'altro che ideale perché parecchi client sono processi legacy e basati su script che utilizzano SCP anziché SFTP (il server che stiamo sostituendo supportato entrambi i protocolli) e dal momento che quei client non sono sotto il nostro controllo e facilmente modificato, probabilmente non è pratico disabilitare del tutto SCP.

È logico che questa configurazione disabiliti SCP, poiché le connessioni SCP in entrata fanno sì che sshd generi un processo `scp 'tramite la shell di login dell'utente, come quell'utente. Sembra che lo stesso sarebbe normalmente vero per SFTP, se non fosse per lo speciale gestore "internal-sftp".

Quindi, suppongo che la mia domanda sia: c'è un modo per ottenere lo stesso effetto di 'internal-sftp' ma per SCP, senza ricorrere all'uso di strumenti di terze parti come scponly e rssh? La cosa davvero bella di 'internal-sftp' è che non richiede la creazione di una jail con file di supporto o la gestione di binari setuid di terze parti potenzialmente sfruttabili (rssh, in particolare, ha una storia di exploit).


1
I client si connettono utilizzando un file chiave ssh o utilizzano password? Se si tratta di un file di chiavi, è possibile limitare ciò che possono fare.
Jenny D,

Si stanno connettendo con le password.
brianjcohen,

Risposte:


3

Dai un'occhiata a rssh, che è una shell alternativa che consente un accesso limitato a un sistema.

rssh è una shell limitata per fornire accesso limitato a un host tramite ssh (1), consentendo a un utente la cui shell è configurata su rssh di usare uno o più dei comandi scp (1), sftp (1) cvs (1 ), rdist (1) e rsync (1) e solo quei comandi.

È possibile configurare quali comandi possono essere utilizzati su base per utente o a livello di sistema utilizzando il file rssh.conf

In alternativa puoi usare scponly per fare quello che vuoi. Funziona come un wrapper per la suite ssh e consente il trasferimento di file ma non l'accesso alla shell.


2

Hai bisogno di farlo attraverso ssh?

Se così puoi provare a impostare la loro shell su:

/usr/libexec/openssh/sftp-server

E assicurati di aggiungere quanto sopra in / etc / shells

Se si desidera separare dall'utilizzo degli account integrati, è possibile configurare proftpd

Ho installato un SFTP sicuro usando proftpd. compilato proftpd in questo modo:

./configure --prefix = / usr --sysconfdir = / etc --with-modules = mod_sftp

Puoi utilizzare questo articolo di seguito e ulteriori informazioni su Google su come configurarlo:

http://tutorialgenius.blogspot.com/2012/02/linux-installing-and-configuring.html


2

Temo che non ci sia nulla di altrettanto facile o affidabile con OpenSSH, poiché come hai osservato c'è un server SFTP integrato, ma nessun server SCP integrato.

Un avvertimento: il suggerimento di Vince Berk è negativo per una serie di motivi:

  1. Il comportamento della shell rispetto ai file di avvio può essere influenzato dalle variabili di ambiente, che SSH può impostare in remoto in base alla configurazione del server.
  2. L'utente può semplicemente eseguire ssh / bin / bash e ottenere una shell. Non avrà un tty e quindi sarà scomodo da usare, ma quindi ... per non parlare di tutti gli altri programmi che può eseguire che presumibilmente non vuoi che faccia.
  3. La modifica delle autorizzazioni di .bash_profile non è molto utile se l'utente può semplicemente eseguire "ssh host rm -f .bash_profile"; nulla è stato menzionato sulle autorizzazioni della directory home.

... e così via. Questo tipo di approccio è fin troppo fragile.


0

Questo è uno strumento di terze parti, che non rientra nell'ambito della domanda, ma ho pensato che meriti comunque una menzione.

Jailkit: https://olivier.sessink.nl/jailkit/

Dispone di una raccolta di strumenti per semplificare l'impostazione delle jail degli utenti: copia di binari e librerie nella jail e impostazione della registrazione dall'interno della jail al sistema operativo. L'ho usato per creare chroot solo sftp / scp / rsync.

Viene inoltre fornito con jk_lsh(jailkit limited shell) che può essere utilizzato al di fuori del jail per limitare i comandi che un utente può eseguire, se ad esempio si desidera consentire scp / sftp / rsync solo senza chroot.


-1

Ecco un trucco su come eseguire questo lato server. Imposta la shell degli utenti su, diciamo, bash:

usermod -S /bin/bash [username]

Ora crea nel loro homedir un '.bash_profile' con la seguente riga:

[ -n "$PS1" ] && exit

Questo fa sì che le sessioni non interattive (come 'scp') continuino. Tuttavia, se tentano un accesso "ssh", viene chiamata "exit" e la connessione viene chiusa.

Assicurati che non possano "sftp" un nuovo ".bash_profile" nelle loro directory home!

chown root:root .bash_profile

Spero possa aiutare!


Questo approccio non sembra prendere in considerazione il requisito della prigione.
brianjcohen,

Sì, sfortunatamente dovresti creare un ambiente chroot manuale per il lato 'scp', sovrapponendolo alla directory chroot fornita in sshd_config, ed esegui il trucco sopra per ogni utente che vuoi limitare. 'Scp' non funziona con il server sftp interno.
Vince Berk,
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.