Question

Est-il possible d'utiliser un frontend sudo (comme gksudo) pour élever les privilèges du courant processus? Je sais que je peux faire ce qui suit:

sudo cat /etc/passwd-

Mais je suis intéressé à faire ceci:

sudo-become-root # magic function/command
cat /etc/passwd-

Je vous écris en Python. Mon usecase est que j'ai un programme qui fonctionne comme l'utilisateur, mais peuvent rencontrer des fichiers en lecture / écriture qui appartiennent à la racine. Je voudrais pour demander le mot de passe, obtenir les privilèges root, faire ce que je dois, puis éventuellement déposer à nouveau les privilèges.

Je sais que je pourrais séparer la logique admin et logique non-admin dans des processus séparés, puis exécutez simplement le processus d'administration en tant que root (avec une certaine communication - policykit / dbus serait un bon ajustement ici). Mais j'espérais beaucoup plus simple solution (il est vrai plus risquée).

Je pense quelque chose comme la course de ppriv de Solaris par sudo pour ensuite modifier les privilèges du processus en cours. Ce qui semble être un aller-retour hacky mais-pratique. Mais pour autant que je sache, Linux ne propose pas ppriv.

(Je suis surpris ce n'est pas déjà évident, il semble comme une chose non rare de vouloir et ne pas semblent pour être un trou de sécurité pour permettre l'escalade en cours sur l'escalade d'un nouveau processus.)

Était-ce utile?

La solution

Malheureusement, je ne suis pas au courant d'une façon de faire ce que vous voulez faire proprement. Je pense que votre meilleur pari est de rendre le setuid programme (ou exécuter sudo) puis soit faire votre travail sale et les autorisations de chute, ou fork () et les autorisations d'abandon d'un processus et de garder l'autre autour de faire votre travail racine .

Qu'est-ce que vous cherchez sont les setuid (2) / setreuid (2) / setregid (2) / setgroups (2) appelle, mais ils sont tous câblés à ne pas vous permettre d'obtenir des privilèges mi-appel. Vous ne pouvez les utiliser pour « donner » des privilèges, pour autant que je sais.

Autres conseils

a une option d'aptitude "racine devient". Vous pouvez voir ce que l'auteur a fait là-bas.

Si vous voulez traiter proprement avec des droits d'administration à l'intérieur d'un programme, vous pouvez utiliser PolicyKit plutôt que sudo, en fonction du système d'exploitation que vous envisagez d'exécuter votre programme sur.

Pour PolicyKit pour Python, voir python-slip.

Dans le cas contraire, il y a deux façons d'appeler pour devenir root sudo:

sudo -s

vous fera racine et garder votre environnement actuel (équivalent à sudo su)

sudo -i

vous fera racine et vous donner l'environnement racine aussi (équivalent à sudo su -)

Une autre façon de traiter le problème consiste à considérer que vous disposez des droits dont vous avez besoin, et de laisser l'utilisateur du programme choisir comment donner les droits de votre programme (en utilisant sudo / setuid / groupes unix / quel que soit d'autre).

Voir aussi cette question sur ServerFault sur le même sujet.

Votre fonction / commande magique pourrait être

sudo su
echo 'echo tee; echo hee'|sudo -s

La sortie est la suivante:

tee
hee

Je n'aime pas l'idée d'être en mesure d'exécuter des commandes arbitraires en tant que root à partir d'un processus privilégié inférieur. Cependant, comme vous le voulez, l'une des idées qui vient à l'esprit est de garder un setuid shell restreint qui ne peut exécuter les commandes qui vous intéressent permettant. Vous pouvez ensuite utiliser les fonctions de subprocess.Popen pour exécuter votre commande en utilisant ce shell restreint qui fonctionnera avec des privilèges élevés.

Je me demande si cela fonctionnerait:

Ajouter un autre groupe à votre système, installez le script en tant que programme de racine et que le fichier sudoers contient une ligne qui permet au script d'être exécuté par ce groupe. Enfin, ajoutez le groupe à la liste des comptes qui ont besoin pour exécuter le script.

Ensuite, le script ne peut être exécuté par root ou d'un compte qui a le groupe spécial dans le groupe mis après avoir fourni le mot de passe de compte au début.

Voir Sudo Manuel pour d'autres options.

Vous voulez authentifier avec PAM. Il y a un exemple .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top