Voila le resultat de ma recherche:
CONSOLEHELPER
Definition
----------
Console helper est un outil dans le but de faciliter l'authentification des utilisateurs d'un programme en utilisant l'authentification via PAM. On peut donc definir une politique d'authentification en laissant un simple utilisateur, executer la commande sans mot de passe, ou en lui demandant mot de passe. La demande de mot de passe peut etre graphique ou dans une console.
Principe
--------
Lorsque l'on souhaite creer une application utilisant console helper, on doit s'y prendre de cette maniere:
Exemple: On souhaite utiliser shutdown en definissant la politique d'authentification dans pam. On va donc creer
dans /usr/bin/ un lien qui va pointer vers /usr/bin/consolehelper:
ln -s /usr/bin/consolehelper /usr/bin/shutdown
De cette maniere, un utilisateur non-root, en tappant la commande shutdown, va appeler consolehelper, qui
va gerer l'authentification avec pam puis invoquer /sbin/shutdown.
PAM
---
Chaque fois que l'on va souhaiter definir une politique d'authentification avec console helper, on va donc
creer un lien symbolique comme montré dans l'etape precedente, puis egalement definir la politique dans un
fichier /etc/pam.d/service. Par exemple si on travaille sur shutdown, il va falloir creer, le fichier
/etc/pam.d/shutdown.
L'application va donc invoquer PAM qui va effectuer un enchainement de primitives avant de reussir ou echouer.
Voila en gros la syntaxe d'une ligne d'un fichier de PAM:
Primitive Drapeau Authentification
Primitive: Il existe six primitives qui definisse le type d'operation:
auth: Authentification de l'appelant (avec mot de passe ou
sans mot de passe)
account: Verification disponibilité d'un compte (ex: plage
horaire, charge machine)
session: Gestion de session d'authentification (ouverture,
fermeture de session)
password: Changement de mot de passe.
Ensuite les drapeaux vont permettre de definir le resultat de l'enchainement selon la reussite ou nom de chaque primitive:
binding:
Succes: Si aucun module de l'enchainement n'a déja
echoué, l'enchainement se termine avec
succes
Echec: L'enchainement se poursuit mais le resultat
final sera échec
required:
Succes: Le reste de l'enchainement est executé, le
resultat final est succes, à moins qu'un
autre module n'echoue
Echec: Meme chose que Binding
requisite:
Succes: Meme chose que required
Echec: l'enchainement est arrété et le resultat
final est echec
Sufficient:
Succes: Meme choses que bindind
Echec: Le module est ignoré et l'enchainement se
poursuit.
Optional: Le module est executé mais le resultat est ignoré.
Authentification va permettre de definir le succes ou l'echec pour chaque module:
pam_permit.so => retourne toujours succes
pam_unix.so => authentification classique sous unix
pam_rootlok => verifie que l'utilisateur actuel est bien
root
Exemple du fichier /etc/pam.d/halt
auth sufficient pam_rootok.so
auth required pam_console.so
account required pam_permit.so
Ligne 1: Si l'utilisateur root, l'enchainement reussi (on a
le droit de faire un halt)
Linge 2: Verifie que l'utilisateur actuel est bien logué sur
une console (X, ou terminal virtuel) et non pas en
telnet ou rsh, ssh...
Ligne 3: Verification de disponibilité. Reussi toujours.
Ce qui signifie:
L'utilisateur root, peut eteindre la machine ne
n'importe ou. Les utilisateurs normaux peuvent
egalement eteindre la machine mais uniquement s'ils
sont logué en local.
Pour obliger une authentification, des utilisateurs, on peut appeler un service d'authentification comme
/etc/pam.d/system-auth. C'est le role se pam_stack.so:
En modifiant /etc/pam.d/halt de cette maniere:
auth sufficient pam_rootok.so
auth required pam_console.so
auth required pam_stack.so service=system-auth
account required pam_permit.so
Il faut donc desormais que l'appel au service system-auth reussisse pour que l'enchainement soit un succes.
Pour les explications sur les differents modes ( *.so ), on peut utiliser google pour avoir des explications:
Par exemple pam_rootok description dans google.
Il existe aussi le "The Linux-PAM System Administrators' Guide" mais il n'est pas a jour et a l'epoque
tous les services etaient dans le meme fichier. Il y a quand meme des choses a trouver dedans:
http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/pam.html#toc6
Sinon les services interessants a modifier sont:
reboot, halt, poweroff
Voila