<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mia mamma usa Linux! &#187; SSH</title>
	<atom:link href="http://www.miamammausalinux.org/tag/ssh/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.miamammausalinux.org</link>
	<description>Perché niente è impossibile da capire... Se lo spieghi bene !</description>
	<lastBuildDate>Mon, 02 Jan 2012 11:31:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>SSH in CHROOT: la soluzione nativa</title>
		<link>http://www.miamammausalinux.org/2009/06/ssh-in-chroot-la-soluzione-nativa/</link>
		<comments>http://www.miamammausalinux.org/2009/06/ssh-in-chroot-la-soluzione-nativa/#comments</comments>
		<pubDate>Wed, 10 Jun 2009 15:23:02 +0000</pubDate>
		<dc:creator>Raoul Scarazzini</dc:creator>
				<category><![CDATA[Network]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[SSH]]></category>
		<category><![CDATA[Chroot]]></category>
		<category><![CDATA[Sicurezza]]></category>

		<guid isPermaLink="false">http://www.miamammausalinux.org/?p=707</guid>
		<description><![CDATA[Nei precedenti articoli pubblicati nella serie &#8220;SSH in CHROOT: Una gabbia per la shell sicura&#8221; parte 1 e parte 2, veniva affrontato il tema della messa in sicurezza di SSH attraverso una Patch che obbligava determinati utenti a rimanere chiusi all&#8217;interno di una gabbia virtuale. Dalla versione 5 di SSH però è possibile sfruttare un [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.miamammausalinux.org/wp-content/uploads/2009/01/openssh.png" alt="openssh" title="openssh" width="100" height="98" class="alignnone size-full wp-image-248" /></p>
<p>Nei precedenti articoli pubblicati nella serie &#8220;SSH in CHROOT: Una gabbia per la shell sicura&#8221; <a href="http://www.miamammausalinux.org/2008/02/ssh-in-chroot-una-gabbia-per-la-shell-sicura-1-di-2/">parte 1</a> e <a href="http://www.miamammausalinux.org/2008/02/ssh-in-chroot-una-gabbia-per-la-shell-sicura-2-di-2/">parte 2</a>, veniva affrontato il tema della messa in sicurezza di SSH attraverso una <em>Patch</em> che obbligava determinati utenti a rimanere chiusi all&#8217;interno di una gabbia virtuale.<br />
Dalla versione 5 di SSH però è possibile sfruttare un meccanismo nativo che implementa il CHROOT. Ecco spiegato come.</p>
<p><strong>Capire la versione di SSH installata nel sistema</strong></p>
<p>Prima di procedere con la configurazione del pacchetto è bene accertarsi che la versione di SSH installata nel sistema sia uguale o superiore alla <em>4.8p1</em>, su sistemi Debian e derivati, l&#8217;interrogazione è possibile attraverso il seguente comando:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># dpkg -l openssh-*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Cfg-files/Unpacked/Failed-cfg/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Nome                                    Versione                                Descrizione
+++-=======================================-=======================================-==============================================================================================
ii  openssh-blacklist                       0.4.1                                   list of default blacklisted OpenSSH RSA and DSA keys
ii  openssh-blacklist-extra                 0.4.1                                   list of non-default blacklisted OpenSSH RSA and DSA keys
ii  openssh-client                          1:5.1p1-5                               secure shell client, an rlogin/rsh/rcp replacement
ii  openssh-server                          1:5.1p1-5                               secure shell server, an rshd replacement</pre></div></div>

<p>Mentre in sistemi RedHat e derivati è sufficiente interrogare l&#8217;elenco pacchetti installati con <em>rpm</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ rpm -qa openssh*
openssh-4.3p2-16.el5
openssh-askpass-4.3p2-16.el5
openssh-clients-4.3p2-16.el5
openssh-server-4.3p2-16.el5</pre></div></div>

<p>Nei casi riportati, sul sistema Debian (versione <em>Lenny</em>) la versione di SSH supporta nativamente il <em>Chroot</em> mentre il sistema RedHat (versione 5) no. In questo caso è necessario eseguire l&#8217;aggiornamento del pacchetto se ne si vorrà sfruttare la nuova funzionalità, ricompilando localmente la versione 5 partendo dai sorgenti disponibili presso <a href="http://www.openssh.org/portable.html">il sito ufficiale del progetto OpenSSH</a> oppure scaricando un rpm precompilato da repository pubblici come <a href="http://www.rpmfind.net/linux/rpm2html/search.php?query=openssh&#038;submit=Search+...">http://www.rpmfind.net</a>.</p>
<p><strong>Come funziona il CHROOT nativo</strong></p>
<p>Il metodo con cui il demone SSH, previa configurazione, costruisce la gabbia per l&#8217;utente che effettua la login può essere diviso in due tipologie: l&#8217;accesso diretto via ssh e quello via sftp.<br />
Nel primo caso la directory nella quale l&#8217;utente effettuerà il login dovrà contenere la struttura essenziale di file e directory necessaria alla navigazione all&#8217;interno del sistema, mentre attraverso il funzionamento sftp il demone non necessiterà di un ambiente nativo, ma sfruttando il comando interno sftp, fornirà l&#8217;interfaccia di accesso al sistema.</p>
<p><strong>Predisposizione del sistema</strong></p>
<p>I test che verranno effettuati nel corso dell&#8217;articolo partiranno dal presupposto che esista un gruppo denominato <em>test</em> e che tutte le utenze facenti parte di questo gruppo vengano ingabbiate.<br />
Verrà quindi creato un utente denominato <em>test</em> con cui verranno effettuate le prove:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ adduser test</pre></div></div>

<p>Il comando crea automaticamente il gruppo omonimo.<br />
Terminata la creazione dell&#8217;utente di test è necessario creare la struttura relativa alla gabbia. Per far questo è possibile utilizzare lo script <em>create_chroot_env.sh</em> contenuto nel file <a href="http://www.miamammausalinux.org/wp-content/uploads/2008/02/ssh-in-chroot-scripts.tar">ssh-in-chroot-scripts.tar</a> presentato nella precedente serie di articoli.<br />
Lanciando il comando come segue:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ ./create_chroot_env.sh /chroot</pre></div></div>

<p>nella cartella <em>/chroot</em> verrà creato un ambiente con tutti i requisiti imposti da ssh per l&#8217;implementazione della gabbia.<br />
Requisito essenziale per il corretto funzionamento del sistema è che la cartella nella quale verrà impostata la gabbia sia accessibile in scrittura alla sola utenza di root. Avendo lanciato lo script come utente root (non sarebbe possibile altrimenti utilizzare il path definito) tale requisito è pienamente rispettato.</p>
<p><strong>Configurazione del demone per l&#8217;utilizzo via ssh</strong></p>
<p>A questo punto la configurazione del server ssh andrà variata per supportare il chroot esclusivamente per le utenze facenti parte del gruppo test attraverso l&#8217;aggiunta delle seguenti righe nel file <em>/etc/ssh/sshd_config</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">Match Group test
        ChrootDirectory /chroot/</pre></div></div>

<p>terminata la modifica le configurazioni andranno ricaricate attraverso il seguente comando:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ /etc/init.d/ssh reload</pre></div></div>

<p><strong>Verifica del funzionamento</strong></p>
<p>Per verificare il funzionamento della gabbia è sufficiente effettuare il login nel sistema e controllare come e se sia possibile muoversi all&#8217;interno di questo:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ ssh test@172.16.1.130
test@172.16.1.130's password: 
Linux anomalia 2.6.26-1-686 #1 SMP Fri Mar 13 18:08:45 UTC 2009 i686
&nbsp;
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
&nbsp;
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Jun  9 23:09:39 2009 from 172.16.1.1
-bash-3.2$ pwd
/
-bash-3.2$ ls
bin  dev  etc  home  lib
-bash-3.2$ cd ..
-bash-3.2$ pwd
/
-bash-3.2$ ls
bin  dev  etc  home  lib</pre></div></div>

<p>l&#8217;output illustrato conferma le aspettative: a login effettuato non è possibile scorrere il path precedente alla cartella /. La gabbia funziona.</p>
<p><strong>Configurazione del demone per l&#8217;utilizzo via sftp</strong></p>
<p>La configurazione impostata non prevede l&#8217;utilizzo di <em>sftp</em>, infatti un tentativo di connessione non andrebbe a buon fine:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ sftp test@172.16.1.130
Connecting to 172.16.1.130...
test@172.16.1.130's password: 
subsystem request failed on channel 0
Couldn't read packet: Connection reset by peer</pre></div></div>

<p>per fare in modo che questo tipo di connessione sia utilizzabile, è necessario modificare nuovamente <em>/etc/ssh/sshd_config</em> sostituendo la riga</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">Subsystem sftp /usr/lib/openssh/sftp-server</pre></div></div>

<p>con</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">Subsystem sftp internal-sftp</pre></div></div>

<p>In questo modo si indica ad ssh di utilizzare per il comando sftp non lo script locale <em>/usr/lib/openssh/sftp-server</em> ma la versione interna al demone.</p>
<p><strong>Verifica del funzionamento</strong></p>
<p>A questo punto dopo aver ricaricato il demone, è possibile provare nuovamente la login via sftp:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ sftp test@172.16.1.130
Connecting to 172.16.1.130...
test@172.16.1.130's password: 
subsystem request failed on channel 0
Couldn't read packet: Connection reset by peer
rasca@anomalia:~$ sftp test@172.16.1.130
Connecting to 172.16.1.130...
test@172.16.1.130's password: 
sftp&gt; ls
bin   dev   etc   home  lib   
sftp&gt; cd ..
sftp&gt; ls 
bin   dev   etc   home  lib</pre></div></div>

<p>Come da pronostico, il login ha avuto successo.<br />
E&#8217; da notare che in questo caso la directory di arrivo dell&#8217;utenza è sempre la <em>/</em> del <em>chroot</em> ma si può fare in modo che questa corrisponda ad una qualsiasi cartella o alla home dell&#8217;utente modificando il parametro <em>ChrootDirectory</em> nel file di configurazione di ssh. E&#8217; consentito l&#8217;utilizzo delle diciture speciali %h, corrispondente alla homedir dell&#8217;utente, e %u, corrispondente al nome dell&#8217;utente.</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">        ChrootDirectory %h</pre></div></div>

<p>E&#8217; chiaro che ogni directory scelta dovrà possedere il requisito essenziale di essere di proprietà di root e non scrivibile da alcun gruppo.</p>
<p><strong>Conclusioni</strong></p>
<p>Rispetto alla soluzione presentata nei precedenti articoli, che comportava l&#8217;applicazione di una patch ai sorgenti di ssh, quanto illustrato ha l&#8217;indubbio vantaggio di sfruttare un&#8217;implementazione nativa che non necessita di operazioni sul pacchetto. Certo i requisiti richiesti, in particolare relativamente alla proprietà della cartella madre del chroot, sono piuttosto rigidi ed obbligano a riflettere su come distribuire le utenze.<br />
La soluzione migliore, come sempre, è quella più funzionale allo scopo che ci si prefigge.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miamammausalinux.org/2009/06/ssh-in-chroot-la-soluzione-nativa/feed/</wfw:commentRss>
		<slash:comments>35</slash:comments>
		</item>
		<item>
		<title>SSH: Tips and Tricks Reprise</title>
		<link>http://www.miamammausalinux.org/2009/04/ssh-tips-and-tricks-reprise/</link>
		<comments>http://www.miamammausalinux.org/2009/04/ssh-tips-and-tricks-reprise/#comments</comments>
		<pubDate>Fri, 17 Apr 2009 14:39:27 +0000</pubDate>
		<dc:creator>Francesco Pedrini</dc:creator>
				<category><![CDATA[Network]]></category>
		<category><![CDATA[SSH]]></category>
		<category><![CDATA[Tips and tricks]]></category>

		<guid isPermaLink="false">http://www.miamammausalinux.org/?p=595</guid>
		<description><![CDATA[Come avevo promesso ecco la seconda dose di Tips and Tricks per SSH! Invito a leggere la prima parte QUI. SSH Tunneling Siccome oggi mi sento pigro, farò il copiaincolla di un commento (più precisamente questo, grazie Michelangelog ) Mi permetto di fare una piccola aggiunta ai tuoi ottimi suggerimenti. Spesso farebbe comodo accedere alla [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.miamammausalinux.org/wp-content/uploads/2009/03/openssh.png" alt="openssh" width="120" height="118" class="alignnone size-full wp-image-537" /><img class="alignnone size-full wp-image-292" src="http://www.miamammausalinux.org/wp-content/uploads/2009/01/linux.png" alt="linux" width="85" height="100" /></p>
<p>Come avevo promesso ecco la seconda dose di Tips and Tricks per SSH!</p>
<p>Invito a leggere la prima parte <a href="http://www.miamammausalinux.org/2009/03/ssh-tips-and-tricks">QUI</a>.</p>
<p><strong>SSH Tunneling</strong></p>
<p>Siccome oggi mi sento pigro, farò il copiaincolla di un commento (più precisamente <a href="http://www.miamammausalinux.org/2009/03/ssh-tips-and-tricks/#comment-49">questo</a>, grazie Michelangelog <img src='http://www.miamammausalinux.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  )</p>
<blockquote><p>
Mi permetto di fare una piccola aggiunta ai tuoi ottimi suggerimenti.<br />
Spesso farebbe comodo accedere alla macchina HOST_C dalla nostra macchina HOST_A<br />
ma magari la macchina HOST_C non permette l’accesso alla nostra macchina oppure<br />
non permette l’accesso ad una determinata porta, capita invece di avere accesso<br />
alla macchina HOST_B e magari questa ha un accesso ad HOST_C.<br />
Si può sfruttare l’ssh per creare un “tunnel” che in pratica ci permette tramite<br />
la macchina HOST_B di avere un accesso alla porta desiderata su HOST_C.<br />
Supponiamo di avere un istanza di oracle sulla porta 1523 di HOST_C a cui si<br />
vuole accedere magari tramite un tool grafico come oracle sql developer,<br />
la sintassi per il tunnel ssh è la seguente:<br />
ssh -L PORTA_LOCALE:HOST_C:PORTA(host e porta a cui non possiamo accedere)<br />
utente@HOST_B(host su cui abbiamo l’accesso)<br />
ad esempio suppinendo che vogliamo sulla porta locale 9999 il forward della<br />
porta 1523 di HOST_C<br />
ssh -L 9999:HOST_C:1523 user@HOST_B<br />
ora una semplice connessione localhost:9999 viene inoltrata su 1523 di HOST_C.
</p></blockquote>
<p>Direi che è tutto abbastanza chiaro no? <img src='http://www.miamammausalinux.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Reverse Tunnelling</strong></p>
<p>Cosa succede se la macchina che vogliamo controllare è dietro un NAT ? È una situazione comune per tutti gli utenti di FastWeb, che fornisce sicuramente una connessione veloce, ma a patto di stare dietro un fastidioso NAT, che permette liberamente le connessioni in uscita ma non le connessioni in ingresso.</p>
<p>Se vi trovate in questa situazione e avete la fortuna di essere possessori di  un VPS o abbiate un gentile amico in grado di fornirvi un accesso SSH potrete usufruire della fantastica capacità di reverse tunneling di SSH.</p>
<p>Il reverse tunneling consiste nel far aprire la prima connessione alla macchina dietro NAT ed incapsulando tutte le connessioni successive (sia in ingresso che in uscita) su quella prima connessione.</p>
<p>Supponiamo di avere tre macchine:</p>
<ul>
<li><strong>remotehost</strong>: la macchina dietro NAT</li>
<li><strong>middlehost</strong>: la macchina ponte</li>
<li><strong>otherhost</strong>: la macchina &#8220;esterna&#8221;</li>
</ul>
<p>Per poter controllare remotehost dal mondo esterno è necessario che il demone SSH su middle host abbia l&#8217;opzione &#8220;GatewayPorts yes&#8221; nel suo file di configurazione, una volta accertato questo è necessario istanziare la prima connessione da remotehost a middlehost in questo modo:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">fpedrini@remotehost:~$ ssh -R 10022:localhost:22 fpedrini@middlehost</pre></div></div>

<p>In questo modo la porta 10022 di &#8220;middlehost&#8221; rimarrà in ascolto per eventuali connessioni e le reindirizzerà sulla porta 22 di &#8220;remotehost&#8221;, è appunto il nostro reverse tunnel.</p>
<p>È anche possibile evitare di lasciare una shell di middlehost aperta sulla macchina remota, passando le opzioni -Nf ad ssh:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">fpedrini@remotehost:~$ ssh -R -Nf 10022:localhost:22 fpedrini@middlehost</pre></div></div>

<p>In questo modo il client ssh si metterà automaticamente in background.</p>
<p>Una volta aperto il reverse tunnel è possibile connettersi da &#8220;otherhost&#8221; a &#8220;remotehost&#8221; usando il seguente comando:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">fpedrini@otherhost:~$ ssh remotehost@middlehost -p 10022</pre></div></div>

<p>La connessione verrà effettuata alla porta 10022 di middlehost, che provvedrà a fare il forwarding verso la porta 22 di remotehost sfruttando il tunnel.</p>
<p>Nel caso non fosse possibile abilitare l&#8217;opzione &#8220;GatewayPorts yes&#8221; sul demone ssh di middle host avete un&#8217;ulteriore possibilità:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">fpedrini@otherhost:~$ ssh user@middlehost
Password:
user@middlehost:~ ssh remoteuser@locahost -p 10022</pre></div></div>

<p>In questo modo vi appoggerete direttamente a middlehost, e non dovrete modificare la sua configurazione.</p>
<p><strong>Autenticazione con chiavi: ssh-copy-id e ssh-agent</strong></p>
<p>SSH permette di autenticarsi su host remoti in diverse maniere, le più famose sono quella con password (che è il default) e quella con chiave.</p>
<p>Una coppia di chiavi (una pubblica e una privata) è composta da due file che identificano in maniera univoca (e fino ad ora in maniera non replicabile a meno di bug) un utente su un determinato host.<br />
Per autenticarsi con chiave su una macchina remota è necessario copiare su quella macchina la propria chiave pubblica, al tentativo di login, verrà controllata la corrispondenza chiave pubblica/chiave privata e nel caso il login verrà permesso.</p>
<p>Per generare la propria coppia di chiavi è sufficiente dare il comando ssh-keygen:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">fpedrini@host:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/fpedrini/.ssh/id_rsa): [invio]
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_rsa.
Your public key has been saved in id_rsa.pub.
The key fingerprint is:
83:67:5b:bd:76:ae:76:ad:45:49:67:39:9a:2c:71:82 fpedrini@host
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|          .     .|
|         E o . +o|
|       .   .= +.+|
|      . S ...+ ..|
|       o +  .. . |
|        .   o ...|
|           ..o...|
|           ..oo. |
+-----------------+</pre></div></div>

<p>In questo modo all&#8217;interno di ~/.ssh ci saranno due file: id_rsa e id_rsa.pub, il primo contiene la chiave privata, il secondo quella pubblica.</p>
<p>Per effettuare un login con chiave è necessario copiare il <i>contenuto</i> del file id_rsa.pub all&#8217;interno del file &#8220;~/.ssh/authorized_keys&#8221;  della macchina remota. </p>
<p>Copiare la chiave pubblica su una macchina remota è un&#8217;operazione che, se eseguita male, può portare alla rimozione delle chiavi precedentemente installate.<br />
Fortunatamente ssh-copy-id ci viene in aiuto, occupandosi da solo di copiare la chiave specificata sull&#8217;host remoto:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">fpedrini@host:~$ ssh-copy-id -i id_rsa remotehost
fpedrini@remotehost's password:
Now try logging into the machine, with &quot;ssh 'remotehost'&quot;, and check in:
&nbsp;
  .ssh/authorized_keys
&nbsp;
to make sure we haven't added extra keys that you weren't expecting.</pre></div></div>

<p>D&#8217;ora in poi avremo la possibilità di entrare su remotehost usando solo la passphrase della chiave ssh.</p>
<p>Tuttavia non risolviamo il problema di dover inserire ad ogni login una password, che sia quella del sistema remoto o quella che sblocca la propria chiave, siamo sempre costretti ad rispondere alla tediosa (quando si tratta di connettersi a molti host) domanda &#8220;Password?&#8221;</p>
<p>Anche in questo caso ci viene in aiuto un tool chiamato ssh-agent, che permette di fare il caching della propria passphrase (rigorosamente in RAM) per la sessione corrente, in modo da dover inserire la propria passphrase una e una sola volta, indipendentemente dal numero di login che si faranno.</p>
<p>La maggior parte delle distribuzioni fa partire ssh-agent assieme alla sessione del X server, per verificare che ssh-agent sia vivo è sufficiente lanciare il comando ssh-add -L:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">fpedrini@host:~$ ssh-add -L
Could not open a connection to your authentication agent.
fpedrini@host:~$ #l'agent non è attivo, lanciamolo!
fpedrini@host:~$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-sojRj30014/agent.30014; export SSH_AUTH_SOCK;
SSH_AGENT_PID=30015; export SSH_AGENT_PID;
echo Agent pid 30015;
fpedrini@host:~$ ssh-add -L
The agent has no identities.</pre></div></div>

<p>Per aggiungere l&#8217;identità all&#8217;agent ssh è sufficiente lanciare</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">fpedrini@host:~$ ssh-add ~/.ssh/id_rsa
Enter passphrase for /home/fpedrini/.ssh/id_rsa:
Identity added: /home/fpedrini/.ssh/id_rsa (/home/fpedrini/.ssh/id_rsa)
fpedrini@host:~$ ssh-add -L
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAwCN3/itjoIjM1yt3R78PiWm6xXpo8vn1/CCmg09o0P+KEr3QE429AfXern3IIP2l+3kpsTSyCOkBA0FoCJU2D9euhIoXyKVrB/sy4sE75rlnz0ab/YqUJWyGzXC6KFoaipgh+6rbN2FCoVF9m0mlBi4aNz4flHwsJskQ5vlMqpLO1YoB9yF7jSgLcjNT11+vbppi3AwMUVUWOx89aKuEHjL+qKNCIY1igEmSRpJ9K2OfW6otFRKp/sBcSo8U7HJjPn74I+NwAGFuf0dJXIs/3dTgcenhLCMurVrq8OWenKvHTpxkWmHGnkruhe3tvT/Jf76DcKOFxm7+a3K0uhLJ/w== /home/fpedrini/.ssh/id_rsa</pre></div></div>

<p>Da questo momento la chiave è aggiunta ad ssh-agent.</p>
<p><strong>Remote commands</strong></p>
<p>Con SSH è possibile lanciare singoli comandi senza aprire una shell sulla macchina e digitare il comando voluto, permettendo così di automatizzare alcuni processi e annoiarsi un po&#8217; di meno nell&#8217;esecuzione dei compiti tediosi di tutti i giorni.</p>
<p>Ad esempio se volessi lanciare il comando &#8216;w&#8217; su remotehost, è sufficiente il seguente comando:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">fpedrini@host:~$ ssh remotehost w
Password:
 16:05:17 up 347 days, 23:40,  0 users,  load average: 0,00, 0,02, 0,00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT</pre></div></div>

<p>Fino a che si tratta di un comando singolo su una macchina singola, la differenza tra lanciare il comando tramite ssh e connettersi direttamente è decisamente esugua, ma nel caso si voglia lanciare lo stesso comando su una serie di macchine si può usare il seguente mini-script:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">cat</span> host_list.txt <span style="color: #000000; font-weight: bold;">|</span>
<span style="color: #000000; font-weight: bold;">while</span> <span style="color: #c20cb9; font-weight: bold;">read</span> host;
<span style="color: #000000; font-weight: bold;">do</span>
    <span style="color: #c20cb9; font-weight: bold;">ssh</span> <span style="color: #007800;">$host</span> <span style="color: #c20cb9; font-weight: bold;">w</span> 
<span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<p>Ovviamente tutto questo funziona MOLTO meglio dopo aver installato la propria chiave sulle macchine contenute in host_list.txt.</p>
<p><strong>Conclusione</strong><br />
Con questo secondo articolo abbiamo coperto la maggior parte delle &#8220;hidden features&#8221; (per modo di dire) di SSH, che sono spesso molto utili per alleviare la fatica della gestione di diverse macchine.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miamammausalinux.org/2009/04/ssh-tips-and-tricks-reprise/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SSH: Tips and Tricks</title>
		<link>http://www.miamammausalinux.org/2009/03/ssh-tips-and-tricks/</link>
		<comments>http://www.miamammausalinux.org/2009/03/ssh-tips-and-tricks/#comments</comments>
		<pubDate>Tue, 03 Mar 2009 15:43:32 +0000</pubDate>
		<dc:creator>Francesco Pedrini</dc:creator>
				<category><![CDATA[Network]]></category>
		<category><![CDATA[SSH]]></category>
		<category><![CDATA[Tips and tricks]]></category>

		<guid isPermaLink="false">http://www.miamammausalinux.org/?p=503</guid>
		<description><![CDATA[Qualsiasi utente Linux si troverà prima o poi nella condizione di dover fare login su una macchina remota, e scoprirà l&#8217;esistenza di SSH. SSH (che poi sta per Secure SHell)è un protocollo nato per cifrare la comunicazione di dati tra i vari host di una rete e per rimpiazzare tutte le implementazioni di shell remote [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.miamammausalinux.org/wp-content/uploads/2009/03/openssh.png" alt="openssh" width="120" height="118" class="alignnone size-full wp-image-537" /><img class="alignnone size-full wp-image-292" src="http://www.miamammausalinux.org/wp-content/uploads/2009/01/linux.png" alt="linux" width="85" height="100" /></p>
<p>Qualsiasi utente Linux si troverà prima o poi nella condizione di dover fare login su una macchina remota, e scoprirà l&#8217;esistenza di SSH.</p>
<p>SSH (che poi sta per <em>S</em>ecure <em>SH</em>ell)è un protocollo nato per cifrare la comunicazione di dati tra i vari host di una rete e per rimpiazzare tutte le implementazioni di shell remote poco sicure proprio perchè non cifrate (vedi Telnet e RSH).</p>
<p>In questo articolo non esporrò l&#8217;utilizzo di base di ssh, ma alcuni suggerimenti molto utili e poco conosciuti.</p>
<p><strong>ControlMaster</strong></p>
<p>Questa feature di SSH permette di riutilizzare una connessione esistente per più sessioni ssh.</p>
<p>Al momento della prima connessione verso un host,  il client ssh creerà un socket attraverso il quale passeranno tutte le sessioni aperte verso quella macchina. Il socket verrà creato nella posizione indicata dalla direttiva ControlPath.</p>
<p>Usando il ControlMaster, si ottengono diversi effetti benefici, ad esempio aprendo una nuova sessione su una macchina a cui si è già connessi, non sarà necessario fare di nuovo login, in quanto il client utilizzerà il socket autenticato nella sessione precedente.<br />
Inoltre il ControlMaster permette anche l&#8217;autocompletamento dei path remoti e velocizza le operazioni di trasferimento file, come quelle effettuate tramite scp o sshfs.</p>
<p>Per attivare questa feature è necessario inserire nel file di configurazione del vostro client ssh (solitamente posto in ˜/.ssh/config) le due righe che seguono:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">ControlMaster auto
ControlPath ~/.ssh/sock/%r@%h:%p</pre></div></div>

<p>La prima riga attiva la feature ControlMaster in modalità &#8216;auto&#8217;, in questo modo all&#8217;apertura di ogni nuova connessione il client ssh si preoccuperà prima di controllare se esiste un socket da sfruttare, o in alternativa di crearlo.<br />
I valori possibili per l&#8217;opzione ControlMaster sono:</p>
<ul>
<li><em>no</em>:  il default, nessun socket verrà creato</li>
<li><em>ask</em>: ad ogni tentativo di connessione, verrà chiesto se usare l&#8217;eventuale socket disponibile</li>
<li><em>yes</em>:  il client userà il socket se è disponibile, altrimenti procederà con la connessione normale</li>
<li><em>auto</em>:  il client userà il socket se è disponibile, altrimenti procederà con la connessione normale ed istanzierà il nuovo socket per le connessioni future</li>
<li><em>autoask</em>:  un misto tra auto ed ask</li>
</ul>
<p>La seconda riga specifica in quale path salvare i socket usati per le connessioni, in questo caso dentro a ~/.ssh/sock/%r@%h:%p.</p>
<p>La sequenza di caratteri specifica come dovrà essere chiamato il file, ecco il significato dei vari pattern:</p>
<ul>
<li><em>%r</em>: il login name remoto</li>
<li><em>%h</em>: l&#8217;host remoto</li>
<li><em>%p</em>:  la porta remota</li>
<li><em>%l</em>: l&#8217;hostname locale</li>
</ul>
<p>È consigliabile inserire nel path almeno i parametri %r, %h e %p, in modo da identificare univocamente ogni socket.<br />
A questo punto l&#8217;unica cosa che rimane da fare è creare la directory &#8216;sock&#8217; all&#8217;interno di ~/.ssh/.</p>
<p><strong>Connessione Persistente</strong></p>
<p>Sempre sfruttando la funzionalità ControlMaster, è possibile effettuare una singola connessione persistente, che verrà messa in background, e sarà il ControlMaster per tutte le connessioni dirette ad una macchina.<br />
Tale tecnica è utile nel caso si facciano molte connessioni di breve durata, come nel caso dell&#8217;utilizzo di tool come DistCC su SSH.<br />
Per lanciare una connessione persistente è sufficiente lanciare il client ssh specificando le opzioni -MNf:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ ssh -MNf fpedrini@host
fpedrini@host's password:
$</pre></div></div>

<p>Da questo momento tutte le connessioni verso &#8216;host&#8217; sfrutteranno il socket appena creato, senza dover rinegoziare ogni volta l&#8217;autenticazione.</p>
<p><strong>Sequenze di Escape</strong></p>
<p>Le sequenze di escape di SSH mettono il client in una modalità diversa dalla normale da cui eseguire diverse operazioni, come ad esempio eseguire il forward di una porta senza rieffettuare la connessione oppure mandare in background il client ssh per recuperarlo successivamente tramite il comando &#8216;fg&#8217;.</p>
<p>Di default le sequenze di escape vengono attivate dalla pressione della tilde (~: sulla tastiera italiana AltGr+&igrave;) subito dopo un ritorno a capo (dato con enter), il carattere che segue la tilde specificherà l&#8217;azione da eseguire.<br />
Per scoprire quali sono le sequenze di escape accettate è sufficiente digitare, all&#8217;interno di una sessione, la sequenza &lt;ENTER&gt;~?, l&#8217;output sarà simile al seguente:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">fpedrini@host:~$ ~?
Supported escape sequences:
  ~.  - terminate connection (and any multiplexed sessions)
  ~B  - send a BREAK to the remote system
  ~C  - open a command line
  ~R  - Request rekey (SSH protocol 2 only)
  ~^Z - suspend ssh
  ~#  - list forwarded connections
  ~&amp; - background ssh (when waiting for connections to terminate)
  ~?  - this message
  ~~  - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)</pre></div></div>

<p>Di particolare interesse sono, a mio avviso, le sequenze &#8220;~C&#8221; e &#8220;~#&#8221;, la prima fa accedere alla commandline di SSH per poter, ad esempio, effettuare il forward di una porta, mentre la seconda mostra tutte le connessioni aperte tra la macchina locale e quella remota:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">fpedrini@host:~$ ~C
ssh&gt; -Lport:host:hostport
fpedrini@host:~$
fpedrini@host:~$ ~#
The following connections are open:
  #0 client-session (t4 r0 i0/0 o0/0 fd 4/5 cfd -1)
  #2 client-session (t4 r1 i0/0 o0/0 fd 10/11 cfd 9</pre></div></div>

<p>L&#8217;altra sequenza molto interessante è &#8220;~.&#8221;, che permette di killare una connessione ssh rimasta appesa senza dover essere costretti ad aprire un altro terminale e uccidere brutalmente il client ssh.</p>
<p><strong>Sock Proxying</strong></p>
<p>SSH è in grado di agire anche da proxy SOCK feature molto comoda nel caso in cui le regole dei vari firewall/proxy aziendali troppo restrittivi per quanto riguarda l&#8217;accesso al Web, ma permettano il traffico via SSH all&#8217;esterno della LAN.</p>
<p>Per attivare tale feature è sufficiente il seguente comando:</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">ssh -D 1234 utente@host -C</pre></div></div>

<p>Da questo momento, tutte le connessioni effettuate attraverso la porta 1234 del vostro pc verranno forwardate all&#8217;host remoto che le farà uscire verso internet, l&#8217;unica cosa da fare per poter navigare liberamente è configurare il vostro browser per fargli usare come proxy &#8220;localhost:1234&#8243;.<br />
L&#8217;opzione -C invece, non ha nulla a che fare con il forwarding delle connessioni, serve solo ad attivare la compressione del protocollo SSH.</p>
<p><strong>Conclusioni</strong></p>
<p>Questi tre piccoli trucchetti sono solo alcune delle funzionalità più utili di SSH, ma sono forse quelli meno conosciuti e che sono più difficili da capire durante la lettura della manpage.</p>
<p>Per tutte le altre funzionalità, rimando comunque alla manpage e ai numerosi howto presenti su internet.<img src="http://www.miamammausalinux.org/wp-content/uploads/2009/03/openssh.png" alt="openssh" width="120" height="118" class="alignnone size-full wp-image-537" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.miamammausalinux.org/2009/03/ssh-tips-and-tricks/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SSH in CHROOT: Una gabbia per la shell sicura (2 di 2)</title>
		<link>http://www.miamammausalinux.org/2008/02/ssh-in-chroot-una-gabbia-per-la-shell-sicura-2-di-2/</link>
		<comments>http://www.miamammausalinux.org/2008/02/ssh-in-chroot-una-gabbia-per-la-shell-sicura-2-di-2/#comments</comments>
		<pubDate>Fri, 22 Feb 2008 00:05:27 +0000</pubDate>
		<dc:creator>Raoul Scarazzini</dc:creator>
				<category><![CDATA[Network]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[SSH]]></category>
		<category><![CDATA[Chroot]]></category>
		<category><![CDATA[Sicurezza]]></category>

		<guid isPermaLink="false">http://www.miamammausalinux.org/?p=250</guid>
		<description><![CDATA[Dopo aver creato ed installato i pacchetti ssh con la patch per effettuare il chroot è tempo di creare fisicamente la gabbia sul disco ed un&#8217;utenza di test. Creazione della gabbia L&#8217;ambiente chroot in cui si muoverà l&#8217;utenza dopo aver effettuato il login dovrà essere composto sulla base delle limitazioni che si decideranno di applicare. [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.miamammausalinux.org/wp-content/uploads/2009/01/openssh.png" alt="openssh" title="openssh" width="100" height="98" class="alignnone size-full wp-image-248" /></p>
<p>Dopo aver creato ed installato i pacchetti ssh con la patch per effettuare il chroot è tempo di creare fisicamente la gabbia sul disco ed un&#8217;utenza di test.</p>
<p><strong>Creazione della gabbia</strong><br />
L&#8217;ambiente chroot in cui si muoverà l&#8217;utenza dopo aver effettuato il login dovrà essere composto sulla base delle limitazioni che si decideranno di applicare. Per il progetto descritto sinora è stato utilizzato uno script denominato <em>create_chroot_env.sh</em> (scaricabile nella sezione &#8220;allegati&#8221;) che accetta come parametro una directory nella quale è creato un ambiente base che comprende unicamente gli eseguibili necessari all&#8217;esecuzione della shell &#8220;bash&#8221;, del comando per il listing delle directory &#8220;ls&#8221; e di ssh stesso, in modo da consentire all&#8217;utente il collegamento sicuro ad altre macchine remote.</p>
<p>Una volta scaricato lo script è sufficiente eseguirlo passando come parametro la cartella nella quale verrà creata la gabbia chroot, /chroot:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">.<span style="color: #000000; font-weight: bold;">/</span>create_chroot_env.sh <span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">chroot</span></pre></div></div>

<p>Lo script creerà i path base, copierà gli eseguibili e le librerie ad essi associate ed infine creerà i device fondamentali al funzionamento del sistema chroot. Nulla vieta di modificare<em>create_chroot_env.sh</em> per aggiungere un programma diverso da quelli menzionati all&#8217;ambiente.</p>
<p>Ovviamente insieme ad ogni eseguibile aggiunto andranno aggiunte anche le librerie necessarie al suo funzionamento. Tali librerie sono ricavabili ad esempio attraverso il comando ldd. Per il comando ftp ad esempio l&#8217;esito di ldd sarà il seguente:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ldd</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">ftp</span>
linux-gate.so.1 =<span style="color: #000000; font-weight: bold;">&gt;</span>  <span style="color: #7a0874; font-weight: bold;">&#40;</span>0xb7f74000<span style="color: #7a0874; font-weight: bold;">&#41;</span>
libreadline.so.5 =<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>libreadline.so.5 <span style="color: #7a0874; font-weight: bold;">&#40;</span>0xb7f27000<span style="color: #7a0874; font-weight: bold;">&#41;</span>
libncurses.so.5 =<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>libncurses.so.5 <span style="color: #7a0874; font-weight: bold;">&#40;</span>0xb7ef6000<span style="color: #7a0874; font-weight: bold;">&#41;</span>
libc.so.6 =<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>libc.so.6 <span style="color: #7a0874; font-weight: bold;">&#40;</span>0xb7da9000<span style="color: #7a0874; font-weight: bold;">&#41;</span>
libdl.so.2 =<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>libdl.so.2 <span style="color: #7a0874; font-weight: bold;">&#40;</span>0xb7da4000<span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>ld-linux.so.2 <span style="color: #7a0874; font-weight: bold;">&#40;</span>0xb7f75000<span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></div></div>

<p>aggiungendo l&#8217;eseguibile <em>/usr/bin/ftp</em> e le librerie ricavate da ldd nella cartella <em>lib/</em> dell&#8217;ambiente chroot, sarà possibile lanciare ftp dalla gabbia creata. Una nota di attenzione va posta sulle librerie ottenute con <em>ldd</em> che in realtà sono link simbolici. Nell&#8217;esempio appena riportato <em>libreadline.so.5</em> è in realtà un link simbolico a <em>libreadline.so.5.2</em>, di conseguenza anche quest&#8217;ultimo file andrà copiato nella directory <em>lib</em> della gabbia chroot.</p>
<p><strong>Creazione della prima utenza &#8220;carcerata&#8221;</strong></p>
<p>Per completare il progetto manca solo la creazione di un utente con password che sia carcerato all&#8217;interno dell&#8217;ambiente chroot:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">useradd <span style="color: #660033;">-s</span> <span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">bash</span> <span style="color: #660033;">-m</span> <span style="color: #660033;">-d</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>chroottest <span style="color: #660033;">-g</span> <span style="color: #c20cb9; font-weight: bold;">users</span> chroottest
<span style="color: #c20cb9; font-weight: bold;">passwd</span> chroottest</pre></div></div>

<p>Il primo comando crea l&#8217;utente, lo assegna al gruppo users e crea la home directory, il secondo assegna la password per il login. La cartella &#8220;/home/chroottest&#8221; andrà spostata nella gabbia con i permessi limitati al solo utente:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mv</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>chroottest <span style="color: #000000; font-weight: bold;">/</span>chroot<span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>
<span style="color: #c20cb9; font-weight: bold;">chmod</span> <span style="color: #000000;">700</span> <span style="color: #000000; font-weight: bold;">/</span>chroot<span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>chroottest<span style="color: #000000; font-weight: bold;">/</span></pre></div></div>

<p>Il comando useradd ha creato la riga relativa all&#8217;utente nel file di sistema <em>/etc/passwd</em>, tale riga deve essere presente nel file <em>passwd</em> dell&#8217;ambiente chroot. Tale operazione è possibile attraverso questo comando:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">passwd</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #ff0000;">&quot;^chroottest&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>chroot<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">passwd</span></pre></div></div>

<p>A completamento della configurazione dell&#8217;utenza è necessaria la modifica della home directory all&#8217;interno del file passwd di sistema,  vero nodo focale del progetto:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">usermod <span style="color: #660033;">-d</span> <span style="color: #000000; font-weight: bold;">/</span>chroot<span style="color: #000000; font-weight: bold;">/</span>.<span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>chroottest  chroottest</pre></div></div>

<p>Questa definizione della home directory permetterà al demone ssh di identificare l&#8217;utente come un prigioniero della gabbia e muoverlo prima di aprire una shell all&#8217;interno del path che segue il carattere &#8220;.&#8221;.</p>
<p>Il processo descritto può essere automatizzato con uno script come <em>create_chroot_user.sh</em> (scaricabile nella sezione &#8220;allegati&#8221;) al quale verrà passato il parametro relativo al nome utente :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">.<span style="color: #000000; font-weight: bold;">/</span>create_chroot_user.sh chroottest
Enter new UNIX password:
Retype new UNIX password:
<span style="color: #c20cb9; font-weight: bold;">passwd</span>: password aggiornata correttamente</pre></div></div>

<p><strong>Primo login</strong></p>
<p>Per verificare che le operazioni eseguite abbiano portato al risultato sperato è sufficiente effettuare una connessione ssh alla macchina con l&#8217;utente chroottest:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ssh</span> chroottest<span style="color: #000000; font-weight: bold;">@</span>192.168.0.3
chroottest<span style="color: #000000; font-weight: bold;">@</span>192.168.0.3<span style="color: #ff0000;">'s password:
Last login: Thu Jan 31 19:31:18 2008 from 192.168.0.1
chroottest@debian:~$pwd
/home/chroottest</span></pre></div></div>

<p>e verificare come non sia possibile retrocedere oltre la directory &#8220;/&#8221;:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">chroottest<span style="color: #000000; font-weight: bold;">@</span>debian:~$ <span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>
chroottest<span style="color: #000000; font-weight: bold;">@</span>debian:<span style="color: #000000; font-weight: bold;">/</span>$ <span style="color: #c20cb9; font-weight: bold;">ls</span>
bin  dev  etc  home  lib
chroottest<span style="color: #000000; font-weight: bold;">@</span>debian:<span style="color: #000000; font-weight: bold;">/</span>$ <span style="color: #7a0874; font-weight: bold;">cd</span> ..
chroottest<span style="color: #000000; font-weight: bold;">@</span>debian:<span style="color: #000000; font-weight: bold;">/</span>$ <span style="color: #c20cb9; font-weight: bold;">ls</span>
bin  dev  etc  home  lib</pre></div></div>

<p>L&#8217;utente chroottest è prigioniero della gabbia creata e possiede un set di comandi limitato a quanto è stato stabilito in origine. Il progetto può dirsi quindi completo.</p>
<p><strong>Siti ufficiali</strong></p>
<p><a href="http://openssh.org">OpenSSH</a><br />
<a href="http://chrootssh.sourceforge.net">Patch CHROOT per OPENSSH</a></p>
<p><strong>Bibliografia</strong></p>
<p>Le pagine del Securing Debian Manual relative al <a href="http://www.debian.org/doc/manuals/securing-debian-howto/ap-chroot-ssh-env.en.html">chroot di ssh</a></p>
<p><strong>Allegati</strong></p>
<p>Script per la creazione della gabbia e dell’utente : <a href='http://www.miamammausalinux.org/wp-content/uploads/2008/02/ssh-in-chroot-scripts.tar'>ssh-in-chroot-scripts</a></p>
<p><strong>La serie comprende questi articoli :</strong></p>
<p>SSH in CHROOT: Una gabbia per la shell sicura (<a href="http://www.miamammausalinux.org/2008/02/ssh-in-chroot-una-gabbia-per-la-shell-sicura-1-di-2/">1 di 2</a>)<br />
SSH in CHROOT: Una gabbia per la shell sicura (<a href="http://www.miamammausalinux.org/2008/02/ssh-in-chroot-una-gabbia-per-la-shell-sicura-2-di-2/">2 di 2</a>)</p>
<p><strong>Nota :</strong></p>
<p><em>Questo articolo è originariamente apparso su <a href="http://www.tuxjournal.net">Tux Journal</a> nel Febbraio 2008.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.miamammausalinux.org/2008/02/ssh-in-chroot-una-gabbia-per-la-shell-sicura-2-di-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SSH in CHROOT: Una gabbia per la shell sicura (1 di 2)</title>
		<link>http://www.miamammausalinux.org/2008/02/ssh-in-chroot-una-gabbia-per-la-shell-sicura-1-di-2/</link>
		<comments>http://www.miamammausalinux.org/2008/02/ssh-in-chroot-una-gabbia-per-la-shell-sicura-1-di-2/#comments</comments>
		<pubDate>Wed, 13 Feb 2008 00:05:37 +0000</pubDate>
		<dc:creator>Raoul Scarazzini</dc:creator>
				<category><![CDATA[Network]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[SSH]]></category>
		<category><![CDATA[Chroot]]></category>
		<category><![CDATA[Sicurezza]]></category>

		<guid isPermaLink="false">http://www.miamammausalinux.org/?p=245</guid>
		<description><![CDATA[OpenSSH è lo strumento per la connessione a sistemi remoti più utilizzato negli ambienti Linux: è sicuro, veloce e facile da installare. Un utente che si collega ad un Server attraverso ssh effettua un vero e proprio login nel sistema ed ha pieno accesso alle funzionalità che questo offre. Su alcuni sistemi può però nascere [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.miamammausalinux.org/wp-content/uploads/2009/01/openssh.png" alt="openssh" title="openssh" width="100" height="98" class="alignnone size-full wp-image-248" /></p>
<p>OpenSSH è lo strumento per la connessione a sistemi remoti più utilizzato negli ambienti Linux: è sicuro, veloce e facile da installare. Un utente che si collega ad un Server attraverso ssh effettua un vero e proprio login nel sistema ed ha pieno accesso alle funzionalità che questo offre.</p>
<p>Su alcuni sistemi può però nascere l&#8217;esigenza di dover garantire l&#8217;accesso ssh ad utenze non privilegiate, che non abbiano cioè la possibilità di aggirarsi per il sistema. Certo una gestione oculata dei permessi di accesso ed esecuzione ai file critici può bastare per proteggersi, ma esiste una via più radicale per affrontare la questione, si tratta cioè della creazione di una gabbia che consenta all&#8217;utente l&#8217;utilizzo del sistema limitato ai comandi ed ai file definiti dall&#8217;amministratore : il chroot di ssh.</p>
<p><strong>Significato di chroot e sua applicazione alla shell sicura</strong></p>
<p>Il termine chroot (CHange ROOT) indica una forma di accesso diversa dallo standard, in un sottosistema generalmente contenente un numero di directory ed un set di comandi limitato.</p>
<p>Gli ambienti chroot vengono impiegati laddove si ha la necessità di far girare dei servizi in sicurezza in modo che se questi vengono in qualche modo violati, non consentono all&#8217;attaccante di aggirarsi per il sistema.</p>
<p>Il concetto di chroot applicato ad ssh si basa sulla stessa filosofia: restringere il set di file visionabili e comandi eseguibili i attraverso una gabbia, un filesystem ridotto all&#8217;essenziale.</p>
<p><strong>osshChroot : la patch per openssh</strong></p>
<p>Per utilizzare il chroot con ssh è necessario applicare una patch ai sorgenti originali del pacchetto openssh creata da  <em>Ricardo Cerqueira</em> e mantenuta da <em>James Dennis</em>.</p>
<p>Tale patch modifica il comportamento in cui il demone openssh legge le informazioni dell&#8217;account dal file di sistema <em>/etc/passwd</em>. Infatti il codice aggiunto prevede che se nella home directory dell&#8217;utente che vuole effettuare il login esiste un carattere &#8220;.&#8221; (punto), allora prima di proseguire con la direzione della console alla homedir viene invocato il comando chroot sulla directory precedente il punto.</p>
<p>Questo significa, ad esempio, che se è stato costruito un ambiente chroot nella directory /chroot ed esiste un utente foo la cui homedir è <em>/chroot/./home/foo</em>, questo effettuerà il login nell&#8217;ambiente chroot creato sotto <em>/chroot</em> che corrisponderà per l&#8217;utente a <em>/</em> e la directory in cui si troverà sarà <em>/home/foo</em>.</p>
<p>Grazie a questa funzionalità sarà semplice separare utenti privilegiati da utenti &#8220;carcerati&#8221; all&#8217;interno della gabbia <em>/chroot</em>.</p>
<p><strong>Patching, compilazione e creazione del pacchetto openssh</strong></p>
<p>La procedura descritta si riferisce alla compilazione del pacchetto openssh in Debian Etch 4.0.</p>
<p>Per predisporre il sistema a compilare sorgenti e generare pacchetti è necessario installare i due pacchetti (e le dipendenze ad essi correlate) build-essential e devscripts:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> build-essential devscripts</pre></div></div>

<p>Il sistema è pronto a compilare e produrre pacchetti, una volta reperiti i sorgenti di openssh attraverso il comando apt-get:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #7a0874; font-weight: bold;">source</span> openssh</pre></div></div>

<p>E&#8217; sufficiente scaricare la patch osshChroot tramite wget :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>chrootssh.sourceforge.net<span style="color: #000000; font-weight: bold;">/</span>download<span style="color: #000000; font-weight: bold;">/</span>osshChroot-4.2p1.diff</pre></div></div>

<p>Ed applicarla ai sorgenti:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> openssh-4.3p2<span style="color: #000000; font-weight: bold;">/</span>
<span style="color: #c20cb9; font-weight: bold;">patch</span> <span style="color: #660033;">-p1</span> <span style="color: #000000; font-weight: bold;">&amp;</span>lt; ..<span style="color: #000000; font-weight: bold;">/</span>osshChroot-4.2p1.diff</pre></div></div>

<p>quindi attraverso la modifica del file <em>debian/changelog</em> o attraverso il comando debchange inseriamo le note per questo pacchetto, che riguardano essenzialmente la patch per il chroot e che hanno questa forma:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">openssh <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">1</span>:4.3p2-9chroot<span style="color: #7a0874; font-weight: bold;">&#41;</span> unstable; <span style="color: #007800;">urgency</span>=high
&nbsp;
<span style="color: #7a0874; font-weight: bold;">&#91;</span> RaSca <span style="color: #7a0874; font-weight: bold;">&#93;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">*</span> <span style="color: #c20cb9; font-weight: bold;">chroot</span> <span style="color: #c20cb9; font-weight: bold;">patch</span>
&nbsp;
<span style="color: #660033;">--</span> root <span style="color: #000000; font-weight: bold;">&amp;</span>lt;root<span style="color: #000000; font-weight: bold;">@</span>debian.testlan.local<span style="color: #000000; font-weight: bold;">&amp;</span>gt;  Wed,  <span style="color: #000000;">6</span> Feb <span style="color: #000000;">2008</span> <span style="color: #000000;">16</span>:00:08 +0100</pre></div></div>

<p>prima di lanciare la compilazione dei sorgenti andranno soddisfatte tutte le dipendenze delle librerie del pacchetto openssh. Attraverso l&#8217;opzione <em>build-dep</em> del comando <em>apt-get</em> si può automatizzare questo processo:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">apt-get</span> build-dep openssh</pre></div></div>

<p>E&#8217; possibile quindi avviare la compilazione e generazione dei pacchetti attraverso il comando debuild:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">debuild</pre></div></div>

<p>I pacchetti verranno generati nella directory sottostante quella dei sorgenti:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> ..
<span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #660033;">-1</span> <span style="color: #000000; font-weight: bold;">*</span>.deb
openssh-client_4.3p2-<span style="color: #000000;">9</span>_i386.deb
openssh-server_4.3p2-<span style="color: #000000;">9</span>_i386.deb
ssh_4.3p2-<span style="color: #000000;">9</span>_all.deb
ssh-askpass-gnome_4.3p2-<span style="color: #000000;">9</span>_i386.deb
ssh-krb5_4.3p2-<span style="color: #000000;">9</span>_all.deb</pre></div></div>

<p>e potranno essere installati nel sistema attraverso il comando dpkg :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">dpkg</span> <span style="color: #660033;">-i</span> ssh_4.3p2-9chroot_all.deb openssh-client_4.3p2-9chroot_i386.deb openssh-server_4.3p2-9chroot_i386.deb</pre></div></div>

<p>Nel prossimo articolo verrà analizzata la creazione dell&#8217;ambiente chroot e della prima utenza che vi effettuerà il login.</p>
<p><strong>La serie comprende questi articoli :</strong></p>
<p>SSH in CHROOT: Una gabbia per la shell sicura (<a href="http://www.miamammausalinux.org/2008/02/ssh-in-chroot-una-gabbia-per-la-shell-sicura-1-di-2/">1 di 2</a>)<br />
SSH in CHROOT: Una gabbia per la shell sicura (<a href="http://www.miamammausalinux.org/2008/02/ssh-in-chroot-una-gabbia-per-la-shell-sicura-2-di-2/">2 di 2</a>)</p>
<p><strong>Nota :</strong></p>
<p><em>Questo articolo è originariamente apparso su <a href="http://www.tuxjournal.net">Tux Journal</a> nel Febbraio 2008.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.miamammausalinux.org/2008/02/ssh-in-chroot-una-gabbia-per-la-shell-sicura-1-di-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

