Thứ Ba, 23 tháng 3, 2010

Cluster de Basculement via "Heartbeat" sur CentOS5.4

Objectif :
- Mettre un serveur CentOS 5.4 en Haute Disponibilité via le logiciel "Heartbeat".
Matériels requis :
-2 Serveur identiques en configuration.
-1 Switch

Cluster de Basculement via "Heartbeat" sur CentOS5.4


RAPPEL : Toutes les manipulations, sont a effectuer sur les 2 machines
Il est préférable de faire ceci sur une machine identique et de configuration exactement pareil.
Il est conseillé d'installer le serveur primaire et de faire une image de celui-ci et de la restauré sur le second pc et de ne modifier que l'IP.

Installation :

Lors de l'installation de CentOS indiquer le nom des machines tels que :
-serveur1 pour la machine primaire d'ip : 192.168.10.1
-serveur2 pour la machine secondaire d'ip : 192.168.10.2

Pour effectuer un changement d'adresse IP sur une CentOS il y a 2 solution en mode console.
la première relativement simple, il faut taper "setup" dans la console et une fenêtre comme celle-ci vas s'ouvrir :

La seconde méthode plus classique il faut modifier le fichier "/etc/resolv.conf" pour le DNS :

    "HOSTNAME=192.168.1.254"

Pour les IPs modifier: "/etc/sysconfig/network-script/ifcfg-eth0"

    "DEVICE=eth0 
    BOOTPROTO=static 
    HWADDR=00:11:85:BC:7D:5F (YOUR NIC MAC ADDRESS) 
    IPADDR=111.111.111.111 
    NETMASK=255.255.255.0 
    ONBOOT=yes 
    TYPE=Ethernet
    GATEWAY=111.111.111.111"

Cela permet de modifier l'adresse MAC, de le mettre en DHCP, de changer l'IP, le masque, de la démarrer au démarrage, le type de connexion et la passerelle.

Il faut affecter donc l'IP : 192.168.10.1/24 au PC serveur1 et 192.168.10.2/24 au serveur2.

RAPPEL : les modifications d'effectue via la commande "nano" ou "vi"

Ne pas créer de compte utilisateur et désactiver le pare-feu et SE linux lors de l'installation.

Toutes les actions sont a effectuer sur les 2 machines.
On peut directement modifier le fichier de configuration du serveur1 vers le serveur2 via la commande :

    "scp /etc/httpd/conf/httpd.conf root@node02:/etc/httpd/conf/"

Dans cet exemple le fichier "httpd.conf" du server1 sera envoyé au "serveur2" en se connectant en root sur la machine.
L'installation de "heartbeat" doit se faire directement sur la machine pour les 2 serveurs.
Commencer donc par installer Heartbeat via la commande :
    "yum install heartbeat"

Suite à un Bug en installant le paquet et les dépendances effectuer la commande 2 fois.

A présent on va déplacer les 3 fichiers de configuration de "heartbeat" dans le fichier "/etc/ha.d/"
Les 3 fichiers se trouve dans la Doc fournis pas "heartbeat" on va donc les copier dans le dossier de "heartbeat" via les commandes :

   "cp /usr/share/doc/heartbeat-2.1.2/authkeys /etc/ha.d/
    cp /usr/share/doc/heartbeat-2.1.2/ha.cf /etc/ha.d/
    cp /usr/share/doc/heartbeat-2.1.2/haresources /etc/ha.d/"
 Ces commande vont donc copier les fichier de configuration dans le dossier de "heartbeat"

On peut commencer à configurer c'est fichier, pour une meilleure visibilité on peut supprimer tous le contenu de ces fichiers.

Je commence avec le fichier "ha.cf"
Je me place dans le dossier "/etc/ha.d/"

    "cd /etc/ha.d/"

Puis :

    "nano /etc/ha.cf"

Ce fichier contient la configuration de "heartbeat"

