Imiter gksu sur Fedora

Publié le 20/05/2009

Sur Ubuntu, les utilisateurs ont l’habitude de sudo et de son interface graphique gksudo. Fedora ne propose pas sudo de base et par conséquent vous n’avez pas gksudo. Sur Fedora, on utilise le bon vieux “su” en console.

Bien que l’outil “gksu” n’est pas intégré ni packagé, on voit parfois un popup apparaître nous demandant notre mot de passe root. Par exemple, en lançant l’outil d’installation de paquet ou pour utiliser un outil d’administration. Ce popup est en fait une utilisation de l’outil “consolehelper” qui permet d’utiliser “PAM” pour vérifier les accès. Si un besoin spécifique est nécessaire, il demande le mot de passe root via un popup.

Nous pouvons rendre ce système adaptable à un genre de “gksu”. En d’autres termes, nous pouvons réaliser un outil qui permet de demander le mot de passe root pour des commandes que nous aimerions lancer avec les droits d’administrateur.

J’ai nommé cet outil “askroot”… et si je dis “outil” je fais un abus de langage tant la manip est simple.

Voici ce que je vous propose de faire.

En premier lieu, on va créer un script qui sera “caché” du système. En fait, on va le placer ailleurs que dans les chemins par défaut (\$PATH). Ouvrez un terminal (console) et authentifiez vous en root

su -

Ensuite, copiez coller ces lignes dans votre console: `

mkdir -p /usr/share/apps/askroot
cat 1>  /usr/share/apps/askroot/askroot <<EOF
#!/bin/bash
exec \$@
EOF

chmod +x /usr/share/apps/askroot/askroot

cat 1> /etc/pam.d/askroot <<EOF
#%PAM-1.0 
auth        include     config-util
account     include     config-util
session     include     config-util
EOF

cat 1>  /etc/security/console.apps/askroot <<EOF
USER=root
PROGRAM=/usr/share/apps/askroot/askroot
SESSION=true
EOF

ln -s /usr/bin/consolehelper /usr/bin/askroot

C’est terminé ! Fermez le terminal et testons. Pressez les touches ALT+F2, un popup vous propose de taper une commande. Entrez “gnome-terminal”.

Pour le moment, vous voyez dans le “prompt” votre login suivit du nom de la machine, du genre:

[patachou@patrice-desktop ~]$

Fermez ce terminal, et tentons de l’ouvrir en root: ALT+F2 et dans l’entrée de texte tapez “askroot gnome-terminal”

Un popup apparait et vous demande votre mot de passe root. Entrez le… et cette fois le terminal s’ouvre et vous laisse apparaitre “root@” suivit de votre nom de machine. Par exemple chez moi:

root@patrice-desktop ~]# 

Vous l’aurez compris, maintenant vous pouvez lancer une commande root sans ouvrir de console, graphiquement, etc…

Ce petit outil est particulièrement utile pour des scripts que vous voulez rendre executable par root sans ouvrir une console. J’ai par exemple un “lien vers une application”:

askroot 'service httpd restart' | \
    zenity --pulsate --progress \
    --auto-kill --title "Relance apache..." \
    --text "Apache en cours de redémarrage"

En gros, Le script me demande mon mot de passe root si besoin et relance apache. Zenity me permet de savoir si le redémarrage est terminé.

Notez que le system “consolehelper” permet de garder en session les droits. De ce fait, dans une session Gnome, si vous avez déjà entré votre mot de passe root pour une commande “askroot”, il ne vous le remdemande pas. Ceci à condition que la commande soit exactement la même :)

Bref, amusez vous maintenant à créer des icones sur le bureau pour relancer des services de la même manière que je le fais. Vous allez gagner un temps fou !

Astuce: vous voulez taper “gksu” au lieu de “askroot”, faites un lien symbolique:

askroot "ln -s /usr/bin/askroot /usr/bin/gksu"

et le tour est joué :)

comments powered by Disqus