[FreeIPA] Installation du serveur et premiers pas

 

Installation du serveur et premiers pas sur FreeIPA
Article original Publié le : 31 octobre 2020
Mise a jour le :

Pour permettre l’authentification des utilisateurs et l’enregistrement des machines a la manière d”un Active Directory et de son service dns

 

 

Pour les besoins du tuto

1 vm Centos 7 pour le serveur (1 cpu/2go ram)
IP 192.168.3.225
domaine izero.lan
hostname freeipa.izero.lan

1 vm Centos 7 pour le client (1 cpu/1go ram)
IP 192.168.3.224
domaine izero.lan
hostname centos.izero.lan

 

  • Préparation de l’environnement
  • Ajout des règles sur firewalld
  • Installation et configuration du serveur FreeIPA
  • Zones DNS
  • Installation du client
  • Quelques commandes
  • Utilisateurs et groupes
  • Droits des utilisateurs et groupes
  • Gestion des mots de passe
  • Tips
  • Référentiel et doc

 

 

I. Préparation de l’environnement

  • Mise a jour du système
$ sudo yum update
  • Installation des paquets nécessaires
$ sudo yum install ipa-server ipa-server-dns rng-tools
  • Installation de paquet utile
$ sudo apt install vim wget
  • Configurer le nom d’hôte -> machine.domaine.tld
$ sudo hostnamectl set-hostname freeipa.izero.lan
  • Ajouter l’entrée ip/hostname  dans le fichier /etc/hosts
$ sudo bash -c "echo 192.168.3.225 freeipa.izero.lan freeipa >> /etc/hosts"
  • Redémarrer le système
$ sudo reboot

 

 

II. Ajout des règles sur firewalld

Si utilisé, prévoir l’ouverture des ports 80/443/389/636/88/464/53/88/464/53/123 puis recharger la conf

$ sudo firewall-cmd --add-service=freeipa-ldap --add-service=freeipa-ldaps
$ sudo firewall-cmd --add-service=freeipa-ldap --add-service=freeipa-ldaps --permanent
$ sudo firewall-cmd --reload

 

 

III. Installation et configuration du serveur FreeIPA

Tout ce fait de manière interactive, pressez entrer si les valeurs par défaut sont corrects sinon les personnaliser

$ sudo ipa-server-install

The log file for this installation can be found in /var/log/ipaserver-install.log
==============================================================================
This program will set up the IPA Server.

This includes:
  * Configure a stand-alone CA (dogtag) for certificate management
  * Configure the Network Time Daemon (ntpd)
  * Create and configure an instance of Directory Server
  * Create and configure a Kerberos Key Distribution Center (KDC)
  * Configure Apache (httpd)
  * Configure the KDC to enable PKINIT

To accept the default shown in brackets, press the Enter key.

Do you want to configure integrated DNS (BIND)? [no]: yes

 

Entrer le nom complet si différent

Enter the fully qualified domain name of the computer
on which you're setting up server software. Using the form.
Example: master.example.com.


Server host name [freeipa.izero.lan]:

 

Confirmer le nom de domaine

Warning: skipping DNS resolution of host freeipa.izero.lan
The domain name has been determined based on the host name.

Please confirm the domain name [izero.lan]:

 

Confirmer le real name

The kerberos protocol requires a Realm name to be defined.
This is typically the domain name converted to uppercase.

Please provide a realm name [IZERO.LAN]:
The kerberos protocol requires a Realm name to be defined.
This is typically the domain name converted to uppercase.

 

Configurer le gestionnaire d’annuaire

Certain directory server operations require an administrative user.
This user is referred to as the Directory Manager and has full access
to the Directory for system management tasks and will be added to the
instance of directory server created for IPA.
The password must be at least 8 characters long.

Directory Manager password:
Password (confirm):

 

Créer le mot de passe du compte admin

The IPA server requires an administrative user, named 'admin'.
This user is a regular system account used for IPA server administration.

IPA admin password:
Password (confirm):

 

Configuration du reverse dns

Checking DNS domain izero.lan., please wait ...
Do you want to configure DNS forwarders? [yes]: yes

