@xkcd by Randall Munroe |
Dans l’article précédent « RHEL6/OL6 et Oracle Unified Directory (1/2) : Authentification LDAP« , vous avez pu configurer l’authentification et la gestion des comptes et groupes Linux dans Oracle Unified Directory. Cela permet de centraliser la gestion des droits de vos administrateurs ainsi que leur mot de passe.
Seulement voilà, un administrateur n’est pas grand chose s’il ne peut pas se connecter oracle ou, mieux, root ! Voici donc une solution pour stocker l’ensemble de la configuration de la commande sudo
dans votre annuaire LDAP. Vous constaterez, une fois encore, que Oracle Unified Directory est d’une simplicité d’utilisation déconcertante. Et vous aurez les cartes en main pour améliorer la gestion de votre sécurité.
Note 1:Les versions 6.1 de Redhat EL et Oracle Linux souffrent d’un problème avec le package
sudo
et la configuration LDAP comme décrit dans le bug 760843. Le problème n’est pas présent en 6.3.
Note 2 :
Pour tous les détails de la configurationsudo
avec un annuaire LDAP et notamment la signification de tous les attributs et classes associées reportez-vous au « Sudoers LDAP Manual«
Schéma LDAP et SUDO
Le schéma utilisé pour stocker la configuration SUDO
dans Oracle Unified Directory n’est pas chargé par défaut. Heureusement avec OUD, cette opération est extrêmement simple, connectez-vous avec l’outil de votre choix et chargez un fichier LDIF dont le contenu est celui ci-dessous :
dn: cn=schema
changetype: modify
add: attributeTypes
attributeTypes: ( 1.3.6.1.4.1.15953.9.1.1
NAME 'sudoUser'
DESC 'User(s) who may run sudo'
EQUALITY caseExactIA5Match
SUBSTR caseExactIA5SubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
X-ORIGIN 'LDAP Sudoers' )
dn: cn=schema
changetype: modify
add: attributeTypes
attributeTypes: ( 1.3.6.1.4.1.15953.9.1.2
NAME 'sudoHost'
DESC 'Host(s) who may run sudo'
EQUALITY caseExactIA5Match
SUBSTR caseExactIA5SubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
X-ORIGIN 'LDAP Sudoers' )
dn: cn=schema
changetype: modify
add: attributeTypes
attributeTypes: ( 1.3.6.1.4.1.15953.9.1.3
NAME 'sudoCommand'
DESC 'Command(s) to be executed by sudo'
EQUALITY caseExactIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
X-ORIGIN 'LDAP Sudoers' )
dn: cn=schema
changetype: modify
add: attributeTypes
attributeTypes: ( 1.3.6.1.4.1.15953.9.1.4
NAME 'sudoRunAs'
DESC 'User(s) impersonated by sudo'
EQUALITY caseExactIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
X-ORIGIN 'LDAP Sudoers' )
dn: cn=schema
changetype: modify
add: attributeTypes
attributeTypes: ( 1.3.6.1.4.1.15953.9.1.5
NAME 'sudoOption'
DESC 'Options(s) followed by sudo'
EQUALITY caseExactIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
X-ORIGIN 'LDAP Sudoers' )
dn: cn=schema
changetype: modify
add: attributeTypes
attributeTypes: ( 1.3.6.1.4.1.15953.9.1.6
NAME 'sudoRunAsUser'
DESC 'User(s) impersonated by sudo'
EQUALITY caseExactIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
X-ORIGIN 'LDAP Sudoers' )
dn: cn=schema
changetype: modify
add: attributeTypes
attributeTypes: ( 1.3.6.1.4.1.15953.9.1.7
NAME 'sudoRunAsGroup'
DESC 'Group(s) impersonated by sudo'
EQUALITY caseExactIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
X-ORIGIN 'LDAP Sudoers' )
dn: cn=schema
changetype: modify
add: attributeTypes
attributeTypes: ( 1.3.6.1.4.1.15953.9.1.8
NAME 'sudoNotBefore'
DESC 'Start of time interval for which the entry is valid'
EQUALITY generalizedTimeMatch
ORDERING generalizedTimeOrderingMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.24
X-ORIGIN 'LDAP Sudoers' )
dn: cn=schema
changetype: modify
add: attributeTypes
attributeTypes: ( 1.3.6.1.4.1.15953.9.1.9
NAME 'sudoNotAfter'
DESC 'End of time interval for which the entry is valid'
EQUALITY generalizedTimeMatch
ORDERING generalizedTimeOrderingMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.24
X-ORIGIN 'LDAP Sudoers' )
dn: cn=schema
changetype: modify
add: attributeTypes
attributeTypes: ( 1.3.6.1.4.1.15953.9.1.10
NAME 'sudoOrder'
DESC 'an integer to order the sudoRole entries'
EQUALITY integerMatch
ORDERING integerOrderingMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
X-ORIGIN 'LDAP Sudoers' )
dn: cn=schema
changetype: modify
add: objectClasses
objectClasses: ( 1.3.6.1.4.1.15953.9.2.1 NAME 'sudoRole' SUP top STRUCTURAL
DESC 'Sudoer Entries'
MUST ( cn )
MAY ( sudoUser $ sudoHost $ sudoCommand $ sudoRunAs $ sudoRunAsUser $
sudoRunAsGroup $ sudoOption $ sudoNotBefore $ sudoNotAfter $
sudoOrder $ description )
X-ORIGIN 'LDAP Sudoers' )
Note :
Si vous voulez en savoir plus, vous pouvez vous reportez à la description des différents éléments qui constituent un schéma dans la documentation de Unified Directory ainsi qu’à la description de comment étendre le schéma de Unified Directory. Par ailleurs, concernant le schéma lui-même, « SUDOer LDAP Manual » contient une section dédiée.
Ajouter les règles SUDO dans votre annuaire
L’étape suivante consiste à créer le référentiel du sudo
dans votre annuaire. Pour cela, créez un container et une règle ObjectClass: sudoRole
nommée defaults
à l’aide du fichier LDIF ci-dessous ; évidemment vous pouvez changer le DN et l’emplacement de ce container :
dn: ou=SUDOers,dc=arkzoyd,dc=com
objectClass: organizationalUnit
objectClass: top
ou: SUDOers
dn: cn=defaults,ou=SUDOers,dc=arkzoyd,dc=com
objectClass: top
objectClass: sudoRole
cn: defaults
description: Default sudoOption's go here
sudoOption: env_keep+=SSH_AUTH_SOCK
Définissez ensuite les règles sudo
qui vous conviennent en ajoutant à votre container des ObjectClass: sudoRole
pour chacune d’entre-elle. Reportez-vous à « SUDOer LDAP Manual » pour le détail de la signification de chacun des attributs. Voici un exemple de règle dans le fichier /etc/sudoers
:
Gregory ALL=(ALL) ALL
Son équivalent dans l’annuaire LDAP est représenté par
le fichier LDIF ci-dessous ; son nom n’a pas réellement d’importance :
dn: cn=role1,ou=SUDOers,dc=arkzoyd,dc=com
objectClass: top
objectClass: sudoRole
cn: role1
sudoUser: Gregory
sudoHost: ALL
sudoCommand: ALL
Configurer SUDO sur le serveur
La dernière étape, comme vous pouvez vous en douter, consiste à configurer SUDO
sur le serveur pour qu’il utilise l’annuaire. Pour cela, vous procèderez en 2 étapes :
- D’abord ajoutez ou modifiez la ligne
sudoers
dans/etc/nsswitch.conf
en indiquant que le référentiel est stocké dans le LDAP :
sed "/sudoers/d" /etc/nsswitch.conf
echo "sudoers: ldap" >> /etc/nsswitch.conf
- Ensuite, enregistrez les paramètres du LDAP dans
/etc/sudo-ldap.conf
; en particulier : uri
définit la connexion au LDAPsudoers_base
définit le DN du groupe qui contient les règlessudo
- en production,
ssl
,tls_checkpeer
ettls_cacertfile
permettent d’assurer l’identité de l’annuaire
sudo grep -v "^#" /etc/sudo-ldap.conf |grep -v "^[ t]*$"
uri ldap://blue:1389
sudoers_base ou=SUDOers,dc=arkzoyd,dc=com
Tester
Vous pouvez désormais tester le fonctionnement combiné de l’authentification et du SUDO
à travers Oracle Unified Directory :
ssh Gregory@blue
Gregory@blue's password:
id
uid=3001(Gregory) gid=3000(SA) groups=3000(SA),3001(MailUsers)
sudo su -
[sudo] password for Gregory:
id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon)