Aller au contenu

probleme avec set-uid dans un script PHP


Sujets conseillés

Posté

Bonjour,

Je cherche a faire un script PHP, lance depuis le shell, que je souhaite lancer en temps que root grace a son bit 'set-uid'.

Par exemple,

#!/usr/bin/php
<?

... bla bla bla ...

chown('toto', 'root');
?>

Mon script se nome Upload et j'ai donc fait :

root_AT_chose:~/projets/Geppetto/Client/TasksScripts# chown root Upload
root_AT_chose:~/projets/Geppetto/Client/TasksScripts# chmod u+s Upload
root_AT_chose:~/projets/Geppetto/Client/TasksScripts# ll
total 32
-rwsr-xr-x 1 root www-data 1798 2011-06-17 00:38 Upload

Sauf que ca ne marche pas lorsque je le lance en temps d'un user lambda :

Warning: chown(): Operation not permitted in /home/laurent/projets/Geppetto/Client/TasksScripts/Upload on line 67

Quelqu'un saurait-il pourquoi ?

Merci,

Laurent

Posté

Salut Laurent,

Sur de nombreuses distributions, le setuid est désactivé pour les scripts vu les nombreux problèmes de sécurité que cela entraîne.

Une solution est de créer un programme en C, appelant ton script. Ce programme pourra après compilation avoir le suid bit mis.

Par exemple :

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
setuid( 0 );
system( "/path/to/script.sh" );

return 0;
}

  • 4 semaines plus tard...
Posté

Bon, je reviens sur ce vieux trucs au cas ou ca puisse aider quelqu'un.

J'ai donc trouve mon bonheur avec sudo.

Dans mon cas, il s'agit d'un outils pour lancer des commandes a distance dont apt-get (la commande qui permet la mise a jour des systemes sous debian ou derive).

j'ai eu simplement a mettre dans mon sudoers

# Geppetto
puppet ALL=NOPASSWD: /usr/bin/apt-get

pour que mon utilisateur puisse lancer des updates sans qu'aucun mot de passe ne lui soit demande.

Voili, voila

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...