From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Wed, 11 Dec 2002 16:07:36 +0200 From: Alexander Bokovoy To: devel@altlinux.ru Subject: Re: [devel] BTE Message-ID: <20021211140735.GD8888@sam-solutions.net> Mail-Followup-To: devel@altlinux.ru References: <20021209190455.GI17314@sam-solutions.net> <3DF4F90D.9040209@altlinux.com> <20021209203235.GQ17314@sam-solutions.net> <3DF501F9.8040801@altlinux.com> <20021210094706.GB28493@sam-solutions.net> <3DF5BBA4.7040602@altlinux.com> <20021210102808.GF28493@sam-solutions.net> <20021210104036.GF18440@basalt.office.altlinux.ru> <20021210105124.GG28493@sam-solutions.net> <20021210110230.GJ18440@basalt.office.altlinux.ru> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="lEGEL1/lMxI0MVQ2" Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20021210110230.GJ18440@basalt.office.altlinux.ru> Sender: devel-admin@altlinux.ru Errors-To: devel-admin@altlinux.ru X-BeenThere: devel@altlinux.ru X-Mailman-Version: 2.0.9 Precedence: bulk Reply-To: devel@altlinux.ru List-Unsubscribe: , List-Id: List-Post: List-Help: List-Subscribe: , List-Archive: Archived-At: List-Archive: List-Post: --lEGEL1/lMxI0MVQ2 Content-Type: text/plain; charset=koi8-r Content-Disposition: inline Content-Transfer-Encoding: 8bit On Tue, Dec 10, 2002 at 02:02:30PM +0300, Dmitry V. Levin wrote: > > > > > Но у меня все еще тяжелее чем у вас - BTE работает с правами > > > > > пользователя. ;-) > > > > У нас тоже с правами пользователя (еще с весны). Так что к чему этот довод > > > > -- не понял. > > > Ваша версия BTE устанавливает пакеты с правами root'а, что есть insecure. > > Есть идеи как использовать команду chroot без соответствующих привилегий? > > Есть идея использовать chrootuid. Есть идея этот chrootuid посмотреть повнимательнее. Такой профанации я еще не встречал. Патч, лечащий профанацию, прилагается. Пакеты (chrootuid-1.3-alt2) уже отправлены в devel:/incoming/Sisyphus/BTE. Немного о том, почему здесь не надо использовать syslog. Поскольку chroot(1) и su(1) пишут ошибки на stderr, то я не вижу необходимости и утилите, комбинирующей их, писать не на stderr. Более того, очевидно, именно запись в syslog вместо stderr и привела к пропуску второго ляпсуса, названного мною выше "профанацией". Хотя, впрочем, как назвать кардинально неправильное поведение "secure" программы? -- / Alexander Bokovoy --- Nobody knows what goes between his cold toes and his warm ears. -- Roy Harper --lEGEL1/lMxI0MVQ2 Content-Type: text/plain; charset=koi8-r Content-Disposition: attachment; filename="chrootuid-1.3-alt.patch" --- chrootuid-1.3/chrootuid.c.orig 2002-12-11 15:28:44 +0200 +++ chrootuid-1.3/chrootuid.c 2002-12-11 15:42:57 +0200 @@ -50,9 +50,11 @@ #include #include +#include +#include +#include #include #include -#include int main(argc, argv) int argc; @@ -65,12 +67,6 @@ * require only two arguments. */ -#ifdef LOG_DAEMON - (void) openlog(argv[0], LOG_PID | LOG_NDELAY, LOG_DAEMON); -#else - (void) openlog(argv[0], LOG_PID); -#endif - /* * Require proper amount of arguments. In all cases of error, exit with * zero status because we have already reported the problem via syslogd. @@ -78,44 +74,44 @@ */ if (argc < 4) { - syslog(LOG_ERR, "usage: %s path user command", argv[0]); - return (0); + fprintf(stderr,"usage: %s path user command\n", argv[0]); + return (1); } /* Must step into the new subtree. */ if (chdir(argv[1])) { - syslog(LOG_ERR, "chdir(%s): %m", argv[1]); - return (0); + fprintf(stderr, "chdir(%s): %s\n", argv[1], strerror(errno)); + return (1); } /* The user must be known in the *unrestricted* universe... */ if ((pwd = getpwnam(argv[2])) == 0) { - syslog(LOG_ERR, "%s: user unknown", argv[2]); - return (0); + fprintf(stderr, "%s: user unknown\n", argv[2]); + return (1); } /* initgroups() accesses the group file in the unrestricted universe... */ if (initgroups(pwd->pw_name, pwd->pw_gid) < 0) { - syslog(LOG_ERR, "initgroups: %m"); - return (0); + fprintf(stderr, "initgroups: %s\n", strerror(errno)); + return (1); } endgrent(); /* Do the chroot() before giving away root privileges. */ if (chroot(argv[1])) { - syslog(LOG_ERR, "chroot(%s): %m", argv[1]); - return (0); + fprintf(stderr, "chroot(%s): %s\n", argv[1], strerror(errno)); + return (1); } /* Switch group id then user id. */ if (setgid(pwd->pw_gid)) { - syslog(LOG_ERR, "setgid(%d): %m", pwd->pw_gid); - return (0); + fprintf(stderr, "setgid(%d): %s\n", pwd->pw_gid, strerror(errno)); + return (1); } if (setuid(pwd->pw_uid)) { - syslog(LOG_ERR, "setuid(%d): %m", pwd->pw_uid); - return (0); + fprintf(stderr, "setuid(%d): %s\n", pwd->pw_uid, strerror(errno)); + return (1); } /* In case we still have the /etc/passwd file still open. */ @@ -124,6 +120,6 @@ /* Run the command and hope for the best. */ (void) execv(argv[3], argv + 3); - syslog(LOG_ERR, "%s: %m", argv[3]); - return (0); + fprintf(stderr, "%s: %s", argv[3], strerror(errno)); + return (1); } --lEGEL1/lMxI0MVQ2--