Voici ma configuration détaillée :

    "bcast  eth0      #Ceci est l'interface réseaux utilisé pour faire le "lien de vie". Elle sera utilisée pour envoyer du serveur1 au 2 un signal pour indiquer que le serveur fonctionne.
                                #On peut donc dédier une carte spécifique mais dans notre exemple se sera la carte eth0

    baud  19200      #Cette option n'est utilise que si vous souhaité effectuer le "lien de vie" via un port série, cette option définit la vitesse en bauds du port série.
    
    serial  /dev/ttyS0    #Ceci est le chemin du port du série utilisé.
                                        #Je ne rentre pas dans les détails car c'est un moyen peu utilisé et que nous n'utiliserons pas.
    
    debugfile /var/log/ha-debug    #C'est 3 options permette de spécifier 2 fichier log en cas d'erreur afin de trouver la source du problème et d'avoir un détails précis
    logfile  /var/logha-log                
#en cas de basculement de serveur avec la date et l'heure précise.
    logfacility local0                            #


    keepalive  2                                    #Cet option permet de définir le temps entre 2 envoie de "signe de vie" en seconde par default, mais on peut faire en Ms par ex : "1500ms"

    deadtime   10                                 
#Ceci définit le temps avant de déclarée le serveur1 comme mort, dans notre exemple si aucun signal de vie est envoyer pendant 10s,
                                                              #celle-ci est déclarée comme morte.

    warntime   6                                    
#C'est le délai avant d'inscrire un avertissement dans les logs.   
   initdead   20                                      #C'est le temps que mettra la machine "serveur2" a basculer après que la machine "serveur1" soit déclaré "morte"
                                                               #Soit un Total de 30s sera écoulé si le serveur1 devient HS ou plante etc ...
    


    udport  694                                    #Défini le port UDP qui sera utilisé pour la prise de pouls "694 port par Default recommandé".

    node  serv1                                    
#Définit le nom des 2 machines, pour le vérifier sur vaux machine il faut taper la commande "uname -n".
    node  serv2                                    #

    nice_failback on                             
#Si "ON" cette option sert que après la mort du serveur01 celui-ci renvoie un signal de vie, le serveur2 redonne la main a celui-ci en "Off" le serveur2
                                                              #garde la main malgré le signal de vie du serveur2.

Voilà les détails complets du fichier de configuration à adapter selon vos besoins.

A présent on modifie le fichier "
 haresources"

Ce fichier permet de spécifier quel service doit être démarré.
Notre serveur test, est donc un serveur "Apache2" et "Samba"
Mon fichier va donc avoir la ligne :

    node01 192.168.10.20 smb httpd

Alors voyons plus en détail cette ligne, "node01" spécifie la machine maitre, "192.168.10.20" est l'ip virtuelle utilisé par les clients pour se connecté au Samba et au Apache et "smb et Apache2" sont tous simplement les services à démarrer.
"Smb" pour samba et "httpd" pour Apache2

Le dernier fichier est "authkeys", il permet de définir le protocole de transfert sécurisé ou non sécurisé.

Ce fichier se compose du mot clef "auth" suivi d'une valeur d'index qui va déterminer quelle ligne doit être prise en compte. Dans le cas d'une liaison série ou en câble croisé il n'est pas la peine de s'assurer de l'identité des nodes, mais sinon il est important d'utiliser une méthode d'authentification robuste avec l'utilisation du MD5 (Message Digest version 5) ou SHA (Secure Hash Algorithme).

Nous allons choisir SHA1 encore plus sécurisé voilà donc le fichier :

auth 2
2 sha1 test-ha

Le mot de passe pour de cryptage est "test-ha"

Voilà "
 heatbeat" est configurer, mais ce n'est pas finit il faut à présent s'occuper de Samba et Apache.
Je rappelle que les fichiers de configuration de Apache et Samba doivent être les mêmes.

