The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Помещение пользователя в chroot при входе в систему
В качестве шелла пользователю назначается скрипт /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 логин
 
10.08.2004 , Автор: HFSC , Источник: http://www.opennet.ru/openforum/vsl...
Ключи: chroot, shell
Раздел:    Корень / Безопасность / Помещение программ в chroot

Обсуждение [ RSS ]
  • 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.
     
     
  • 2.2, Liago0Sh (?), 17:33, 18/08/2004 [^] [^^] [^^^] [ответить]  
  • +/
    В линуксе это чрезвычайно просто проделал через PAM.
    http://www.chains.ch/chroot.php
     
     
  • 3.7, HFSC (?), 10:35, 24/08/2004 [^] [^^] [^^^] [ответить]  
  • +/

    Чрезвычайно просто...каждому юзеру создавать dev и монтировать devpts
     
  • 3.11, Zmicier (??), 16:14, 07/09/2004 [^] [^^] [^^^] [ответить]  
  • +/
    ссылка битая !
     

  • 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 я от балды поставил...и так ясно что перл нужно весь копировать,со всеми модулями и либами

     


     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Спонсоры:
    Слёрм
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2019 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру