

<?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>Site de Francis Hilaire étudiant à Supinfo Orléans : prometee-creation.com &#187; SSH</title>
	<atom:link href="http://www.prometee-creation.com/pages/tutoriels/linux/ssh/feed" rel="self" type="application/rss+xml" />
	<link>http://www.prometee-creation.com</link>
	<description>Bonjour et bienvenue sur le site Prometee-creation.com. Vous trouverez ici, le parcours de Francis Hilaire, ses créations, les actualités en tout genre, ainsi que quelques tutoriels élaborés par une équipe de passionnés</description>
	<lastBuildDate>Thu, 13 May 2010 18:00:20 +0000</lastBuildDate>
	<language>fr</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>OpenSSH Server avec Chroot Jail</title>
		<link>http://www.prometee-creation.com/tutoriels/openssh-server-avec-chroot-jail.html</link>
		<comments>http://www.prometee-creation.com/tutoriels/openssh-server-avec-chroot-jail.html#comments</comments>
		<pubDate>Mon, 25 May 2009 14:25:55 +0000</pubDate>
		<dc:creator>Francis Hilaire</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[SSH]]></category>
		<category><![CDATA[Tutoriels]]></category>

		<guid isPermaLink="false">http://www.prometee-creation.com/?p=352</guid>
		<description><![CDATA[Petit tutoriel pour expliquer la mise en place d&#8217;un Chroot Jail afin d&#8217;emprisonner un utilisateur SSH dans son home. Tout d&#8217;abords quelque préparations : il vous faudra openssh-server en version supérieur ou égale à 4.8p1 car l&#8217;option du fichier de configuration de sshd n&#8217;est pas présente avant cette version. Pour Ubuntu ou Debian cette version [...]]]></description>
			<content:encoded><![CDATA[<p>Petit tutoriel pour expliquer la mise en place d&#8217;un Chroot Jail afin d&#8217;emprisonner un utilisateur SSH dans son home.</p>
<p>Tout d&#8217;abords quelque préparations : il vous faudra openssh-server en <strong>version supérieur ou égale à 4.8p1</strong> car l&#8217;option du fichier de configuration de sshd n&#8217;est pas présente avant cette version. Pour Ubuntu ou Debian cette version est présente depuis au moins le troisième trimestre 2008.</p>
<p>Donc on installe openssh-server :</p>
<pre class="brush: bash">sudo aptitude install openssh-server openssh-client</pre>
<p><em>Rq : On installe ici aussi le client afin de faire des test en local.</em></p>
<p>Ensuite configurons sshd :</p>
<pre class="brush: bash">sudo nano /etc/ssh/sshd_config</pre>
<p>tout en bas du fichier (et j&#8217;ai bien dit tout en bas) ajouter ces quelques lignes :</p>
<pre class="brush: text">Match Group chrootssh
ChrootDirectory %h
AllowTcpForwarding no</pre>
<p>Expliquons un peu ces lignes :</p>
<ul>
<li><strong>Match Group chrootssh</strong> : on va dire ici que le groupe chrootssh va être configuré avec les règles supplémentaires suivantes.</li>
<li><strong>ChrootDirectory %h</strong> : Tous les utilisateurs faisant partie du groupe chrootssh seront chrooté dans leur home : ici et comme dans la configuration de samba %h signifie le dossier de l&#8217;utilisateur. Ainsi vous pouvez mettre par exemple /var/www/%u si vous voulez que vos utilisateurs soit chrooté dans un dossier portant leur nom dans /var/www</li>
<li><strong>AllowTcpForwarding no</strong> : on désactive tous ce qui est tunnel ssh, on veux pas que notre serveur serve de proxy socks ou autre au client qui se connecte.</li>
</ul>
<p>Pour plus de renseignement sur la configuration de sshd_config reportez vous au <strong>man sshd_config</strong> ou bien <a href="http://www.openbsd.org/cgi-bin/man.cgi?query=sshd_config&amp;sektion=5">à cette page du manuel d&#8217;openssh</a></p>
<p>On y est, normalement le fichier de configuration est lu à chaque connexion d&#8217;un user donc pas besoin de reload le service ssh, mais si vous voulez en être sûre :</p>
<pre class="brush: bash">sudo invoke-rc.d ssh reload</pre>
<p><em>Rq : même si vous stoppé le service vos connexions en cours seront toujours &laquo;&nbsp;Alive&nbsp;&raquo; <img src='http://www.prometee-creation.com/wp-engine/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  jusqu&#8217;à ce que vous quittiez vos sessions bien sûr.</em></p>
<p>Ensuite passons aux choses sérieuses, la configuration d&#8217;un compte utilisateur Chrooté :</p>
<pre class="brush: bash">
#On créé le groupe chrootssh
sudo addgroup chrootssh
#on rajoute l&#039;utilisateur
sudo adduser monuserchrootssh
#on ajoute le user au groupe chrootssh
sudo adduser monuserchrootssh chrootssh</pre>
<p>Nous allons maintenant créé sont environnement en utilisant un petit script un poil modifié par mes soins mais qui vient tout droit du paquet libpam-chroot :<br />
<code></p>
<pre style="width: 100%; overflow: auto; border: 1px solid #000;">#!/bin/bash

# Here specify the apps you want into the enviroment
APPS="/usr/bin/env /usr/bin/wget /usr/bin/clear /usr/bin/ftp /usr/bin/traceroute /usr/bin/host /bin/sh /bin/grep /bin/cat /usr/bin/vi /bin/gzip /bin/gunzip /usr/bin/less /usr/bin/tail /usr/bin/nslookup /usr/bin/resolveip /bin/bash /bin/ls /bin/mkdir /bin/mv /bin/pwd /bin/rm /usr/bin/id /usr/bin/ssh /bin/ping /usr/bin/dircolors /usr/bin/screen /bin/ps /bin/uname /bin/sed"
USER_HOME="/home/$1"

# Sanity check
if [ -z "$1" ]; then
echo "&nbsp;&nbsp;&nbsp; Usage: $0 username"
exit
fi

# Obtain username and HomeDir
CHROOT_USERNAME=$1
HOMEDIR=`grep /etc/passwd -e "^$CHROOT_USERNAME:"&nbsp; | cut -d':' -f 6`
cd $HOMEDIR

mkdir etc bin lib usr usr/bin dev
# We need as many tty's as consoles
/bin/mknod -m 666 dev/tty&nbsp; c 5 0
/bin/mknod -m 644 dev/tty1 c 4 1
/bin/mknod -m 644 dev/tty2 c 4 2
/bin/mknod -m 644 dev/tty3 c 4 3
/bin/mknod -m 644 dev/tty4 c 4 4
/bin/mknod -m 644 dev/tty5 c 4 5
/bin/mknod -m 644 dev/tty6 c 4 6
#and pts
mkdir dev/pts
/bin/mknod -m 666 dev/pts/0&nbsp; c 136 0
/bin/mknod -m 666 dev/pts/1&nbsp; c 136 1
# Some special nodes, just for fun
/bin/mknod -m 444 dev/urandom c 1 9
/bin/mknod -m 666 dev/zero c 1 5
/bin/mknod -m 666 dev/null c 1 3

# Create short version to /usr/bin/groups
# On some system it requires /bin/sh, generally unnessesary in a chroot cage

echo "#!/bin/bash" &gt; usr/bin/groups
echo "id -Gn" &gt;&gt; usr/bin/groups

# Add some users to ./etc/paswd
grep /etc/passwd -e "^root:" -e "^$CHROOT_USERNAME:" &gt; etc/passwd
grep /etc/group -e "^root" -e "^$CHROOT_USERNAME:" &gt; etc/group

#Settings prompt
cp /etc/profile etc/profile
cp -R /etc/bash* etc
echo "export HOME=/" >> etc/profile

for prog in $APPS;&nbsp; do
&nbsp;&nbsp; &nbsp;cp $prog ./$prog
&nbsp;&nbsp; &nbsp;# obtain a list of related libraries
&nbsp;&nbsp; &nbsp;ldd $prog &gt; /dev/null
&nbsp;&nbsp; &nbsp;if [ "$?" = 0 ] ; then
&nbsp;&nbsp; &nbsp;LIBS=`ldd $prog`
&nbsp;&nbsp; &nbsp;for l in $LIBS; do
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if [ -f $l ]; then
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;mkdir -p .`dirname $l` &gt; /dev/null 2&gt;&amp;1
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;cp $l ./$l
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;fi
&nbsp;&nbsp; &nbsp;done
&nbsp;&nbsp; &nbsp;fi
done

# For strange reason, these 3 libraries are not in the ldd output, but without
# them some stuff will not work, like usr/bin/groups
cp /lib/libnss_compat.so.2 /lib/libnsl.so.1 /lib/libnss_files.so.2 /lib/ld-linux.so.2 /lib/libresolv.so.2 /lib/libnss_dns.so.2 ./lib/
chmod 755 usr/bin/groups

cp /etc/host.conf ./etc/
cp /etc/hosts ./etc/
cp /etc/nsswitch.conf ./etc/
cp /etc/localtime ./etc/
cp /etc/resolv.conf ./etc/
cp /etc/services ./etc/
cp /etc/protocols ./etc/
mkdir ./etc/terminfo/
cp -R /etc/terminfo/* ./etc/terminfo/

find . -type d -exec chown -R root:root {} \;
</pre>
<p></code></p>
<p>Si vous êtes sous architecture 64 bits une erreur peut apparaitre :<br />
<em>cp: cannot stat `/lib/ld-linux.so.2&#8242;: No such file or directory</em><br />
Copier donc votre librairie :</p>
<pre class="brush: bash">mkdir /home/monuserchrootssh/lib64
cp /lib64/ld-linux-x86-64.so.2 /home/monuserchrootssh/lib64</pre>
<p>Elle est nécessaire pour faire fonctionner bash par exemple <img src='http://www.prometee-creation.com/wp-engine/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Ligne 4 de ce fichier listez tous les exécutables que vous voulez donné à votre utilisateur, ici j&#8217;ai listez les plus courant dans une liste riquiqui.</p>
<p>Petit bémol mais peut être que quelqu&#8217;un pourra le résoudre : <strong>screen</strong> ne retrouve pas ses petits et ne peux pas démarré dans cette environnement, mais il semblerait qu&#8217;un mount &#8211;bind bien placé pour tous ce qui &laquo;&nbsp;pts&nbsp;&raquo; résoudrait l&#8217;affaire : a creuser donc&#8230;</p>
<p>il ne nous reste plus qu&#8217;à exécuter notre petit script. Donc vous avez bien sûre fait un :</p>
<pre class="brush: bash">cd
nano createchroot.sh
#on colle le contenu dans ce fichier
chmod +x ./createchroot.sh</pre>
<p>Enfin nous créons l&#8217;envirronnement à l&#8217;aide de ce script :</p>
<pre class="brush: bash">sudo ./createchroot.sh monuserchrootssh</pre>
<p>Si vous avez quelques erreurs disant que le programme n&#8217;existe pas c&#8217;est surement que l&#8217;un des exécutables donné dans la variable $APPS ligne 4 n&#8217;est pas installé, et que donc vous n&#8217;en avez pas besoin.</p>
<p>Si vous voulez controler que tout marche pour le mieux éxécuter sshd en mode devel :</p>
<pre class="brush: bash">sudo invoke-rc.d ssh stop
sudo /usr/sbin/sshd -d
#ctrl+c pour quitter</pre>
<p>Voilà on y est loggé l&#8217;utilisateur pour faire un test :</p>
<pre class="brush: bash">ssh monuserchrootssh@localhost</pre>
<p>Si vous avez pas d&#8217;erreur et un prompt faite :</p>
<pre class="brush: bash">pwd
#qui devrait affiché
# /
ls -al
#qui devrait vous afficher une petite arborescence tel que celle-ci:
#drwxr-xr-x 7 root root 4096 May 25 16:15 .
#drwxr-xr-x 7 root root 4096 May 25 16:15 ..
#-rw-r--r-- 1 root root  220 May 25 16:14 .bash_logout
#-rw-r--r-- 1 root root 3115 May 25 16:14 .bashrc
#-rw-r--r-- 1 root root  675 May 25 16:14 .profile
#drwxr-xr-x 2 root root 4096 May 25 16:15 bin
#drwxr-xr-x 2 root root 4096 May 25 16:15 dev
#drwxr-xr-x 3 root root 4096 May 25 16:15 etc
#drwxr-xr-x 4 root root 4096 May 25 16:15 lib
#drwxr-xr-x 4 root root 4096 May 25 16:15 usr</pre>
<p>Si quelqu&#8217;un trouve un petite technique pour avoir le bon prompt aussi ça serait cool <img src='http://www.prometee-creation.com/wp-engine/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  car là on a le prompt de bash par défaut, et le .bashrc ne s&#8217;exécute pas.</p>
<p>Je suis ouvert à tout commentaires afin d&#8217;enrichir cette article, posez vos questions dans les commentaires ci-dessous <img src='http://www.prometee-creation.com/wp-engine/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.prometee-creation.com/tutoriels/openssh-server-avec-chroot-jail.html/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
