OVH Cloud OVH Cloud

beep, question de permissions?

17 réponses
Avatar
Bayrouni
Bonjour,

J'ai un tout petit programme en C, qui declanche une alarme.
Il agit sur le haut-parleur de PC.
Quand je l'execute en tant que root, j'entends l'alarme ,
par contre en tant que utilisateur, d'abord il y avait l'erreur:

./trig-alarm
Could not open /dev/console for writing.
open: Permission denied.

alors j'ai changé en:
ll /dev/console
crw-rw-rw- 1 root tty 5, 1 Mar 24 10:49 /dev/console

Le programme s'exute pendant les 10 secondes de test mais sans aucun son.

Je suis persiadé qu'il s'agit d'une question de droits mais sur quoi ?
Merci
Bayrouni


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org

7 réponses

1 2
Avatar
Bayrouni
pyfux wrote:
Bayrouni wrote:

Bonjour,

J'ai un tout petit programme en C, qui declanche une alarme.
Il agit sur le haut-parleur de PC.
Quand je l'execute en tant que root, j'entends l'alarme ,
par contre en tant que utilisateur, d'abord il y avait l'erreur:

./trig-alarm
Could not open /dev/console for writing.
open: Permission denied.

alors j'ai changé en:
ll /dev/console
crw-rw-rw- 1 root tty 5, 1 Mar 24 10:49 /dev/console

Le programme s'exute pendant les 10 secondes de test mais sans aucun son.

Je suis persiadé qu'il s'agit d'une question de droits mais sur quoi ?
Merci
Bayrouni





Salut !

Pourquoi ne pas modifier directement les droits du périphérique audio:
/dev/audio en attribuant [rw] à [other] ?

C'est certainement une faille de sécurité mais comme ça ton programme
devrait marcher.

py





Malheureusement il ne marche avec rw à others pour le device audio
(/dev/audio). (le user appartient en plus au groupe audio).

Il n'y a que sudo et suid qui marchent .

Merci en tout.
Bayrouni
a+




--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Leopold BAILLY
Bayrouni writes:

Jean-Michel OLTRA wrote:
bonjour,
Le jeudi 24 mars 2005, Astar0th a écrit...

./trig-alarm
Could not open /dev/console for writing.
open: Permission denied.

Le programme s'exute pendant les 10 secondes de test mais sans aucun so n.

Je suis persiadé qu'il s'agit d'une question de droits mais sur quoi ?




Essaye avec strace (man strace)
strace -e file ./trig-alarm




Voici l'affichage de

strace -e file ./bin/trig-alarm:

execve("./bin/trig-alarm", ["./bin/trig-alarm"], [/* 23 vars */]) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or di rectory)
open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or di rectory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size$361, ...}) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or di rectory)
open("/lib/tls/libc.so.6", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size53924, ...}) = 0
open("/dev/console", O_WRONLY) = 3



J'ai lancé strace sur echo -e "a", qui provoque un bip du haut-parleur, pour
voir dans quel périphérque il écrit.

Il écrit dans /dev/pts/0, qui est le terminal associé à mon shell com me je peux
le voir avec ps, sur lequel j'ai bien les droits d'écriture.

Je pense tout simplement que ton programme est buggé car il écrit
systématiquement dans /dev/console (réservé à root) au lieu de rech ercher (par
un moyen que j'ignore) le terminal attaché à son processus.


Léo.
Avatar
Bayrouni
Leopold BAILLY wrote:
Bayrouni writes:


Jean-Michel OLTRA wrote:

bonjour,
Le jeudi 24 mars 2005, Astar0th a écrit...


./trig-alarm
Could not open /dev/console for writing.
open: Permission denied.

Le programme s'exute pendant les 10 secondes de test mais sans aucun son.

Je suis persiadé qu'il s'agit d'une question de droits mais sur quoi ?





Essaye avec strace (man strace)
strace -e file ./trig-alarm




Voici l'affichage de

strace -e file ./bin/trig-alarm:

execve("./bin/trig-alarm", ["./bin/trig-alarm"], [/* 23 vars */]) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size$361, ...}) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/tls/libc.so.6", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size53924, ...}) = 0
open("/dev/console", O_WRONLY) = 3




