Files
orange-yourdev-login/Notes_sssd.md
Michel Decima 20ec88944c feat: use standard template for ccache file
Default SSSD template for ccache file is /tmp/krb5cc_%U_XXXXXX, where
XXXXXX is a suffix that will be interpreted by mkstemp(3) to create a
unique file name, while the standard configuration of the libkrb5
library is `/tmp/krb5cc_%U`.

To guarantee compatibility with the existing system, we force the use
of the standard model in SSSD.
2022-04-13 15:24:17 +02:00

194 lines
6.7 KiB
Markdown

SSSD, premier contact.
----------------------
SSSD sait faire de l'authentification LDAP et Kerberos et plein d'autres.
On peut se limiter à Kerberos, on n'est pas obligé d'utiliser toutes les
fonctionnalités.
Le fichier `sssd.conf` contient un paramétrage Kerberos (realm, etc). Les
possibilités de configuration ne sont pas aussi évoluées que celles qu'on
trouve dans `/etc/krb5.conf`. Il est possible d'en mettre un minimum dans
`sssd.conf`, et laisser le principal dans `krb5.conf`, ça tombe bien.
Depuis que j'ai installé et configuré SSSD, l'authentification de sudo
sait non seulement utiliser mon mot de passe local, mais aussi mon mot
de passe AD ! Et cerise sur le gateau : ça renouvelle automatiquement
mon ticket Kerberos !
Debug SSSD
----------
D'après sssd.conf(5), on active le debug avec la propriété `debug_level` à
valeur de 0 à 10, à placer dans toutes les sections de la configuration,
pas seulement dans [sssd]. On pourra utiliser un fichier de configuration
drop-in pour faciliter la mise en place.
Pour observer les logs:
```
# journalctl -f -g pam
# journalctl -f -u sssd.service -u sssd-pam.socket -u sssd-pam.service
# tail -f /var/log/auth.log
```
La commande `sssctl` du paquet `sssd-tools` donne plein d'infos utiles sur
l'état du service sssd, en particulier pour vérifier la configuration:
```
$ sudo sssctl config-check
```
Voir `sssctl --help` pour toutes les options (le man est quasi vide).
Service PAM pour SSSD
---------------------
La documentation en ligne indique qu'il faut configurer les "services"
de SSSD comme ceci:
```
$ head -2 /etc/sssd/sssd.conf
[sssd]
services = nss,pam
```
Mais à l'usage, on s'aperçoit que SSSD n'est pas utilisé dans le
processus de login, et dans les logs on voit ceci:
```
$ journactl -u sssd-pam.socket
systemd[1]: Starting SSSD PAM Service responder socket.
sssd_check_socket_activated_responders[17888]:
Misconfiguration found for the pam responder.
The pam responder has been configured to be socket-activated but it's
still mentioned in the services' line in /etc/sssd/sssd.conf.
Please, consider either adjusting your services' line in
/etc/sssd/sssd.conf or disabling the pam's socket by calling:
"systemctl disable sssd-pam.socket"
systemd[1]: Dependency failed for SSSD PAM Service responder socket.
```
Donc on a deux choix possibles:
1) soit on laisse le fichier `sssd.conf` en l'état, et on désactive
la socket `sssd-pam.socket`.
2) soit on active la socket `sssd-pam.socket` et on supprime `pam`
de la liste des services dans `sssd.conf`.
Sachant que par défaut la socket est activée à l'installation du paquet
`sssd`, le choix le plus facile c'est le n°2, on modifie la configuration
dans le fichier `sssd.conf`.
Activer SSSD dans GDM (password)
--------------------------------
Quatre opérations à faire:
- basculer l'alternative `gdm-smartcard` sur `gdm-smartcard-smartcard-or-password`
- desactiver l'authentification par smartcard dans `dconf` pour GDM
- démarrer le service `sssd`
- redémarrer le service `gdm3`
soit:
```
# update-alternatives --set gdm-smartcard /etc/pam.d/gdm-smartcard-sssd-or-password
# sed -Ei 's/(enable-smartcard-authentication)=.*/\1=false/' /etc/dconf/db/gdm.d/03-smartcard
# dconf update
# systemctl enable sssd.service sssd-pam.socket
# systemctl start sssd.service
# systemctl restart gdm3
```
Pour l'instant, on désactive gdm-smardcard dans la configuration GDM via `dconf`
parce que la gestion du PKCS#11 dans SSSD n'est pas encore configurée, et ce n'est
pas aussi facile qu'avec `pam_pkcs11` ...
SSSD et PKCS#11
---------------
Pas certain que SSSD puisse fonctionner avec SmartCard + utilisateur local,
la documentation mentionne explicitement LDAP comme sources d'identité,
donc il faudrait joindre le domaine AD, fonctionnerait seulement online
(sauf si cache).
Stockage du Credential Cache
----------------------------
Par défaut, SSSD stocke le credential cache dans un fichier dont le modèle
de nom est `/tmp/krb5cc_%U_XXXXXX`, avec `%U` qui est remplacé par le UID
de l'utilisateur, et `XXXXXX` est remplacé par `mkstemp(3)` pour obtenir
un nom de fichier unique. Pour le premier utilisateur humain, cela donne:
```
/tmp/krb5cc_1000_TiXG5v
```
_Important: il semble qu'il y a un fichier par session, quand on se connecte
à la machine en SSH, on voit apparaitre un nouveau fichier `krb5cc` avec un
suffixe différent. Ces fichiers ne sont pas nettoyés lorsque la connexion
SSH est coupée._
Ce modèle est différent de celui utilisé par la bibliothèque système
`libkrb5` et la configuration `/etc/krb5.conf`, qui utilise plutôt
`/tmp/krb5cc_%U`, ce qui donne par exemple:
```
/tmp/krb5_1000_TiXG5v
```
Pour conserver la compatibilité avec l'existant, on force dans la
configuration SSSD l'utilisation du modèle de nom classique, c'est peut être
moins sécurisé, mais ça fait moins de surprises dans les scripts existants
qui utilisent l'authentification Kerberos (cf `orange-yourdev-setup`).
Ce qui donne dans la configuration:
```
krb5_ccachedir = /tmp
krb5_ccname_template = FILE:%d/krb5cc_%U
```
Pour bien faire, il faudrait stocker le cache dans la mémoire du noyau, c'est
ce qui est le plus sécurisé, avec la propriété:
```
krb5_ccname_template = KEYRING:persistent:%U
```
et reporter la propriété équivalente dans `/etc/krb5.conf`.
Néanmoins, ce changement a des conséquences:
- il faut vérifier que tous nos scripts fonctionnent toujours
- il faut gérer la transition de `/etc/krb5.conf`
- l'applet `krb5-auth-dialog` ne gère pas le mode KEYRING
- dans GNOME, il faut tester le dialogue "comptes en lignes" pour Kerberos
TODO
----
Les choses à voir:
- `sss-certmap`
- `sss_cache`
- `p11-child`
Et la configuration PKCS#11 dans SSSD ...
Références
----------
- [SSSD - Introduction]
- [SSSD - Migrating from pam_krb5]
- [SSSD - Design / Require Smartcard authentication ]
- [RHEL-8 / MANAGING SMART CARD AUTHENTICATION]
- [GUI-Login with SSSD managed users fails]
[SSSD - Introduction]: https://sssd.io/docs/introduction.html
[SSSD - Migrating from pam_krb5]: https://sssd.io/docs/krb/krb-migration.html
[SSSD - Design / Require Smartcard authentication ]: https://docs.pagure.org/sssd.sssd/design_pages/smartcard_authentication_require.html
[RHEL-8 / MANAGING SMART CARD AUTHENTICATION]: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html-single/managing_smart_card_authentication/index
[GUI-Login with SSSD managed users fails]: https://ask.fedoraproject.org/t/gui-login-with-sssd-managed-users-fails/6606/2
[smartcard cert mapping offline (AD)]: https://lists.fedorahosted.org/archives/list/sssd-users@lists.fedorahosted.org/thread/STBGBEZI6D5A3MKMB26P2FNFLURML5DB/