2009-12-14 6 views
1

J'ai pensé à suPHP mais ce n'est pas ce dont j'ai besoin. Cela ne sert pas à mes fins d'exécuter le script PHP entier en tant qu'utilisateur différent. J'ai juste besoin d'exécuter une seule ligne de commande Linux en tant qu'utilisateur différent.Comment exécuter une commande externe en tant qu'utilisateur spécifique dans PHP

Est-ce possible?

+0

par suPHP vous voulez dire PHPsuExec? // http://httpd.apache.org/docs/2.0/suexec.html – miku

+0

Je connais suPHP et suEXEC, mais je ne sais pas ce qu'est phpsuexec. – GetFree

Répondre

0

Vous pouvez essayer la fonction shell_exec et sudo

modifier: car sudo vous invite à entrer un mot de passe, vous voudrez peut-être auriez utiliser proc_open, qui vous permet d'utiliser des tuyaux. Voir this comment pour savoir comment créer un tuyau de mot de passe personnalisé.

+0

Mais sudo vous demandera un mot de passe, n'est-ce pas? – GetFree

+0

Essayez alors proc_open. Voir le premier exemple sur la page de manuel à laquelle j'ai lié, pour savoir comment utiliser les tuyaux. –

+1

Vous pouvez configurer sudo pour ne pas demander le mot de passe .. –

1

Je crois que vous devriez essayer une autre approche. Le "setuid".

http://en.wikipedia.org/wiki/Setuid

Fondamentalement, vous demandez le fichier à exécuter comme il est propriétaire, pas le programme.

+0

Dans le lien, il est indiqué: "En raison de la probabilité accrue de failles de sécurité, de nombreux systèmes d'exploitation ignorent l'attribut setuid lorsqu'il est appliqué à des scripts shell exécutables". Un script shell est ce que j'ai besoin de lancer. Est-ce que Linux a cette restriction? – GetFree

+0

Pas par défaut, mais un script n'est autorisé à exécuter setuid que si son interpréteur est également setuid. – ephemient

+0

Et si je compile un programme C qui à son tour exécute une commande shell et que je mets l'indicateur setuid pour ce programme C? est-ce qu'il contournerait cette restriction? – GetFree

0

Vous pouvez utiliser les utilisateurs CRON pour exécuter le script. S'il s'agit d'une application Web, vous êtes limité à l'utilisateur Apache/Nobody avec des autorisations limitées. Si cela doit juste fonctionner à un certain moment j'utiliserais CRON.

Une autre approche est Sticky Bits

Questions connexes