Table of Contents

Guida: Installazione e Configurazione di FreeIPA (Server e Client)

Questa guida illustra i passaggi principali per:

  1. Installare e configurare un FreeIPA Server.
  2. Unire i client al dominio FreeIPA (ldap/kerberos).
  3. Montare le home directory degli utenti da un file server NAS, in modo da centralizzare i dati.

Sommario


1. Introduzione

FreeIPA (Free Identity, Policy and Audit) è una soluzione integrata che fornisce:

  • Gestione di identità (LDAP),
  • Autenticazione centralizzata (Kerberos),
  • Controllo di accesso basato su host e servizi,
  • Integrazione con DNS e NTP.

Questa guida aiuta a impostare un server FreeIPA per autenticare utenti in un laboratorio, utilizzando un NAS (NFS) per memorizzare le home directory in modo che gli utenti abbiano un ambiente coerente indipendentemente dalla postazione su cui accedono.


2. Setup e Requisiti

  1. Sistema operativo: Fedora, RHEL, CentOS Stream (versione >= 7/8/9) o derivati.
  2. DNS: È consigliato che il server FreeIPA gestisca anche la zona DNS o che il vostro DNS esterno punti correttamente al server IPA. Assicuratevi di avere i record A e PTR corretti per il server e i client.
  3. NTP: server e client devono essere sincronizzati.
  4. Firewall: sul server FreeIPA vanno aperte tutte le porte necessarie (80/tcp, 443/tcp, 389/tcp, 636/tcp, 88/tcp/udp, 464/tcp/udp, 53/tcp/udp se gestite anche il DNS).
  5. Hostname: il server e i client devono avere host FQDN validi.

3. Installazione FreeIPA Server

3.1 Requisiti Server

  • Assicurarsi che il nome host del server sia il suo Fully Qualified Domain Name (FQDN), ad esempio ipa.lab.students.cs.unibo.it.
  • Configurare la risoluzione DNS corretta (nameserver).

3.2 Installazione Pacchetti

Installare i pacchetti necessari. Ad esempio su Fedora/CentOS/RHEL:

sudo dnf install -y freeipa-server freeipa-server-dns

3.3 Configurazione Iniziale di FreeIPA Server

sudo ipa-server-install --setup-dns \
                        --mkhomedir \
                        --realm LAB.STUDENTS.CS.UNIBO.IT \
                        --domain lab.students.cs.unibo.it \
                        --ds-password <PASSWORD_DS> \
                        --admin-password <PASSWORD_ADMIN> \
                        --hostname ipa.lab.students.cs.unibo.it \
                        --forwarder 130.136.3.1 \
                        --unattended
  • –setup-dns: abilita il DNS integrato di FreeIPA (facoltativo).
  • –mkhomedir: crea automaticamente la home directory per gli utenti al primo login.
  • –realm: nome Kerberos (maiuscolo).
  • –domain: dominio DNS (minuscolo).
  • –ds-password: password Directory Manager (LDAP).
  • –admin-password: password utente admin di FreeIPA.
  • –hostname: FQDN del server.
  • –forwarder: DNS forwarder (se gestisci DNS integrato).
  • –unattended: esecuzione non interattiva.

3.4 Verifica

systemctl status ipa

È anche possibile accedere all’interfaccia web su https://ipa.lab.students.cs.unibo.it/ con l’utente admin.

4 Creazione Utenti e Gruppi

  • Da WebGui
  1. Accedere alla webgui

image alt text

  1. Premere su Add

image alt text

  1. Compilare tutti i campi stando attenti al gruppo se impostato

image alt text

  • Da CLI
## Crea un utente
ipa user-add nomeutente --first=Nome --last=Utente --email=nome.utente@example.com

## Imposta o reimposta password
ipa passwd nomeutente

5 Configurazione NAS per le Home Directory

  1. Esportare la share NFS dal NAS: ad esempio /mnt/pool0/lab_home/user_lab.
  2. UID/GID: FreeIPA sincronizza gli UID/GID degli utenti, quindi gli utenti appariranno con le stesse credenziali su ogni client.
  3. Controllare le impostazioni di esportazione, ad esempio /etc/exports (dipende dal NAS in uso).

