LinuxForum.Fans
Тема

Chroot ssh

Автор: morphay 10 сообщений 6180 просмотров
#227695

нашел единственный вариант исполнения chroot ssh:

в /etc/ssh/sshd_config

text
# chroot'им пользователей группы chrootgroup
Match group chrootgroup
    ChrootDirectory /home/%u

и нужно выполнить скрипт:

text
#!/bin/sh
 
# В скрипт нужно передавать имя пользователя для которого создаем chroot окружение
if [ "$1" = "" ] ; then
  echo "    Usage: $0 [ username ]"
  exit
fi
 
 
USER=$1
GID=`cat /etc/master.passwd | grep "^$USER:" | cut -d ":" -f 4`
HOME=/home/$USER
 
# Задаем список бинарей, нужных для работы в chroot
 
BINS="
/bin/cat \
/bin/chmod \
/bin/cp \
/bin/csh \
/bin/date \
/bin/df \
/bin/echo \
/bin/expr \
/bin/ln \
/bin/ls \
/bin/mkdir \
/bin/mv \
/bin/ps \
/bin/pwd \
/bin/rm \
/bin/rmdir \
/bin/sh \
/usr/bin/awk \
/usr/bin/bzip2 \
/usr/bin/diff \
/usr/bin/du \
/usr/bin/ee \
/usr/bin/fetch \
/usr/bin/find \
/usr/bin/grep \
/usr/bin/gunzip \
/usr/bin/gzip \
/usr/bin/less \
/usr/bin/sed \
/usr/bin/sort \
/usr/bin/scp \
/usr/bin/ssh \
/usr/bin/tail \
/usr/bin/tar \
/usr/bin/touch \
/usr/bin/vi \
/usr/bin/uname \
/usr/bin/uptime \
/usr/local/bin/mc \
/usr/local/bin/mcedit \
/usr/local/bin/mcmfmt \
/usr/local/bin/unrar \
/usr/local/bin/unzip \

" # Создаем структуру каталогов chroot окружения mkdir $HOME/bin mkdir $HOME/etc mkdir $HOME/home mkdir $HOME/home/$USER mkdir $HOME/lib mkdir $HOME/libexec mkdir $HOME/tmp mkdir $HOME/usr mkdir $HOME/usr/bin mkdir $HOME/usr/local mkdir $HOME/usr/local/bin mkdir $HOME/usr/local/etc mkdir $HOME/usr/local/share # Копируем бинарники в chroot окружение for item in $BINS; do cp $item $HOME$item done # Определяем какие библиотеки необходимо скопировать chroot for item in $BINS; do ldd $item |awk '{print $3}'|grep "." >> /tmp/libs done # Копируем библиотеки for item in `cat /tmp/libs|sort|uniq`; do cp $item $HOME/lib/ done # Копируем оставшиеся необходимые файлы и библиотеки cp /etc/termcap $HOME/etc/termcap cp /etc/resolv.conf $HOME/etc/resolv.conf cp /etc/nsswitch.conf $HOME/etc/nsswitch.conf cp -R /usr/local/share/mc $HOME/usr/local/share/mc cp /libexec/ld-elf.so.1 $HOME/libexec/ld-elf.so.1 # Создадим /etc/motd для пользователя echo "Welcome $USER" > $HOME/etc/motd # Теперь /etc/profile для него же echo 'export TERMCAP=/etc/termcap' > $HOME/etc/profile echo 'export PS1="$ "' >> $HOME/etc/profile # /etc/group тоже нужен свой cat /etc/group | grep $GID > $HOME/etc/group # Теперь внутри chroot создадим пользователя cat /etc/master.passwd|grep "^$USER:" > $HOME/etc/master.passwd pwd_mkdb -d $HOME/etc $HOME/etc/master.passwd # Выставляем права chown root:wheel $HOME chmod 755 $HOME chmod 755 $HOME chown -R $USER:$GID $HOME/bin chown -R $USER:$GID $HOME/etc chown -R $USER:$GID $HOME/home chown -R $USER:$GID $HOME/lib chown -R $USER:$GID $HOME/libexec chown -R $USER:$GID $HOME/tmp chown -R $USER:$GID $HOME/usr chmod 777 $HOME/tmp # Убираем за собой rm /tmp/libs

правилен ли этот скрипт? так как нашел комментарий к оному

а нахрена копировать? Оо. Это адово не правельная мысель! Можно ссылки задать на нужные бинари!
#230505

Товарищ комментатор говорит, что вместо этого:

text

# Копируем бинарники в chroot окружение
for item in $BINS;
do
  cp $item $HOME$item
done

лучше сделать так:

text

# Не копируем бинарники в chroot окружение, а создаём симлинки
for item in $BINS;
do
  ln -s $item $HOME$item
done
#230518

Remedy, симлинки в chroot'е НЕ работают так, как вы хотите.

#230520
morphay написал:
правилен ли этот скрипт?

нет. потому-что вам, с такими познаниями, chroot не только ненужен, но и вреден. Как вреден бойцовый доберман 8и летнему ребёнку.

morphay написал:
а нахрена копировать? Оо. Это адово не правельная мысель! Можно ссылки задать на нужные бинари!

можно конечно. Только
1. не всегда.
2. можно создавать хардлинки, но работы не меньше, да и атакованные внутри chroot'а файлы перекинуться на основную систему.
3. можно mount --bind, но см. п2 да и много лишнего будет доступно.

П2 ещё и плох тем, что chroot в этом случае можно делать только на rootfs. Тоже смысл разделения теряется...

#230523
drBatty написал:
Remedy, симлинки в chroot'е НЕ работают так, как вы хотите.

Откуда вы знаете, как я хочу, чтобы работали симлинки? :) Я только лишь пояснил, что имел в виду комментатор, и не стал писать, что так работать не будет (а работать не будет, корень-то изменился), оставив это на совести автора.

#230524
Remedy написал:
Я только лишь пояснил, что имел в виду комментатор, и не стал писать, что так работать не будет

с чего вы взяли, что комментатор имел ввиду ваш нерабочий вариант, а не мои рабочие?

#230529
drBatty написал:
[quote=Remedy]Я только лишь пояснил, что имел в виду комментатор, и не стал писать, что так работать не будет

с чего вы взяли, что комментатор имел ввиду ваш нерабочий вариант, а не мои рабочие?[/quote]
С того, что, во-первых, я прочитал исходное сообщение, а не цитату на форуме, а во-вторых, потому что ваше "рабочее решение" является куда большим идиотизмом по факту, нежели нерабочее, вероятнее всего, предложенное комментатором. :)

#230548
Remedy написал:
С того, что, во-первых, я прочитал исходное сообщение, а не цитату на форуме,

дык ссылку дайте. Или пишите об этом.

Remedy написал:
а во-вторых, потому что ваше "рабочее решение" является куда большим идиотизмом по факту, нежели нерабочее, вероятнее всего, предложенное комментатором.

многие используют именно эти рабочие решения. Т.ч. они вовсе не "мои". Не я их придумал.

#230807
drBatty написал:
можно mount --bind

в bsd это не работает, точней

morphay написал:
а нахрена копировать? Оо. Это адово не правельная мысель! Можно ссылки задать на нужные бинари!

симлинки в chroot не работают. :[
А вообще скрипт правильный, еще как вариант - это использовать mount_nullfs. smile

#230830
i2ks написал:
в bsd это не работает

в windows тоже :P

i2ks написал:
симлинки в chroot не работают.

работают. причём правильно. Вот только ждать, что для всех корень сменится, а для симлинков нет - глупо.

Войдите или зарегистрируйтесь, чтобы ответить.