Dernière modification 4 août 2022
Dans la suite des opérations, on appelera serveur, la machine qui centralise la définition de tous les utilisateurs et groupes, le client fait appel au serveur pour l'authentification des utilisateurs.
tar xvfz MigrationTools-4.7.tar.gz
Cela donne le répertoire MigrationTools-47
Maintenant on installera nss-pam-ldapd
qui fournit un module Name Service Switch (NSS)
qui accéder aux informations de compte et tous autres informations qu'on
trouve dans les fichiers du système (hosts, alias, netgroup,
etc...). Il fournit également un module PAM
(Pluggable Authentification Module) pour un serveur LDAP.
A présent dans le répertoire MigrationTools-47, on va modifier le fichier migrate_common.ph, on doit y indiquer son nom de domaine, comme ceci :
# Default DNS domain
$DEFAULT_MAIL_DOMAIN = "kervao.fr";
# Default base
$DEFAULT_BASE = "dc=kervao,dc=fr";
Éventuellement vous pouvez modifier la ligne suivante spécifiant le
serveur de mail bien que ce ne soit pas absolument nécessaire.
$DEFAULT_MAIL_HOST = "mail.padl.com";
A présent il faut rentrer les utilisateurs et groupes du système dans la
base de données LDAP. Commençons d'abord par créer des fichiers
temporaires au format ldif. On tape maintenant en tant que root
(pour pouvoir lire /etc/shadow)
ETC_SHADOW=/etc/shadow
export ETC_SHADOW
./migrate_passwd.pl /etc/passwd /tmp/passwd.ldif
./migrate_group.pl /etc/group /tmp/group.ldif
Éditez les deux fichiers ldif pour ne laisser que les utilisateurs, enlever tous les utilisateurs et groupes système (root, lp, sys, apache, ...). Voici le contenu de mon group.ldif avec mon groupe utilisateur hoarau
dn: cn=hoarau,ou=Group,dc=kervao,dc=fr
objectClass: posixGroup
objectClass: top
cn: hoarau
userPassword: {crypt}*
gidNumber: 5000
memberUid: olivier
memberUid: veronique
Voici maintenant le contenu de mon passwd.ldif avec mes deux utilisateurs
dn: uid=olivier,ou=People,dc=kervao,dc=fr
uid: olivier
cn: olivier
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$1$76UeLH8Z$K8rdYPRmUoiONZQm6hV4q.
shadowLastChange: 11858
shadowMax: 99999
shadowWarning: 7
shadowInactive: -1
shadowExpire: -1
shadowFlag: 1081428222
loginShell: /bin/bash
uidNumber: 5001
gidNumber: 5000
homeDirectory: /home/olivier
gecos: olivier
dn: uid=veronique,ou=People,dc=kervao,dc=fr
uid: veronique
cn: veronique
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$1$OyedUoIU$uwpYR0bWJGzF4AFAHspSm/
shadowLastChange: 11858
shadowMax: 99999
shadowWarning: 7
shadowInactive: -1
shadowExpire: -1
shadowFlag: 1081428222
loginShell: /bin/bash
uidNumber: 5002
gidNumber: 5000
homeDirectory: /home/veronique
gecos: veronique
A présent il faudra créer le fichier temp.ldif qui va contenir la définition des Organizational Unit (ou ) Group (groupe d'utilisateur) et People (utilisateur). Voici son contenu :
dn: dc=kervao,dc=fr
objectClass: dcObject
objectClass: organization
dc: kervao
o: kervao.fr
dn: ou=Group,dc=kervao,dc=fr
ou: Group
objectClass: top
objectClass: organizationalUnit
description: groupe d utilisateurs
dn: ou=People,dc=kervao,dc=fr
ou: People
objectClass: top
objectClass: organizationalUnit
description: utilisateurs du systeme
On peut commencer à rajouter tout cela (en mode verbeux), dans la base, on commence par les ou Group et People
ldapadd -v -x -D "cn=Manager,dc=kervao,dc=fr" -W -f /tmp/temp.ldif
voilà le résultat
ldap_initialize( <DEFAULT> )
Enter LDAP Password:
add objectClass:
dcObject
organization
add dc:
kervao
add o:
kervao.fr
adding new entry "dc=kervao,dc=fr"
modify complete
add ou:
Group
add objectClass:
top
organizationalUnit
add description:
groupe d utilisateurs
adding new entry "ou=Group,dc=kervao,dc=fr"
modify complete
add ou:
People
add objectClass:
top
organizationalUnit
add description:
utilisateurs du systeme
adding new entry "ou=People,dc=kervao,dc=fr"
modify complete
ldapadd -x -D "cn=Manager,dc=kervao,dc=fr" -f /tmp/passwd.ldif -W
Enter LDAP Password:
adding new entry "uid=olivier,ou=People,dc=kervao,dc=fr"
adding new entry "uid=veronique,ou=People,dc=kervao,dc=fr"
Puis
ldapadd -x -D "cn=Manager,dc=kervao,dc=fr" -f /tmp/group.ldif -W
Enter LDAP Password:
adding new entry "cn=hoarau,ou=Group,dc=kervao,dc=fr"
On visualise tout ça en tapant
ldapsearch -x -D "cn=Manager, dc=kervao, dc=fr" -W -b
"dc=kervao,dc=fr"
Enter LDAP Password:
version: 2
#
# filter: (objectclass=*)
# requesting: ALL
#
# kervao, fr
dn: dc=kervao, dc=fr
objectClass: dcObject
objectClass: organization
dc: kervao.fr
o: kervao.fr
# Group, kervao, fr
dn: ou=Group,dc=kervao,dc=fr
ou: Group
objectClass: top
objectClass: organizationalUnit
description: groupe d utilisateurs
# People, kervao, fr
dn: ou=People,dc=kervao,dc=fr
ou: People
objectClass: top
objectClass: organizationalUnit
description: utilisateurs du systeme
# hoarau, Group, kervao, fr
dn: cn=hoarau,ou=Group,dc=kervao,dc=fr
objectClass: posixGroup
objectClass: top
cn: hoarau
gidNumber: 5000
memberUid: olivier
memberUid: veronique
# olivier, People, kervao, fr
dn: uid=olivier,ou=People,dc=kervao,dc=fr
uid: olivier
cn: olivier
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSQxJDc2VWvMSDhaJEs4cmRVUFJtVW5pT05aUW02aFY0cS4=
shadowLastChange: 11858
shadowMax: 99999
shadowWarning: 7
shadowInactive: -1
shadowExpire: -1
shadowFlag: 1081428222
loginShell: /bin/bash
uidNumber: 5001
gidNumber: 5000
homeDirectory: /home/olivier
gecos: olivier
# veronique, People, kervao, fr
dn: uid=veronique,ou=People,dc=kervao,dc=fr
uid: veronique
cn: veronique
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSQxJE95aWRVb0lVJHV3cFlOM7JXSkd6RjRBRkFIc3BTbS8=
shadowLastChange: 11858
shadowMax: 99999
shadowWarning: 7
shadowInactive: -1
shadowExpire: -1
shadowFlag: 1081428222
loginShell: /bin/bash
uidNumber: 5002
gidNumber: 5000
homeDirectory: /home/veronique
gecos: veronique
# search result
search: 2
result: 0 Success
# numResponses: 7
# numEntries: 6
Le client repose sur nslcd (Name Service LDAP Connection Daemon), à noter que sur un serveur si vous voulez également vous connecter sur le daemon LDAP, il faudra le configurer comme un client. On édite le fichier /etc/nslcd.conf et on apporte les modifications suivantes
# The user and group nslcd should run as.# Customize certain database lookups.
base group ou=Group,dc=kervao,dc=fr
base passwd ou=People,dc=kervao,dc=fr
base shadow ou=People,dc=kervao,dc=fr
map shadow userPassword userPassword
Comme le mot de passe est en clair, il faudra veiller à ce que les droits du fichier soient bien à 600
-rw------- 1 root root 4855 juil. 17 08:04 /etc/nslcd.conf
Dans le fichier /etc/nsswitch.conf on modifiera les lignes suivantes pour lire
passwd: files nis ldap
shadow: files nis ldap
group: files nis ldap
A noter que le nis n'est pas nécessaire si vous n'avez pas mis en place de domaine NIS.
Reprenons donc notre fichier system-auth il doit ressembler à ça (rajoutez uniquement les lignes concernant pam_ldap et laissez les autres) :
#%PAM-1.0Relancer LDAP sur le client (ou
le serveur) maintenant
systemctl restart nslcd
ou lancer le s'il ne l'était pas à l'origine
systemctl start nslcd
A noter que le fichier /etc/ldap.conf ne sert plus à rien, vous pouvez l'ignorer superbement.
pour connaitre l'état du daemon on tapera
systemctl status nslcd.service
voilà le résultat
● nslcd.service - Naming services LDAP
client daemon
Loaded: loaded
(/usr/lib/systemd/system/nslcd.service; enabled; vendor preset:
disabled)
Active: active (running) since Sun 2022-07-17
09:04:50 CEST; 5s ago
Process: 84574 ExecStart=/usr/sbin/nslcd
(code=exited, status=0/SUCCESS)
Main PID: 84576 (nslcd)
Tasks: 6 (limit: 2289)
Memory: 1.0M
CPU: 9ms
CGroup: /system.slice/nslcd.service
└─84576 /usr/sbin/nslcd
juil. 17 09:04:50 tahiti.kervao.fr systemd[1]: Starting Naming services
LDAP client daemon...
juil. 17 09:04:50 tahiti.kervao.fr nslcd[84576]: version 0.9.11 starting
juil. 17 09:04:50 tahiti.kervao.fr nslcd[84576]: DEBUG:
initgroups("nslcd",977) done
juil. 17 09:04:50 tahiti.kervao.fr nslcd[84576]: DEBUG: setgid(977) done
juil. 17 09:04:50 tahiti.kervao.fr nslcd[84576]: DEBUG: setuid(983) done
juil. 17 09:04:50 tahiti.kervao.fr nslcd[84576]: DEBUG: unlink() of
/var/run/nslcd/socket failed (ignored): No such file or directory
juil. 17 09:04:50 tahiti.kervao.fr nslcd[84576]: accepting connections
juil. 17 09:04:50 tahiti.kervao.fr systemd[1]: Started Naming services
LDAP client daemon.
si le serveur LDAP est configuré en connexion chiffrée, on modifiera ainsi le fichier /etc/nslcd.conf
# on doit indiquer ici ldaps qui est le protocole LDAP sur SSL, j'ai dû indiquer le nom de mon serveur slapd car son certificat le référence par son nom et non par son adresse IP
uri ldaps://serveur-slapd.kervao.fr/
# Use StartTLS without verifying the
server certificate.
#ssl start_tls
#tls_reqcert allow
# CA certificates for server certificate verification, on indique ici le
chemin du certificat du serveur slapd qu'il faudra placer dans le
répertoire /etc/openldap/cacerts du client
tls_cacertdir /etc/openldap/cacerts
tls_cacertfile /etc/openldap/cacerts/ldapcrt.pem
on stoppe nslcd, si on le relance en mode debug, voilà ce qu'on peut voir (extrait)
juil. 17 09:01:17 tahiti.kervao.fr
nslcd[84462]: [43a858] <passwd=5008> DEBUG:
ldap_initialize(ldaps://serveur-slapd.kervao.fr/)
slappasswd -v -s toto345 -h {CRYPT}
On obtient
{CRYPT}rURm18fYhMvew
Il faudra créer un fichier new.ldif qui aura cette tête là :
dn: uid=utilisateur,ou=People,dc=kervao,dc=fr
uid: utilisateur
cn: utilisateur
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {CRYPT}rURm18fYhMvew
shadowLastChange: 11858
shadowMax: 99999
shadowWarning: 7
shadowInactive: -1
shadowExpire: -1
shadowFlag: 1081428222
loginShell: /bin/bash
uidNumber: 5004
gidNumber: 5000
homeDirectory: /home/utilisateur
gecos: utilisateur
Pour mémoire voici la signification de chacun des paramètres des shadow passwords
shadowLastChange: date de dernière modification (en jour depuis le
1.1.70),
shadowMax: nombre de jours d'utilisation max du mot de passe
(changement requis à l'issue), pas de période de validité si égal à 99999
shadowWarning: nombre de jours avant l'expiration pour avertir
l'utilisateur ,
shadowInactive: nombre de jours après la date de l'expiration où on
rend le compte inactif, fonctionnalité désactivé si égal à -1
shadowExpire: nombre de jours après le 1.1.70 où le compte sera
désactivé, fonctionnalité désactivée si égal à -1
shadowFlag: ne sert à rien (dispo pour une utilisation future) .
ATTENTION Il ne doit pas y avoir de blanc ou de tabulation à la fin des lignes de votre fichier ldif
On tape ldapadd pour la saisie de l'utilisateur dans la base
ldapadd -x -D "cn=Manager,dc=kervao,dc=fr" -f /tmp/new.ldif -W
Enter LDAP Password:
adding new entry "uid=utilisateur,ou=People,dc=kervao,dc=fr"
C'est pas tout il faut indiquer maintenant que cet utilisateur appartient bien au groupe hoarau On crée ce fichier groupe.ldif contenant
dn: cn=hoarau,ou=Group,dc=kervao,dc=fr
Add: memberUid
memberUid: utilisateur
On modifie la base en tapant
ldapmodify -x -D "cn=Manager, dc=kervao, dc=fr" -W -f groupe.ldif
Enter LDAP Password:
modifying entry "cn=hoarau,ou=Group,dc=kervao,dc=fr"
Par contre il faudra créer manuellement la home directory en tant que root en tapant :
mkdir /home/utilisateur
cp -R /etc/skel/* /home/utilisateur
chown -R utilisateur:hoarau /home/utilisateur
dn: cn=newgroupe,ou=Group,dc=kervao,dc=fr
objectClass: posixGroup
objectClass: top
cn: newgroupe
gidNumber: 5000
Voilà le fichier pour rajouter des utilisateurs au groupe
dn: cn=newgroupe,ou=Group,dc=kervao,dc=fr
Add: memberUid
memberUid: new-utilisateur
ldapdelete -x -D "cn=Manager, dc=kervao, dc=fr"
"uid=utilisateur,ou=People,dc=kervao,dc=fr" -W
On créera ensuite un fichier delete.ldif contenant
dn: cn=hoarau,ou=Group,dc=kervao,dc=fr
delete: memberUid
memberUid: utilisateur
On tape maintenant
ldapmodify -x -D "cn=Manager, dc=kervao, dc=fr" -W -f delete.ldif
Enter LDAP Password:
modifying entry "cn=hoarau,ou=Group,dc=kervao,dc=fr"
slappasswd -v -s tutu728 -h {CRYPT}
Voilà le résultat
{CRYPT}WW6h470hoW4nI
Il crée maintenant le fichier modif.ldif contenant
dn: uid=olivier, ou=People, dc=kervao, dc=fr
changetype: modify
replace: userPassword
userPassword: {CRYPT}WW6h470hoW4nI
Et il modifie la base en tapant
[olivier@asterix olivier]$ ldapmodify -x -D "uid=olivier, ou=People,
dc=kervao, dc=fr" -f /tmp/modif.ldif -W
Enter LDAP Password: (mot de passe d'olivier)
modifying entry "uid=olivier, ou=People, dc=kervao, dc=fr"
Voilà son mot de passe a été changé. Vous me direz c'est bien compliqué, y a plus simple !
En tant que root modifiez le fichier /etc/pam.d/passwd (rajoutez uniquement les lignes concernant pam_ldap et laissez les autres) pour lire
#%PAM-1.0Maintenant pour changer son mot de passe olivier tape le plus simplement du monde
passwd
Voilà le résultat
Enter login(LDAP) password:
New password:
Re-enter new password:
LDAP password information changed for olivier
passwd: all authentication tokens updated successfully
Ca marche !!!!
python3-psycopg2
on revient au répertoire admin4-3.0.1 et on tape[Retour page d'accueil FUNIX] |