Confirmer pour configurer un second dns

Following DNS servers are configured in /etc/resolv.conf: 1.1.1.1
Do you want to configure these servers as DNS forwarders? [yes]: yes

Ajouter le serveur dns alternatif ou faire entrer pour quitter

All DNS servers from /etc/resolv.conf were added. You can enter additional addresses now:
Enter an IP address for a DNS forwarder, or press Enter to skip: 1.0.0.1
DNS forwarder 1.0.0.1 added. You may add another.

 

Finaliser la configuration, et procéder a l’installation

Checking DNS forwarders, please wait ...
Do you want to search for missing reverse zones? [yes]: no
The IPA Master Server will be configured with:
Hostname:       freeipa.izero.lan
IP address(es): 192.168.3.225
Domain name:    izero.lan
Realm name:     IZERO.LAN

BIND DNS server will be configured to serve IPA domain with:
Forwarders:       1.1.1.1, 1.0.0.1
Forward policy:   only
Reverse zone(s):  No reverse zone

Continue to configure the system with these values? [no]: yes
The following operations may take some minutes to complete.
Please wait until the prompt is returned.

Configuring NTP daemon (ntpd)
  [1/4]: stopping ntpd
  [2/4]: writing configuration
  [3/4]: configuring ntpd to start on boot
  [4/4]: starting ntpd
Done configuring NTP daemon (ntpd).
Configuring directory server (dirsrv). Estimated time: 30 seconds
  [1/45]: creating directory server instance
  [2/45]: enabling ldapi
...
...
  [7/7]: configuring ipa-dnskeysyncd to start on boot
Done configuring DNS key synchronization service (ipa-dnskeysyncd).
Restarting ipa-dnskeysyncd
Restarting named
Updating DNS system records
Configuring client side components
Using existing certificate '/etc/ipa/ca.crt'.
Client hostname: freeipa.izero.lan
Realm: IZERO.LAN
DNS Domain: izero.lan
IPA Server: freeipa.izero.lan
BaseDN: dc=izero,dc=lan

Skipping synchronizing time with NTP server.
New SSSD config will be created
Configured sudoers in /etc/nsswitch.conf
Configured /etc/sssd/sssd.conf
trying https://freeipa.izero.lan/ipa/json
[try 1]: Forwarding 'schema' to json server 'https://freeipa.izero.lan/ipa/json'
trying https://freeipa.izero.lan/ipa/session/json
[try 1]: Forwarding 'ping' to json server 'https://freeipa.izero.lan/ipa/session/json'
[try 1]: Forwarding 'ca_is_enabled' to json server 'https://freeipa.izero.lan/ipa/session/json'
Systemwide CA database updated.
Adding SSH public key from /etc/ssh/ssh_host_rsa_key.pub
Adding SSH public key from /etc/ssh/ssh_host_ecdsa_key.pub
Adding SSH public key from /etc/ssh/ssh_host_ed25519_key.pub
[try 1]: Forwarding 'host_mod' to json server 'https://freeipa.izero.lan/ipa/session/json'
SSSD enabled
Configured /etc/openldap/ldap.conf
Configured /etc/ssh/ssh_config
Configured /etc/ssh/sshd_config
Configuring izero.lan as NIS domain.
Client configuration complete.
The ipa-client-install command was successful

==============================================================================
Setup complete

Next steps:
	1. You must make sure these network ports are open:
		TCP Ports:
		  * 80, 443: HTTP/HTTPS
		  * 389, 636: LDAP/LDAPS
		  * 88, 464: kerberos
		  * 53: bind
		UDP Ports:
		  * 88, 464: kerberos
		  * 53: bind
		  * 123: ntp

	2. You can now obtain a kerberos ticket using the command: 'kinit admin'
	   This ticket will allow you to use the IPA tools (e.g., ipa user-add)
	   and the web user interface.

Be sure to back up the CA certificates stored in /root/cacert.p12
These files are required to create replicas. The password for these
files is the Directory Manager password

 

