web-dev-qa-db-fra.com

Exécutez un script côté serveur en tant qu'utilisateur authentifié dans Apache - est-ce possible?

Je développe une application Web qui prend un tas de paramètres (listes déroulantes, etc.) d'un utilisateur authentifié, crée un fichier, puis le transmet via stdin à un programme sur mon serveur Web.

En raison de certaines limitations du programme côté serveur, j'aimerais que Apache l'exécute en tant qu'utilisateur authentifié précédemment plutôt qu'en tant qu'utilisateur Apache générique.

Ainsi, par exemple, si l'utilisateur foo se connecte (à l'aide de mod_authz_ldap sur le backend) et remplit le formulaire, le formulaire doit alors exécuter la commande sur le serveur en tant qu'utilisateur foo plutôt qu'utilisateur Apache.

Est-ce possible?

1
Josh

En règle générale, les scripts CGI s'exécutent en tant qu'utilisateur du serveur Web. Mais de nombreux hôtes Web (la plupart?) Utilisent suEXEC pour exécuter des scripts CGI en tant qu’utilisateur différent.

Cependant, suEXEC est généralement utilisé pour exécuter un script/programme en tant qu'utilisateurs différents en fonction de vhost ou du répertoire d'utilisateurs dans lequel le programme réside. Je ne suis pas sûr qu'il soit possible de choisir dynamiquement l'utilisateur pour exécuter le programme.

Mais ce que vous pouvez faire est de placer différentes copies de chaque programme dans un répertoire vhost ou utilisateur différent et d'utiliser le processus d'authentification pour choisir la copie du programme à exécuter, ce qui aboutit effectivement à la même chose.

1
Lèse majesté

J'ai eu une entrée faite dans notre fichier sudoers pour donner à un utilisateur spécifique l'accès pour exécuter un script sans mot de passe. Je ne pense pas qu'il soit facile de définir dynamiquement l'utilisateur qui exécute le script. Faites attention si vous éditez votre fichier sudoers pour utiliser visudo et non un autre éditeur. S'il est corrompu et que vous ne pouvez pas continuer, relancez-le dans un shell racine et supprimez les lignes.

0
Anagio