Le jail express

Ou comment monter un jail en 2 – 2. On commence par topper une ISO de FreeBSD sur le host (système de base). Supposons que nous voulions installer un jail nommé “jigar” dans /jail/dtc. On va y mettre deux chose : le système de base FreeBi et les pages de man (une fois loggué dans le jail, c’est pratique de les avoir sous la main). Commencons par monter l’ISO :

mdconfig -a -t vnode -f ./FreeBSD-8.1-RELEASE-amd64-disc1.iso

Qui doit renvoyer un device (chez moi md0)

mount -t cd9660 /dev/md0 /mnt/iso

Mon shell root par défaut est sh (j’aime pô csh, je sais pas m’en servir ^^). On doit se placer dans le “set” a installer (base et manpages pour nous) :

cd /mnt/iso/8.1-RELEASE/base
DESTDIR=/jail/dtc ./install.sh

cd /mnt/iso/8.1-RELEASE/manpages
DESTDIR=/jail/dtc ./install.sh

Après c’est du classique, configurons le rc.conf du host :

#Alias avec l'ip du jail sur l'interface
ifconfig_igb0_alias0="inet <ip_host>"
syslogd_flags="-s -s"
sendmail_enable="NO"
inetd_flags="-wW -a <ip_host>"
rpcbind_enable="NO"
 
jail_enable="YES"
jail_list="jigar"
jail_set_hostname_allow="NO"
jail_socket_unixiproute_only="YES"
jail_procfs_enable="NO"
jail_devfs_enable="YES"
jail_exec_start="/bin/sh /etc/rc"
jail_devfs_ruleset="devfsrules_jail"
 
jail_nausica_flags="-n jigar"
jail_nausica_rootdir="/jail/dtc"
jail_nausica_hostname="jigar.garnett.fr"
jail_nausica_ip="ip_jigar"

Celui de “jigar” (/jail/dtc/etc/rc.conf) :

hostname="jigar.garnett.fr"
network_interfaces=""
keymap="fr.iso.acc"
sshd_enable="YES"
syslogd_flags="-s -s"
rpcbind_enable="NO"

Quelques post-actions :

touch /jail/dtc/etc/fstab
cp /etc/resolv.conf /jail/dtc/etc/
cp /jail/dtc/usr/share/zoneinfo/Europe/Paris /jail/dtc/etc/localtime
chroot /jail/nausica /bin/sh
#passwd
#exit

Et voila, c’est prêt !

Saliva – Click Click Boom

Pierrot again !

Staind – For you

Hop, premier post dans la catégorie musique ! Une suggestion de Pierrot (qui risque d’être un contributeur assez récurrent de cette catégorie ^^) : Staind “For you”.

Nouvelle catégorie : musique

Une nouvelle catégorie fait son apparition “Musique”. N’étant moi-même pas du tout musicien (et encore moins à la pointe des courants musicaux) cette catégorie me servira à centraliser les trucs que mes amis me font découvrir.

Beck

J’ai profité des (courtes) vacances pour me faire l’integrale de Beck, un manga sur le rock. J’avais vu l’animé qui m’avait laissé un bon souvenir notamment avec une superbe bande son. Par contre cet animé s’arrète environ au tome 10 du manga. Ayant été un peu déçu par la fin de l’animé, je me suis donc rué sur le manga qui compte 34 tomes (autant dire qu’il se passe des choses après la “fin” de l’animé). On suit donc durant 34 tomes l’évolution du groupe Beck ou Mongolian Chop Squad (MCS) composé de Chiba (chant), Koyuki (chant / guitare), Taira (basse), Kyosuke (guitare) et Saku (batterie). Et on s’attache énormement à cette joyeuse bande. A mon avis c’est ce qui fait la force de ce manga (au dela de l’univers musical très fouillé) : les liens entre les différents membres du groupe. On ne sait jamais vraiment comment ça va finir pour eux, l’auteur n’hésite pas à maltraiter les héros. Bref ce manga est a mon avis un “must” à écouter en musique !

PIMP my Amavisd-new

Sur des serveurs de messagerie un peu chargés le message suivant est apparu dans les logs :

