[Bill Allombert] > #include <unistd.h> > #include <sys/types.h> > #include <stdio.h> > #include <errno.h> > #include <stdlib.h> > #include <string.h> > #define CHROOT_PATH "/sid/"
I'd encase this in #ifndef CHROOT_PATH, so you can change it on the
compile line and thus quickly build multiple binaries.
> #define LEN_CHROOT_PATH strlen(CHROOT_PATH)
Not used.
> char *shell;
> if (chroot(CHROOT_PATH)) die("chroot");
> if (seteuid(getuid())) die("seteuid");
> /*Now most security problem are ended.*/
FYI, chroot() does not imply chdir(). so your current directory isn't
inside the chroot yet, and so long as this is true, a user can use
relative paths (including ../../../../) to navigate arbitrarily.
This isn't a security problem in *your* application, but it probably
*is* unexpected behavior. I suggest saving the cwd in a char[] before
the chroot, then doing chdir("/") followed by chdir(old_cwd).
signature.asc
Description: Digital signature