6 Configurazione FreeIPA Client

- name: set-variabiles
  set_fact:
    nas_ip: 130.136.201.200
    mounting_point_nas: /mnt/pool0/lab_home/user_lab
    freeipa_client_domain: lab.students.cs.unibo.it
    freeipa_client_server: ipa.lab.students.cs.unibo.it
    freeipa_client_realm: LAB.STUDENTS.CS.UNIBO.IT
    freeipa_client_principal: admin
    freeipa_client_password: fedoraadm
    freeipa_client_fqdn: ipa.lab.students.cs.unibo.it
    freeipa_client_install_options:
      - "--mkhomedir"

- name: Uninstall ipa-client
  become: true
  ansible.builtin.command: ipa-client-install --uninstall
  ignore_errors: True

- name: Install all required packages
  become: true
  ansible.builtin.package:
    name:
      - freeipa-client
    state: absent

- name: Delete ipa folder
  ansible.builtin.file:
    state: absent
    path: /etc/ipa/*

- name: Unconditionally reboot the machine with all defaults
  ansible.builtin.reboot:
     msg: "Rebooting machine in 5 seconds"

- name: Configurare /etc/resolv.conf
  become: true
  ansible.builtin.lineinfile:
    path: /etc/resolv.conf
    regexp: '^nameserver'
    line: 'nameserver 130.136.3.1'
    state: present

- name: Install all required packages
  become: true
  ansible.builtin.package:
    name:
      - nfs-common
      - freeipa-client
    state: present

- name: Change hostname
  shell: hostnamectl set-hostname "{{ hostname }}".lab.students.cs.unibo.it

- name: Create dir for home mount
  become: true
  file:
    state: directory
    path: /home/mnt

- name: Modify /etc/fstab file
  become: true
  ansible.posix.mount:
    path: /home/mnt
    src: "{{ nas_ip }}:{{ mounting_point_nas }}"
    fstype: nfs
    opts: default
    state: mounted

- name: Install FreeIPA client
  become: true
  block:
    - name: Install FreeIPA client
      ansible.builtin.command: >
        sudo ipa-client-install -v
        --domain={{ freeipa_client_domain }}
        --server={{ freeipa_client_server }}
        --realm={{ freeipa_client_realm }}
        --principal={{ freeipa_client_principal }}
        --password={{ freeipa_client_password }}
        --force
        --enable-dns-updates
        --mkhomedir
        --unattended        
      args:
        creates: /etc/ipa/default.conf

- name: Modify permission for home directory
  become: true
  lineinfile:
    path: /etc/login.defs
    regexp: "^{{ item.regex }}"
    line: "{{ item.line }}"
    state: present
  loop:
    - { regex: "UMASK", line: "UMASK 0700" }
    - { regex: "HOME_MODE", line: "HOME_MODE 0700" }

- name: Unconditionally reboot the machine with all defaults
  ansible.builtin.reboot:
     msg: "Rebooting machine in 5 seconds"

6.2 Spiegazione Task chiave

  • Disinstallazione e pulizia: rimuove precedenti configurazioni (ipa-client-install –uninstall) e i file sotto /etc/ipa/.
  • Reboot: riavvia la macchina dopo la pulizia.
  • DNS: configura /etc/resolv.conf per puntare al server DNS (130.136.3.1).
  • Installazione pacchetti: freeipa-client e nfs-common.
  • Impostazione hostname: hostnamectl set-hostname.
  • Montaggio NFS: crea /home/mnt e aggiorna /etc/fstab per montare la share nas_ip:mounting_point_nas.
  • ipa-client-install: registra il client al server FreeIPA (–unattended, –mkhomedir).
  • Permessi home directory: modifica UMASK e HOME_MODE in /etc/login.defs.
  • Riavvio finale: per completare la configurazione.

7 Riferimenti & Tips

7.1 Configurazione TrueNAS

Per la configurazione di TrueNAS per far si che tramite NFS rilevi anche gli uid degli utenti, dobbiamo impostare TrueNAS in questo modo: image alt text image alt text image alt text image