Jul 29 11:18:39 mailhost postfix/error[3799]: 10F9BC0318: to=<nico@garnett.fr>,
relay=none, delay=98766, delays=98761/4.9/0/0.08, dsn=4.4.1, status=deferred
(delivery temporarily suspended: connect to 127.0.0.1[127.0.0.1]:10024:
Connection refused)

La raison en est simple. Une autre erreur m’a mis sur la voie :

Jul 29 11:17:20 mailhost postfix/qmgr[1416]: warning: you may need to increase
the master.cf amavis process limit

Il faut donc tweaker un peu le Amavis pour faire ne sorte d’ajuster le nombre de consomateur (file d’attente de mails en attente de traitement) au producteur (service amavisd-new).
Dans le fichier /etc/postfix/master.cf :

amavis    unix  -       -       -       -       8       smtp
        -o smtp_data_done_timeout=1200
        -o smtp_send_xforward_command=yes
        -o max_use=20

On fixe le maxproc à 8 (cette valeur doit être synchronisé avec le nombre de processus Amavisd forkés au lancement du service). On en profite pour coller un max_use à 20. Le paramètre max_use étant le nombre de fois que Postfix peut réutiliser l’instance d’un service. Pour la valeur 20, un explication limpide est disponible ici.

En parallèle, on colle dans le /etc/amavis/conf.d/50-user :

$max_servers = 8;

Pour être cohérent avec le maxproc de Amavis dans le master.cf.

RC4-HMAC et cross-realm KDC Heimdal / AD

Voila un petit moment que j’essaie de mettre en place un cross-realm en virant le DES. Mon KDC de test est un KDC Heimdal installé par les paquets sur une Debian Squeeze. Windows 2003 SP2 gère le RC4-HMAC pour le principal d’approbation (le fameux krgtgt/NTDOMAIN@UNIXDOMAIN). Par défaut, Heimdal fait bien les choses. Un principal est crée avec trois enctypes : aes256, des3 et arcfour. Pas de simple DES : cool.

root@kdc:~# kadmin -l list -l nico

            Principal: nico@GARNETT.FR
    Principal expires: never
     Password expires: never
 Last password change: never
      Max ticket life: 1 day
   Max renewable life: 1 week
                 Kvno: 2
                Mkvno: unknown
Last successful login: never
    Last failed login: never
   Failed login count: 0
        Last modified: never
             Modifier: unknown
           Attributes: 
             Keytypes: aes256-cts-hmac-sha1-96(pw-salt),des3-cbc-sha1(pw-salt),
                            arcfour-hmac-md5(pw-salt)
          PK-INIT ACL: 
              Aliases:

Côté Windows 2003 SP2, on crée une relation d’approbation transitive unilatérale (clic clic dans l’interface) et on fixe un mot de passe pour le principal crée dans le KDC Active Directory. On déclare ensuite le realm UNIX via la commande ksetup :

ksetup /setdomain GARNETT.FR
ksetup /addkdc GARNETT.FR kdc.garnett.fr

On notera que l’on pourrait ajouter les informations de localisation du kdc directement dans la zone DNS, ca serait plus simple. Dernière étape, il faut spécifier au KDC AD que l’enctype par défaut pour l’approbation c’est du RC4 :

ktpass /MITRealmName GARNETT.FR /TrustEncryp RC4

Côté client XP, il faut évidemment l’ajouter au domaine AD. Ensuite de la même manière que sur le KDC AD, on doit déclarer le realm UNIX :

ksetup /setdomain GARNETT.FR
ksetup /addkdc GARNETT.FR kdc.garnett.fr

A l’authentification du client XP (avec son principal et son mot de passe UNIX sur le domaine Kerberos UNIX), on doit voir ça dans les logs :

2010-07-28T15:42:22 Client supported enctypes: arcfour-hmac-md5,
using arcfour-hmac-md5/aes256-cts-hmac-sha1-96

Et voila, l’algorithme minimal est bien RC4-HMAC ^^

Synchronisation LDAP/Kerberos (Heimdal)