Je définis le port d'écoute d’Apache et Samba sur 192.168.10.20.
Pour cela se rendre dans le fichier "/etc/https/conf/httpd.confet renseigner le port d'écoute via l'option :

    "Listen 192.168.10.20:80"

Attention de ne pas démarrer le service "httpd" ou "smb" c'est "hearbeat" qui le fera.

Faire de même pour samba, modifier le fichier "/etc/samba/smb.conf" et renseigner le port d'écoute comme ceci :

    "interfaces = eth0 192.168.10.20"

A présent vérifié le statu de samba et apache sur les 2 serveurs via les commandes :

    "/etc/init.d/smb status" et "/etc/init.d/httpd status"

Ils doivent être stoppé, s'ils sont démarres faite "stop" à la place de "status

A présent démarré "heartbeat" sur les 2 serveurs via la commande :

    "/etc/init.d/heartbeat start"

Vérifier que les services "smb" et "httpd" sont bien en exécution sur le serveur1 et arrêter sur le serveur2
Essayer d'effectuer un basculement en déconnectant le câble réseau du serveur1
Patienté 30s et actualisé samba ou apache et si vous avez bien travaillé il fonctionnera.
En cas de soucis allez voir les Logs.

Et voilà, si j'ai oublié des trucs merci de me le dire !

Blog: https://toannhan.com

Thứ Năm, 11 tháng 2, 2010

Controleur de domaine Samba avec LDAP sur CentOS 5.4

Mon nom de domaine sera "hendaye64", l'admin sera "administrateur"
Ip du serveur: 192.168.20.254 , Ip du poste Windows Xp Pro SP3 est : 192.168.20.2
Objectif : Création d'un Domaine appelé "hendaye64" avec une gestion des utilisateurs via LDAP
Création des comptes machines et utilisateurs automatiques.

Controleur de domaine Samba avec LDAP sur CentOS 5.4


Pour commencer, il faut désactiver SELinux.
Ouvrir une console et taper :
echo 0 >/selinux/enforce
 Ouvrir le fichier /etc/sysconfig/selinux
 vi /etc/sysconfig/selinux
Puis mettre :

SELINUX=disabled


A présent il faut installer les dépendances et les logiciels LDAP et Samba ainsi que des utilitaires.

rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
yum update
yum install openldap-servers nss_ldap samba httpd openssl mod_ssl mysql mysql-server php php-xml php-ldap php-mysql php-pdo php-cli php-common smbldap-tools

La version de  smbldap-tools que vous avez téléchargée est bugger donc on prend la dernière :
rpm -Uvh http://download.gna.org/smbldap-tools/packages/smbldap-tools-0.9.5-1.noarch.rpm
 A présent on configure LDAP.

On fait la sauvegarde du fichier de configuration et rend le fichier de configuration vierge.
mv -f /etc/openldap/slapd.conf /etc/openldap/slapd.conf.dist

Ouvrir le fichier :
vi /etc/openldap/slapd.conf

Et y mettre :

include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/samba.schema

allow bind_v2
pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args

database bdb
suffix "dc=hendaye"
rootdn "cn=administrateur,dc=hendaye"
rootpw {SSHA}TTzshhAbmZPPb8F2s7sgf9B+IrZt+nUD
password-hash {SSHA}
directory /var/lib/ldap
index cn,sn,uid,displayName pres,sub,eq
index uidNumber,gidNumber eq
index sambaSID eq
index sambaPrimaryGroupSID eq
index sambaDomainName eq
index objectClass pres,eq
index default sub
Les lignes en gras sont modifiables selon vos besoins.
La seule chose à changer est le mot de passe root en gras dans le code.
Il faut en créé un nouveau via la commande :
slappasswd

Ensuite remplacer le code donné.
Vous pouvez aussi changer l'admin qui pour moi est "administrateur" par ce que vous souhaité.

A présent nous allons donner à LDAP les fichiers dont il a besoin pour fonctionner correctement :
cp /usr/share/doc/samba-3.*/LDAP/samba.schema /etc/openldap/schema/
cp /etc/openldap/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap:ldap /var/lib/ldap/DB_CONFIG
chmod 600 /var/lib/ldap/DB_CONFIG

