Romain Tiennot

Technicien Superieur en Informatique

Aller au contenu | Aller au menu | Aller à la recherche

Créer un menu PXE pour l'installation Debian, Centos, Ubuntu et Memtest

Linux Je vais vous expliquer comment créer un serveur DHCP et PXE afin d'installer à partir du réseau différente distribution comme dans mon exemple Debian, Centos et Ubuntu. Il est possible d'intégrer des outils de diagnostic comme Memtest ou encore SystemRescueCd.

Pour mettre en place le serveur PXE, nous avons besoins :

  • un DHCP
  • un serveur TFTP

Pour ce faire, nous avons besoin d'installer les paquets suivant :

apt-get update
apt-get upgrade
apt-get install dhcp3-server tftpd-hpa

Il est préférable de mettre une IP statique à la carte réseau du serveur :

vi /etc/network/interfaces
auto eth0
iface eth0 inet static
        address 172.16.0.152
        netmask 255.255.0.0
        network 172.16.0.1
        broadcast 172.16.255.255
        gateway 172.16.0.254
        dns-nameservers 172.16.0.254

Et de redémarrer le service réseau :

invoke-rc.d networking restart

Ensuite, il faut configurer le serveur DHCP pour qu'il puisse distribuer une configuration réseau notamment des informations pour le PXE :

