Table of Contents

SSH e SFTP

sftp e rssh

Per poter effettuare sftp è necessario avere una shell valida, per evitare di dare accesso shell completo si può utilizzare rssh, una shell ridotta che dovrebbe consentire solo scp, sftp, cvs, rsync e rdist.

In teoria l'utente rssh potrebbe essere confinato in una directory con un chroot, ma questo richiede una configurazione abbastanza complessa, inoltre il programma /usr/lib/rssh/rssh_chroot_helper deve essere SUID…

Nel file di configurazione /etc/rssh.conf si indicano quali comandi si possono eseguire nella shell, la configurazione predefinita Debian impedisce qualunque azione. Ecco un esempio per consentire sftp e scp ad un singolo utente:

user=loginname:011:000110: # Allow sftp and scp, no chroot.

rush

In Debian 10 Buster non esiste il pacchetto rssh, al suo posto troviamo rush. Segue una breve ricetta su come attivare un ambiente rush per un utente, limitato a ricevere dei file via sftp.

Si installa il server SFTP:

apt install openssh-sftp-server

quindi si prepara un ambiente chroot che servirà a tenere confinato l'utente remoto che accede via SFTP. La directory /srv/rush/ occuperà circa 280 Mb (Debian Buster):

apt install rush
adduser --uid 1004 --gecos "Special SFTP account" --shell "/usr/sbin/rush" sftp-user
mkdir -p /srv/rush/
debootstrap buster /srv/rush/

Nell'ambiente chroot si eseguono alcune operazioni:

chroot /srv/rush

apt install locales
dpkg-reconfigure locales
apt install openssh-sftp-server
adduser --uid 1004 --gecos "Special SFTP account" --shell "/bin/false" sftp-user

Il file /etc/rush.rc dovrà contenere la sezione:

rule sftp-rush
  command ^.*/sftp-server
  uid >= 1000
  set[0] /usr/lib/sftp-server
  umask 002
  chroot /srv/rush
  chdir ~

Si dovrebbe quindi poter accedere via sftp, ma fallire via ssh:

sftp -P 22 sftp-user@remote.host.com
sftp-user@remote.host.com's password: 
Connected to sftp-user@remote.host.com.
sftp>
ssh -p 22 sftp-user@remote.host.com
sftp-user@remote.host.com's password: 
You do not have interactive login access to this machine.
Contact the systems administrator for further assistance.
Connection to remote.host.com closed.

SSH su Windows

Dopo aver installato il programma con l'installer di Cygwin, si esegue ssh-host-config per configurare il servizio.

L'utente con cui gira il servizio sshd deve avere i seguenti permessi:

Control PanelAdministrative ToolsLocal Security PolicyLocal Policies, click su User Rights Assignment

Su Windows 2003 Server i permessi devono essere assegnati manualmente. La procedura ssh-host-config crea l'utente sshd, ma crea anche l'utente cyg_server e suggerisce di usare quello per il servizio.

Se si vuole eseguire ssh-host-config una seconda volta conviene eliminare gli utenti sshd e cyg_server ed eliminare il servizio sshd. Per eliminare gli utenti editare /etc/passwd ed eliminare gli utenti, quindi rimuovere gli utenti anche dal pannello gestione utenti di Windows. Per eliminare manualmente il servizio sshd:

sc \\server_name delete sshd

Affidabilità di rsync su ssh

Se si esegue un rsync di grosse quantità di dati su connessione ssh e la linea non è molto affidabilie, si rischia di avere vari tipi di errore del tipo broken pipe.

Con opportune opzioni si dovrebbe aumentare l'affidabilità:

# ServerAliveInterval and ServerAliveCountMax:
#  * Terminate the session if server does not respond for 4 min:
#    15 x 20 = 300 s => 5 min
# 
# TCPKeepAlive:
#  * Detect TCP/IP network down (also temporary).
#
# IPQoS
#  * IPv4 type-of-service
 
SSH_OPTIONS='-o ServerAliveInterval=15 -o ServerAliveCountMax=20 -o TCPKeepAlive=no -o IPQoS=reliability'
 
rsync -avz --delete -e "ssh $SSH_OPTIONS" "${REMOTE}:${SRC_DIR}/" "${DST_DIR}"