From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Tue, 29 Oct 2002 17:50:12 +0300 From: "Dmitry V. Levin" To: ALT Devel discussion list Subject: Re: [devel] Re: Restricted shell for cvs over ssh Message-ID: <20021029145012.GA10143@basalt.office.altlinux.ru> Mail-Followup-To: ALT Devel discussion list References: <20021029161658.18badceb.vyt@vzljot.ru> <20021029140342.GH21820@basalt.office.altlinux.ru> <20021029173236.68a37c1c.vyt@vzljot.ru> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="neYutvxvOLaeuPCA" Content-Disposition: inline In-Reply-To: <20021029173236.68a37c1c.vyt@vzljot.ru> X-fingerprint: 9658 398D 181B 1200 8FC5 26B8 F6F8 846B C1E2 3429 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: --neYutvxvOLaeuPCA Content-Type: multipart/mixed; boundary="x+6KMIRAuhnl3hBn" Content-Disposition: inline Content-Transfer-Encoding: 8bit --x+6KMIRAuhnl3hBn Content-Type: text/plain; charset=koi8-r Content-Disposition: inline Content-Transfer-Encoding: 8bit On Tue, Oct 29, 2002 at 05:32:36PM +0300, Vitaly Ostanin wrote: > > > Если не секрет, что такое хитрое запущено на хосте devel, что > > > не даёт нормального shell'а, но даёт возможность использовать > > > cvs over ssh ? > > > > Специальный wrapper: > > $ wc master/alt_sh.c > > 101 288 2112 master/alt_sh.c > > А он как бы... ну... попробовать дают? :)) > > > > Собрался cvs у себя завести, хочется по уму :) > > > > Только для cvs? > > На devel.altlinux.ru есть ещё и rsync. > > Да, это мне только для cvs. Вот пример такого shell'а. Естественно, что приведённый в нем путь к chroot'у надо заменить на реальный. Помещают такие программы обычно в /usr/local/sbin/, с правами %attr(4710,root,группа_доступа). -- ldv --x+6KMIRAuhnl3hBn Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="cvs_sh.c" #define _GNU_SOURCE #include #include #include #include #include #include #include #include #include int main (int ac, char *av[]) { const char *dir = "/path/to/chroot"; const char *file = 0; struct passwd *pw; uid_t uid = getuid (); if (!uid) error (EXIT_FAILURE, 0, "must be non-root"); if (chdir (dir) < 0) error (EXIT_FAILURE, errno, "chdir"); if (chroot (".") < 0) error (EXIT_FAILURE, errno, "chroot"); if (setuid (uid) < 0) error (EXIT_FAILURE, errno, "setuid"); pw = getpwuid (uid); if (!pw) error (EXIT_FAILURE, errno, "getpwuid"); if (!pw->pw_dir) error (EXIT_FAILURE, 0, "invalid home directory"); if (chdir (pw->pw_dir) < 0) error (EXIT_FAILURE, errno, "chdir"); if (setenv ("HOME", pw->pw_dir, 1) < 0) error (EXIT_FAILURE, errno, "setenv: HOME"); if (setenv ("USER", pw->pw_name, 1) < 0) error (EXIT_FAILURE, errno, "setenv: USER"); if (setenv ("PATH", "/bin", 1) < 0) error (EXIT_FAILURE, errno, "setenv: PATH"); if (3 == ac) { if (strcmp ("-c", av[1])) error (EXIT_FAILURE, EINVAL, "%s", av[1]); if (!strcmp ("cvs server", av[2])) { const char *args[] = { "cvs", "server", 0 }; file = "/bin/cvs"; execv (file, (char *const *) args); error (EXIT_FAILURE, errno, "execv: %s", file); } error (EXIT_FAILURE, EINVAL, "%s", av[2]); } error (EXIT_FAILURE, 0, "invalid arguments"); return EXIT_FAILURE; } --x+6KMIRAuhnl3hBn-- --neYutvxvOLaeuPCA Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.0.7 (GNU/Linux) iD8DBQE9vqAj9viEa8HiNCkRAuR4AJsHasKiyE+X7LSQMEU2h4DSqY4M2wCfaetI VJFxWK3N/QwUql6QAvuNIGU= =1+Hm -----END PGP SIGNATURE----- --neYutvxvOLaeuPCA--