SSH

Nel mondo dei computer, Secure Shell o SSH è un insieme di standard con associato un protocollo di rete che permette di stabilire un canale sicuro tra un computer locale e uno remoto. Usa una crittografia a chiave pubblica per autenticare il computer remoto e (opzionalmente) permettergli di autenticare l'utente. SSH fornisce confidenzialità e integrità allo scambio dei dati tra due computer usando la crittografia e i codici di autenticazione messaggi (MACs). SSH è usato tipicamente per autenticarsi presso una macchina remota ed eseguire comandi, ma supporta anche il tunneling, il reindirizzamento arbitrario di porte TCP e connessioni X11; esso può trasferire i file usando i protocolli SFTP o SCP associati. Un server SSH, ascolta, in via predefinita sulla porta TCP standard numero 22. fonte Wikipedia

Abilitare i protocolli di sicurezza per SSH

Permettere un accesso root, via ssh, non è sicuro. Non vogliamo che, in via predefinita, gli utenti root entrino in ssh; debian dovrebbe essere sicura, non insicura, nè noi vogliamo concedere agli utenti 10 minuti per fare un rapido attacco con un dizionario di password sul nostro accesso ssh; quindi è corretto limitare il tempo e i tentativi di accesso!

Per aiutare a rendere più sicuro il sistema ssh, lanciare semplicemente con i privilegi di root un elaboratore di testo e aprire questo file:

/etc/ssh/sshd_config

Poi devono essere localizzati e cambiati i punti potenzialmente pericolosi.

I punti pericolosi che si devono localizzare sono i seguenti:

Port <porta_desiderata>: Questo valore deve essere impostato sulla porta corretta che si sta reindirizzando dal router. Naturalmente anche sul router deve essere impostato il 'Port forwarding' o reindirizzamento del traffico. Se non si sa come farlo forse non si dovrebbe usare ssh da remoto. Debian assegna in modo predefinito la porta 22, ma è raccomandato usare una porta fuori dalla gamma di scansione. Supponiamo di usare la porta 5874, cosicchè il valore da immettere al comando 'port' di cui sopra diventa:

Port 5874

ListenAddress <ip_della_macchina_o_della_interfaccia_di_rete >: Ora naturalmente poiché si sta reindirizzando una porta dal router, c'è bisogno che la macchina abbia un indirizzo statico sulla rete, a meno che si usi un server dns localmente, ma se si sta facendo qualcosa di complicato e servono queste direttive, probabilmente si combinerà un grosso pasticcio. Così supponiamo che questo indirizzo sia:

ListenAddress 192.168.2.134

Poi, il Protocol 2 è nei predefiniti di debian ma controllare per essere sicuri con:

LoginGraceTime <tempo in secondi per l'accesso>: Questa voce ha un tempo assurdo predefinito di 600 secondi. Non inserire 10 minuti per scrivere il nome utente e la parola chiave, si rende più sicura la voce impostando:

LoginGraceTime 45

Ora si avranno 45 secondi per autenticarsi e gli hackers non avranno 600 secondi ogni volta per tentare di scoprire la parola chiave.

PermitRootLogin <yes>: Perché debian imposti PermitRootLogin a 'si', è piuttosto incomprensibile così ripariamo impostando 'no'.

PermitRootLogin no
StrictModes yes

MaxAuthTries <xxx>: Numero dei tentativi per l'autenticazione d'accesso; si può impostare 3 o 4 tentativi ma non di più.

MaxAuthTries 2

Potrebbe servire aggiungere alcune di queste voci se non sono già presenti:

AllowUsers <user names with spaces allowed to access via ssh>

AllowUsers <xxx>: permette ad un utente unico ssh senza diritti di usare adduser (aggiungi utente) per aggiungere l'utente e impostare il nome qui, come:

AllowUsers whomevertheuseris

PermitEmptyPasswords <xxx>: assegna a quell'utente una lunga e simpatica parola chiave che è impossibile da indovinare anche in un milione di anni che è la sola che permette l'ingresso all'utente unico di ssh. Una volta entrati, si può usare "su" per diventare root:

PermitEmptyPasswords no

PasswordAuthentication <xxx>: ovviamente, per l'accesso con password, non con l'accesso a chiave, serve una password per essere al massimo e, a meno di usare chiavi, serve il seguente per essere 'yes':

PasswordAuthentication yes [unless using keys]

Infine:

