Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 27/05/2013, à 09:17

valars

Droit d'un programme

Bonjour,

J'ai développé un petit programme en c++ grâce à Qt en majeure partie, seulement, je doit gérer des Socket pour la réception de pings ce qui ne pouvait ce faire par Qt. Ce programme nécessite des droits pour s’exécuter correctement, en effet, sans une exécution en root, la socket ne peut s'ouvrir.

Mon tuteur de stage m'a parlé d'une alternative au compte root pour l’exécution qui consisterai à donner des autorisations au programme en rajoutant en bout de code qui lui permettrait de faire partie d'un groupe pouvant gérer les socket. Ne trouvant rien sur internet à ce sujet je me permet donc de poster sur votre forum.

Il est à noter que le programme s’exécute en démon dont l’exécution se fera des le démarrage de l'ordinateur, il est donc nécessaire qu'un utilisateur n'ai à intervenir, en effet, le programme sera placé sur un serveur chez 1&1, et je ne pense pas que l'administrateur réseau de la boite où je fait mon stage apprécierai relancer l'application à chaque reboot du serveur tongue

Merci pour votre aide,
Cordialement,

Valars.

Hors ligne

#2 Le 27/05/2013, à 10:15

valars

Re : Droit d'un programme

Un collegue m'a montré qu'en ajoutant mon compte à un groupe spécifique je pouvais avoir les droits permettant à mes applications d'utiliser les raw sockets sans etre root, la question qui se pose maintenant est de savoir quel groupe (ceux dans etc/group) permet d'avoir acces à de tels droits.

Liste des groupes sur ma distribution (Xubuntu 12.1):

root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:romain
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:romain
floppy:x:25:
tape:x:26:
sudo:x:27:romain
audio:x:29:pulse,timidity
dip:x:30:romain
www-data:x:33:
backup:x:34:
operator:x:37:
list:x:38:
irc:x:39:
src:x:40:
gnats:x:41:
shadow:x:42:
utmp:x:43:
video:x:44:
sasl:x:45:
plugdev:x:46:romain
staff:x:50:
games:x:60:
users:x:100:
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:romain
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:romain
floppy:x:25:
tape:x:26:
sudo:x:27:romain
audio:x:29:pulse,timidity
dip:x:30:romain
www-data:x:33:
backup:x:34:
operator:x:37:
list:x:38:
irc:x:39:
src:x:40:
gnats:x:41:
shadow:x:42:
utmp:x:43:
video:x:44:
sasl:x:45:
plugdev:x:46:romain
staff:x:50:
games:x:60:
users:x:100:
nogroup:x:65534:
libuuid:x:101:
crontab:x:102:
syslog:x:103:
fuse:x:104:
messagebus:x:105:
avahi-autoipd:x:106:
lpadmin:x:107:romain
ssl-cert:x:108:
netdev:x:109:
whoopsie:x:110:
mlocate:x:111:
ssh:x:112:
utempter:x:113:
rtkit:x:114:
bluetooth:x:115:
scanner:x:116:
colord:x:117:
lightdm:x:118:
nopasswdlogin:x:119:
avahi:x:120:
pulse:x:121:
pulse-access:x:122:
saned:x:123:
romain:x:1000:
sambashare:x:124:romain
mysql:x:125:
winbindd_priv:x:126:
timidity:x:127:
vboxusers:x:128:

Merci smile

Hors ligne

#3 Le 27/05/2013, à 14:43

grim7reaper

Re : Droit d'un programme

Je réponds pas tout à fait à ta question, mais propose une autre solution (qui me semble plus simple).
Pourquoi ne pas passer par les « capabilities » ?
Voir ce sujet sur serverfault.com (top réponse).

Hors ligne

#4 Le 27/05/2013, à 15:26

valars

Re : Droit d'un programme

Justement je venais de voir pour les capabilitites quand tu as répondu^^
J'ai essayer avec cap_net_raw =+eip, +ep et avec la proposition faite dans ton lien mais le résultat ne change rien, lorsque le service est lancé au démarrage, le bind échoue toujours :s

Hors ligne

#5 Le 27/05/2013, à 16:19

valars

Re : Droit d'un programme

C'est bon le problème est résolue, le blem provenait du fait que lors de l'allumage, le bind se faisait avant l'initialisation de la carte réseau, du coup en remplacent l'adresse ip locale de la machine par "0.0.0.0" on scannera toutes les cartes réseau de la machine, de plus, un collegue m'a fait passer l’exécution du programme au run level 3.

L'ip 0.0.0.0 est en plus parfaite car elle permet d'éviter d'avoir à modifier l'ip et à recompiler le programme à chaque changement de machine.

Hors ligne