====== Suppression de LDAP pour revenir vers une SME de base ====== Cette page représente juste une prise de note pour une opération très particulière (suppression des paquets e-smith-base+ldap sur un serveur en production), ne suivez pas ces instructions à moins de savoir exactement ce que vous faites. Suppression des paquets expérimentaux e-smith-base+ldap et e-smith-samba+ldap ===== 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/domain.tld.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("domain.tld.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$lnPBabdgteuy..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:670056A568475A67BECA51:DEBEF5F77A35A7A6CA181647AB7C62:[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') || ''; print "Checking $login\n"; # 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('cn'); 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-00000010:\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.old2 cat new/$F > /etc/$F done cp -a /etc/samba/smbpasswd /etc/samba/smbpasswd.old2 cat new/smbpasswd > /etc/samba/smbpasswd ===== Ré-installation de e-smith-base ===== Pour remettre les paquets de base, la commande suivante devrait suffire: db configuration setprop ldap Authentication disabled 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