/etc/init.d/ssh restart

Ora si dovrebbe avere un ssh più sicuro; non completamente sicuro ma migliore, inclusa la creazione di un utente unico ssh con adduser.

Nota: Se si riceve un messaggio di errore e ssh si rifiuta di connettere, andate nella $HOME e cercare una cartella nascosta chiamata .ssh e cancellare il file known_hosts quindi riprovare. Questo errore si presenta principalmente quando si sono impostati dinamicamente gli indirizzi IP (DCHP)

Uso di applicazioni X Window via rete attraverso SSH

ssh -X permette di autenticarsi in un computer remoto e di ottenere la visualizzazione della sua interfaccia grafica nel pc locale. Come $utente (e notare che la X deve essere maiuscola):

$ ssh -X nomeutente@xxx.xxx.xxx.xxx (or IP)

Inserire la password per il nome utente nel computer remoto ed avviare l'applicazione X nella shell:

$ iceweasel OPPURE oocalc OPPURE oowriter OPPURE kspread

Alcune connesioni di rete del PC veramente lente possono beneficiare di un livello di compressione che aiuti a velocizzare i trasferimenti, aggiungere quindi un'opzione extra (sulle connessioni veloci ha l'effetto opposto):

$  ssh -C -X username@xxx.xxx.xxx.xxx (or IP)

Leggere la pagina del manuale con:

$man ssh

Nota: Se si riceve un messaggio di errore e ssh si rifiuta di connettervi, andare nella $HOME e cercare una cartella nascosta chiamata .ssh e cancellare il file known_hosts e quindi riprovare. Questo errore si presenta principalmente quando si è impostato dinamicamente gli indirizzi IP (DCHP).

Copiare file e directory in remoto con ssh ed scp

scp utilizza la linea di comando (terminal/cli) per copiare file tra utenti in una rete. Utilizza l'autenticazione e la sicurezza di ssh per il trasferimento dei dati, perciò scp richiederà le password o le passphrase richieste per l'autenticazione.

Assumendo di avere i diritti ssh in un PC o server remoti, scp permette di copiare partizioni, directory o file da e per quel PC, in una posizione specifica o destinazione a scelta dove si hanno i permessi. Per esempio, potrebbe essere un PC oppure un server di cui si hanno i permessi di accesso nella LAN, (o in qualsiasi luogo nel mondo), per abilitare un trasferimento di dati in un hard disk USB connesso al proprio PC.

Si può copiare ricorsivamente intere partizioni e directory con l'opzione scp -r. Notare che scp -r segue i collegamenti simbolici trovati nell'albero delle directory.

Esempi:

Esempio 1: Copia una partizione:

scp -r <user>@xxx.xxx.x.xxx:/media/disk1part6/ /media/diskXpartX/

Esempio 2: Copia una directory in una partizione, in questo caso la directory si chiama photos nella $HOME:

scp -r <user>@xxx.xxx.x.xxx:~/photos/ /media/diskXpartX/xx

Esempio 3: Copia un file da una directory in una partizione, in questo caso un file nella $HOME:

scp <user>@xxx.xxx.x.xxx:~/filename.txt /media/diskXpartX/xx

Esempio 4: Copia un file in una partizione:

scp <user>@xxx.xxx.x.xxx:/media/disk1part6/filename.txt /media/diskXpartX/xx

Esempio 5: Se ci si trova già nel drive/directory nel quale si vogliono copiare qualsiasi altra directory o file, utilizzare un ' . ' (punto) :

scp -r <user>@xxx.xxx.x.xxx:/media/disk1part6/filename.txt . 

Esempio 6: Per copiare file dal proprio PC/server in un altro, (utilizzare scp -r se si sta copiando una partizione o una directory):

scp /media/disk1part6/filename.txt <user>@xxx.xxx.x.xxx:/media/diskXpartX/xx

Leggere:

man scp

Accesso remoto ssh con il reindirizzamento di X da un PC-Windows:

* Scaricare e masterizzare il XLiveCD Cygwin
* Mettere il CD nel lettore CD-ROM del PC con Windows e aspettare che si avvii.
Premere "continua" fino all'avvio d una finestra di shell e immettere:

ssh -X username@xxx.xxx.xxx.xxx

Notare: xxx.xxx.xxx.xxx è l'indirizzo IP del computer remoto linux o il suo URL (per esempio usando un URL di dyndns.org) mentre lo "username" è naturalmente quello di un utente che esiste sul computer remoto. Dopo essere entrati, avviate "kmail", per esempio e controllate la vostra posta!

