Bonjour,
Voici mon problème :

J’ai un binaire agentctl qui appartient à root :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
# ls -l agentctl
-rwxr-xr-x    1 root     root        12532 Jun  5 19:09 agentctl
Cet exécutable peut être lancé avec plusieurs options ( start, stop, restart …etc )

Je veux permettrre à un user lambda le lancement de « agentctl » mais uniquement avec l’option restart.

Pour cela je crée le programme suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# cat testagent.c
==================================
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
 
int main()
{
uid_t uid = geteuid ();
gid_t gid = getegid ();
printf ("uid=%d gid=%d\n", (int) uid, (int) gid);
system("/exec/products/sbin/agentctl restart");
}
===================================
Je le compile :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
# gcc –o relanceagent testagent.c
Je rajoute le setuid :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
# chmod +s relanceagent
# ls –l relanceagent
-rwsr-sr-x   1 root     root       101206 Oct 09 16:00 relanceagent
Puis lorsque j’exécute “relanceagent” avec un user lambda j’ai un problème de droits.

Si je fait le test du setuid directement sur agentctl cela fonctionne.

Autre précision : Le test fonctionne sur AIX et HP-UX.

Comment faire sur Solaris. ? (sans utiliser sudo)
Pouvez-vous m’aider ?
D’avance merci.