1.1, ivoronin (?), 21:49, 16/08/2004 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Ужасный способ. Тем более добавление "/bin/chrsh" в /etc/shells, - при доступе к non-chroot environment на этой машине юзер сможет запросто сменить свой шелл.
Как это сделать правильно в *BSD:
Создаём в /etc/login.conf новый класс пользователей, скажем chrootusers, и назначаем ему shell=/bin/chrsh, которая представляет из себя програмку-враппер которая делает getpwent(), chroot() а потом exec(pw->pw_shell,..). Готово. Никаких скриптов и лазеек.
Думаю в linux можно как-нибудь извернуться через PAM. | |
|
|
3.7, HFSC (?), 10:35, 24/08/2004 [^] [^^] [^^^] [ответить]
| +/– |
Чрезвычайно просто...каждому юзеру создавать dev и монтировать devpts | |
|
|
1.3, Дмитрий Ю. Карпов (?), 00:29, 21/08/2004 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
И ни слова о том, что надо создать такому юзеру остельное окружение, включающее запускаемые программы (начиная с ls), разделяемые библиотеки, файлы из /etc (например, groups, который используется программой ls) и ещё много чего, я даже не назову всё. Возможно, юзеру понадобятся спецфайлы из /dev ...
А если какая-то из нужных этому юзеру программ использует /proc, то я даже не знаю, что делать - в отличие от вышеупомянутых, её нельзя скопировать (разве что смонтировать на саму себя по NFS). | |
|
2.5, Илья Воронин (?), 16:35, 23/08/2004 [^] [^^] [^^^] [ответить]
| +/– |
> И ни слова о том, что надо создать такому юзеру остельное окружение,
> включающее запускаемые программы (начиная с ls), разделяемые
> библиотеки, файлы из /etc (например, groups, который используется
> программой ls) и ещё много чего, я даже не назову всё. Возможно, юзеру
> понадобятся спецфайлы из /dev ...
Банальности.
> А если какая-то из нужных этому юзеру программ использует /proc, то я
> даже не знаю, что делать - в отличие от вышеупомянутых, её нельзя
> скопировать (разве что смонтировать на саму себя по NFS).
Можно просто ещё раз её смонтировать.
| |
2.6, Friendly GHOST (?), 17:08, 23/08/2004 [^] [^^] [^^^] [ответить]
| +/– |
Господь с вами любезный государь! :))) По NFSу... хи-хи :))
Я думаю проще так: для простоты положим что пользователю нужен bash и ls
#начинаем создавать окружение
mkdir -p /home/vasya_pupkin/etc ;
mkdir -p /home/vasya_pupkin/proc ;
#монтируем нужные файловые системы
mount -t proc /proc /home/vasya_pupkin/proc;
mount -o bind /etc /home/vasya_pupkin/etc;
#Проверочка
mount;
#Смотрим используемые библиотеки и копируем их
ldd -d /bin/ls;
mkdir /home/vasya_pupkin/lib;
cp libtermcap.so.2 /home/vasya_pupkin/lib;
cp /lib/libtermcap.so.2 /home/vasya_pupkin/lib;
cp /lib/libc.so.6 /home/vasya_pupkin/lib;
cp /lib/ld-linux.so.2 /home/vasya_pupkin/lib;
ldd -d /bin/bash;
cp /lib/libreadline.so.4.2 /home/vasya_pupkin/lib;
cp /lib/libhistory.so.4.2 /home/vasya_pupkin/lib;
cp /lib/libdl.so.2 /home/vasya_pupkin/lib;
#Копируем необходимое
mkdir /home/vasya_pupkin/bin;
cp /bin/bash /home/vasya_pupkin/bin;
cp /bin/ls /home/vasya_pupkin/bin;
#собственно chroot
chroot /home/vasya_pupkin/;
аналогично обходимся со всем что нужно и все работает без NFS :))) | |
|
3.8, HFSC (?), 10:57, 24/08/2004 [^] [^^] [^^^] [ответить]
| +/– |
Чтото длинно и долго...
#!/bin/bash
chroot=$1
progs=${*#$1}
for i in $progs
do
for d in $(ldd $(which $i)|awk '{print $3}')
do
echo mkdir -p $chroot$(dirname $d) && cp $d $chroot$d || echo "failed" && exit 1
done
done
./chroot.sh /home/vasja perl bash | |
|
|
1.9, Michael (??), 10:59, 28/08/2004 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
это не все. через truss можно вычислить, что перлу, кроме shared objects, которые показывает ldd, не хватает еще горы файлов.
у меня так:
truss /usr/local/bin/perl > perl 2>&1
cat perl | grep open
open("/etc/libmap.conf",0x0,0666) ERR#2 'No such file or directory'
open("/var/run/ld-elf.so.hints",0x0,00) = 3 (0x3)
open("/usr/lib/libm.so.2",0x0,027757774564) = 3 (0x3)
open("/usr/lib/libcrypt.so.2",0x0,027757774564) = 3 (0x3)
open("/usr/lib/libutil.so.3",0x0,027757774564) = 3 (0x3)
open("/usr/lib/libc.so.4",0x0,027757774564) = 3 (0x3)
open("/usr/share/locale/uk_UA.KOI8-U/LC_COLLATE",0x0,0666) = 3 (0x3)
open("/usr/share/locale/uk_UA.KOI8-U/LC_CTYPE",0x0,0666) = 3 (0x3)
open("/usr/share/locale/uk_UA.KOI8-U/LC_MONETARY",0x0,05007724567) = 3 (0x3)
open("/usr/share/locale/uk_UA.KOI8-U/LC_NUMERIC",0x0,05007724567) = 3 (0x3)
open("/usr/share/locale/uk_UA.KOI8-U/LC_TIME",0x0,05007724567) = 3 (0x3)
open("/usr/share/locale/uk_UA.KOI8-U/LC_MESSAGES",0x0,05007724567) = 3 (0x3)
open("/dev/urandom",0x0,01002533205) = 3 (0x3)
и это, похоже, еще не все. К перлу еще прийдется копировать .PM'ы. Для каждого пользователя.
Не ужели нет более красивого способа? | |
|
2.10, HFSC (?), 13:33, 29/08/2004 [^] [^^] [^^^] [ответить]
| +/– |
>это не все. через truss можно вычислить, что перлу, кроме shared objects,
>которые показывает ldd, не хватает еще горы файлов.
>у меня так:
>truss /usr/local/bin/perl > perl 2>&1
>cat perl | grep open
>
>open("/etc/libmap.conf",0x0,0666)
> ERR#2 'No such file or directory'
>open("/var/run/ld-elf.so.hints",0x0,00) = 3
>(0x3)
>open("/usr/lib/libm.so.2",0x0,027757774564) = 3 (0x3)
>open("/usr/lib/libcrypt.so.2",0x0,027757774564) = 3 (0x3)
>open("/usr/lib/libutil.so.3",0x0,027757774564) = 3 (0x3)
>open("/usr/lib/libc.so.4",0x0,027757774564) = 3 (0x3)
>open("/usr/share/locale/uk_UA.KOI8-U/LC_COLLATE",0x0,0666) = 3 (0x3)
>open("/usr/share/locale/uk_UA.KOI8-U/LC_CTYPE",0x0,0666) = 3 (0x3)
>open("/usr/share/locale/uk_UA.KOI8-U/LC_MONETARY",0x0,05007724567) = 3 (0x3)
>open("/usr/share/locale/uk_UA.KOI8-U/LC_NUMERIC",0x0,05007724567) = 3 (0x3)
>open("/usr/share/locale/uk_UA.KOI8-U/LC_TIME",0x0,05007724567) = 3 (0x3)
>open("/usr/share/locale/uk_UA.KOI8-U/LC_MESSAGES",0x0,05007724567) = 3 (0x3)
>open("/dev/urandom",0x0,01002533205)
> = 3 (0x3)
>
>и это, похоже, еще не все. К перлу еще прийдется копировать .PM'ы.
>Для каждого пользователя.
>
>Не ужели нет более красивого способа?
perl я от балды поставил...и так ясно что перл нужно весь копировать,со всеми модулями и либами
| |
|
|