====== 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 **[[http://www.cygwin.com/|Cygwin]]**, si esegue **''ssh-host-config''** per configurare il servizio.
L'utente con cui gira il servizio ''sshd'' deve avere i seguenti permessi:
//Control Panel// -> //Administrative Tools// -> //Local Security Policy// -> //Local Policies//, click su //User Rights Assignment//
* Adjust memory quotas for a process
* Create a token object
* Logon as a service
* Replace a process level token
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}"