[ipc] [linux] Problème de droits seul le root peut y accéder

Bonjour.

Je travaille sur un système de communication entre processus utilisant IPC. J’ai fait le début de mon développement sous FreeBSD, là je suis sous Debian et horreur seul le root peur lire ou écrire sur les canaux IPC!

Comment faire pour que les autres utilisateurs puissent faire la même chose?

Merci!

Je suppose que tu utilises de tubes (pipe_t)
Tu changes les droits sur tes tubes lors de leur création.

non, pas de pipe

Tu utilises quoi comme IPC?

Quand tu crées l’IPC, il faut passer des permissions en paramètre. Par exemple :
[fixed]msgid=msgget(key, IPC_CREAT | 0600);[/fixed]
Normalement c’est suffisant.

je le faisait déjà, voici un extrait de mon code
//création du canal requête utilisateur
frequete = msgget(CLEF_REQUETES, 0700 | IPC_CREAT);
if (frequete == -1) { perror(“msgget”); exit(0); }

    //création du canal réponse
freponse = msgget(CLEF_REPONSES, 0700 | IPC_CREAT); 
    if (freponse == -1) { perror("msgget"); exit(0); }

les canaux 123456 et 123457. Ils sont peut-être reservés. Lesquels utiliser?

Rajoute IPC_EXCL histoire de voir s’ils sont déjà pris.
Les deux processus appartiennent au même utilisateur ou pas ?

(sinon tu peux mettre 0600 à la place de 0700, l’exécution n’a pas de sens pour les IPC :wink: )

merci pour vos réponses.

où rajouter IPC_EXCL? les deux processus appartiennent au même utilisateur effectivement.

[fixed]frequete = msgget(CLEF_REQUETES, 0600 | IPC_CREAT | IPC_EXCL);[/fixed]
Si ça renvoie -1, c’est que le canal est déjà pris.

Tu as déjà essayé en changeant de clé ?