2010-07-20 4 views
0

Ce que j'ai: le login/mot de passe pour un utilisateur UNIX (alice).UNIX équivalent de CreateProcessWithLogonW

Qui je suis: un autre utilisateur UNIX (bob).

Ce que je dois faire: lancer un processus programme (foo) comme l'autre utilisateur (alice).

Qu'est-ce que le résultat final devrait être: le processus est en cours d'exécution et affiche alice en tant que propriétaire si un « ps » est fait. À des fins de privilèges, agit comme si alice l'a commencé.

Fondamentalement, je besoin d'écrire un code qui fait l'équivalent de « su -c « foo » - alice »

Idéalement, je ne veux pas avoir à mettre des chiffres binaires ou des autorisations sur l'exécutable en question (foo).

Répondre

1

Je ne vois que deux possibilités pour démarrer un processus comme alice sous UNIX/Linux à partir d'un processus appartenant à Bob qui lui-même ne peut setuid.

  • appel un programme setuid
  • communiquer avec un processus déjà en cours qui peut lancer des processus comme alice
+0

+1: notez que dans le second cas, le processus devrait déjà être en cours d'exécution en tant qu'alice ou root. Une troisième possibilité est maaaaaaaybe pour fork et exec 'login', mais puisque ce_really_ veut parler à un terminal, je suppose que cela deviendrait très désordonné très rapidement. –

1

Ne jamais dire jamais, mais je pense que cela est probablement impossible de quelque manière que unix portable. L'appel setuid (2) (et les amis) ne réussit que si l'uid actuel est identique à l'ud cible (modulo certaines subtilités sur les uids effectifs et réels) ou si l'uid courant est 0 (ie, root). Autrement dit, vous ne pouvez pas passer d'un uid non root à un autre.

Avoir le mot de passe n'aide pas. Le mot de passe est utilisé pour l'authentification initiale au système, que ce soit via login, ssh, ou une boîte de dialogue de connexion GUI, mais le mot de passe est la seule préoccupation de ces programmes, et non du système en tant que tel. Autrement dit, le noyau ne se soucie pas de votre mot de passe, et il est le noyau que vous devez parler si vous voulez changer votre uid. En d'autres termes, vous êtes probablement obligé de prendre en compte les routes indirectes, telles que celles mentionnées par Peter G.

(Oui, certains peuvent avoir une unix façon de le faire, mais c'est spécifique à la plateforme).

Je sais que je n'ajoute aucun conseil positif ici, seulement le conseil négatif de gain de temps de «rien à voir ici; déplacez-vous tout de suite ... '