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) 1 vm Centos 7 pour le client (1 cpu/1go ram) |
- 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
1 |
$ sudo yum update |
- Installation des paquets nécessaires
1 |
$ sudo yum install ipa-server ipa-server-dns rng-tools |
- Installation de paquet utile
1 |
$ sudo yum install vim wget |
- Configurer le nom d’hôte -> machine.domaine.tld
1 |
$ sudo hostnamectl set-hostname freeipa.izero.lan |
- Ajouter l’entrée ip/hostname dans le fichier /etc/hosts
1 |
$ sudo bash -c "echo 192.168.3.225 freeipa.izero.lan freeipa >> /etc/hosts" |
- Redémarrer le système
1 |
$ 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
1 |
$ sudo firewall-cmd --add-service=freeipa-ldap --add-service=freeipa-ldaps --permanent |
1 |
$ sudo firewall-cmd --add-port={80/tcp,443/tcp,389/tcp,636/tcp,88/tcp,464/tcp,53/tcp,88/udp,464/udp,53/udp,123/udp} --permanent |
1 |
$ 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$ 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
1 2 3 4 5 6 |
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
1 2 3 4 |
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
1 2 3 4 |
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]: |
1 2 |
The kerberos protocol requires a Realm name to be defined. This is typically the domain name converted to uppercase. |
Configurer le gestionnaire d’annuaire
1 2 3 4 5 6 7 8 |
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
1 2 3 4 5 |
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
1 2 |
Checking DNS domain izero.lan., please wait ... Do you want to configure DNS forwarders? [yes]: yes |
Confirmer pour configurer un second dns
1 2 |
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
1 2 |
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 |
1 |
DNS forwarder 1.0.0.1 added. You may add another. |
Finaliser la configuration, et procéder a l’installation
1 2 |
Checking DNS forwarders, please wait ... Do you want to search for missing reverse zones? [yes]: no |
1 2 3 4 5 6 7 8 9 10 11 12 |
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 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
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
1 |
$ sudo authconfig --enablemkhomedir --update |
Penser a demarrer et activer au demarrage automatique le service rngd
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[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
1 |
$ sudo ipactl status |
1 2 3 4 5 6 7 8 9 10 11 |
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
1 |
$ cat /etc/resolv.conf |
1 |
nameserver 192.168.3.225 |
1 |
$ sudo yum install ipa-client |
Puis enroller la machine
1 |
$ 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
1 2 3 4 5 6 7 8 9 10 11 12 |
$ 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
1 |
$ kinit admin |
1 |
Password for admin@IZERO.LAN: |
Exemple pour vérifier l’état d’un compte
1 |
$ ipa user-find admin |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
--------------------------- 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
1 |
$ kinit admin |
1 |
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
1 |
$ ipa user-add user_noadmin --first=User --last=Noadmin --password |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
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 |
1 |
$ ipa user-add user_admin --first=User --last=Admin --password |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
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
1 |
$ ipa user-mod user_admin --sshpubkey="ssh-rsa AAAAB365wdrdbBTFX56xb.........." |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
--------------------------- 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
1 |
$ ipa group-find |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
------------------------ 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
1 |
$ 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
1 |
$ ipa group-add --desc='description_du_groupe' group_noadmin' |
1 2 3 4 5 6 |
--------------------------- Added group "group_noadmin" --------------------------- Group name: group_noadmin Description: description_du_groupe GID: 69200012 |
Ajouter l’utilisateur au groupe
1 |
ipa group-add-member group_noadmin --users=user_noadmin |
1 2 3 4 5 6 7 |
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
1 |
$ sudo less /var/log/secure |
1 |
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 Politique / Politiques de mot de passe
1 |
$ ipa pwpolicy-show global_policy |
1 2 3 4 5 6 7 8 9 |
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
- Caractères majuscules
- Caractères minuscules
- Chiffres
- Caractères spéciaux
- Caractères 8 bits
- Nombre de caractères répétés
1 |
$ ipa pwpolicy-mod <strong>global_policy</strong> --minlife=30 --history=3 --minlength=12 --minclasses=3 |
1 2 3 4 5 6 7 8 9 |
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.
1 |
$ ipa group-add --desc='Groupe de service' group_services |
1 2 3 4 5 6 |
---------------------------- Added group "group_services" ---------------------------- Group name: group_services Description: Groupe de service GID: 69200020 |
1 |
$ ipa pwpolicy-add group_services --minlife=30 --maxlife=365 --minclasses=3 --minlength=12 --history=3 --maxfail=6 --failinterval=60 --lockouttime=600 --priority=1 |
1 2 3 4 5 6 7 8 9 10 |
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
1 |
$ ipa user-show user_noadmin --all | grep 'User password expiration' | awk '{print $4}' | cut -c 1-8 |
1 |
20210129 |
Pour l’option NOPASSWD il faut ajouter a la règle “rule_admin” l’option !authenticate
En cli ca donne ça
1 |
$ ipa sudorule-add-option rule_admin --sudooption='!authenticate' |
1 2 3 4 5 6 7 8 9 |
-------------------------------------------------------------- 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
1 |
$ ipa sudorule-add-option rule_noadmin --sudooption='!authenticate' |
1 2 3 4 5 6 7 8 9 |
----------------------------------------------------------------- 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://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/
–https://access.redhat.com/solutions/1605213