Skip to content

Connexion en SSO via LDAP Linux

Note

Dans ce cas on utilise realm pour joindre le domaine la commande realm list ne retourne que ce qu'elle a elle-même configuré.

Installation initial sur debian

sudo apt install sssd realmd krb5-user

Commande pour rejoindre un domaine :

sudo realm join domain.com

Commande pour sortir du domaine :

sudo realm leave domain.com

Configuration avancé

Le plus simple est le playbook ansible :

Ce playbook ajoute le serveur dans le domaine domain.com il rajoute les utilisateurs du groupe sec-adm-system-n3 peuvent se connecter et sont dans le groupe sudoers et peuvent se connecter via la commande suivante :

ssh domain.com\user.nom@ipduserveur

- name: Service d'authentification de session unifié
  hosts: debian11
  become: true
  ignore_unreachable: true
  vars_files:
    - secret_vars.yml
  vars:
    debian_11: "{{ ansible_facts['os_family'] == 'Debian' and ansible_facts['distribution'] == 'Debian' and ansible_facts['distribution_version'].startswith('11') }}"

  tasks:
    - name: Installer les dépendances nécessaires pour realm et sssd
      ansible.builtin.package:
        name:
          - realmd
          - sssd
          - sssd-tools
          - libnss-sss
          - libpam-sss
          - adcli
          - samba-common-bin 
          - krb5-user
          - packagekit-tools
          - python3-apt
          - python3-pexpect

        state: present
    - name: Vérifier si déjà joint au domaine domain.com
      command: realm list
      register: realm_list
      changed_when: false
    - name: Joindre au domaine domain.com
      ansible.builtin.expect:
        command: realm join domain.com -U "{{ domain_admin_user }}"
        responses:
         Password: "{{ domain_admin_password }}"
      no_log: true
      when: "'domain.com' not in realm_list.stdout"
      register: realm_join

    - name: Configurer /etc/sssd/sssd.conf
      ansible.builtin.copy:
        dest: /etc/sssd/sssd.conf
        content: |
          [sssd]
          domains = domain.com
          config_file_version = 2

          [domain/domain.com]
          default_shell = /bin/bash
          krb5_store_password_if_offline = True
          cache_credentials = True
          krb5_realm = domain.com
          realmd_tags = manages-system joined-with-adcli
          id_provider = ad
          fallback_homedir = /home/%u@%d
          ad_domain = domain.com
          use_fully_qualified_names = True
          ldap_id_mapping = True
          access_provider = simple
          simple_allow_groups = sec-adm-system-n3
      register: sssd_conf_updated

    # - name: Configurer /etc/krb5.conf
    #   ansible.builtin.copy:
    #     dest: /etc/krb5.conf
    #     content: |
    #       [libdefaults]
    #           default_realm = domain.com
    #           dns_lookup_realm = false
    #           dns_lookup_kdc = true
    #           ticket_lifetime = 24h
    #           renew_lifetime = 7d
    #           forwardable = true

    #       [realms]
    #           domain.com = {
    #               kdc = kdc.domain.com
    #               admin_server = kdc.domain.com
    #           }

    #       [domain_realm]
    #           .domain.com = domain.com
    #           domain.com = domain.com
    #   register: krb5_conf_updated

    - name: Redémarrer le service sssd
      ansible.builtin.service:
        name: sssd
        state: restarted
      when: sssd_conf_updated.changed 

    - name: Configurer /etc/pam.d/common-session
      ansible.builtin.copy:
        dest: /etc/pam.d/common-session
        content: |
          session [default=1]                     pam_permit.so
          session requisite                       pam_deny.so
          session required                        pam_permit.so
          session required                        pam_unix.so
          session optional                        pam_sss.so
          session optional                        pam_systemd.so
          session required pam_mkhomedir.so skel=/etc/skel/ umask=0022     

    - name: Configurer /etc/sudoers.d/domainadmin
      ansible.builtin.blockinfile:
        path: /etc/sudoers.d/domainadmin
        block: |
          %SEC-ADM-System-N3@domain.com ALL=(ALL:ALL) ALL
        marker: "# {mark} ANSIBLE MANAGED BLOCK"
        create: yes

    - name: Créer le répertoire "Disable" Apparmor
      file:
        path: /etc/apparmor.d/disable/
        state: directory
      when: debian_11

    - name: Désactive usr.sbin.sssd dans Apparmor pour éviter un surplus de journaux dans journald
      command:
        cmd: ln -sf /etc/apparmor.d/usr.sbin.sssd /etc/apparmor.d/disable/
        creates: /etc/apparmor.d/disable/usr.sbin.sssd
      register: symlink_result
      when: debian_11

    - name: Recharge la configuration Apparmor pour usr.sbin.sssd
      command:
        cmd: apparmor_parser -R /etc/apparmor.d/usr.sbin.sssd
      register: result
      changed_when: "'Profile unloaded' in result.stdout"
      when: 
        - debian_11
        - symlink_result.changed
      notify: 
        - Print change

    - name: Redémarre apparmor.service si nécessaire
      systemd:
        name: apparmor.service
        state: restarted
      when: 
        - debian_11
        - symlink_result.changed

  handlers:
    - name: Print change
      debug:
        msg: "La configuration d'Apparmor pour usr.sbin.sssd a été rechargée"

Ajout d'utilisateur

ont peut rajouter les utilisateur dans ce fichier par exemple /etc/sssd/conf.d/sssd_custom.conf

[domain/domain.com]
simple_allow_users = user.deux, user.un

Assurez-vous que les permissions sur le fichier sont correctes pour que uniquement root puisse le lire :

sudo chmod 600 /etc/sssd/conf.d/sssd_custom.conf
sudo chown root:root /etc/sssd/conf.d/sssd_custom.conf

Dans le groupe sudoer dans ce fichier par exemple /etc/sudoers.d/standartuser

user.un@domain.com ALL=(ALL:ALL) ALL
user.deux@domain.com ALL=(ALL:ALL) ALL

Idem vérifier que les permissions sur le fichier sont correctes pour que uniquement root puisse le lire :

sudo chmod 600 /etc/sudoers.d/standartuser
sudo chown root:root /etc/sudoers.d/standartuser

Note

Pour info le champs utilisé pour la connection est le SamAccountName

capture_d'écran_2024-07-19_144442.png