Une bonne année à tous,
mes meilleurs voeux à tous ceux qui verront ce message 🙂
*L’instant geek : pour ceux qui ne l’auraient pas compris 2011 en chiffres romains s’écrit MMXI d’où GMMXIE
*L’instant geek : pour ceux qui ne l’auraient pas compris 2011 en chiffres romains s’écrit MMXI d’où GMMXIE
Cette année le WIF aura lieu les 3, 4 et 5 Juin 2010 à Limoges.
Depuis les premières éditions du Marathon de l’Internet Créatif, le wif (Webdesign International Festival) est devenu un événement incontournable dans le domaine du design d’interfaces innovantes et des contenus numériques.
Le wif est également le lieu de rencontres entre professionnels du secteur.
Les conférences qui auront lieu les 4 et 5 juin (avec des ateliers le 3 juin) traiteront du design d’information, de la mobilité, des interfaces et le corps, du prototypage…
(Retrouvez le programme intégral des conférences sur : www.webdesign-festival.com)
Petit tutoriel pour expliquer la mise en place d’un Chroot Jail afin d’emprisonner un utilisateur SSH dans son home.
Tout d’abords quelque préparations : il vous faudra openssh-server en version supérieur ou égale à 4.8p1 car l’option du fichier de configuration de sshd n’est pas présente avant cette version. Pour Ubuntu ou Debian cette version est présente depuis au moins le troisième trimestre 2008.
Donc on installe openssh-server :
sudo aptitude install openssh-server openssh-client
Rq : On installe ici aussi le client afin de faire des test en local.
Ensuite configurons sshd :
sudo nano /etc/ssh/sshd_config
tout en bas du fichier (et j’ai bien dit tout en bas) ajouter ces quelques lignes :
Match Group chrootssh ChrootDirectory %h AllowTcpForwarding no
Expliquons un peu ces lignes :
Pour plus de renseignement sur la configuration de sshd_config reportez vous au man sshd_config ou bien à cette page du manuel d’openssh
On y est, normalement le fichier de configuration est lu à chaque connexion d’un user donc pas besoin de reload le service ssh, mais si vous voulez en être sûre :
sudo invoke-rc.d ssh reload
Rq : même si vous stoppé le service vos connexions en cours seront toujours « Alive » 🙂 jusqu’à ce que vous quittiez vos sessions bien sûr.
Ensuite passons aux choses sérieuses, la configuration d’un compte utilisateur Chrooté :
#On créé le groupe chrootssh sudo addgroup chrootssh #on rajoute l'utilisateur sudo adduser monuserchrootssh #on ajoute le user au groupe chrootssh sudo adduser monuserchrootssh chrootssh
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 :
#!/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"
# Sanity check
if [ -z "$1" ]; then
echo " Usage: $0 username"
exit
fi
# Obtain username and HomeDir
CHROOT_USERNAME=$1
HOMEDIR=`grep /etc/passwd -e "^$CHROOT_USERNAME:" | 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 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 c 136 0
/bin/mknod -m 666 dev/pts/1 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" > usr/bin/groups
echo "id -Gn" >> usr/bin/groups
# Add some users to ./etc/paswd
grep /etc/passwd -e "^root:" -e "^$CHROOT_USERNAME:" > etc/passwd
grep /etc/group -e "^root" -e "^$CHROOT_USERNAME:" > etc/group
#Settings prompt
cp /etc/profile etc/profile
cp -R /etc/bash* etc
echo "export HOME=/" >> etc/profile
for prog in $APPS; do
cp $prog ./$prog
# obtain a list of related libraries
ldd $prog > /dev/null
if [ "$?" = 0 ] ; then
LIBS=`ldd $prog`
for l in $LIBS; do
if [ -f $l ]; then
mkdir -p .`dirname $l` > /dev/null 2>&1
cp $l ./$l
fi
done
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 {} \;
Si vous êtes sous architecture 64 bits une erreur peut apparaitre :
cp: cannot stat `/lib/ld-linux.so.2′: No such file or directory
Copier donc votre librairie :
mkdir /home/monuserchrootssh/lib64 cp /lib64/ld-linux-x86-64.so.2 /home/monuserchrootssh/lib64
Elle est nécessaire pour faire fonctionner bash par exemple 🙂
Ligne 4 de ce fichier listez tous les exécutables que vous voulez donné à votre utilisateur, ici j’ai listez les plus courant dans une liste riquiqui.
Petit bémol mais peut être que quelqu’un pourra le résoudre : screen ne retrouve pas ses petits et ne peux pas démarré dans cette environnement, mais il semblerait qu’un mount –bind bien placé pour tous ce qui « pts » résoudrait l’affaire : a creuser donc…
il ne nous reste plus qu’à exécuter notre petit script. Donc vous avez bien sûre fait un :
cd nano createchroot.sh #on colle le contenu dans ce fichier chmod +x ./createchroot.sh
Enfin nous créons l’envirronnement à l’aide de ce script :
sudo ./createchroot.sh monuserchrootssh
Si vous avez quelques erreurs disant que le programme n’existe pas c’est surement que l’un des exécutables donné dans la variable $APPS ligne 4 n’est pas installé, et que donc vous n’en avez pas besoin.
Si vous voulez controler que tout marche pour le mieux éxécuter sshd en mode devel :
sudo invoke-rc.d ssh stop sudo /usr/sbin/sshd -d #ctrl+c pour quitter
Voilà on y est loggé l’utilisateur pour faire un test :
ssh monuserchrootssh@localhost
Si vous avez pas d’erreur et un prompt faite :
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
Si quelqu’un trouve un petite technique pour avoir le bon prompt aussi ça serait cool 🙂 car là on a le prompt de bash par défaut, et le .bashrc ne s’exécute pas.
Je suis ouvert à tout commentaires afin d’enrichir cette article, posez vos questions dans les commentaires ci-dessous 🙂
Après maintes essai sur deux serveurs dédiés : un kimsufi et une dedibox pro xl, j’ai enfin saisi le fonctionnement de la configuration de bind9. Il existe pas mal de tutos traitant de la façon de construire ces fichiers configurations, mais aucune ne se ressemble. Ce petit tutoriel va d’une part m’aider à garder une trace de mon expérience et d’autre part de peut être vous aider 🙂
Chez dedibox il existe une interface de gestion des dns très simple qui vous permettra de configurer vos enregistrements très simplement, mais vous pouvez tout de même créer votre propre serveur DNS.
Tout d’abord, la plate forme utilisée sur ses deux serveurs était Ubuntu 9.04 server (x86_64). Il m’a donc fallut installer bind9 :
sudo aptitude install bind9
.
Un fois installé le paquet .deb aura mis en place les fichiers de configuration de bind9 dans /etc/bind9/. Dans ce dossier nous trouverons 3 fichiers nommés :
Configurons donc /etc/bind/named.conf.options nous allons ici dire à bind d’écouter par toutes les adresses ipv4 et v6 qui se trouvent sur votre serveur. Voici le contenu de mon fichier :
options {
directory "/var/cache/bind";
// If there is a firewall between you and nameservers you want
// to talk to, you may need to fix the firewall to allow multiple
// ports to talk. See http://www.kb.cert.org/vuls/id/800113
// If your ISP provided one or more IP addresses for stable
// nameservers, you probably want to use them as forwarders.
// Uncomment the following block, and insert the addresses replacing
// the all-0's placeholder.
forwarders {
213.186.33.99;
};
auth-nxdomain no; # conform to RFC1035
listen-on-v6 { any; };
listen-on { any; };
// Les adresses autorisées à interroger de façon récursive le serveur DNS
allow-recursion
{
127.0.0.1;
ip.de.votre.serveur;
};
// Autorise le transfert de zone uniquement pour ns.kimsufi.com pour notre cas
allow-transfer { 213.186.33.199; };
};
Ici pour votre configuration vous pouvez changer l’adresse ip du DNS secondaire dans la clause forwarders. Les autres options tel que listen-on-v6 et listen-on vous respectivement définir le fait que le serveur DNS doit écouter les requètes DNS sur toutes les adresses possibles quelles soit ipv6 ou ipv4. Ce qui est d’ailleurs une condition impérative afin d’établir un serveur DNS internet, sinon celui-ci restera par défaut un serveur dns contrôlant des zones locales.
Ensuite passons à la configuration d’une zone. Editons le fichier /etc/bind/named.conf.local afin d’y renseigner nos zones.
zone "mon-site.tld" {
type master;
// Autorise le transfert de zone uniquement pour ns.kimsufi.com pour notre cas
allow-transfer { 213.186.33.199; };
file "/etc/bind/mon-site.tld.hosts";
notify yes;
};
Naturellement vous allez remplacer mon-site.tld par le site voulu, la clause file va indiquer ou es ce que l’on stockera la configuration de notre zone. Attention apparemment (c’est à vérifier) pour les domaines en .fr il faut absolument spécifier allow-transfer et spécifier le dns qui s’occupera des transferts. notify yes accélère la mise à jour.
Puis nous allons renseigner le fichier de notre zone : /etc/bind/mon-site.tld.hosts de cette façon :
$ttl 3H mon-site.tld. IN SOA ksxxxx.kimsufi.com. emailvalide.domaine.tld. ( 2009051501 ;serial (version) 3600 ;refresh period 900 ;retry refresh this often 604800 ;expiration period 3600 ;minimum TTL ) mon-site.tld. IN NS ksxxxx.kimsufi.com. mon-site.tld. IN NS ns.kimsufi.com. IN A 123.234.1.2 mail IN A 123.234.1.2 svn IN A 123.234.1.2 www IN CNAME mon-site.tld. mon-site.tld. IN MX 10 mail.mon-site.tld.
Quelques petites explications : tout d’abord les points après les noms de domaines ne sont pas là pour faire jolie, si vous savez comment marche DNS vous savez pourquoi, personnellement je crois me rappeler que ça correspond à la douzaine de serveurs DNS principaux répartis sur la surface du globe qui sont les pères de tous les dns existants sur la toile.
Bon sinon pour la configuration nous avons « mon-site.tld. IN SOA ksxxxx.kimsufi.com. emailvalide.domaine.tld. » :
Les paramètres peuvent ne pas être touchés sauf le serial : « 2009051501 ;serial (version) » par defaut on établit ce serial en concatenant une date et une nombres de changement du fichier en cours (2009 05 15 01 correspond au 15 mai 2009 et le fichier a été modifié 1 fois), mais vous pouvez mettre une numéro que vous voulez.
Ensuite les choses se corsent :
Si vous voulez d’autres précisions sur les autres types d’enregistrements lisez l’article de wikipedia sur DNS qui vous décrira les types comme AAAA destinés à IPv6, TXT pour un enregistrement de type commentaire, ou encore PTR qui est le contraire de A.
Voilà vous savez le minimum pour configurer ce type de fichiers. Un fois que vous avez terminer l’édition de ces fichiers n’oubliez pas de reloadé bind9 et de vérifier les logs :
sudo invoke-rc.d bind9 reload
sudo tail -f -n 30 /var/log/daemon.log
ou plus simplement :
named-checkconf -z
Pour vérifier que votre serveur est bien comme il faut :
nslookup mon-site.tld nslookup www.mon-site.tld nslookup mail.mon-site.tld
Et la même chose sur le DNS secondaire de votre provider :
nslookup mon-site.tld ns.kimsufi.com nslookup www.mon-site.tld ns.kimsufi.com nslookup mail.mon-site.tld ns.kimsufi.com
A noter que la configuration des dns sur votre serveur peux prendre plusieurs heures voir jours à arriver jusqu’aux serveurs DNS de votre FAI de votre domicile.
N’hésitez pas à faire part de vos soucis ou remarques dans les commentaires, cette article n’est pas immuable et évoluera en fonction des expériences de chacun d’entre nous 🙂
Liste complète des options disponible pour les fichiers de conf de BIND9 :
http://ftp.isc.org/www/bind/arm95/Bv9ARM.ch06.html
Il ne s’agit pas d’y aller le plus de fois par jour, mais d’être le plus nombreux possible. Venir une fois ou 50 fois par jour, ça revient au même, puisque c’est le nombre de visiteurs UNIQUES et pas de visites qui est calculé, selon le barème mis au point. L’argent sera utilisé par la Croix Rouge pour mettre des cadeaux sous les sapins des mairies le 24 au soir. N’hésitez pas à parler de ce site à vos amis… ou à mettre un lien sur votre site!
Et enfin, petit rappel qui ne mange pas de pain, sur la droite, un onglet « faire un don à la Croix Rouge » est toujours à votre disposition, si par exemple vous avez envie d’en faire plus (tous les montants sont acceptés).
l’adresse du site est www.monbeausapin.org