GNU/Linux >> Linux Esercitazione >  >> Linux

Consenti SCP ma non l'accesso effettivo tramite SSH

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


Linux
  1. Ssh:come velocizzare l'accesso Ssh troppo lento?

  2. Usare i tasti Vi per modificare i comandi della shell in Unix?

  3. Esecuzione di un comando remoto sulla connessione Ssh, prima dell'accesso?

  4. Comando non trovato in Zsh, ma trovato in Bash?

  5. 10 esempi pratici di utilizzo del comando scp

Utilizzo di Secure Shell (SSH) per l'accesso e Secure Copy (SCP) per il trasferimento dei dati su Linux

Ssh:limitare un utente Ssh/scp/sftp a una directory?

Il comando di sospensione tramite il comando dello schermo non viene visualizzato in Ps?

Rimuovi i file dall'host remoto utilizzando SSH

Consentire SFTP ma non consentire SSH?

comando linux trovato ma non trovato quando si usa sudo