Petit point sur la synchronisation LDAP/Kerberos (cad du champ userPassword et des clés du KDC). J’ai décidé de faire ça avec l’overlay smbk5pwd fourni dans les contribution d’OpenLDAP. Cet overlay met à jour les clés (et eventuellement les empreintes NTLM et LM) en même que le champs userPassword lors d’une requête de changment de mot de passe (par exemple via ldappasswd). Cependant il faut faire face à plusieurs contraintes :
- Cet overlay ne marche que avec un KDC Heimdal. Un autre overlay qui interagit avec kadmind nommé smbkrb5pwd est disponible. Il est donc utilisable avec MIT et Heimdal mais n’est pas encore prêt pour la production.
- Les attributs Kerberos pour LDAP doivent être accolés à la feuille. On ne peut pas avoir une OU kerberos ou on stock les principals dedans. En effet, l’overlay regarde pour quelle feuille on demande le changement de mot de passe, ensuite il regarde si c’est un objet de type krb5KDCEntry et alors il met à jour les clés.
- Le KDC maître doit être sur le même machine que slapd car la communication se fait via un socket local (ldapi).

1. Installation de l’over-laid

On récupere les sources de slapd (synchronisées avec la version courante su paquet que l’on a installé) :
cd /usr/local/src
aptitude build-dep slapd

On se place dans les sources :
cd openldap-2.4.17
./configure
make depends
make

On installe évidement pas slapd, on va juste compiler l’overlay :
cd contrib/slapd-modules/smbk5pwd
aptitude install heimdal-dev
make

Note : il faut faire quelques petits ‘ln’ pour que ça passe :
ln -s /usr/lib/libldap_r-2.4.so.2 /usr/lib/libldap_r.so
ln -s /usr/lib/liblber-2.4.so.2 /usr/lib/liblber.so
ln -s /usr/lib/libcrypto.so.0.9.8 /usr/lib/libcrypto.so

