Ceci est une ancienne révision du document !
Suppression de LDAP pour revenir vers une SME de base
Re-construction des "flat files"
Parse LDIF
La première étape est la reconstruction des fichiers /etc/passwd, /etc/shadow, /etc/group, /etc/gshadow et /etc/samba/smbpasswd à partir des informations contenues dans LDAP. Ces informations sont disponibles sous forme de ldif:
sv t /service/ldap cp -a /home/e-smith/db/ldap/groupepena.fr.ldif /root/ cd
Copier le script suivant:
#!/usr/bin/perl -w use Net::LDAP::LDIF; use Net::LDAP::Entry; use esmith::AccountsDB; my $ldifin = Net::LDAP::LDIF->new("groupepena.fr.ldif"); my $adb = esmith::AccountsDB->open_ro(); # /etc/passwd # root:x:0:0:root:/root:/bin/bash # login:x:uid:gid:comment:home:shell open(PASSWD,'>','passwd'); # /etc/shadow # dani:$1$i5ClE7rs$lnPBglELsgB6skc..bRML1:14040:0:99999:7::: # login:cryptpass:shadowLastChange:0:99999:7::: open(SHADOW,'>','shadow'); # /etc/group # prive:x:5024:dani,jenny,admin,www # groupname:x:gid:member1,member2 open(GROUP,'>','group'); # /etc/gshadow # prive:!::dani,jenny,admin,www # groupname:!::member1,member2 open(GSHADOW,'>','gshadow'); # /etc/samba/smbpasswd # dani:5000:670056A568475A92F7C807929B70F134:DEBEF5F77A35A7A6CA18CAD8B8BE1D93:[U ]:LCT-484E8E73: # login:uid:sambaLMPassword:sambaNTPassword:sambaAcctFlags:LCT-00000000: open(SMBPASSWD,'>','smbpasswd'); # On parse while(! $ldifin->eof()){ my $entry = $ldifin->read_entry(); # On ne traite que les entrées type users ou computers (compte UNIX) # Attention, l'uid peut contenir le caractère "-" if ($entry->dn =~ /uid=(\w+-?(\w+)?\$?),ou=(Users|Computers)/){ my $login = $1; my $machine = $3; my $acc = $adb->get("$login") || $adb->get("admin"); my $type = $acc->prop('type') || ''; #my $type = 'user'; # Si l'entrée est de type user, ou est l'entrée speciale admin (type system) #if ($type eq "user" || $login eq "admin"){ if ($type ne 'group'){ my $comment = $entry->get_value('gecos'); my $gid = $entry->get_value('gidNumber'); my $uid = $entry->get_value('uidNumber'); my $pass = $entry->get_value('userPassword'); my $lmpass = $entry->get_value('sambaLMPassword') || 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; my $ntpass = $entry->get_value('sambaNTPassword') || 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; my $home = $entry->get_value('homeDirectory'); my $shell = $entry->get_value('loginShell'); my $sambaflag = $entry->get_value('sambaAcctFlags'); my $shadowchange = $entry->get_value('shadowLastChange'); # On supprime {CRYPT} du champ pass $pass =~ s/\{crypt\}//gi; # Hack pour ne pas duppliquer le compte ntp $comment = '' if ($comment eq 'no comment'); print PASSWD "$login:x:$uid:$gid:$comment:$home:$shell\n"; print SHADOW "$login:$pass:$shadowchange:0:99999:7:::\n"; print GROUP "$login:x:$gid:\n"; print GSHADOW "$login:x:!::\n"; if (($type eq 'user' || $login eq 'admin') || $machine eq 'Computers'){ print SMBPASSWD "$login:$uid:$lmpass:$ntpass:$sambaflag:LCT-00000000:\n"; } } } elsif ($entry->dn =~ /cn=(\w+-?(\w+)?),ou=Groups/){ my $login = $1; my $acc = $adb->get("$login") || next; my $type = $acc->prop('type'); if ($type eq "group"){ my $gid = $entry->get_value('gidNumber'); my $members = join (',',$entry->get_value('memberUid')); print GROUP "$login:x:$gid:$members\n"; print GSHADOW "$login:x:!::$members\n"; } } }
Puis lancer la moulinette
perl ./flat_rebuild
On se retrouve avec les fichiers /root/passwd, /root/shadow, /root/group, /root/gshadow et /root/smbpasswd. Il faut maintenant faire un merge de ces fichiers avec les existants.
Merge des fichiers
mkdir old mkdir new cp -a /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/samba/smbpasswd ./old for F in passwd shadow group gshadow; do cat $F old/$F | sort | uniq > new/$F done cat smbpasswd > new/smbpasswd
Une fois tout vérifié, on copie les nouveaux fichiers à la place des anciens:
for F in passwd shadow group gshadow; do cp -a /etc/$F /etc/$F.old cat new/$F > /etc/$F done cp -a /etc/samba/smbpasswd /etc/samba/smbpasswd.old cat new/smbpasswd > /etc/samba/smbpasswd
Ré-installation de e-smith-base
Pour remettre les paquets de base, la commande suivante devrait suffire:
yum install e-smith-base e-smith-samba e-smith-ldap
Ils remplaceront automatiquement leurs homologues +ldap (même si avant de confirmer, yum ne l'indique pas).
Flush de la base LDAP
La base LDAP doit être vidée pour être ré-initialisée avec les valeurs par défaut par le couple post-upgrade/reboot
sv d /service/ldap cd /var/lib/ldap tar cvzf ~/ldap_pre_modif.tar.gz ./* /home/e-smith/db/ldap/* rm -f /var/lib/ldap/* expand-template /home/e-smith/db/ldap/ldif expand-template /etc/nsswitch.conf expand-template /etc/pam.d/system-auth
Mise à jour
On lance maintenant une mise à jour globale
yum update --exclude=smeserver-support
rpm -Uvh --nodeps http://sme-mirror.firewall-services.com/releases/7/smeupdates/i386/RPMS/smeserver-support-2.0.0-6.el4.sme.noarch.rpm
Puis les contributions. Attention, on met à jour OpenVPN, on va donc suivre une procédure à part pour cette contrib (MaJ depuis 1.2 vers 2.0)
signal-event yum-modify yum --enablerepo=smecontribs install smeserver-phpki
Puis suivre la procédure de migration afin que les certificats soient gérés par PHPki: http://wiki.contribs.org/PHPki#Migrate_Certificates_from_previous_OpenVPN-Bridge_contrib_installations
Maintenant, on met à jour la contrib OpenVPN elle-même:
yum --enablerepo=smecontribs install smeserver-openvpn-bridge
Puis on configure le bridge (devrait déjà être bon, mais vérifier avec
db configuration show bridge
Migrer les règles de configuration en suivant cette page: http://wiki.contribs.org/OpenVPN_Bridge#Migrate_previous.2Fexisting_OpenVPN_Server_certificates
Maintenant mettre toutes les autres contribs à jour:
yum --enablerepo=smecontribs update
Post-Upgrade / Reboot
Il ne manque plus qu'un post-upgrade / reboot en croisant les doigts:
signal-event post-upgrade signal-event reboot