vi /etc/dhcp/dhcpd.conf
ddns-update-style none;
option domain-name "local.info";
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
 
 
subnet 172.16.0.0 netmask 255.255.255.0 {
        option broadcast-address 172.16.255.255;
        option routers 172.16.0.1;
        range 172.16.0.20 172.16.0.30;
        filename "pxelinux.0";
        next-server 172.16.0.152;

Il faut ensuite créer l'arborescence :

mkdir -pv /srv/tftpboot/pxelinux.cfg /srv/tftpboot/image/debian/squeeze/i386 /srv/tftpboot/image/centos/5.7/ /srv/tftpboot/image/memtest/4.2/ /srv/tftpboot/image/ubuntu/11.10/
wget http://ftp.fr.debian.org/debian/dists/squeeze/main/installer-i386/current/images/netboot/debian-installer/i386/boot-screens/vesamenu.c32 && mv vesamenu.c32 /srv/tftpboot/
wget http://ftp.fr.debian.org/debian/dists/squeeze/main/installer-i386/current/images/netboot/debian-installer/i386/pxelinux.0 && mv pxelinux.0 /srv/tftpboot/

Puis télécharger les images des distributions qui serviront à l'installation :

DEBIAN
 
wget http://ftp.fr.debian.org/debian/dists/squeeze/main/installer-i386/current/images/netboot/debian-installer/i386/linux && mv linux /srv/tftpboot/image/debian/squeeze/i386/
wget http://ftp.fr.debian.org/debian/dists/squeeze/main/installer-i386/current/images/netboot/debian-installer/i386/initrd.gz && mv initrd.gz /srv/tftpboot/image/debian/squeeze/i386/
UBUNTU
 
wget http://fr.archive.ubuntu.com/ubuntu/dists/oneiric/main/installer-i386/current/images/netboot/ubuntu-installer/i386/linux && mv linux /srv/tftpboot/image/ubuntu/11.10/
wget http://fr.archive.ubuntu.com/ubuntu/dists/oneiric/main/installer-i386/current/images/netboot/ubuntu-installer/i386/initrd.gz && mv initrd.gz /srv/tftpboot/image/ubuntu/11.10/
CENTOS
 
wget http://mirror.centos.org/centos-5/5.7/os/x86_64/images/pxeboot/vmlinuz && mv vmlinuz /srv/tftpboot/image/centos/5.7/
wget http://mirror.centos.org/centos-5/5.7/os/x86_64/images/pxeboot/initrd.img && mv initrd.img /srv/tftpboot/image/centos/5.7/
MEMTEST
 
wget http://www.memtest.org/download/4.20/memtest86+-4.20.bin && mv memtest86+-4.20.bin /srv/tftpboot/image/memtest/4.2/memtest86+

Ensuite, nous allons créer le fichier "default" qui va nous permettre à créer le menu PXE :

vi /srv/tftpboot/pxelinux.cfg/default
DEFAULT vesamenu.c32
menu background pxelinux.cfg/fond.png
menu title Menu d'installation PXE
 
prompt 0
timeout 100
 
noescape 1
allowoptions 0
 
LABEL Demarrage Disque Dur
        localboot 0
 
MENU BEGIN Debian
MENU TITLE Debian
LABEL Debian Squeeze 6.03 Installation
       kernel image/debian/squeeze/i386/linux
       append vga=normal initrd=image/debian/squeeze/i386/initrd.gz  --
 
LABEL Debian Rescue
       kernel image/debian/squeeze/i386/linux
       append vga=normal initrd=image/debian/squeeze/i386/initrd.gz  rescue/enable=true --
MENU END
 
MENU BEGIN CentOS
MENU TITLE CentOS
LABEL CentOS 5.7 KS eth0
        KERNEL image/centos/5.7/vmlinuz
        APPEND ks=http://172.16.0.152/centos5.ks initrd=image/centos/5.7/initrd.img
MENU END
 
MENU BEGIN Ubuntu
MENU TITLE Ubuntu
LABEL Ubuntu 11.10
        KERNEL image/ubuntu/11.10/linux
        append vga=normal initrd=image/ubuntu/11.10/initrd.gz --
MENU END
 
LABEL Diagnostique Memoire (Memtest)
        kernel image/memtest/4.2/memtest86+

Il est possible de mettre une image en fond d'écran :

wget http://romain.tiennot.fr/public/pxelinux/fond.png && mv fond.png /srv/tftpboot/pxelinux.cfg/

Après avoir relancé les services, Il vous reste à démarrer via le réseau et voir le résultat.

invoke-rc.d isc-dhcp-server start
invoke-rc.d tftpd-hpa start

A bientôt,
Romain

Installer Gate One - Client SSH en HTML5

Debian Domain Hier, sur le site de Korben, je suis tombé sur un article montrant les exploits d'un fou furieux nommé Dan McDougall qui a développé un client SSH en HTML5. Enfin, quand on y regarde un peu plus près, l'utilisation du client se fait via un navigateur qui affiche du HTML 5 mais ce qui permet de faire tourner ce petit bijou est en Python. Je me suis donc attelé sur l'installation de ce fameux Gate One mais je n'ai trouvé nulle part de bonne explication pour le faire fonctionner. En revanche, c’est une version BETA et j’ai constaté un problème avec l’interprétation du clavier Français. J’attends avec impatience la version finale !

Dans mon cas, je l’Install sur la dernière version de Debian (6.03) et je suis en root.

Dans un premier temps, on met à jours la distribution :

apt-get update
apt-get upgrade

Ensuite, on installe les paquets :

apt-get install python-tornado python-pip dtach python-pyopenssl python-kerberos python-dev git build-essential
apt-get purge python-tornado
pip install tornado pyopenssl

Ensuite, on télécharge les sources :

git clone https://github.com/liftoff/GateOne.git

Les sources installé, on va procéder à l'installation :

cd GateOne/
python setup.py install

L'installation prend deux secondes et nous allons exécuter le service :

cd /opt/gateone/
./gateone.py

Il nous reste à ouvrir notre navigateur favori puis accéder en HTTPS au client SSH :

https://IP_DU_SERVEUR/

Vous pouvez d'autre information pour affiner les parametrage sir le site officiel.

Voici la vidéo :

A bientôt,

Romain

Configuration Raid1 Logiciel Debian

Nous allons voir comment configurer un Raid1 Logiciel pour une Debian 5. Cette manipulation est exactement là même que pour une Debian 6.
Cette manipulation est effectué lors du partitionnement avant l'installation de la distribution. Il existe d'autre méthode après installation. Ca sera le sujet d'un autre de mes articles.

Avec cette demontration, vous pouvez l'utiliser pour configurer de la distribution en RAID0, RAID5, RAID6 ou encore RAID10.

Dans un premier temps, il faut deux disque dur de même capacité pour le RAID0 et RAID1puis 4 pour le RAID5,RAID6 et RAID10.

1. Lors du partitionement, les deux disques dur devront etre en "Espace libre" : debian_raid1_1.jpg

2. Ensuite, dans le champ "Utiliser comme", il faut choisir "volume physique pour RAID" : debian_raid1_2.jpg

3. Les deux disques dur configuré, le champ "Configurer le RAID logiciel" doit s'afficher vous devez le sélectionner : debian_raid1_3.jpg

4. Selectionner le type de Raid que vous voulez installer : debian_raid1_4.jpg

5. Choisisez les peripheriques pour construire le Raid : debian_raid1_5.jpg

6. Le récapitulatif du partitionage affiche "Peripherique RAIDX n°X". Il ne reste plus qu'a indiquer pour le "Peripherique RAID" le type de fichier et le point de montage : debian_raid1_7.jpg

7. Il ne reste qu'a choisir de terminer le partitionnement : debian_raid1_8.jpg

Hélas, ce n'est pas terminé. Le Raid fonctionne mais le GRUB n'est installé que sur le "hd0". Il faut donc aussi l'installer sur le "hd1" en cas de crache du premier disque. Pour cela, il faut rentrer dans le mode de configuration du grub avec la commande :

grub


Ensuite selection la premiere partition du premier disque :

root (hd0,0)


Puis lancer l'installation du grub sur celle-ci :

setup (hd0)


Repeter cette manipulation pour le deuxieme disque :

root (hd1,0)
setup (hd1)


Félicitation, le Raid est configuré sur votre Debian.

Partage Samba avec gestion groupe Active Directory

samba.jpg Dans cette article, nous allons voir comment créer des partages Samba avec une gestion des droits en fonction du groupe Active Directory.

Tous d'abord, il faut que la distribution Linux soit intégré dans le domaine Windows. Vous pouvez retrouver la procedure dans l'un de mes articles..

Une fois l'integration effectué et que la commande "wbinfo -u" et "wbinfo -g" vous retourne un résultat, nous pouvons editer notre fichier Samba nommé "smb.conf" dans "/etc/samba/smb.conf".

Prenez l'editeur de votre choix. Dans mon cas, c'est "vi" :

vi /etc/samba/smb.conf


A la fin du fichier, vous pouvez voir "Share Definitions". C'est à la suite que l'on doit renseigner les informations de partage.

Dans mon cas, je créé six partage :

  • Commun
  • Technique
  • Production1
  • Production2
  • Administration
  • Direction



Chaque partage correspond à un groupe aillant exactement le même nom. Dans le fichier Samba, nous allons donné les authorisations en fonctione des groupes. On peux egalement donner les droits par utilisateur, mais c'est un peu plus long... Voici la liste des droits à donné par partage : partage_samba.jpg

Voici la configuration du fichier Samba qui correspond à l'image du dessus :

#======================= Share Definitions =======================
# Nom du patage
[Commun]
   # Commentaire du partage 
   comment = Partage Document pour Tous
   # Chemin du partage
   path = /data/commun
   # Lecture seul : Non
   read only = no
   # Navigable = Oui
   browseable = yes
   # Invité : Non
   guest ok = no
   # lors de la création d'un fichier, tous le monde peut le modifier
   create mask = 0777
   #lors de la création d'un répertoire, tous le monde peut le modifier
   directory mask = 0777
 
# Nom du patage caché avec le $
[Technique$]
   # Commentaire du partage
   comment = Partage reserve technique
   # Chemin du partage
   path = /data/technique
   # Lecture seul : Non
   read only = no
   # Navigable = Oui
   browseable = yes
   # Invité : Non
   guest ok = no
   # lors de la création d'un fichier, tous le monde peut le modifier   
   create mask = 0777
   #lors de la création d'un répertoire, tous le monde peut le modifier
   directory mask = 0777
   # Les utilisateurs authorisés a acceder au partage. le"@" siginifi un groupe.
   valid users = @DRINKEVOL\technique,@DRINKEVOL\direction
   # Droit d'ecriture : Non
   writeable = no
   # Les utilisateurs authorisés a ecrire au partage. le "@" signifi un groupe
   write list = @DRINKEVOL\technique
 
[Administration]
   comment = Partage reserve administration
   path = /data/administration
   read only = no
   browseable = yes
   guest ok = no
   create mask = 0777
   directory mask = 0777
   valid users = @DRINKEVOL\administration,@DRINKEVOL\technique,@DRINKEVOL\direction
   writeable = no
   write list = @DRINKEVOL\administration,@DRINKEVOL\technique
 
[Direction]
   comment = Partage reserve direction
   path = /data/direction
   read only = no
   browseable = yes
   guest ok = no
   create mask = 0777
   directory mask = 0777
   valid users = @DRINKEVOL\direction,@DRINKEVOL\technique
 
[Production1]
   comment = Partage reserve production1
   path = /data/production1
   read only = no
   browseable = yes
   guest ok = no
   create mask = 0777
   directory mask = 0777
   valid users = @DRINKEVOL\production1,@DRINKEVOL\technique,@DRINKEVOL\direction
   writeable = no
   write list = @DRINKEVOL\production1,@DRINKEVOL\technique
 
[Production2]
   comment = Partage reserve production2
   path = /data/production2
   read only = no
   browseable = yes
   guest ok = no
   create mask = 0777
   directory mask = 0777
   valid users = @DRINKEVOL\production2,@DRINKEVOL\technique,@DRINKEVOL\direction
   writeable = no
   write list = @DRINKEVOL\production2,@DRINKEVOL\technique

Voici ma premiere video avec commentaire audio montrant les partages Samba :

Authentification LDAP pour PHP (Linux - Debian)

php_ldap.jpg Cette article va montrer comment activer et utiliser l'authentification LDAP pour un intranet par exemple.

Dans un premier temps, nous avons besoin :

  • Un domaine Windows avec une Active Directory
  • D'une machine Linux intégré au domaine
  • Un serveur LAMP (Linux Apache MySQL PHP) ou au minimum Apache et PHP.


Une fois votre linux intégré dans le domaine (Voir Article précedent) et votre serveur LAMP installé, vous devez télécharger et activer le module LDAP.

Télécharger et installer le module LDAP :

apt-get install php5-ldap

Activer le module :

a2enmod ldap

Puis relancer le serveur :

/etc/init.d/apache2 restart



Félicitation, vous pouvez utiliser l'authentification LDAP via PHP. Il ne vous reste plus qu'a coder quelque ligne en PHP. Vu que je suis gentil, voici un petit exemple d'authentification.

Dans mon cas, nous avons 5 services :

  • Administration
  • Direction
  • Production 1
  • Production 2
  • Technique


Chaque service à une OU (Unité d'organisation) à son nom et deux sous OU nommé "Ordinateur" et "Utilisateur". Seul les utilisateurs présent dans les OU's "Utilisateur" pourront se connecter via le LDAP et les autres se veront rejeté. Les utilisateurs présent dans l'OU "Technique","Utilisateur" auront des droits supplémentaire.

Pour cela, nous devons avoir deux Pages :

  • Une page d'authentification (index.php)
  • Une page qui se connecte au LDAP avec les identifiants (autorise.php)


La page "autorise.php" va récupérer les identifiants saisie (par exemple : "romain.tiennot"). Pour la connexion LDAP, on doit utiliser le "Nom" et non "identifiant de connexion" donc j'ai fait un "str_replace" pour remplacer le "." par " ". Avec les identifiants, il va essayer de vérifier si l'utilisateur est bien présent dans les OU et si son mot de passe est correcte.

Voici la page index.php :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
	<head>
		<title>Intranet</title>
		<meta http-equiv="Content-Type" content="text/html; charset=windows-1252" />
		<meta http-equiv="content-language" content="fr" />
	</head>
	<body>
		<FORM METHOD="POST" ACTION="autorise.php">
			<TABLE WIDTH="100%">
				<TR ALIGN="CENTER">
					<TD>Login</TD>
					<TD><input type="texte" value="" name="login"/></TD>
				</TR>
				<TR ALIGN="CENTER">
					<TD>Mot de passe</TD>
					<TD><input type="password" value="" name="password"/></TD>
				</TR>
				<TR ALIGN="CENTER">
					<TD></TD>
					<TD><BR/><input type="submit" name="connection" value="Connection"</TD>
				</TR>
			</TABLE>
		</FORM>
	</body>
</html>

Voici la page autorise.php :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
	<title>Intranet</title>
	<meta http-equiv="Content-Type" content="text/html; charset=windows-1252" />
	<meta http-equiv="content-language" content="fr" />
</head>
<body>
	<?php
		// on récupère le login et le pass
		$user=$_POST['login'];
		$passwd=$_POST['password'];
		// Je remplace le "." (point) par " " (espace) car pour la verification LDAP il n'utilise pas les identifiants de connexion mais le "nom de connexion"
		$user = str_replace('.',' ',$user);
		// le nom de domaine facon : DC=DOMAIN,DC=LAN
		$ldap_base = 'dc=drinkevol,dc=lan';
		// le nom de domaine facon : DOMAIN.LAN
		$ldap_server = 'drinkevol.lan';
		// Le chemin de l'OU des utilsateurs de la direction avec la variable "$ldap_base" créé plus haut
		$ldap_direction = ",ou=Utilisateurs,ou=Service Direction,".$ldap_base;
		// Le chemin de l'OU des utilsateurs de la production1 avec la variable "$ldap_base" créé plus haut
		$ldap_production1 = ",ou=Utilisateurs,ou=Production 1,ou=Service Production,".$ldap_base;
		// Le chemin de l'OU des utilsateurs de la production2 avec la variable "$ldap_base" créé plus haut
		$ldap_production2 = ",ou=Utilisateurs,ou=Production 2,ou=Service Production,".$ldap_base;
		// Le chemin de l'OU des utilsateurs de l'informatique avec la variable "$ldap_base" créé plus haut
		$ldap_informatique = ",ou=Utilisateurs,ou=Service Informatique,".$ldap_base;
		// Le chemin de l'OU des utilsateurs de l'administration avec la variable "$ldap_base" créé plus haut
		$ldap_administratif = ",ou=Utilisateurs,ou=Service Administratif,".$ldap_base;
		// le port pour la connexion LDAP (par defaut 389)
		$ldap_port = '389';
 
		// Création de la variable "$connexion_serveur" ou l'on indique les informations pour questionner la base
		$connexion_serveur = @ldap_connect($ldap_server, $ldap_port);
		// Si la connexion au LDAP fonctionne avec les identifiants saisie et que l'utilisateur se trouve dans l'OU "Utilisateur","Technique" alors on l'authorise avec les droits administrateurs
		if ($connexion_user=@ldap_bind($connexion_serveur, 'cn='.$user.$ldap_informatique, $passwd))
		{
			?>
				<div class='news'>
					<H1>Bienvenue, <? echo ucwords($user)."."; ?><BR> Vous êtes administrateur</H1>
				</div>
			<?php
			$_SESSION['admin']=1;
		}
 
		// Sinon SI la connexion LDAP fonctionne avec les identifiants saisie et que l'utilisateur se trouve dans l'OU "Utilisateur", "Direction" ou "Utilisateur","Production2" etc... Alors on l'autorise avec les droits "Utilisateur"
		elseif (((($connexion_user=@ldap_bind($connexion_serveur, 'cn='.$user.$ldap_production1, $passwd)) or ($connexion_user=@ldap_bind($connexion_serveur, 'cn='.$user.$ldap_production2, $passwd))) or ($connexion_user=@ldap_bind($connexion_serveur, 'cn='.$user.$ldap_direction, $passwd))) or ($connexion_user=@ldap_bind($connexion_serveur, 'cn='.$user.$ldap_administratif, $passwd)))
		{
			?>
				<div class='news'>
					<H1>Bienvenue, <? echo ucwords($user)."."; ?>
				</div>
			<?php
			$_SESSION['admin']=2;
		}
 
		// Sinon, les identifiants sont peut etre mal saisie ou que l'utilisateur n'existe pas ou qu'il n'est pas dans la bonne OU. L'utilisateur se voit rejeter la connexion.
		else 			
		{	
			?>
				<div class='news'>
					<H1><? echo ucwords($user); ?>, vous n'etes pas authorisé</H1>
					<BR/><BR/><form><input type='button' value='Retour' onclick="self.location.href='index.php'"></form>
				</div>
			<?php
			$_SESSION['admin']=0;
		}
	?>		
</body>
</html>

Voici une petite démonstration :

A bientôt

- page 4 de 6 -