L’installation est terminé
Permettre la création automatique du répertoire de base de l’utilisateur a la premiere connexion

$ sudo authconfig --enablemkhomedir --update

 

Penser a demarrer et activer au demarrage automatique le service rngd

[bef@freeipa ~]$ sudo systemctl start rngd
[bef@freeipa ~]$ sudo systemctl enable rngd
[bef@freeipa ~]$ sudo systemctl status rngd
 rngd.service - Hardware RNG Entropy Gatherer Daemon
   Loaded: loaded (/usr/lib/systemd/system/rngd.service; enabled; vendor preset: enabled)
   Active: active (running) since sam. 2020-10-17 21:28:48 CEST; 10s ago
 Main PID: 5940 (rngd)
   CGroup: /system.slice/rngd.service
           └─5940 /sbin/rngd -f

oct. 17 21:28:48 freeipa.izero.lan systemd[1]: Started Hardware RNG Entropy Gatherer Daemon.
oct. 17 21:28:48 freeipa.izero.lan rngd[5940]: Initalizing available sources
oct. 17 21:28:50 freeipa.izero.lan rngd[5940]: Enabling JITTER rng support
oct. 17 21:28:50 freeipa.izero.lan rngd[5940]: Initalizing entropy source JITTER Entropy generator

 

Vérification  des services FreeIPA

$ sudo ipactl status
Directory Service: RUNNING
krb5kdc Service: RUNNING
kadmin Service: RUNNING
named Service: RUNNING
httpd Service: RUNNING
ipa-custodia Service: RUNNING
ntpd Service: RUNNING
pki-tomcatd Service: RUNNING
ipa-otpd Service: RUNNING
ipa-dnskeysyncd Service: RUNNING
ipa: INFO: The ipactl command was successful

 

/!\ Comme tous les annuaires, il est important d’avoir un serveur de temps configuré pour les clients et serveurs, ntpd ou chronyd

 

C’est opérationnel on peut se connecter avec l’url https://fqdn/ipa/ui

 

 

IV. Zones DNS

Il faut s’assurer d’avoir la ou les zones dns crées ainsi que leur zone de recherche inversée (PTR)

Cela se trouve dans Service réseau / DNS / Zones DNS

On retrouve le domaine crée par défaut mais il n’a pas créer la zone de recherche inversée
Cliquer sur Ajouter puis ajouter le CIDR correspondant au nom du domaine

 

Une petite correction a faire sur chaque domaine, éditer la zone puis dans paramètres cocher
Mise a jour dynamique
Autoriser la synchronisation PTR

 

 

V. Installation du client

Installation du client ipa sur la vm secondaire
elle doit avoir le dns du serveur FreeIPA en primaire et hostname complet

$ cat /etc/resolv.conf
nameserver 192.168.3.225
$ sudo yum install ipa-client

Puis enroller la machine

$ sudo ipa-client-install -N --mkhomedir

 

Le nouvel hote est bien enregistré dans FreeIPA

 

 

VI. Quelques commandes

Il y a plusieurs commandes et sous commandes

$ ipa
ipa                     ipa-csreplica-manage    ipa-pkinit-manage
ipa-advise              ipactl                  ipa-replica-conncheck
ipa-backup              ipa-dns-install         ipa-replica-install
ipa-cacert-manage       ipa-getcert             ipa-replica-manage
ipa-ca-install          ipa-getkeytab           ipa-replica-prepare
ipa-cert-fix            ipa-join                ipa-restore
ipa-certupdate          ipa-kra-install         ipa-rmkeytab
ipa-client-automount    ipa-ldap-updater        ipa-server-certinstall
ipa-client-install      ipa-managed-entries     ipa-server-install
ipa-compat-manage       ipa-nis-manage          ipa-server-upgrade
ipa-crlgen-manage       ipa-otptoken-import     ipa-winsync-migrate

 

Récupérer le jeton Kerberos avec la commande kinit, cela ne doit rien renvoyer

$ kinit admin
Password for admin@IZERO.LAN:

 

Exemple pour vérifier l’état d’un compte