Pas besoin de grande connaissance pour comprendre les commandes.

Maintenant il faut ouvrir le fichier init.ldif :
vi /etc/openldap/init.ldif

Et y mettre le code suivant :
dn: dc=hendaye
objectclass: dcObject
objectclass: organization
o: Domain Server
dc: hendaye

dn: cn=administrateur,dc=hendaye
objectclass: organizationalRole
cn: administrateur
Les lignes en gras sont modifiables selon vos besoins.
Enregistrer et taper les commandes :
slapadd -l /etc/openldap/init.ldif
chown -R ldap:ldap /var/lib/ldap
chmod 600 /var/lib/ldap/*

Il ne doit pas y avoir d'erreur à la première commande, merci de respecter les espaces.

On peut démarrer LDAP et le mettre au démarrage :
service ldap start
chkconfig ldap on

Aucune erreur ne doit apparaitre au lancement.

Je conseil l'installation de PHPLdapAdmin qui permet de gérer la base depuis le navigateur.
Pour cela ouvrir le fichier /etc/php.ini et chercher la ligne memory_limit = 16 et la mettre à 32.
Puis :
mkdir /var/www/html/samba && cd /var/www/html/samba
wget http://softlayer.dl.sourceforge.net/sourceforge/phpldapadmin/phpldapadmin-1.1.0.7.tar.gz
tar zxf phpldapadmin-1.1.0.7.tar.gz
ln -s phpldapadmin-1.1.0.7 pla
cp pla/config/config.php.example pla/config/config.php


Ouvrir le fichier ./pla/config/config.php de dé-commenter la lige :
$config->custom->jpeg['tmpdir'] = "/tmp";
On lance le service :
service httpd start
chkconfig httpd on

Si votre Pare Feux est activé, ce qui n'est pas mon cas, ouvrir les ports suivant via le fichier
/etc/sysconfig/iptables
Et y mettre :
#Allow Https://
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
#Allow samba:
-A RH-Firewall-1-INPUT -m multiport -p udp --dport 137,138 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m multiport -p tcp --dport 139,445 -j ACCEPT
Ouvrir le navigateur est entré : "https://127.0.0.1/samba/pla/", accepter le certificat et voilà l'interface.

Utilisateur : cn=administrateur,dc=hendaye
Password :   ****** (Celui indiquer dans le fichier de configuration de LDAP créer via "slappasswd"

Je n'explique pas comment elle marche c'est relativement facile.

A présent on attaque Samba, je commence par prendre le fichier de samba, d'en faire une sauvegarde et mettre le fichier de conf par défaut donné par smbldap-tools

 mv /etc/samba/smb.conf /etc/samba/smb.conf.dist
cp /usr/share/doc/smbldap-tools-0.9.5/smb.conf /etc/samba/smb.co
nf

Ouvrir le fichier, 

Les seules lignes à remplacer selon vos besoins sont :

        ldap admin dn = cn=administrateur,dc=hendaye
        ldap suffix = dc=hendaye
        workgroup = hendaye

Rajouter ces lignes :

        ldap ssl = off         
       nt acl support = yes       
      socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 SO_KEEPALIVE

Il faut également créer certain dossier, les chemins son modifiables si vous le souhaitaient.
mkdir -p /home/netlogon
mkdir -p /home/profile
chmod a+w /home/netlogon
chmod a+w /home/profile
Voici mon smb.conf : 


Attention à cause d'un Bug lors de la création d'une machine automatiquement merci d'utiliser ce script :
        add machine script = /usr/sbin/useradd -s /bin/false -d /dev/null -M  %u
        passwd program = /usr/sbin/smbldap-passwd -a -m "%u"

Copier le fichier smbldap.conf :
cp /usr/share/doc/smbldap-tools-0.9.5/smbldap.conf /etc/smbldap-tools/smbldap.conf

Il faut le remplacer par l'ancien donc faite oui s'il demande de l'écraser.
Éditer pour l'adapter voici le mien :




Idem pour le fichier "/etc/smbldap-tools/smbldap_bind.conf"
Attention les mots de passe son en clair.

Voila le mien :



On sécurise les fichiers :
chmod 644 /etc/smbldap-tools/smbldap.conf
chmod 600 /etc/smbldap-tools/smbldap_bind.conf

A présent on donne le mot de passe ldap à Samba via la commande :
smbpasswd -w VOTRE-MDP-EN-CLAIR

Pour vérifier que tous est bon, taper la commande :
net getlocalsid

Aucune erreur ne doit apparaitre.
Copier le SID donné dans le fichier :"/etc/smbldap-tools/smbldap.conf", dans le fichier expemple c'est le mien.

On test le fichier de configuration de samba :
testparm

Si tout est ok, sans erreur on peu lancer la commande :
smbldap-populate
Et rentrer le mot de passe LDAP.
Lancer Samba et le mettre au démarrage :
/etc/init.d/smb start
chkconfig smb on
Ensuite il faut configurer NSS et PAM  car un système Linux peut aller chercher dans différents endroits pour  authentifier des utilisateurs. Par défaut il s'agit du fichier /etc/passwd Cependant on peut lui en ajouter d'autres sources de données. On va donc lui indiquer notre annuaire LDAP.

Rendez-vous dans le fichier "/etc/pam.d/system-auth" est rajouter c'est ligne :
 auth  sufficient pam_ldap.so use_first_pass
 account [default=bad success=ok user_unknown=ignore] pam_ldap.so
 password sufficient pam_ldap.so use_authtok
 session optional pam_ldap.so

Essuite éditer le fichier "/etc/ldap.conf"
Voici le mien à adapter selon vos besoins. 




Editer aussi "/etc/openldap/ldap.conf"
Voici le mien : 


Et pour finir je complète le fichier "/etc/nsswitch.conf" en rajoutant ldap à ces lignes :

 passwd: files ldap
 shadow: files ldap
 group:  files ldap
A présent redémarrer Samba et LDAP.


-Ajout des utilisateurs :

smbldap-useradd -a -m nom_utilisateur
smbldap-passwd nom_utilisateur

A présent je souhaite remplacer l'utilisateur root par administrateur.
Je fais la commande :
smbldap-populate -a administrateur

Je tape le mot de passe souhaité et nous pouvons à présent enregistré des machines via ce compte.
Il faut a présent Maper les groupe.
Faite un :
net groupmap list
Puis cette commande pour tous mapper :
groupadd -g 512 domain_admins
groupadd -g 513 domain_users
groupadd -g 514 samba_domain_guests
groupadd -g 515 samba_domain_computers
groupadd -g 544 samba_administrator
groupadd -g 548 samba_account_operators
groupadd -g 550 samba_print_operators
groupadd -g 551 samba_backup_operators
groupadd -g 552 samba_replicators
 

A présent je souhaite mettre root comme administrateur du domaine et des machines Windows.
Se rendre sur le phpLDAPadmin et aller sur l'utilisateur "root" dans "Users".

Remplacer le "gidNumber" par 512 (Numéro Gid de Domain Admins ou en commande :
usermod -a -G domain_admins root

Même opération pour les autres groupes.

Pour faciliter l'administration du serveur on peut donner plusieurs nom au compte administrateur

Éditer le fichier /etc/samba/smbusers
y mettre : Administrator = administrateur admin root administrator
Il est possible de donner des alias à d'autres comptes.


Donc pour ajouter une machines, rentrer son nom a la main, se connecter en root, reboot puis se connecter sur l'utilisateur désiré.
Il y aura création du profil itinérant, stocker dans /home/profiles/*


Et voilà, si j'ai oublié des trucs merci de me le dire !