1) pour me debarasser desdroits de root, j'ai l'habitude d'ecrire
if ((setuid(something) != 0) ||
(seteuid(something) != 0))
perror("...
Ca compile bien sur BSD, moins bien sur d'autres systèmes. Quelle est la
façon portable de faire ca?
2) De même, pour tester si un objet est un socket Unix, j'utilie stat(2)
et je teste le bit S_IFSOCK du champ st_mode. Ca râle sous Linux.
Comment doit on faire?
--
Emmanuel Dreyfus
Publicité subliminale: achetez ce livre!
http://www.eyrolles.com/php.informatique/Ouvrages/9782212112443.php3
manu@netbsd.org
1) pour me debarasser desdroits de root, j'ai l'habitude d'ecrire
if ((setuid(something) != 0) || (seteuid(something) != 0)) perror("...
Ca compile bien sur BSD, moins bien sur d'autres systèmes. Quelle est la façon portable de faire ca?
Quel est le problème exactement ?
2) De même, pour tester si un objet est un socket Unix, j'utilie stat(2) et je teste le bit S_IFSOCK du champ st_mode. Ca râle sous Linux. Comment doit on faire?
Utiliser la macro S_ISSOCK ? Comme ceci if (S_ISSOCK(st.st_mode))
-- "Never ascribe to malice what can be explained by human stupidity" R. A. Heinlein
manu@netbsd.org (Emmanuel Dreyfus) writes:
Deux petites questions de portabilité:
1) pour me debarasser desdroits de root, j'ai l'habitude d'ecrire
if ((setuid(something) != 0) ||
(seteuid(something) != 0))
perror("...
Ca compile bien sur BSD, moins bien sur d'autres systèmes. Quelle est la
façon portable de faire ca?
Quel est le problème exactement ?
2) De même, pour tester si un objet est un socket Unix, j'utilie stat(2)
et je teste le bit S_IFSOCK du champ st_mode. Ca râle sous Linux.
Comment doit on faire?
Utiliser la macro S_ISSOCK ? Comme ceci
if (S_ISSOCK(st.st_mode))
--
"Never ascribe to malice what can be explained by human stupidity"
R. A. Heinlein
1) pour me debarasser desdroits de root, j'ai l'habitude d'ecrire
if ((setuid(something) != 0) || (seteuid(something) != 0)) perror("...
Ca compile bien sur BSD, moins bien sur d'autres systèmes. Quelle est la façon portable de faire ca?
Quel est le problème exactement ?
2) De même, pour tester si un objet est un socket Unix, j'utilie stat(2) et je teste le bit S_IFSOCK du champ st_mode. Ca râle sous Linux. Comment doit on faire?
Utiliser la macro S_ISSOCK ? Comme ceci if (S_ISSOCK(st.st_mode))
-- "Never ascribe to malice what can be explained by human stupidity" R. A. Heinlein
manu
I love cats wrote:
if ((setuid(something) != 0) || (seteuid(something) != 0)) perror("...
Ca compile bien sur BSD, moins bien sur d'autres systèmes. Quelle est la façon portable de faire ca? Quel est le problème exactement ?
Passer sous un UID non root dans un daemon.
2) De même, pour tester si un objet est un socket Unix, j'utilie stat(2) et je teste le bit S_IFSOCK du champ st_mode. Ca râle sous Linux. Comment doit on faire? Utiliser la macro S_ISSOCK ? Comme ceci
if (S_ISSOCK(st.st_mode))
Pour Linux, elle est dans un ifdef __USE_BSD dans les headers. J'ai beau definir ce symbole, ca ne passe pas pour autant. Quelle est l'astuce?
-- Emmanuel Dreyfus Publicité subliminale: achetez ce livre! http://www.eyrolles.com/Informatique/Livre/9782212112443/Livre_BSD.php
I love cats <catipole@bigfoot.com> wrote:
if ((setuid(something) != 0) ||
(seteuid(something) != 0))
perror("...
Ca compile bien sur BSD, moins bien sur d'autres systèmes. Quelle est la
façon portable de faire ca?
Quel est le problème exactement ?
Passer sous un UID non root dans un daemon.
2) De même, pour tester si un objet est un socket Unix, j'utilie stat(2)
et je teste le bit S_IFSOCK du champ st_mode. Ca râle sous Linux.
Comment doit on faire?
Utiliser la macro S_ISSOCK ? Comme ceci
if (S_ISSOCK(st.st_mode))
Pour Linux, elle est dans un ifdef __USE_BSD dans les headers. J'ai beau
definir ce symbole, ca ne passe pas pour autant. Quelle est l'astuce?
--
Emmanuel Dreyfus
Publicité subliminale: achetez ce livre!
http://www.eyrolles.com/Informatique/Livre/9782212112443/Livre_BSD.php
manu@netbsd.org
if ((setuid(something) != 0) || (seteuid(something) != 0)) perror("...
Ca compile bien sur BSD, moins bien sur d'autres systèmes. Quelle est la façon portable de faire ca? Quel est le problème exactement ?
Passer sous un UID non root dans un daemon.
2) De même, pour tester si un objet est un socket Unix, j'utilie stat(2) et je teste le bit S_IFSOCK du champ st_mode. Ca râle sous Linux. Comment doit on faire? Utiliser la macro S_ISSOCK ? Comme ceci
if (S_ISSOCK(st.st_mode))
Pour Linux, elle est dans un ifdef __USE_BSD dans les headers. J'ai beau definir ce symbole, ca ne passe pas pour autant. Quelle est l'astuce?
-- Emmanuel Dreyfus Publicité subliminale: achetez ce livre! http://www.eyrolles.com/Informatique/Livre/9782212112443/Livre_BSD.php
Laurent Wacrenier
Emmanuel Dreyfus écrit:
1) pour me debarasser desdroits de root, j'ai l'habitude d'ecrire
if ((setuid(something) != 0) || (seteuid(something) != 0)) perror("...
setuid() change les utilisateurs reéls, effectifs et sauvegardés.
Ca compile bien sur BSD, moins bien sur d'autres systèmes. Quelle est la façon portable de faire ca?
Quelle est l'erreur ? Certains systèmes n'ont pas seteuid(), bien que ce soit une fonction POSIX (ils utilisent setreuid() ou setresuid()). setuid() fait tout, de toute manière.
Emmanuel Dreyfus <manu@netbsd.org> écrit:
1) pour me debarasser desdroits de root, j'ai l'habitude d'ecrire
if ((setuid(something) != 0) ||
(seteuid(something) != 0))
perror("...
setuid() change les utilisateurs reéls, effectifs et sauvegardés.
Ca compile bien sur BSD, moins bien sur d'autres systèmes. Quelle est la
façon portable de faire ca?
Quelle est l'erreur ?
Certains systèmes n'ont pas seteuid(), bien que ce soit une fonction
POSIX (ils utilisent setreuid() ou setresuid()).
setuid() fait tout, de toute manière.
1) pour me debarasser desdroits de root, j'ai l'habitude d'ecrire
if ((setuid(something) != 0) || (seteuid(something) != 0)) perror("...
setuid() change les utilisateurs reéls, effectifs et sauvegardés.
Ca compile bien sur BSD, moins bien sur d'autres systèmes. Quelle est la façon portable de faire ca?
Quelle est l'erreur ? Certains systèmes n'ont pas seteuid(), bien que ce soit une fonction POSIX (ils utilisent setreuid() ou setresuid()). setuid() fait tout, de toute manière.
Antoine Bellot
Emmanuel Dreyfus a écrit:
Deux petites questions de portabilité:
1) pour me debarasser desdroits de root, j'ai l'habitude d'ecrire
if ((setuid(something) != 0) || (seteuid(something) != 0)) perror("...
Ca compile bien sur BSD, moins bien sur d'autres systèmes. Quelle est la façon portable de faire ca?
à l'exception de la feature POSIX de facto optionnelle _POSIX_SAVED_IDS, il n'existe pas à ma connaissance de manière POSIX de se débarasser temporairement des droits de root (dans l'espoir de les recouvrer par la suite par des ressources internes au processus).
-- Antoine Bellot : #ifndef __M68K_SPINLOCK_H #define __M68K_SPINLOCK_H #error "m68k doesn't do SMP yet" -- SCO's IP
It's not an exact reference, due to the fact that the API changes from version to version, and that the kernel API is not required to match the documentation. -- Jamie Lokier abt LDD-3
Emmanuel Dreyfus a écrit:
Deux petites questions de portabilité:
1) pour me debarasser desdroits de root, j'ai l'habitude d'ecrire
if ((setuid(something) != 0) ||
(seteuid(something) != 0))
perror("...
Ca compile bien sur BSD, moins bien sur d'autres systèmes. Quelle est la
façon portable de faire ca?
à l'exception de la feature POSIX de facto optionnelle _POSIX_SAVED_IDS,
il n'existe pas à ma connaissance de manière POSIX de se débarasser
temporairement des droits de root (dans l'espoir de les recouvrer par la
suite par des ressources internes au processus).
--
Antoine Bellot :
#ifndef __M68K_SPINLOCK_H
#define __M68K_SPINLOCK_H
#error "m68k doesn't do SMP yet"
-- SCO's IP
It's not an exact reference, due to the fact that the API changes
from version to version, and that the kernel API is not required
to match the documentation. -- Jamie Lokier abt LDD-3
1) pour me debarasser desdroits de root, j'ai l'habitude d'ecrire
if ((setuid(something) != 0) || (seteuid(something) != 0)) perror("...
Ca compile bien sur BSD, moins bien sur d'autres systèmes. Quelle est la façon portable de faire ca?
à l'exception de la feature POSIX de facto optionnelle _POSIX_SAVED_IDS, il n'existe pas à ma connaissance de manière POSIX de se débarasser temporairement des droits de root (dans l'espoir de les recouvrer par la suite par des ressources internes au processus).
-- Antoine Bellot : #ifndef __M68K_SPINLOCK_H #define __M68K_SPINLOCK_H #error "m68k doesn't do SMP yet" -- SCO's IP
It's not an exact reference, due to the fact that the API changes from version to version, and that the kernel API is not required to match the documentation. -- Jamie Lokier abt LDD-3
Thomas Nemeth
Le mar 02 mar 2004 à 13:02, Antoine Bellot a tapoté : | Emmanuel Dreyfus a écrit: | > | > if ((setuid(something) != 0) || | > (seteuid(something) != 0)) | > perror("... | > | > Ca compile bien sur BSD, moins bien sur d'autres systèmes. Quelle est la | > façon portable de faire ca? | | à l'exception de la feature POSIX de facto optionnelle _POSIX_SAVED_IDS, | il n'existe pas à ma connaissance de manière POSIX de se débarasser | temporairement des droits de root (dans l'espoir de les recouvrer par la | suite par des ressources internes au processus).
Mais il n'a peut-être pas l'intention de les recouvrer par la suite, d'autant que c'est pour faire un daemon...
Thomas -- TP: Ne doit-on pas dire fora plutôt que forums ?? JB: C'est sûr ; d'ailleurs on dit bien "un hortensium" et "des gérania" -+- in: Guide du Cabaliste Usenet - Du renommationnage -+-
Le mar 02 mar 2004 à 13:02, Antoine Bellot a tapoté :
| Emmanuel Dreyfus a écrit:
| >
| > if ((setuid(something) != 0) ||
| > (seteuid(something) != 0))
| > perror("...
| >
| > Ca compile bien sur BSD, moins bien sur d'autres systèmes. Quelle est la
| > façon portable de faire ca?
|
| à l'exception de la feature POSIX de facto optionnelle _POSIX_SAVED_IDS,
| il n'existe pas à ma connaissance de manière POSIX de se débarasser
| temporairement des droits de root (dans l'espoir de les recouvrer par la
| suite par des ressources internes au processus).
Mais il n'a peut-être pas l'intention de les recouvrer par la suite,
d'autant que c'est pour faire un daemon...
Thomas
--
TP: Ne doit-on pas dire fora plutôt que forums ??
JB: C'est sûr ; d'ailleurs on dit bien "un hortensium" et "des gérania"
-+- in: Guide du Cabaliste Usenet - Du renommationnage -+-
Le mar 02 mar 2004 à 13:02, Antoine Bellot a tapoté : | Emmanuel Dreyfus a écrit: | > | > if ((setuid(something) != 0) || | > (seteuid(something) != 0)) | > perror("... | > | > Ca compile bien sur BSD, moins bien sur d'autres systèmes. Quelle est la | > façon portable de faire ca? | | à l'exception de la feature POSIX de facto optionnelle _POSIX_SAVED_IDS, | il n'existe pas à ma connaissance de manière POSIX de se débarasser | temporairement des droits de root (dans l'espoir de les recouvrer par la | suite par des ressources internes au processus).
Mais il n'a peut-être pas l'intention de les recouvrer par la suite, d'autant que c'est pour faire un daemon...
Thomas -- TP: Ne doit-on pas dire fora plutôt que forums ?? JB: C'est sûr ; d'ailleurs on dit bien "un hortensium" et "des gérania" -+- in: Guide du Cabaliste Usenet - Du renommationnage -+-
manu
Thomas Nemeth wrote:
Mais il n'a peut-être pas l'intention de les recouvrer par la suite, d'autant que c'est pour faire un daemon...
Tout à fait, je ne souhaite pas les recuperer. En faisant #define _BSD_SOURCE, ca compile sous linux en -Wall -Werror. Mais ca n'est pas très satisfaisant.
-- Emmanuel Dreyfus Publicité subliminale: achetez ce livre! http://www.eyrolles.com/Informatique/Livre/9782212112443/Livre_BSD.php
Thomas Nemeth <thomas@exether.vipere.noire> wrote:
Mais il n'a peut-être pas l'intention de les recouvrer par la suite,
d'autant que c'est pour faire un daemon...
Tout à fait, je ne souhaite pas les recuperer.
En faisant #define _BSD_SOURCE, ca compile sous linux en -Wall -Werror.
Mais ca n'est pas très satisfaisant.
--
Emmanuel Dreyfus
Publicité subliminale: achetez ce livre!
http://www.eyrolles.com/Informatique/Livre/9782212112443/Livre_BSD.php
manu@netbsd.org
Mais il n'a peut-être pas l'intention de les recouvrer par la suite, d'autant que c'est pour faire un daemon...
Tout à fait, je ne souhaite pas les recuperer. En faisant #define _BSD_SOURCE, ca compile sous linux en -Wall -Werror. Mais ca n'est pas très satisfaisant.
-- Emmanuel Dreyfus Publicité subliminale: achetez ce livre! http://www.eyrolles.com/Informatique/Livre/9782212112443/Livre_BSD.php
Thomas Nemeth
Le mar 02 mar 2004 à 15:51, Emmanuel Dreyfus a tapoté : | Thomas Nemeth wrote: | | > Mais il n'a peut-être pas l'intention de les recouvrer par la suite, | > d'autant que c'est pour faire un daemon... | | Tout à fait, je ne souhaite pas les recuperer. | En faisant #define _BSD_SOURCE, ca compile sous linux en -Wall -Werror. | Mais ca n'est pas très satisfaisant.
C'est con quand même car c'est POSIX (cf la page man de stat). Ça ne devrait pas faire de message d'erreur :( Je suis déçu.
Thomas -- BOFH excuse #21: POSIX complience problem.
Le mar 02 mar 2004 à 15:51, Emmanuel Dreyfus a tapoté :
| Thomas Nemeth <thomas@exether.vipere.noire> wrote:
|
| > Mais il n'a peut-être pas l'intention de les recouvrer par la suite,
| > d'autant que c'est pour faire un daemon...
|
| Tout à fait, je ne souhaite pas les recuperer.
| En faisant #define _BSD_SOURCE, ca compile sous linux en -Wall -Werror.
| Mais ca n'est pas très satisfaisant.
C'est con quand même car c'est POSIX (cf la page man de stat). Ça ne
devrait pas faire de message d'erreur :(
Je suis déçu.
Thomas
--
BOFH excuse #21:
POSIX complience problem.
Le mar 02 mar 2004 à 15:51, Emmanuel Dreyfus a tapoté : | Thomas Nemeth wrote: | | > Mais il n'a peut-être pas l'intention de les recouvrer par la suite, | > d'autant que c'est pour faire un daemon... | | Tout à fait, je ne souhaite pas les recuperer. | En faisant #define _BSD_SOURCE, ca compile sous linux en -Wall -Werror. | Mais ca n'est pas très satisfaisant.
C'est con quand même car c'est POSIX (cf la page man de stat). Ça ne devrait pas faire de message d'erreur :( Je suis déçu.
Thomas -- BOFH excuse #21: POSIX complience problem.
Laurent Wacrenier
Emmanuel Dreyfus écrit:
En faisant #define _BSD_SOURCE, ca compile sous linux en -Wall -Werror. Mais ca n'est pas très satisfaisant.
Ha, les joies de la glibc...
Emmanuel Dreyfus <manu@netbsd.org> écrit:
En faisant #define _BSD_SOURCE, ca compile sous linux en -Wall -Werror.
Mais ca n'est pas très satisfaisant.
En faisant #define _BSD_SOURCE, ca compile sous linux en -Wall -Werror. Mais ca n'est pas très satisfaisant.
Ha, les joies de la glibc...
Antoine Bellot
Emmanuel Dreyfus a écrit:
Tout à fait, je ne souhaite pas les recuperer. En faisant #define _BSD_SOURCE, ca compile sous linux en -Wall -Werror. Mais ca n'est pas très satisfaisant.
Disons après ça que ça dépend de ce qu'on entend par portable. Au pire, setuid en erreur peut fixer errno à EPERM, EAGAIN (dépassement de nproc rlimit) ou EINVAL dans des cas tordus (SVr4-strict, ou feature WITH_IRIX_AUDIT). Utiliser setXuid (libc & kernel-dependant) pour un programme à grande diffusion incite à la prudence.
Par ailleurs, comme le souligne lwa (en termes plus concis, mais très justes :-))) ), le comportement de set(e)uid n'est pas le même en libc4/5/glibc2.0 ou en glibc2.1+. Le manuel conseille par principe de tester _POSIX_SAVED_IDS.
Sans doute la manière de faire de openssh-portable (ssh.c/uidswap.c) est la plus complexe/aboutie imaginable.
Emmanuel Dreyfus a écrit:
Tout à fait, je ne souhaite pas les recuperer.
En faisant #define _BSD_SOURCE, ca compile sous linux en -Wall -Werror.
Mais ca n'est pas très satisfaisant.
Disons après ça que ça dépend de ce qu'on entend par portable. Au pire,
setuid en erreur peut fixer errno à EPERM, EAGAIN (dépassement de nproc
rlimit) ou EINVAL dans des cas tordus (SVr4-strict, ou feature
WITH_IRIX_AUDIT). Utiliser setXuid (libc & kernel-dependant) pour un
programme à grande diffusion incite à la prudence.
Par ailleurs, comme le souligne lwa (en termes plus concis, mais très
justes :-))) ), le comportement de set(e)uid n'est pas le même en
libc4/5/glibc2.0 ou en glibc2.1+. Le manuel conseille par principe de
tester _POSIX_SAVED_IDS.
Sans doute la manière de faire de openssh-portable (ssh.c/uidswap.c) est
la plus complexe/aboutie imaginable.
Tout à fait, je ne souhaite pas les recuperer. En faisant #define _BSD_SOURCE, ca compile sous linux en -Wall -Werror. Mais ca n'est pas très satisfaisant.
Disons après ça que ça dépend de ce qu'on entend par portable. Au pire, setuid en erreur peut fixer errno à EPERM, EAGAIN (dépassement de nproc rlimit) ou EINVAL dans des cas tordus (SVr4-strict, ou feature WITH_IRIX_AUDIT). Utiliser setXuid (libc & kernel-dependant) pour un programme à grande diffusion incite à la prudence.
Par ailleurs, comme le souligne lwa (en termes plus concis, mais très justes :-))) ), le comportement de set(e)uid n'est pas le même en libc4/5/glibc2.0 ou en glibc2.1+. Le manuel conseille par principe de tester _POSIX_SAVED_IDS.
Sans doute la manière de faire de openssh-portable (ssh.c/uidswap.c) est la plus complexe/aboutie imaginable.
I love cats
(Emmanuel Dreyfus) writes:
Passer sous un UID non root dans un daemon.
Ca c'est l'objectif, mais quel est le problème ? Ca marche pas ? Ca passe pas à la compile ? Au link ? Sur quel système ?
Pour Linux, elle est dans un ifdef __USE_BSD dans les headers. J'ai beau definir ce symbole, ca ne passe pas pour autant. Quelle est l'astuce?
Ben sans astuce particulière, j'ai fait un petit programme de test et ça marche chez moi. compilo: gcc version 3.2 20020903 (Red Hat Linux 8.0 3.2-7) glibc: Name : glibc-devel Relocations: (not relocateable) Version : 2.3.2 Vendor: Red Hat, Inc. Release : 4.80.8 Build Date: Wed 05 Nov 2003 09:57:31 PM CET
-- "Never ascribe to malice what can be explained by human stupidity" R. A. Heinlein
manu@netbsd.org (Emmanuel Dreyfus) writes:
Passer sous un UID non root dans un daemon.
Ca c'est l'objectif, mais quel est le problème ? Ca marche pas ? Ca
passe pas à la compile ? Au link ? Sur quel système ?
Pour Linux, elle est dans un ifdef __USE_BSD dans les headers. J'ai beau
definir ce symbole, ca ne passe pas pour autant. Quelle est l'astuce?
Ben sans astuce particulière, j'ai fait un petit programme de test et
ça marche chez moi.
compilo: gcc version 3.2 20020903 (Red Hat Linux 8.0 3.2-7)
glibc:
Name : glibc-devel Relocations: (not relocateable)
Version : 2.3.2 Vendor: Red Hat, Inc.
Release : 4.80.8 Build Date: Wed 05 Nov 2003 09:57:31 PM CET
--
"Never ascribe to malice what can be explained by human stupidity"
R. A. Heinlein
Ca c'est l'objectif, mais quel est le problème ? Ca marche pas ? Ca passe pas à la compile ? Au link ? Sur quel système ?
Pour Linux, elle est dans un ifdef __USE_BSD dans les headers. J'ai beau definir ce symbole, ca ne passe pas pour autant. Quelle est l'astuce?
Ben sans astuce particulière, j'ai fait un petit programme de test et ça marche chez moi. compilo: gcc version 3.2 20020903 (Red Hat Linux 8.0 3.2-7) glibc: Name : glibc-devel Relocations: (not relocateable) Version : 2.3.2 Vendor: Red Hat, Inc. Release : 4.80.8 Build Date: Wed 05 Nov 2003 09:57:31 PM CET
-- "Never ascribe to malice what can be explained by human stupidity" R. A. Heinlein