Soluzione 1:
rssh shell (http://pizzashack.org/rssh/) è progettata proprio per questo scopo.
Poiché RHEL/CentOS 5.2 non include un pacchetto per rssh, potresti cercare qui per ottenere un RPM:http://dag.wieers.com/rpm/packages/rssh/
Per usarlo basta impostarlo come shell per un nuovo utente come questo:
useradd -m -d /home/scpuser1 -s /usr/bin/rssh scpuser1
passwd scpuser1
..o cambia la shell con una esistente come questa:
chsh -s /usr/bin/rssh scpuser1
..e modifica /etc/rssh.conf
per configurare la shell rssh - specialmente decommentare allowscp
line per abilitare l'accesso SCP per tutti gli utenti rssh.
(Potresti anche voler usare chroot per mantenere gli utenti contenuti nelle loro case, ma questa è un'altra storia.)
Soluzione 2:
Sono in ritardo, ma potresti usare le chiavi ssh e specificare il comando esatto consentito nel loro file ~/.ssh/authorized_keys, ad es.
no-port-forwarding,no-pty,command="scp source target" ssh-dss ...
Potrebbe essere necessario utilizzare ps to sul target per configurare le impostazioni di comando corrette.
PS:se esegui un comando test scp con "-v" puoi vedere qualcosa di simile
debug1: Sending command: scp -v -t myfile.txt
Noterai che "-t" è un'opzione scp non documentata, usata dal programma all'estremità. Questo ti dà l'idea di cosa devi inserire in authorized_keys.
MODIFICA: Puoi trovare maggiori informazioni (con diversi collegamenti) in questa domanda di StackOverflow.
Ecco un esempio funzionante, per un utente chiamato backup_user
lato server.
~backup_user/.ssh/authorized_keys
contenuto sul lato server (con qualche restrizione di sicurezza in più):
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="scp -v -r -d -t ~/CONTENT" ssh-rsa AAAAMYRSAKEY...
Crea un collegamento in ~backup_user/ che colleghi alla directory in cui il contenuto dovrebbe essere accessibile.
$ ln -s /path/to/directory/with/accessible/content ~backup_user/CONTENT
Ora, dal lato client, dovrebbe funzionare il seguente comando :
scp -v -r -P 2222 -i .ssh/id_rsa_key_file path/to/data [email protected]:~/CONTENT
Cosa fa questo comando:
- Visualizza informazioni dettagliate (opzionale :puoi rimuovere il
-v
sia dal comando che dal file authorized_keys) - Copia ricorsivamente il contenuto del percorso/dei/dati. (facoltativo :puoi rimuovere
-r
sia dal comando che dal file authorized_keys se non vuoi fare una copia ricorsiva) - Utilizza la porta 2222 per connettersi al server (opzionale :puoi rimuovere
-P 2222
dal comando) - Utilizza un file di identità per automatizzare la connessione (opzionale :puoi rimuovere
-i .ssh/id_rsa_key_file
- Il contenuto di
path/to/data
verrà copiato in/path/to/directory/with/accessible/content/
Per fare una copia di un file (o più) dal server al client, dovresti creare uno script di shell che lo gestisca come descritto qui
Soluzione 3:
Sono un po' in ritardo per la festa, tuttavia ti suggerisco di dare un'occhiata al ForceCommand
direttiva di OpenSSH.
Subsystem sftp internal-sftp
Match group sftponly
ForceCommand internal-sftp
Certo, questo è SFTP e non SCP, ma raggiunge lo stesso obiettivo, in modo più sicuro rispetto a una shell ristretta. Inoltre, puoi eseguire il chroot dell'utente se lo desideri.
Soluzione 4:
Uso MySecureShell per fare questo. Puoi anche configurare altre restrizioni.
https://github.com/mysecureshell/mysecureshell
Limita le connessioni solo a SFTP/SCP. Nessun accesso alla shell.
Soluzione 5:
Consiglierei di usare scponly.
È una shell ristretta che consente agli utenti di eseguire esattamente ciò che sembra, file SCP sul server, ma non di effettuare effettivamente l'accesso. Le informazioni e i download del codice sorgente per il software sono disponibili qui e i pacchetti RPM precompilati sono disponibili tramite il Repository EPEL YUM.
Una volta installato, sarà necessario configurare ogni account utente, a cui si desidera limitare l'accesso, per utilizzare la shell limitata appena installata. Puoi farlo manualmente tramite /etc/passwd o utilizzare il seguente comando:usermod -s /usr/bin/scponly USERNAME