Enfin, on déplace le contenu de .libs vers /usr/lib/ldap (endroit contenant les modules / overlays de slapd, du moins sous Debian).
mv .libs/* /usr/lib/ldap/

2. Configuration de slapd

Hypothèses :
- Mes utilisateurs sont stockés dans la branche ou=people,dc=garnett,dc=fr.
- Ils sont identifiés par un attribut ‘uid’ contenant leur matricule.

Pour activer l’overlay :

include /etc/ldap/schema/hdb.schema
include /etc/ldap/schema/samba.schema
moduleload smbk5pwd
...
database hdb
...
overlay smbk5pwd

Et ensuite quelques ACLs l’idée est de permettre l’accés en écriture au clés (même pas aux attributs Kerberos car ils sont ajoutés par une autre moulinette) :

access to dn.base="ou=people,dc=garnett,dc=fr"
     by dn="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" write
     by * read
 
access to dn.subtree="ou=people,dc=garnett,dc=fr"
     attrs=krb5KeyVersionNumber,krb5Key
     by dn="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" write
     by * none 
 
access to dn.subtree="ou=people,dc=garnett,dc=fr"
     attrs=entry,objectclass,krb5PrincipalName,krb5MaxLife,\
     krb5MaxRenew,uid,krb5KDCFlags
     by dn="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
     by * none

Le DN de connexion bizarre est celui utilisé par la SASL lors de l’accès via ldapi. Avec ce jeu d’ACL (a ajuster selon vos besoins) on peut changer les clés des utilisateurs sans soucis et faire un dump du KDC. Je dois tester comment ça se comprote avec la réplication KDC maitre / esclave(s). pour voir si les ACLs merdouillent, slapd avec le loglevel à 128.

3. Configuration du KDC

On l’installe :
aptitude install heimdal-kdc

Il faut juste indiquer au KDC Heimdal d’utiliser un backend LDAP. dans le /etc/heimdal-kdc/kdc.conf :

[logging]
kdc = FILE:/var/log/heimdal-kdc.log
[kdc]
database = {
  dbname = ldap:ou=people,dc=garnett,dc=fr
  realm = UNIV-ORLEANS.FR
  mkey_file = /var/lib/heimdal-kdc/m-key
  acl_file = /etc/heimdal-kdc/kadmind.acl
}
[kadmin]
[password-quality]

Puis dans le /etc/krb5.conf :

database = {
    dbname = ldap:ou=people,dc=garnett,dc=fr
}

Un restart du KDC Heimdal. Et on peu créer les principals par défaut :
kadmin -l
> init GARNETT.FR

Les principals par défaut ont du être crées dans la branche people (attention aux ACLs slapd, dans notre configuration on ne pourra pas le faire si directement).

4. Ajout des informations Kerberos à une feuille

Je suis dans le cas ou les gens existent déjà et donc on ne peut pas casser le LDAP. Un simple ldapmodify permet de s’en sortir. Créons le fichier kerb.ldif :

dn: uid=matricule,ou=people,dc=garnett,dc=fr
changetype: modify
add: objectClass
objectClass: krb5Principal
-
add: objectClass
objectClass: krb5KDCEntry
-
add: krb5PrincipalName
krb5PrincipalName: p10613@UNIV-ORLEANS.FR
-
add: krb5KeyVersionNumber
krb5KeyVersionNumber: 1
-
add: krb5MaxLife
krb5MaxLife: 86400
-
add: krb5MaxRenew
krb5MaxRenew: 604800
-
add: krb5KDCFlags
krb5KDCFlags: 126
-

On fait un ldapmodify et un changment de mot de passe derrière et les attributs krb5Key seront ajoutés à la feuille. Fin de l’histoire. Derrière on peut faire un kinit pour topper son ticket.

Le rate de DRBD

Un petit post pour mémoire a propos du calcul du taux de transfert de DRBD (paramètre “rate”). Le premier point est de determiner le goulot d’étranglement (et non pas le Gourlot d’étranglement, le Gourlot à des moeurs assez étranges d’après des sources bien informées). Bref un test simple :
time dd if=/dev/zero of=/root/testfile bs=1024 count=2048000

2048000+0 enregistrements lus
2048000+0 enregistrements écrits
2097152000 octets (2,1 GB) copiés, 6,35973 s, 330 MB/s
 
real	0m6.372s
user	0m0.252s
sys	0m6.016s

Ensuite on test le réseau (avec un scp par exemple) en transferant un fichier sur le réseau (en utilisant les liens dediés à DRBD). On tombe a 73 Mb/s. Le goulot d’étranglement est donc le réseau et j’utilise la formule indiquée dans documentation de DRBD en prenant 1/3 du goulot soir 24M pour le “rate”.

Point de RDV SSH

Voila bien longtemps qu’il n y avait pas eu de nouveau post sur ce blog. Disons que ma vie personnelle a pas mal changée et ça a influé sur mes priorités. Enfin je tente de revenir au top avec un billet sur comment mettre en place un point de RDV SSH. Un point de RDV SSH implique trois protagonistes :
- Un service réseau ;
- Une passerelle SSH ;
- Un client.
Le principe est que le client doit pouvoir accéder à un service du réseau interne sur une machine type passerelle SSH.

Schéma :

1) On exporte la socket du service MySQL vers la passerelle SSH. L’administrateur réseau fait ça en tapant la commande suivante sur le serveur MySQL (le -R crée un tunnel inversé) :

ssh -N -f -R 4406:127.0.0.1:3306 admin@gw_ssh

Le service est joignable sur le loopback de la passerelle SSH.

2) Le client crée ensuite un tunnel SSH vers la socket fraichement crée sur le loopback de la passerelle :

ssh -N -f -L 5506:127.0.0.1:4406 client@gw_ssh

Et hop, le client peut joindre le service MySQL sur lo loopback port 5506 de son laptop.

Avantages :
- Le client n’a pas de compte système sur le serveur MySQL ;
- On n’est pas obligé d’autoriser des connexion de la passerelle vers le serveur de BD (uniquement l’inverse) ;
- A aucun moment le service MySQL est exposé sur un interface “réelle” (uniquement sur des loopback) ;
- Tout le trafic est chiffré (il passe dans des tunnels SSH).

Inconvénient :
- Le client doit savoir utiliser SSH.