$ ipa user-find admin
---------------------------
1 utilisateur correspondant
---------------------------
  Identifiant de connexion: admin
  Nom: Administrator
  Répertoire personnel: /home/admin
  Interpréteur de commande: /bin/bash
  Principal alias: admin@IZERO.LAN
  UID: 69200000
  GID: 69200000
  Compte désactivé: False
----------------------------
Nombre d'entrées renvoyées 1
----------------------------

 

/!\ Voir cet article pour changer les attributs shell et mail par défaut

 

 

VII. Utilisateurs et groupes

Pour le test, je crée 2 comptes, 1 groupe et 2 politiques pour chacun

  • Un compte admin IT et un compte non admin pour un DEV par exemple
  • Un groupe non admin, le groupe admin éxistant déjà
  • Une politique HBAC pour les groupes d’utilisateurs, machines et services
  • Une politique sudo pour les commandes sudo

 

Avant toute opération il faut récupérer un ticket Kerberos

$ kinit admin
Password for admin@IZERO.LAN:

 

Pour les bonnes pratiques, il est préférable de désactiver la règle d’accès global allow_all qui autorise tous les utilisateurs à accéder à n’importe quel hôte.
Plus loin on créera les règles nécessaires.

 

Création des comptes utilisateurs

$ ipa user-add user_noadmin --first=User --last=Noadmin --password
Mot de passe: 
Entrer à nouveau Mot de passe pour validation :
--------------------------
Added user "user_noadmin"
--------------------------
  User login: user_noadmin
  First name: User
  Last name: Noadmin
  Full name: User Noadmin
  Display name: User Noadmin
  Initials: UN
  Home directory: /home/user_noadmin
  GECOS: User Noadmin
  Login shell: /bin/bash
  Principal name: user_noadmin@IZERO.LAN
  Principal alias: user_noadmin@IZERO.LAN
  User password expiration: 20201031000544Z
  Email address: user_noadmin@izero.fr
  UID: 69200019
  GID: 69200019
  Password: True
  Member of groups: ipausers
  Kerberos keys available: True

 

$ ipa user-add user_admin --first=User --last=Admin --password
Mot de passe: 
Entrer à nouveau Mot de passe pour validation :
--------------------------
Utilisateur « user_admin » ajouté
--------------------------
  Identifiant de connexion: user_admin
  Prénom: User
  Nom: Admin
  Nom complet: User Admin
  Nom affiché: User Admin
  Initiales: UA
  Répertoire personnel: /home/user_admin
  GECOS: User Admin
  Interpréteur de commande: /bin/sh
  Nom principal: user_admin@IZERO.LAN
  Principal alias: user_admin@IZERO.LAN
  User password expiration: 20201017221305Z
  Adresse courriel: user_admin@izero.lan
  UID: 69200001
  GID: 69200001
  Mot de passe: True
  Membre des groupes: ipausers
  Clés Kerberos disponibles: True

 

Ajouter une clé ssh

$ ipa user-mod user_admin --sshpubkey="ssh-rsa AAAAB365wdrdbBTFX56xb.........."
---------------------------
Utilisateur « user_admin » modifié
---------------------------
  Identifiant de connexion: user_admin
  Prénom: User
  Nom: Admin
  Répertoire personnel: /home/user_admin
  Interpréteur de commande: /bin/sh
  Nom principal: user_admin@IZERO.LAN
  Principal alias: user_admin@IZERO.LAN
  Adresse courriel: user_admin@izero.lan
  UID: 69200001
  GID: 69200001
  Clé publique SSH: ssh-rsa
                    8cIVafcPD+mDOyBb...
                    user_admin@test
  Empreinte de clé publique SSH: ssh-rsa AAAAB365wdrdbBTFX56xb..........
                                 user_admin@test (ssh-rsa)
  Compte désactivé: False
  Mot de passe: True
  Membre des groupes: ipausers
  Clés Kerberos disponibles: True

 

Coté interface graphique on retrouve bien les utilisateurs et le compte admin par défaut

 

Lister les groupes sur le serveur

