URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 4136
[ Назад ]

Исходное сообщение
"Раздел полезных советов: Помещение пользователя в chroot при входе в систему"

Отправлено auto_tips , 16-Авг-04 21:49 
В качестве шелла пользователю назначается скрипт /bin/chrsh
echo "/bin/chrsh" >> /etc/shells
cat >> /bin/chrsh << EOF
#!/bin/sh
/usr/bin/sudo /usr/bin/chroot /home/$USER /bin/bash
EOF
chsh -s /bin/chrsh логин

URL: http://www.opennet.me/openforum/vsluhforumID1/46802.html
Обсуждается: http://www.opennet.me/tips/info/709.shtml


Содержание

Сообщения в этом обсуждении
"Помещение пользователя в chroot при входе в систему"
Отправлено ivoronin , 16-Авг-04 21:49 
Ужасный способ. Тем более добавление "/bin/chrsh" в /etc/shells, - при доступе к non-chroot environment на этой машине юзер сможет запросто сменить свой шелл.
Как это сделать правильно в *BSD:
Создаём в /etc/login.conf новый класс пользователей,  скажем chrootusers, и назначаем ему shell=/bin/chrsh, которая представляет из себя програмку-враппер которая делает getpwent(), chroot() а потом exec(pw->pw_shell,..). Готово. Никаких скриптов и лазеек.
Думаю в linux можно как-нибудь извернуться через PAM.

"Помещение пользователя в chroot при входе в систему"
Отправлено Liago0Sh , 18-Авг-04 17:33 
В линуксе это чрезвычайно просто проделал через PAM.
http://www.chains.ch/chroot.php

"Помещение пользователя в chroot при входе в систему"
Отправлено HFSC , 24-Авг-04 10:35 

Чрезвычайно просто...каждому юзеру создавать dev и монтировать devpts

"Помещение пользователя в chroot при входе в систему"
Отправлено Zmicier , 07-Сен-04 16:14 
ссылка битая !

"Помещение пользователя в chroot при входе в систему"
Отправлено Дмитрий Ю. Карпов , 21-Авг-04 00:29 
И ни слова о том, что надо создать такому юзеру остельное окружение, включающее запускаемые программы (начиная с ls), разделяемые библиотеки, файлы из /etc (например, groups, который используется программой ls) и ещё много чего, я даже не назову всё. Возможно, юзеру понадобятся спецфайлы из /dev ...

А если какая-то из нужных этому юзеру программ использует /proc, то я даже не знаю, что делать - в отличие от вышеупомянутых, её нельзя скопировать (разве что смонтировать на саму себя по NFS).


"Помещение пользователя в chroot при входе в систему"
Отправлено Илья Воронин , 23-Авг-04 16:35 
> И ни слова о том, что надо создать такому юзеру остельное окружение,
> включающее запускаемые программы (начиная с ls), разделяемые
> библиотеки, файлы из /etc (например, groups, который используется
> программой ls) и ещё много чего, я даже не назову всё. Возможно, юзеру
> понадобятся спецфайлы из /dev ...
Банальности.

> А если какая-то из нужных этому юзеру программ использует /proc, то я
> даже не знаю, что делать - в отличие от вышеупомянутых, её нельзя
> скопировать (разве что смонтировать на саму себя по NFS).
Можно просто ещё раз её смонтировать.


"Помещение пользователя в chroot при входе в систему"
Отправлено Friendly GHOST , 23-Авг-04 17:08 
Господь с вами любезный государь!  :))) По 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 :)))


"Помещение пользователя в chroot при входе в систему"
Отправлено HFSC , 24-Авг-04 10:57 

Чтото длинно и долго...
#!/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  


"Помещение пользователя в chroot при входе в систему"
Отправлено Michael , 28-Авг-04 10:59 
это не все. через 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'ы. Для каждого пользователя.

Не ужели нет более красивого способа?


"Помещение пользователя в chroot при входе в систему"
Отправлено HFSC , 29-Авг-04 13:33 
>это не все. через 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 я от балды поставил...и так ясно что перл нужно весь копировать,со всеми модулями и либами