[devel] Re: Restricted shell for cvs over ssh
Dmitry V. Levin
=?iso-8859-1?q?ldv_=CE=C1_altlinux=2Eorg?=
Вт Окт 29 17:50:12 MSK 2002
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
----------- следующая часть -----------
#define _GNU_SOURCE
#include <stdio.h>
#include <errno.h>
#include <error.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <ctype.h>
#include <sys/types.h>
#include <pwd.h>
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;
}
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип : application/pgp-signature
Размер : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20021029/f804e4cd/attachment-0001.bin>
Подробная информация о списке рассылки Devel