$ ipa group-find
------------------------
4 groupes correspondants
------------------------
  Nom du groupe: admins
  Description: Account administrators group
  GID: 69200000

  Nom du groupe: editors
  Description: Limited admins who can edit other users
  GID: 69200002

  Nom du groupe: ipausers
  Description: Default group for all users

  Nom du groupe: trust admins
  Description: Trusts administrators group
----------------------------
Nombre d'entrées renvoyées 4
----------------------------

 

Par défaut tous les utilisateurs héritent du groupe ipausers
Pour ajouter l’utilisateur user_admin dans le groupe admin déjà éxistant

$ ipa group-add-member admins --users=user_admin

En interface graphique c’est dans groupes d’utilisateurs

 

Créer un nouveau groupe pour le user_noadmin

$ ipa group-add --desc='description_du_groupe' group_noadmin
---------------------------
Added group "group_noadmin"
---------------------------
  Group name: group_noadmin
  Description: description_du_groupe
  GID: 69200012

 

Ajouter l’utilisateur au groupe

ipa group-add-member group_noadmin --users=user_noadmin
  Group name: nom_du_groupe
  Description: description_du_groupe
  GID: 69200016
  Member users: utilisateur
-------------------------
Number of members added 1
-------------------------

 

/!\ Plus d’info sur la gestion des utilisateurs et groupes dans cet article.

 

 

VIII. Droits des utilisateurs et groupes

Il est préferable de travailler sur des groupes, plus facile d’administrer une politique global des utilisateurs s’appliquant au groupe.

Il convient de crée des politiques pour des besoins differents qui varie d’un pôle a un autre
Pour l’exemple, création de 2 politiques

  • allow_admin et rule_admin
  • allow_noadmin et rule_noadmin

 

Il y a aussi une commande nécessaire a tous

Dans Politique / Sudo / Commandes sudo

Créer la commande /bin/bash

 

Pour l’utilisateur admin

L’admin ne devrait pas avoir de restriction concernant les accès
Créer les règles suivantes

Dans Politique / Host-Based Access Control / Règles HBAC

Créer la règle allow_admin, éditer et modifier les champs d’autorisation

 

Puis dans Politique / Sudo / Règles sudo

Créer la règle rule_admin, éditer la et modifier les champs d’autorisation

 

 

Pour l’utilisateur non admin

On affecte un utilisateur ou un groupe d’utilisateurs et de machine
Puis on autorise les services nécessaires ftp, ssh …
Créer les règles suivantes

Dans Politique / Host-Based Access Control / Règles HBAC

Créer la règle allow_noadmin, éditer et modifier les champs d’autorisation

 

Dans Politique / Sudo / Commandes sudo

Créer les commandes /bin/ls, /usr/bin/tail, /usr/bin/less

 

Dans Politique / Sudo / Règles sudo

Créer la règle rule_noadmin, éditer la et modifier les champs d’autorisation
On autorise un groupe d’utilisateur, un groupe de machine et des commandes

On autorise les commandes basic comme tail ou less car certains fichiers ne sont pas accessibles a l’utilisateur
Cela pourrait également être /etc/init.d ou systemctl pour redémarrer les services

$ sudo less /var/log/secure
Sorry, user user_noadmin is not allowed to execute '/usr/bin/less /var/log/secure' as root on centos.izero.lan.

 

 

IX. Gestion des mots de passe

Par défaut les utilisateurs héritent de la politique global_policy qui se trouve dans PolitiquePolitiques de mot de passe

$ ipa pwpolicy-show global_policy
  Group: global_policy
  Max lifetime (days): 90
  Min lifetime (hours): 1
  History size: 0
  Character classes: 0
  Min length: 8
  Max failures: 6
  Failure reset interval: 60
  Lockout duration: 600

 

Il convient de modifier la policy, par exemple la durée de vie minimale à 30 jours, l’historique de mot de passe à 3, la longueur minimal à 12 caractères au lieu de 8 et la classe de caractère pour qui la valeur par défaut passe de 0 à 3

