tuto:ipasserelle:divers:supprimer_auth_ldap

Ceci est une ancienne révision du document !


Suppression de LDAP pour revenir vers une SME de base

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.

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

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).

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

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
  • tuto/ipasserelle/divers/supprimer_auth_ldap.1258395925.txt.gz
  • Dernière modification: 16/11/2009 19:25
  • de dani