2009-03-27 8 views
1

Il existe un moyen standard (fonctionnant à travers les distributions Linux) de lancer un processus (à partir d'une autre application) demandant le mot de passe root afin d'élever les privilèges.La meilleure façon d'élever les privilèges par programmation sous différentes versions de Linux?

J'ai essayé d'utiliser gksudo (il est installé dans ubuntu par défaut), mais sous d'autres distributions (ou sous un autre gestionnaire de bureau), il peut ne pas être installé.

+3

Je pourrais signaler aux gens qui ne sont pas liés à la programmation que la philosophie de conception de linux/unix consiste souvent à écrire de très petits composants à usage unique qui peuvent être reliés ensemble par des tuyaux ou des douilles. Juste parce que ce n'est pas une API linkable comme dans Windows, il n'y a pas moins de programmation liée à linux. – bmdhacks

Répondre

3

Cela fonctionne partout, mais ne cache pas le mot de passe et demande la racine et non le mot de passe de l'utilisateur (comme sudo DOE):

su - -c command 

EDIT: Pas sur ubuntu où la racine -le compte est désactivé. Vous avez probablement besoin de quelque chose comme ça:

test -x /usr/bin/sudo && sudo command || su - -c command 
+0

su - demande le mot de passe root et vous permet de faire n'importe quoi, alors que sudo peut être configuré pour demander le mot de passe de l'utilisateur et limiter les commandes que vous êtes autorisé à exécuter. – vartec

+0

@vartec: La question originale inclut le texte "demander le mot de passe root pour élever les privilèges", ce qui est précisément ce que fait su. – Powerlord

+0

Ne fonctionnera pas sur les distributions comme Ubuntu, où root n'est pas autorisé à se connecter de manière interactive. – ephemient

1

La seule chose par défaut est le mode texte su. La plupart des distributions ont également sudo installé.

Maintenant, dans la base de KDE distros que vous aurez kdesu, alors que dans GNOME basé ce sera gksu et gksudo. Les machines des domaines Kerberized ont ksu.

Vous pouvez essayer d'utiliser /etc/sysconfig/desktop pour voir quel est le bureau par défaut.

3

Je recommanderais de regarder PolicyKit, ce qui est ce que la plupart des distributions modernes utilisent pour accomplir cela.

1

Traditionnellement, si votre application doit permettre à un utilisateur d'élever ses privilèges, elle installe son propre exécutable à usage unique setuid, ce qui signifie qu'il effectue la tâche nécessaire au lieu d'agir comme un lanceur polyvalent.

$ su - 
# cp `type -p id` /usr/local/bin/root-id 
# chown root:users /usr/local/bin/root-id 
# chmod 4750 /usr/local/bin/root-id 
$ /usr/local/bin/root-id 
... euid=0(root) ... 

Les exécutables OTOH setuid ont également été une source courante de trous de sécurité, alors faites attention.

Questions connexes