Professional Documents
Culture Documents
CH 29 Gestion Des Clients Réseau
CH 29 Gestion Des Clients Réseau
CH 29 Gestion Des Clients Réseau
. introduction to dhcp
Dynamic Host Configuration Protocol (or short dhcp) is a standard tcp/ip protocol that
distributes ip configurations to clients. dhcp is defined in rfc 2131 (before that it was defined
as an update to bootp in rfc 1531/1541.
The alternative to dhcp is manually entering the ip configuration on each client computer.
1. four broadcasts
dhcp works with layer 2 broadcasts. A dhcp client that starts, will send a dhcp discover
on the network. All dhcp servers (that have a lease available) will respond with a dhcp
offer. The client will choose one of those offers and will send a dhcp request containing
the chosen offer. The dhcp server usually responds with a dhcp ack(knowledge).
When this procedure is finished, then the client is allowed to use that ip-configuration until
the end of its lease time.
.2. picturing dhcp
Here we have a small network with two dhcp servers named DHCP-SRV1 and DHCP-
SRV2 and two clients (SunWS1 and Mac42). All computers are connected by a hub or switch
(pictured in the middle). All four computers have a cable to the hub (cables not pictured).
1. The client SunWS1 sends a dhcp discover on the network. All computers receive this
broadcast.
2. Both dhcp servers answer with a dhcp offer. DHCP-SRV1 is a dedicated dhcp server
and is faster in sending a dhcp offer than DHCP-SRV2 (who happens to also be a file server).
3. The client chooses the offer from DHCP-SRV1 and sends a dhcp request on the network.
All four broadcasts (or five when you count both offers) can be layer 2 ethernet broadcast
to mac address ff:ff:ff:ff:ff:ff and a layer 3 ip broadcast to 255.255.255.255.
debian5:~# ls -l /etc/dhcp3/dhcpd.conf
================================================================================
================================================================================
Installing:
Transaction Summary
================================================================================
Install 1 Package
Installed:
dhcp.x86_64 12:4.2.5-36.el7
Complete!
[root@rhel71 ~]#
# see /usr/share/doc/dhcp*/dhcpd.conf.example
[root@rhel71 ~]#
So we copy the sample and adjust it for our real situation. We name the copy /etc/dhcp/
dhcpd.conf.
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
[root@rhel71 ~]#
The 'routers' option is valid for the subnet alone, whereas the 'domain-name' option is global
(for all subnets).
Time to start the server. Remember to use systemctl start dhcpd on RHEL7/CentOS7 and
service dhcpd start on previous versions of RHEL/CentOS.
[root@rhel71 ~]#
5. client reservations
You can reserve an ip configuration for a client using the mac address.
host pc42 {
fixed-address 192.168.42.42;
host pc42 {
fixed-address 192.168.42.42;
default-lease-time 7200;
max-lease-time 7200;
Above the general configuration for the network, with a pool of 180 addresses.
# laptops
host mac {
host vmac {
facility local6;
server-identifier fedora14;
ddns-domainname "office.linux-training.be";
ddns-update-style interim;
ddns-updates on;
update-static-leases on;
default-lease-time 1800;
max-lease-time 3600;
zone office.linux-training.be {
primary 192.168.42.100;
Allowing any updates in the zone database (part of the named.conf configuration)
zone "office.linux-training.be" {
type master;
allow-update { any; };
};
Allowing secure key updates in the zone database (part of the named.conf configuration)
zone "office.linux-training.be" {
type master;
};
algorithm hmac-md5;
secret "4Ykd58uIeUr3Ve6ad1qTfQ==";
};
Also make sure that bind can write to your db.zone file (using chmod/chown). For Ubuntu
this can be in /etc/bind, for Fedora in /var/named.
8. advanced dhcp
8.1. 80/20 rule
DHCP servers should not be a single point of failure. Let us discuss redundant dhcp server
setups.
To avoid having to place a dhcp server on every segment, we can use dhcp relay agents.
Rogue dhcp servers are a problem without a solution. For example accidental connection of
a (believed to be simple) hub/switch to a network with an internal dhcp server.
DHCP can dynamically update DNS when it configures a client computer. DDNS can be
used with or without secure keys.
When set up properly records can be added automaticall to the zone file:
TXT "00dfbb15e144a273c3cf2d6ae933885782"
introduction to dhcp
9. Practice: dhcp
1. Make sure you have a unique fixed ip address for your DNS and DHCP server (easier
on the same machine).
2. Install DHCP and browse the explanation in the default configuration file /etc/dhcp/
dhcpd.conf or /etc/dhcp3/dhcpd.conf.
5. Use wireshark to capture the four broadcasts when a client receives an ip (for the first
time).
8. Configure your DHCP/DNS server(s) with a proper hostname and domainname (/etc/
hosts, /etc/hostname, /etc/sysconfig/network on Fedora/RHEL, /etc/resolv.conf ...). You
may need to disable NetworkManager on *buntu-desktops.
9. Make sure your DNS server still works, and is master over (at least) one domain.
There are several ways to do steps 10-11-12. Google is your friend in exploring DDNS with
keys, with key-files or without keys.
10. Configure your DNS server to allow dynamic updates from your DHCP server.
11. Configure your DHCP server to send dynamic updates to your DNS server.
NIS est un protocole client serveur qui permet de centraliser les informations sur un
réseau UNIX.
apt-get update
apt-get upgrade
nano /etc/hosts
127.0.0.1 localhost
nano /etc/default/nis
NISSERVER=master
On redémarre la machine.
/usr/lib/yp/ypinit -m
passwd alex
On met à jour les tables du serveur NIS avec la commande & on démarre nis :
cd /var/yp; make
service nis start
Configuration du client
Puis,on indique le nom du serveur NIS dans le fichier /etc/yp.conf en rajoutant la ligne :
nano /etc/yp.conf
Ensuite on indique les fichiers que nous voulons synchroniser avec le serveur en y
nano /etc/hosts
127.0.0.1
NIS.nis-sio
$ypdomainname
nis-sio
Login : alex
Password : XXXX
Un annuaire se distingue d’une base de données relationnelle par le fait qu’il a une
structure hiérarchique et qu’il est très rapide pour chercher et lire des éléments mais
plus lent pour les modifier.
Les annuaires sont couramment employés pour stocker les données d’authentification
(login et mot de passe) ou pour obtenir des informations sur des personnes (email,
téléphone, etc.) ou des objets (localisation, marque, modèle, etc.). Toutes les
applications de votre entreprise (site web, e-mail, comptes système des ordinateurs,
etc.) peuvent par exemple utiliser ce service d’annuaire pour valider les identifiants de
connexion.
Par exemple, la classe d’objet “Employés” pourrait définir qu’un “élément” appartenant à
cette classe doit contenir les attributs obligatoires :
•nom de famille
• prénom
et peut contenir les attributs facultatifs :
•e-mail
• téléphone
• date de naissance
Chacun des attributs de cet élément aura une valeur. Par exemple, “nom de
famille=Dupond”.
De nombreux attributs et classes d’objets sont pré-définis mais il est possible de définir
les vôtres si besoin. L’ensemble des classes d’objets et attributs utilisés est défini dans
le schéma. Certains attributs sont particulièrement courants et intéressants à connaître
Attributs Fonction
dc (domain une partie d’un nom DNS. Pour une entreprise dont le nom de domaine
component) serait “mon-entreprise.com”, il est courant d’appeler la racine du DIT
“dc=mon-entreprise,dc=com”
cn (common le nom commun. Pour une personne, c’est en général le prénom + le nom
name) de famille
Vous avez maintenant quelques bases sur LDAP. Pour une présentation plus détaillée,
je vous recommande de suivre le cours “Présentation du concept d’annuaire LDAP”. Je
vous propose de passer à la pratique et d’installer l’annuaire OpenLDAP sur votre
serveur Ubuntu.
Installez OpenLDAP
OpenLDAP est un des annuaires les plus répandus. Pour l’installer, vous devrez
installer le paquet slapd . Installez également le paquet ldap-utils qui contient les
utilitaires clients pour pouvoir interroger ou modifier votre annuaire.
$ sudo apt-get install slapd ldap-utils
À l’installation de slapd, on vous demandera d’entrer le mot de passe de
l’administrateur de votre annuaire. Pas besoin de le rentrer car vous allez refaire cette
opération dans un instant.
Voilà, vous avez installé votre annuaire. Vous allez maintenant utiliser l’outil de
configuration debconf de Debian pour définir la configuration de base de votre annuaire
:
$ sudo dpkg-reconfigure slapd
Indiquez :
#
# LDAPv3
# base <dc=mon-entreprise,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# mon-entreprise.com
dn: dc=mon-entreprise,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: mon-entreprise
dc: mon-entreprise
# admin, mon-entreprise.com
dn: cn=admin,dc=mon-entreprise,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
# search result
# numResponses: 3
# numEntries: 2
La commande ldapsearch sert, comme son nom l’indique à chercher dans un
annuaire LDAP. Voici le détail des options utilisées :
- indique d’afficher le résultat au format LDIF. On aurait pu indiquer -LLL pour avoir la
L même chose sans toutes les lignes commentées.
- indique l’URI qu’on veut utiliser pour se connecter. Ici ldapi:/// dit de se connecter à
H la socket Unix en local (la communication passe par un fichier local plutôt que par le
réseau).
- indique le noeud à partir duquel vous voulez faire votre recherche. Ici dc=mon-
b entreprise,dc=com est la racine donc vous recherchez dans tout le DIT. À la suite du
noeud, vous auriez pu indiquer des filtres pour votre recherche mais sans filtre vous avez
l’affichage le plus complet.
Je vais maintenant vous parler un peu du format LDIF utilisé pour afficher la réponse
de cette commande.
En résumé
• LDAP est LE standard en terme d’accès à un service d’annuaire
• Un annuaire est une base de données hiérarchique optimisée pour la recherche
et la lecture d’informations
• Un annuaire LDAP prend la forme d’un arbre, appelé Directory Information
Tree, dans lequel on trouve des entrées identifiées de manière uniques par
un Distinguished Name
• Chaque entrée appartient à une ou plusieurs classe d’objet et peut posséder
des attributs
• Le format LDIF permet de décrire des changements à appliquer à un annuaire
LDAP
•
Dans le chapitre précédent, vous avez vu que votre annuaire avait une structure
particulièrement basique puisqu’il ne comporte que deux entrées. Vous avez également
découvert qu’il était possible de décrire les changements à appliquer à un annuaire par
le format LDIF.
Savez-vous que votre annuaire contient un deuxième DIT ? En effet, dans les
anciennes versions de slapd, la configuration se faisait en modifiant des fichiers
dans /etc/ldap/ et imposait de redémarrer le serveur pour être prises en compte.
Cette méthode est toujours possible mais il est maintenant recommandé d’utiliser la
nouvelle méthode dite de “configuration à chaud” (en anglais OLC pour On-Line
Configuration) qui permet de ne pas avoir à redémarrer le serveur pour actualiser.
dn: cn=module{0},cn=config
dn: cn=schema,cn=config
dn: cn={0}core,cn=schema,cn=config
dn: cn={1}cosine,cn=schema,cn=config
dn: cn={2}nis,cn=schema,cn=config
dn: cn={3}inetorgperson,cn=schema,cn=config
dn: olcBackend={0}mdb,cn=config
dn: olcDatabase={-1}frontend,cn=config
dn: olcDatabase={0}config,cn=config
dn: olcDatabase={1}mdb,cn=config
Cette configuration contient donc des informations sur les modules, le schéma, les
classes d’objets intégrées par défaut. La configuration propre à votre DIT dc=mon-
entreprise,dc=com se trouve dans olcDatabase={1}mdb,cn=config .
Comme cette configuration est stockée sous forme de DIT, vous pouvez la modifier au
moyen de fichiers LDIF. Pour tester ça, je vous propose de modifier la quantité de logs
générée par slapd. Par défaut, slapd ne génère aucun log et vous aimeriez peut-être
avoir plus d’informations sur l’activité de votre serveur. L’attribut qui gère ça est
directement un attribut de cn=config appelé olcLogLevel .
$ sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -s base -b cn=config
olcLogLevel
dn: cn=config
olcLogLevel: none
Ici j’ai rajouté l’option -s base pour indiquer le scope , c’est à dire l’étendue de
la
recherche. base effectue la recherche uniquement au niveau du DN indiqué alors que
par défaut le scope est subtree pour rechercher sur toutes les entrées inférieures
également.
À partir de maintenant, votre serveur slapd va générer des logs mais ils seront renvoyés
vers le fichier général /var/log/syslog . Pour indiquer au daemon rsyslog qui gère les
logs d’avoir un fichier de log séparé, créez le fichier /etc/rsyslog.d/10-
slapd.conf contenant :
dn: ou=Machines,dc=mon-entreprise,dc=com
objectclass: organizationalUnit
ou: Machines
description: Ordinateurs de l entreprise
Vous devez bien garder en tête que l’ordre des entrées est important. Vous ne pouvez
pas ajouter Marie au groupe Personnes tant que ce groupe n’a pas été créé.
Vous remarquerez aussi que dans ce fichier, vous n’utilisez pas
l’attribut changetype pour préciser qu’il s’agit d’un ajout car vous allez utiliser la
commande ldapadd qui précise ça par elle-même :
$ sudo ldapadd -x -W -D “cn=admin,dc=mon-entreprise,dc=com” -H
ldap://localhost -f structure.ldif
Pourquoi ne pas utiliser les mêmes options de connexion que pour la commande
Idamodify que j’ai utilisé précédemment ?
Par défaut l’utilisateur root système a les droits de modification sur le
DIT cn=config mais pas sur votre DIT. Sauf à changer ces droits, vous devez donc
passer par le compte administrateur de votre DIT. Voici le détail des options :
Je termine simplement ce chapitre en vous montrant une autre utilisation possible des
fichiers LDIF : la sauvegarde à chaud de votre annuaire dans un fichier texte.
Ce chapitre constitue une introduction à LDAP. Pour pouvoir utiliser votre annuaire
dans un environnement de production, il resterait à renforcer la sécurité en utilisant des
connexions chiffrées par TLS et passer en revue les ACL qui définissent les droits
d’accès à votre annuaire.
Dans ce cours, vous avez utilisé uniquement la ligne de commande pour gérer votre
annuaire. C’est très utile pour comprendre le fonctionnement d’un annuaire LDAP ou
pour débugger un annuaire mais pour une gestion au quotidien, vous préférerez peut-
être utiliser une solution graphique telle que LAM ou phpldapAdmin.
Dans la partie suivante, vous explorerez l’univers du web en installant un serveur LAMP
(Linux-Apache-MySQL-PHP).
En résumé
• slapd permet de modifier la configuration à chaud par la méthode dite OLC
• par la méthode OLC la configuration est stockée sous forme d’un DIT de
base cn=config
• le format LDIF peut être utilisé pour ajouter de nouvelles unités d’organisation
( ou ), des utilisateurs ou tout autre type d’entrées
• le format LDIF peut également être utilisé pour réaliser des sauvegardes de votre
annuaire
PAM est une création de Sun Microsystems et est supporté en 2006 sur les architectures
Solaris, Linux, FreeBSD, NetBSD, AIX et HP-UX.
L’administrateur système peut alors définir une stratégie d’authentification sans devoir
recompiler des programmes d’authentification. PAM permet de contrôler la manière
dont les modules sont enfichés dans les programmes en modifiant un fichier de
configuration.
Les programmes qui donnent aux utilisateurs un accès à des privilèges doivent être
capables de les authentifier. Lorsque vous vous connectez sur le système, vous indiquez
votre nom et votre mot de passe. Le processus de connexion vérifie que vous êtes bien
la personne que vous prétendez être. Il existe d’autres formes d’authentification que
l’utilisation des mots de passe, qui peuvent d’ailleurs êtres stockés sous différentes
formes.
Les modules PAM sont des bibliothèques dynamiques (par ex. pam_unix.so) fournissant
les six primitives d’authentification définies dans la norme, regroupées dans quatre
types :
ls -l /etc/pam.d/
total 100
-rw-r--r--. 1 root root 192 2 aoû 19:12 chfn
-rw-r--r--. 1 root root 192 2 aoû 19:12 chsh
-rw-r--r--. 1 root root 232 18 aoû 2015 config-util
-rw-r--r--. 1 root root 293 31 mar 17:09 crond
lrwxrwxrwx. 1 root root 19 9 jun 19:29 fingerprint-auth ->
fingerprint-auth-ac
-rw-r--r--. 1 root root 702 9 jun 19:29 fingerprint-auth-ac
-rw-r--r--. 1 root root 796 2 aoû 19:12 login
-rw-r--r--. 1 root root 154 18 aoû 2015 other
-rw-r--r--. 1 root root 188 10 jun 2014 passwd
lrwxrwxrwx. 1 root root 16 9 jun 19:29 password-auth -> password-
auth-ac
-rw-r--r--. 1 root root 974 9 jun 19:29 password-auth-ac
-rw-r--r--. 1 root root 155 23 jun 20:12 polkit-1
lrwxrwxrwx. 1 root root 12 9 jun 19:29 postlogin -> postlogin-ac
-rw-r--r--. 1 root root 330 9 jun 19:29 postlogin-ac
-rw-r--r--. 1 root root 144 10 jun 2014 ppp
-rw-r--r--. 1 root root 681 2 aoû 19:12 remote
-rw-r--r--. 1 root root 143 2 aoû 19:12 runuser
-rw-r--r--. 1 root root 138 2 aoû 19:12 runuser-l
lrwxrwxrwx. 1 root root 17 9 jun 19:29 smartcard-auth -> smartcard-
auth-ac
-rw-r--r--. 1 root root 752 9 jun 19:29 smartcard-auth-ac
lrwxrwxrwx. 1 root root 25 9 jun 19:27 smtp ->
/etc/alternatives/mta-pam
-rw-r--r--. 1 root root 76 10 jun 2014 smtp.postfix
-rw-r--r--. 1 root root 904 21 mar 2016 sshd
-rw-r--r--. 1 root root 540 2 aoû 19:12 su
-rw-r--r--. 1 root root 202 31 mar 19:09 sudo
-rw-r--r--. 1 root root 187 31 mar 19:09 sudo-i
-rw-r--r--. 1 root root 137 2 aoû 19:12 su-l
lrwxrwxrwx. 1 root root 14 9 jun 19:29 system-auth -> system-auth-ac
-rw-r--r--. 1 root root 974 9 jun 19:29 system-auth-ac
-rw-r--r--. 1 root root 129 15 sep 16:28 systemd-user
-rw-r--r--. 1 root root 84 6 mar 2015 vlock
2. Stratégies
• required : Tous les modules utilisant ce contrôle doivent passer avec succès
pour que la vérification soit accordée. Le cas échéant l’utilisateur n’est averti qu’à
la fin du traitement de la pile.
• requisite : Comme required sauf que l’utilisateur est averti immédiatement.
• optionnal : L’échec ou le succès de ce module importe peu et ne peut faire
échouer la vérification.
• sufficient : S’il réussit et qu’il n’y a pas de required en échec, le traitement
s’arrête là. Le reste de la pile n’est alors pas traité.
# ls -l /etc/security/
total 52
-rw-r--r--. 1 root root 4620 18 aoû 2015 access.conf
-rw-r--r--. 1 root root 82 18 aoû 2015 chroot.conf
drwxr-xr-x. 2 root root 6 18 aoû 2015 console.apps
-rw-r--r--. 1 root root 604 18 aoû 2015 console.handlers
-rw-r--r--. 1 root root 939 18 aoû 2015 console.perms
drwxr-xr-x. 2 root root 6 18 aoû 2015 console.perms.d
-rw-r--r--. 1 root root 3635 18 aoû 2015 group.conf
-rw-r--r--. 1 root root 2422 18 aoû 2015 limits.conf
drwxr-xr-x. 2 root root 26 9 jun 19:26 limits.d
-rw-r--r--. 1 root root 1440 18 aoû 2015 namespace.conf
drwxr-xr-x. 2 root root 6 18 aoû 2015 namespace.d
-rwxr-xr-x. 1 root root 1019 18 aoû 2015 namespace.init
-rw-------. 1 root root 0 18 aoû 2015 opasswd
-rw-r--r--. 1 root root 2972 18 aoû 2015 pam_env.conf
-rw-r--r--. 1 root root 1718 6 déc 2011 pwquality.conf
-rw-r--r--. 1 root root 419 18 aoû 2015 sepermit.conf
-rw-r--r--. 1 root root 2179 18 aoû 2015 time.conf
cat /etc/security/pwquality.conf
# Configuration for systemwide password quality limits
# Defaults:
#
# Number of characters in the new password that must not be present in
the
# old password.
# difok = 5
#
# Minimum acceptable size for the new password (plus one if
# credits are not disabled which is the default). (See pam_cracklib
manual.)
# Cannot be set to lower value than 6.
# minlen = 9
#
# The maximum credit for having digits in the new password. If less
than 0
# it is the minimum number of digits in the new password.
# dcredit = 1
#
# The maximum credit for having uppercase characters in the new
password.
# If less than 0 it is the minimum number of uppercase characters in
the new
# password.
# ucredit = 1
#
# The maximum credit for having lowercase characters in the new
password.
# If less than 0 it is the minimum number of lowercase characters in
the new
# password.
# lcredit = 1
#
# The maximum credit for having other characters in the new password.
# If less than 0 it is the minimum number of other characters in the
new
# password.
# ocredit = 1
#
# The minimum number of required classes of characters for the new
# password (digits, uppercase, lowercase, others).
# minclass = 0
#
# The maximum number of allowed consecutive same characters in the new
password.
# The check is disabled if the value is 0.
# maxrepeat = 0
#
# The maximum number of allowed consecutive characters of the same
class in the
# new password.
# The check is disabled if the value is 0.
# maxclassrepeat = 0
#
# Whether to check for the words from the passwd entry GECOS string of
the user.
# The check is enabled if the value is not 0.
# gecoscheck = 0
#
# Path to the cracklib dictionaries. Default is to use the cracklib
default.
# dictpath =
Pour de l’aide :
man pam_pwquality
L’objectif est de créer une application qui simule une connexion utilisateur :
Normalement, PAM Check_user est récupéré depuis le dossier examples des sources de
PAM.
Instructions d’installation sous Centos
Prérequis
Installez les librairies PAM :
Clonez ce dépôt
Compilation
cd /tmp/check_user
gcc -o check_user -lpam -lpam_misc -ldl check_user.c
Un binaire check_user a été créé dans le dossier courant. Vous pouvez vérifier qu’il
supporte bien PAM:
ldd check_user
Vous pouvez ensuite copier le binaire dans un dossier de votre $PATH:
command -v check_user
Nettoyage
cd
rm -rf /tmp/check_user
Sans fichier de configuration
# check_user user
Not Authenticated
Une application non définie voit son sort réglé par /etc/pam.d/other :
# cat /etc/pam.d/other
#%PAM-1.0
auth required pam_deny.so
account required pam_deny.so
password required pam_deny.so
session required pam_deny.so
Documentation rps
Prérequis
cd
git clone https://github.com/humboldtux/pam_rps /tmp/pam_rps
Compilation
cd /tmp/pam_rps/src/
gcc -fPIC -c pam_rps.c
gcc -shared -o pam_rps.so pam_rps.o -lpam
Installation
Un module pam_rps a été créé dans le dossier courant.
Vous pouvez copier dans le dossier des modules PAM de votre système :
Ménage
cd
rm -rf /tmp/pam_rps
Stratégie sufficient
cat /etc/pam.d/check_user
auth sufficient pam_rps.so
auth required pam_unix.so
account required pam_unix.so
check_user user
Stratégie requisite
# cat /etc/pam.d/check_user
#auth sufficient pam_rps.so
auth requisite pam_rps.so
auth required pam_unix.so
account required pam_unix.so
check_user user
Autoriser un service
# cat /etc/pam.d/check_user
auth sufficient pam_permit.so
auth required pam_unix.so
account required pam_unix.so
Interdire un service
# cat /etc/pam.d/check_user
auth sufficient pam_deny.so
auth required pam_unix.so
account required pam_unix.so
Configuration de modules
• /etc/security/time.conf
• /etc/security/access.conf
• /etc/security/limits.conf
• /etc/security/pwquality.conf