\documentclass{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{geometry}
\geometry{top=15mm, bottom=15mm, left=1cm, right=1cm}
\usepackage[french]{babel}
\usepackage{pslatex}
\usepackage[colorlinks=true,urlcolor=black]{hyperref}
\usepackage{graphicx}
\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\footrulewidth}{0.4pt}
\fancyfoot[L]{Uubu.fr}
\fancyfoot[R]{lun. juil. 3 10:12:01 CEST 2017}
\lfoot{\Large \textit{Uubu.fr}}
\hypersetup{pdfinfo={
Title={sudoers.ldap},
Author={Sylvain Girod},
Creator={Bash script from uubu.fr's format version 1},
Producer={Bash script and PDFLaTeX},
Subject={Configuration LDAP sudo},
CreationDate={D:20170703101201},
ModDate={D:20170703101201},
Keywords={sudo;rbac;security}
}}
\begin{document}
 
\begin{center}
{\Huge sudoers.ldap }
\end{center}
\vspace{1cm}
 
\begin{flushleft}
 
{\large Configuration LDAP sudo}
 
\vspace{10mm}
 
\hspace{1mm}  En plus du fichier standard sudoers, sudo peut être configuré via LDAP. sudo n'a plus besoin de lire sudoers.
\vspace{5mm} \\
 
 
\hspace{1mm}  La configuration sudoers est contenue dans le conteneur LDAP ou=SUDOers. Sudo recherche d'abord l'entrée cn=defaults dans le conteneur et parcours les attributs sudoOption.
\vspace{5mm} \\
 
 
\hspace{1mm}  L'équivalent d'un sudoers dans LDAP est un sudoRole. Il consiste des attributs suivants:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} sudoUser]{Un nom d'utilisateur valide, \#<UID>, \%<group>, \%\#<GID>, +<netgroup>, ou \%:<groupe non unix> \%:\#<ID de groupe non unix>}
\item[\hspace{1mm} sudoHost]{Nom d'hôte, IP, réseau ou +<netgroup d'hôte>. ALL match tous les hôte.}
\item[\hspace{1mm} sudoCommand]{Nom d'une commande et ses arguments, optionnellement préfixé par '!'}
\item[\hspace{1mm} sudoOption]{Identique aux options globales, mais spécifiques au sudoRole}
\item[\hspace{1mm} sudoRunAsUser]{user sous lequel la commande est lancée}
\item[\hspace{1mm} sudoRunAsGroup]{Groupe sous lequel la commande est lancée}
\item[\hspace{1mm} sudoNotBefore]{horodatage de début de validité du sudoRole}
\item[\hspace{1mm} sudoNotAfter]{horodatage de fin de validité du sudoRole}
\item[\hspace{1mm} sudoOrder]{Les entrées sudoRole LDAP n'ont pas d'ordre. sudoOrder est un entier utilisé pour trier les entrées qui matchent.}
\end{description}
 
\vspace{1cm}{\huge Anatomie de la recherche LADP sudoers }
 
\
 
\hspace{1mm}  En recherchant un sudoer utilisant LDAP il y a seulement 2 ou 3 requêtes LDAP par invocation. La première requête sert à parcourir les options globales. Le second sert à matche le nom de l'utilisateur et les groupes auquel l'utilisateur appartient. Si aucun match n'est retourné pour l'utilisateur ou les groupes, une 3ème requête retourne toutes les entrées contenant les netgroups de l'utilisateur et les groupes non-unix et vérifie si l'utilisateur appartient à l'un d'entre-eux.
\vspace{5mm} \\
 
 
\hspace{1mm}  Si les entrées timées sont activées avec la directive SUDOERS\_TIMED, les requêtes LDAP incluent un sous-filtre qui limite la recherche aux entrées qui satisfont les contraintes de temps.
\vspace{5mm} \\
 
 
\hspace{1mm}  Si la directive NETGROUP\_BASE est présente, les requêtes sont effectuées pour déterminer la liste des netgroups auquel l'utilisateur appartient avant la requête sudoers. Cela permet d'inclure la liste des netgroups dans les requêtes sudoers de la même manière qu'avec les groupes unix. La 3ème requête n'est pas effectuées sauf si un plugin group est également effectuée. Les requêtes LDAP sont effectuées par sudo comme suit:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} 1.]{Match tous les enregistrement nisNetgroup avec un nisNetgroupTriple contenant l'utilisateur, l'hôte et le domaine NIS. La requête matche les entrées nisNetgroupTriple avec la forme courte ou longue du nom de domaine ou aucun nom d'hôte. Si le domaine NIS est définis, la requête matche seulement les entrées qui incluent de domaine ou pour lequel il n'y a pas de domaine présent. Si le domaine NIS n'est pas définis, un wildcard est utilisé pour matcher tous domaine pas prend en compte que le schéma NIS utilisé par les serveurs LDAP peuvent ne pas supporter les wildcard pour nisNetgroupTriple.}
\item[\hspace{1mm} 2.]{Les requêtes répétées sont effectuées pour trouver tout enregistrement nisNetgroup imbriqués avec une entrée memberNisNetgroup qui réfère à un enregistrement déjà matché.}
\end{description}
 
\vspace{1cm}{\huge Différence entre les sudoers LDAP et non-LDAP }
 
\
 
\hspace{1mm}  Il y a quelques subtiles différences dans la comportement de sudoers utilisant LDAP. La plus grosse différence étant l'ordre des entrées et attributs retournés, qui sont contrôlés par sudoOrder.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Configurer ldap.conf }
 
\
 
\hspace{1mm}  sudo lit le fichier /etc/ldap.conf. Seuls ces options sont supportés par sudo:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} BIND\_TIMELIMIT]{Spécifie le temps en secondes d'attente de connection à un serveur LDAP.}
\item[\hspace{1mm} BINDDN]{Identité, sous la formate d'un DN, à utiliser pour effectuer les opérations LDAP}
\item[\hspace{1mm} BINDPW]{Mot de passe de BINDDN}
\item[\hspace{1mm} DEREF]{Spécifie comment déréférencer les alias}
\item[\hspace{1mm} HOST]{Nom du serveur LDAP}
\item[\hspace{1mm} KRB5\_CCNAME]{Chemin du cache d'accréditifs Kerberos 5}
\item[\hspace{1mm} LDAP\_VERSION]{Version du protocole LDAP}
\item[\hspace{1mm} NETGROUP\_BASE]{DN de base pour les recherches des netgroups}
\item[\hspace{1mm} NETGROUP\_SEARCH\_FILTER]{Filtre de recherche des netgroupes}
\item[\hspace{1mm} PORT]{Port du serveur LDAP}
\item[\hspace{1mm} ROOTBINDDN]{DN pour les opérations LDAP privilégiées}
\item[\hspace{1mm} ROOTUSE\_SASL]{Active l'authentification SASL pour les traitements privilégiés}
\item[\hspace{1mm} SASL\_AUTH\_ID]{utilisateur SASL pour la connection LDAP}
\item[\hspace{1mm} SASL\_MECH]{Liste de mécanismes SASL à utiliser}
\item[\hspace{1mm} SASL\_SECPROPS]{Propriétés de sécurité SASL}
\item[\hspace{1mm} SSL]{Active TLS pour les communications LDAP}
\item[\hspace{1mm} SUDOERS\_BASE]{DN de base pour les recherches SUDO}
\item[\hspace{1mm} SUDOERS\_DEBUG]{Niveaux de débuggage pour les requêtes sudo}
\item[\hspace{1mm} SUDOERS\_SEARCH\_FILTER]{Filtre de recherche pour les requêtes sudo}
\item[\hspace{1mm} SUDOERS\_TIMED]{Spécifie si sudoNotBefore et sudoNotAfter sont évalués}
\item[\hspace{1mm} TIMELIMIT]{Délai en secondes d'attente d'une réponse LDAP}
\item[\hspace{1mm} TIMEOUT]{Délai en secondes d'attente d'une réponse depuis divers API LDAP}
\item[\hspace{1mm} TLS\_CACERTFILE]{Certificat de l'autorité}
\item[\hspace{1mm} TLS\_CACERTDIR]{Répertoire contenant les certificats d'autorité}
\item[\hspace{1mm} TLS\_CERT]{Certificat client}
\item[\hspace{1mm} TLS\_CHECKPEER]{Vérifie le certificat du serveur}
\item[\hspace{1mm} TLS\_KEY]{Clé privée du client}
\item[\hspace{1mm} TLS\_CIPHERS]{Liste d'algorithmes de chiffrement TLS à utiliser}
\item[\hspace{1mm} TLS\_KEYPW]{Mot de passe pour déchiffrer la clé privée. Peut être en base64 (base64:dGVzdA==)}
\item[\hspace{1mm} TLS\_RANDFILE]{Source d'entropie}
\item[\hspace{1mm} URI]{URI du serveur LDAP}
\item[\hspace{1mm} USE\_SASL]{Active l'authentification SASL}
\item[\hspace{1mm} ROOTSASL\_AUTH\_ID]{Utilisateur SASL à utiliser avec ROOTUSE\_SASL}
\end{description}
 
\vspace{1cm}{\huge Configurer nsswitch.conf }
 
\
 
\hspace{1mm}  sudo consulte nsswitch.conf puor spécifie l'ordre de recherce sudoers. sudo recherche une ligne commençant par sudoers: et l'utilise pour déterminer l'ordre de recherche. Noter que sudo n'arrête pas sa recherche après le premier match et le dernier match a précédence. Les sources suivantes sont reconnus:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} files]{Lit le fichier /etc/sudoers}
\item[\hspace{1mm} ldap]{Lit sudoers depuis LDAP}
\end{description}
 
\hspace{1mm}  De plus, l'entrée [NOTFOUND=return] court-circuite la recherche si l'utilisateur n'a pas été trouvé dans la source précédente
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Intergration avec sssd }
 
\
 
\hspace{1mm}  Dans les systèmes avec System Security Service Daemon il est possible d'utiliser SSSD pour cacher les règles sudoers LDAP. pour utiliser sssd, il faut utiliser sssd au lieu de ldap dans l'entrées sudoers dans /etc/nsswitch.conf. Noter que /etc/ldap.conf n'est pas utilisé par sssd.
\vspace{5mm} \\
 
\end{flushleft}
\end{document}
