* Use chroot () in a secure way - chdir+chroot * Added CHRDIR to chdir after chrooting * Fix support to 'run any command' - sup - small tool for privilege escalation HTML git clone git://bitreich.org/sup git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/sup DIR Log DIR Files DIR Refs DIR Tags DIR README DIR LICENSE --- DIR commit a9bc8aa095aabbb77bc77d990cc410c65cae19ba DIR parent 989bc1c744d8fe03a58692410a6d68ad00a872c8 HTML Author: pancake@dazo <unknown> Date: Mon, 14 Dec 2009 01:30:40 +0100 * Use chroot () in a secure way - chdir+chroot * Added CHRDIR to chdir after chrooting * Fix support to 'run any command' Diffstat: M config.def.h | 3 ++- M sup.c | 8 ++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) --- DIR diff --git a/config.def.h b/config.def.h @@ -4,7 +4,8 @@ #define SETUID 0 #define SETGID 0 -#define CHROOT "/" +#define CHROOT "" +#define CHRDIR "" #define ENFORCE 1 DIR diff --git a/sup.c b/sup.c @@ -60,10 +60,14 @@ int main(int argc, char **argv) { seteuid (SETUID) == -1 || setegid (SETGID) == -1) return die (1, strerror (errno)); #ifdef CHROOT - if (chroot (CHROOT) == -1) + if (*CHROOT) + if (chdir (CHROOT) == -1 || chroot (".") == -1) return die (1, strerror (errno)); + if (*CHRDIR) + if (chdir (CHRDIR) == -1) + return die (1, strerror (errno)); #endif - ret = execv (rules[i].path? rules[i].path:argv[1], argv+1); + ret = execv (*rules[i].path? rules[i].path:argv[1], argv+1); return die (ret, strerror (errno)); } }