J'ai lancé strace sur echo -e "a", qui provoque un bip du haut-parleur, pour
voir dans quel périphérque il écrit.

Il écrit dans /dev/pts/0, qui est le terminal associé à mon shell comme je peux
le voir avec ps, sur lequel j'ai bien les droits d'écriture.

Je pense tout simplement que ton programme est buggé car il écrit
systématiquement dans /dev/console (réservé à root) au lieu de rechercher (par
un moyen que j'ignore) le terminal attaché à son processus.


Léo.




Voici la ligne qui est mise en cause dans mon programme C.
(Je ne suis pas du tout specialiste du C)

console_fd = open("/dev/console", O_WRONLY)

meme en changeant les droits à 666 sur /dev/console ça ne marche pas
avec l'utilisateur ordinaire(moi).

Donc si /dev/console est accessible uniquemnt à root, ça ne sert à rien
de changer les permissions, ou bien je me trompe?

Bayrouni


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Leopold BAILLY
Bayrouni writes:

Leopold BAILLY wrote:
Bayrouni writes:

Jean-Michel OLTRA wrote:

bonjour,
Le jeudi 24 mars 2005, Astar0th a écrit...


./trig-alarm
Could not open /dev/console for writing.
open: Permission denied.

Le programme s'exute pendant les 10 secondes de test mais sans aucun son.

Je suis persiadé qu'il s'agit d'une question de droits mais sur quo i ?





Essaye avec strace (man strace)
strace -e file ./trig-alarm




Voici l'affichage de

strace -e file ./bin/trig-alarm:

execve("./bin/trig-alarm", ["./bin/trig-alarm"], [/* 23 vars */]) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or d irectory)
open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or d irectory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size$361, ...}) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or d irectory)
open("/lib/tls/libc.so.6", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size53924, ...}) = 0
open("/dev/console", O_WRONLY) = 3


J'ai lancé strace sur echo -e "a", qui provoque un bip du haut-parleu r, pour
voir dans quel périphérque il écrit.
Il écrit dans /dev/pts/0, qui est le terminal associé à mon shell comme je peux
le voir avec ps, sur lequel j'ai bien les droits d'écriture.
Je pense tout simplement que ton programme est buggé car il écrit
systématiquement dans /dev/console (réservé à root) au lieu de r echercher (par
un moyen que j'ignore) le terminal attaché à son processus.
Léo.



Voici la ligne qui est mise en cause dans mon programme C.
(Je ne suis pas du tout specialiste du C)

console_fd = open("/dev/console", O_WRONLY)



Vérifie que /dev/pts/0 t'appartient bien et remplace /dev/console par /de v/pts/0
juste pour voir si ça marche.


Léo.
Avatar
Leopold BAILLY
Retour sur la liste après un échange en privé et quelques recherches.

Bayrouni writes:

Leopold BAILLY wrote:
Bayrouni writes:

Leopold BAILLY wrote:

Bayrouni writes:


Leopold BAILLY wrote:


Bayrouni writes:



Jean-Michel OLTRA wrote:



bonjour,
Le jeudi 24 mars 2005, Astar0th a écrit...




./trig-alarm
Could not open /dev/console for writing.
open: Permission denied.

Le programme s'exute pendant les 10 secondes de test mais sans au cun son.

Je suis persiadé qu'il s'agit d'une question de droits mais sur quoi ?





Essaye avec strace (man strace)
strace -e file ./trig-alarm




Voici l'affichage de

strace -e file ./bin/trig-alarm:

execve("./bin/trig-alarm", ["./bin/trig-alarm"], [/* 23 vars */]) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size$361, ...}) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/tls/libc.so.6", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size53924, ...}) = 0
open("/dev/console", O_WRONLY) = 3