Importante: assicuratevi che il file host.allow abbia una voce che permetta l'accesso da PC che sono su altre reti. Se siete dietro un Firewall-NAT o un router assicuratevi che la porta 22 sia reindirizzata 'forwarded' alla vostra macchina linux

SSH con Konqueror

Konqueror e Krusader sono entrambi in grado di accedere a dati remoti usando sftp:// e entrambi usano il protocollo ssh protocol.

Come lavorano:
1) Aprite una nuova finestra di Konqueror
2) Immettete nella barra degli indirizzi: sftp://username@ssh-server.com

Esempio 1:

sftp://aptosid1@remote_hostname_or_ip
(Nota: Comparirà una finestra chiedendovi la vostra password ssh, digitatela e premete OK)

Esempio 2:

sftp://username:password@remote_hostname_or_ip
(Con questa forma NON vedrete la finestra con richiesta di password ma verrete direttamente connessi.)

Per un sistema di rete LAN:

sftp://username@10.x.x.x or 198.x.x.x.x
(Note: Comparirà la finestra di richiesta password ssh, digitatela e premete OK)

La connessione a interfaccia grafica SSH di Konqueror ora è inizializzata. Con questa finestra di Konqueror potete lavorare con i file (copy/view) sul server SSH come se fossero in una cartella della macchina locale.

NOTA: Se avete impostato la porta ssh diversa dalla 22, la predefinita, dovete specificare al porta che i programmi sftp devono usare:

sftp://user@ip:port

'user@ip:port' è la sintassi standard per molti programmi come sftp and smb.

SSHFS - Montare Filesystem da Remoto

SSFS è un metodo facile, veloce e sicuro che usa FUSE per montare un filesystem remoto. L'unica richiesta per il lato server è un daemon ssh in esecuzione.

Sul lato client dovrete probabilmente avere installato sshfs: installare fuse e groups non è necessario su aptosid eros forward poichè sono installati per default:

Comunque, per installare sshfs:

apt-get update && apt-get install sshfs

Ora dovete uscire e di nuovo autenticarvi

Montare un filesystem remoto è molto facile:

sshfs username@remote_hostname:nome_cartella_del_punto_di_mount_locale

dove username è il nome dell'accesso sull'host remoto :

Se non sono immesse dei nomi di cartella, verrà montata la cartella "home" dell'utente remoto. Attenzione: il carattere due punti : è essenziale anche se non viene poi digitato il nome di nessuna cartella!

Dopo aver montato le cartelle remote esse si comportano come qualsiasi altra cartella del filesystem locale, potete sfogliare i file, modificarli ed eseguire script su di essi, proprio come fate su un filesystem locale.

Se volete smontare l'host remoto usate il seguente comando:

fusermount -u nome_punto_di_mount_locale

Se usate sshfs frequentemente sarebbe una buona scelta aggiungere una voce in fstab:

sshfs#username@remote_hostname://remote_directory /local_mount_point fuse user,allow_other,uid=1000,gid=1000,noauto,fsname=sshfs#username@remote_hostname://remote_directory  0 0 

Next uncomment user_allow_other in /etc/fuse.conf:

 
 # Allow non-root users to specify the 'allow_other' or 'allow_root'
 # mount options.
 #
 user_allow_other

Questo permetterà ad ogni utente che fa parte del gruppo "fuse" di montare il filesystem usando il ben conosciuto comando di mount :

mount /percorso/del/punto/di/mount

Con quella stringa nel vostro fstab potete naturalmente usare anche il comando unmount per smontare il filesystem:

umount /percorso/del/punto/di/mount

Per controllare se fate parte o no del gruppo "fuse" usate il seguente comando:

cat /etc/group | grep fuse

Dovreste vedere qualcosa come:

fuse:x:117: <username>

Se il vostro nome utente "username" non appare, usate il comando adduser come root:

adduser <vostro_nome_utente> fuse

Ora il vostro nome utente dovrebbe venire elencato e dovreste essere in grado di eseguire il comando:

Nota: Lo "id" non viene elencato nel gruppo "fuse", finchè non siete usciti e rientrati di nuovo

mount punto_di_mount_locale

e

umount punto_di_mount_locale
Content last revised 01/11/2011 0650 UTC