Quand on est seul à gérer ses serveurs Linux, le compte root suffit. Quand on travaille en équipe, c’est différent : il faut pensez à mettre les accès de l’équipe partout, penser à changer les accès quand un membre de l’équipe part, quid de la sécurité des accès etc ?
Pour cela, il est préférable que chaque membre de son équipe utilise son propre couple login/password pour se connecter aux serveurs Linux. De plus on pourra donner des droits différents par utilisateur ou groupe…
L’authentification LDAP se fait au moyen de service LDAP/PAM/NSSWITCH/SUDO.
Un moyen simple de donner accès à son équipe aux serveurs sans révéler le nom de passe est l’utilisation de clé SSH. Les clés SSH c’est pratique mais tout le monde ne les utilisent pas, et puis cela permet juste de donner le même droit à tout le monde si on l’associe au compte root.
Nous allons voir comment créer un environnent d’authentification multi-utilisateurs basé sur un LDAP existant. Nous utiliseront PAM, NSSWITCH et SUDO.
Contexte
Nous avons déjà un serveur contenant notre base de données LDAP. Nous l’utiliserons pour se connecter sur d’autres serveurs Linux. Dans mon cas, j’ai validé cette manipulation sous Debian Wheezy (7.4). Des points infos sont disposées pour Debian Lenny également.
Authentification avec un utilisateur LDAP
On installe des dépenses nécessaires :
#apt-get update #apt-get install libnss-ldap libpam-ldap sudo
Voici les données d’exemples utilisées :
LDAP server URI: ldap://SERVER Distinguished name of the search base: la base LDAP LDAP version to use: 3 LDAP account for root: un utilisateur ayant des droits RO sur le LDAP LDAP root account password: Allow LDAP admin account to behave like local root? No Does the LDAP database require login? No
On Vérifie que les données sont correctes :
#sed -e '/^[ ]*#/d' -e '/^$/d' /etc/libnss-ldap.conf base o=test,dc=local uri ldap://pdc ldap_version 3 rootbinddn uid=replicant,ou=namedAccount,o=test,dc=local #sed -e '/^[ ]*#/d' -e '/^$/d' /etc/pam_ldap.conf base o=test,dc=local uri ldap://ldap-for-proxy ldap_version 3 pam_password crypt #cat /etc/libnss-ldap.secret
On ajoute « ldap » au fichier /etc/nsswitch.conf :
passwd: compat ldap group: compat ldap shadow: compat ldap
On modifie PAM :
#echo -e "#allow auth with pam_access\nauth\trequired\t\t\tpam_access.so" >> /etc/pam.d/common-auth
Remarque : étape supplémentaire pour Debian Lenny
Editer /etc/pam.d/common-auth :
auth sufficient pam_unix.so nullok_secure auth sufficient pam_ldap.so use_first_pass auth required pam_deny.so #allow auth with pam_access auth required pam_access.soEditer /etc/pam.d/common-account:
account sufficient pam_unix.so account sufficient pam_ldap.so account required pam_deny.soEditer /etc/pam.d/common-password :
password sufficient pam_unix.so nullok obscure md5 password sufficient pam_ldap.so password required pam_deny.soEditer /etc/pam.d/common-session :
session required pam_unix.so session required pam_mkhomedir.so session optional pam_ldap.soPour plus d’infos sur LDAP et Lenny, voici un article intéressant : OpenLDAP client on Debian lenny.
On configure les connexions autorisées pour PAM. Dans notre cas, le groupe « ict » peut se connecter sur le réseau (10.0.0.0/8) et en face de la machine (LOCAL). Pour l’utilisateur « adminlocal », il sert uniquement d’utilisateur de secours quand on est en face de la machine et que le LDAP n’est pas joignable.
vim /etc/security/access.conf #admin local autorisé uniquement en local + : adminlocal : LOCAL # groupe ict uniquement en interne + : ict : 10.0.0.0/8 LOCAL # root toujours autorisé -:ALL EXCEPT root :ALL
On ajoute cet utilisateur, on redémarre NSCD, on test et on attribue un mot de passe à cet utilisateur :
# adduser --home /tmp --no-create-home --ingroup users --shell /bin/bash --uid=30000 adminlocal
# /etc/init.d/nscd restart
#id testictgroup uid=91(testictgroup) gid=14(testictgroup) groups=07(ict),14(testictgroup)
#passwd adminlocal
Autorisation
Voici un cas simple : les utilisateurs du groupe « ict » et un utilisateur « adminlocal » ont tous accès à toutes les commandes root, sans avoir à taper leur mots de passe 2 fois. Ils se loggent sur le serveur et c’est parti à coup de « sudo commande » ou « sudo su » pour passer en shell root.
Mais l’on peut très bien créer des « rôles » opérateurs avec des droits customisés.
# visudo
On ajout à la fin :
#allow user adminlocal to do everything adminlocal ALL=(ALL:ALL) NOPASSWD: ALL #allow group ict to do everything %ict ALL=(ALL:ALL) NOPASSWD: ALL
Remarque : sous Lenny pour ceux qui l’on encore, c’est cette syntaxe qui est à utiliser :
# allow user adminlocal to do everything adminlocal ALL=(ALL) NOPASSWD: ALL# allow group ict to do everything %ict ALL=(ALL) NOPASSWD: ALL
Laisser un commentaire