J'ai lancé strace sur echo -e "a", qui provoque un bip du haut-par leur, pour
voir dans quel périphérque il écrit.
Il écrit dans /dev/pts/0, qui est le terminal associé à mon she ll comme je peux
le voir avec ps, sur lequel j'ai bien les droits d'écriture.
Je pense tout simplement que ton programme est buggé car il écrit
systématiquement dans /dev/console (réservé à root) au lieu d e rechercher (par
un moyen que j'ignore) le terminal attaché à son processus.
Léo.













Je retire ce que j'ai dit, il ne semble pas possible d'aller au delà du s imple
bip (a) sans écrire dans /dev/console.





Voici la ligne qui est mise en cause dans mon programme C.
(Je ne suis pas du tout specialiste du C)

console_fd = open("/dev/console", O_WRONLY)



Vérifie que /dev/pts/0 t'appartient bien et remplace /dev/console par
/dev/pts/0
juste pour voir si ça marche.
Léo.




J'avais déjà essayé de remplacé /dev/console par /dev/pts/0
ll /dev/pts/0
crw--w---- 1 moi tty 136, 0 2005-03-25 18:04 /dev/pts/0

Le programme se compile et s'execute mais sans alarme (une boucle de bee ps à
differentes frequences).


Est-ce que tu peux m'envoyer le source du programme ?
Léo.



Oui bien sûr.

C'est une reduction au strict minimum du programme beep.c disponible sur le net.


voici le code source du miniscule programme alarm.c en pièce jointe:

Je n'ai pas encore enlevé tout ce qui n'est pas necessaire pour son
fonctionnement car je voulais d'abord voir son fonctionnement.



[...]

ioctl (console_fd, KIOCSOUND, (int) (CLOCK_TICK_RATE/freq));



[...]

D'après ce document : http://www.linux.com/guides/lpg/lpg.shtml, /dev/con sole
est l'unique moyen standard de contrôler le haut-parleur, exactement comm e c'est
fait dans ton programme.

Il existe un autre moyen : http://www.geocities.com/stssppnn/pcsp.html, c'e st un
module du noyau qui permet d'adresser le haut-parleur comme une carte son.

La solution la plus simple et la plus propre pour toi est sans doute d'ajou ter
la permission "set uid root" à ton programme :

$ chown root:root alarm
$ chmod +s alarm

Tu peut aussi faire un script à base de echo -e "a", c'est moins joli ma is tout
aussi efficace.


Léo.
Avatar
J.Pierre Pourrez
Le Fri, 25 Mar 2005 22:31:43 +0100, Leopold BAILLY a écrit :

D'après ce document : http://www.linux.com/guides/lpg/lpg.shtml,
/dev/console est l'unique moyen standard de contrôler le haut-parleur,
exactement comme c'est fait dans ton programme.

Il existe un autre moyen : http://www.geocities.com/stssppnn/pcsp.html,
c'est un module du noyau qui permet d'adresser le haut-parleur comme une
carte son.

La solution la plus simple et la plus propre pour toi est sans doute
d'ajouter la permission "set uid root" à ton programme :

$ chown root:root alarm
$ chmod +s alarm

Tu peut aussi faire un script à base de echo -e "a", c'est moins joli
mais tout aussi efficace.



Sur ma Sarge, il y a le paquet beep qui va bien sans être root.
Peut-être que jeter un oeil au source pourrait vous inspirer

Cordialement
Jean-Pierre



--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Leopold BAILLY
"J.Pierre Pourrez" writes:

Le Fri, 25 Mar 2005 22:31:43 +0100, Leopold BAILLY a écrit :

D'après ce document : http://www.linux.com/guides/lpg/lpg.shtml,
/dev/console est l'unique moyen standard de contrôler le haut-parleur,
exactement comme c'est fait dans ton programme.

Il existe un autre moyen : http://www.geocities.com/stssppnn/pcsp.html,
c'est un module du noyau qui permet d'adresser le haut-parleur comme une
carte son.

La solution la plus simple et la plus propre pour toi est sans doute
d'ajouter la permission "set uid root" à ton programme :

$ chown root:root alarm
$ chmod +s alarm

Tu peut aussi faire un script à base de echo -e "a", c'est moins joli
mais tout aussi efficace.



Sur ma Sarge, il y a le paquet beep qui va bien sans être root.
Peut-être que jeter un oeil au source pourrait vous inspirer



Ce programme est directement tiré de beep, qui doit également avoir les droits
cités plus hauts.


Léo.
1 2