/!\ Pour la classe de caractère il y a 6 classes différentes qui définissent la complexité (voir Table 11.1. Password Policy Settings)
La valeur 3 est la combinaison des 3 premières classes

  1. Caractères majuscules
  2. Caractères minuscules
  3. Chiffres
  4. Caractères spéciaux
  5. Caractères 8 bits
  6. Nombre de caractères répétés
$ ipa pwpolicy-mod global_policy --minlife=30 --history=3 --minlength=12 --minclasses=3
  Group: global_policy
  Max lifetime (days): 90
  Min lifetime (hours): 30
  History size: 3
  Character classes: 3
  Min length: 12
  Max failures: 6
  Failure reset interval: 60
  Lockout duration: 600

La politique s’appliquera au nouveau utilisateur et sera appliqué lors du renouvellement de mot de passe pour les utilisateurs déjà présent

 

Il est possible de créer d’autre policy, par exemple pour les comptes de service, elle s’applique bien sur a un groupe d’utilisateur
Pour l’exemple cette policy aurait pour intérêt la durée de vie du mot de passe qui passerait de 90 à 365 jours si on veut en changer chaque année ou 9999999 si on fixe un crédential dans une appli.

$ ipa group-add --desc='Groupe de service' group_services
----------------------------
Added group "group_services"
----------------------------
  Group name: group_services
  Description: Groupe de service
  GID: 69200020

 

$ ipa pwpolicy-add group_services --minlife=30 --maxlife=365 --minclasses=3 --minlength=12 --history=3 --maxfail=6 --failinterval=60 --lockouttime=600 --priority=1
  Group: group_services
  Max lifetime (days): 365
  Min lifetime (hours): 30
  History size: 3
  Character classes: 3
  Min length: 12
  Priority: 1
  Max failures: 6
  Failure reset interval: 60
  Lockout duration: 600

 

/!\ Juste garder en mémoire, quand on crée ou renouvelle un mot de passe il faut se connecter sur l’interface web et changer ce mot de passe qui est considéré comme temporaire.

 

 

X. Tips

Des p’tits tips

 

Pour connaitre la fin de validité d’un mot de passe pour un utilisateur

$ ipa user-show user_noadmin --all | grep 'User password expiration' | awk '{print $4}' | cut -c 1-8
20210129

 

 

Pour l’option NOPASSWD il faut ajouter a la règle “rule_admin” l’option !authenticate

En cli ca donne ça

$ ipa sudorule-add-option rule_admin --sudooption='!authenticate'
--------------------------------------------------------------
Option « !authenticate » ajoutée à la règle sudo « rule_admin »
--------------------------------------------------------------
  Nom de règle: rule_admin
  Activé(e): TRUE
  Catégorie de systèmes: all
  Catégorie de commande: all
  Groupes d'utilisateurs: admins
  Option sudo: !authenticate

 

Valable aussi pour la rule_noadmin on liste bien les restrictions de commandes et les hôtes autorisés

$ ipa sudorule-add-option rule_noadmin --sudooption='!authenticate'
-----------------------------------------------------------------
Option « !authenticate » ajoutée à la règle sudo « rule_noadmin »
-----------------------------------------------------------------
  Nom de règle: rule_noadmin
  Activé(e): TRUE
  Groupes d'utilisateurs: group_noadmin
  Hôtes: centos.izero.lan
  Commandes « sudo allow »: /bin/bash, /bin/ls, /usr/bin/less, /usr/bin/tail
  Option sudo: !authenticate

 

 

XI. Référentiel et doc

Pour aller plus loin ..

https://www.freeipa.org/page/Quick_Start_Guide

https://www.freeipa.org/images/f/f7/Administration_Guide.pdf

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/linux_domain_identity_authentication_and_policy_guide/user-groups-add-member

https://www.freeipa.org/page/V2/Group_Password_Policy

https://docs.fedoraproject.org/en-US/Fedora/15/html/FreeIPA_Guide/user-pwdpolicy.html

https://linuxgurublog.wordpress.com/2017/11/25/modify-freeipa-password-policy-part-8/

 

 

Rating: 5.0/5. From 1 vote.
Please wait...

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.