Не то что бы Chroot это Jail но всяко лучше чем в систему пускать кого попало
Рассказывать особо нечего, единственное есть скрипт и пример его запуска
Для работы надо создать каталог /home/chroot
И запускать скрипт с параметрами [юзер] [ид будующего юзера]
mkchroot.sh
#!/bin/sh
echo " В скрипт нужно передавать имя пользователя для которого создаем chroot окружение"
if [ "$1" = "" ] ; then
echo " Usage: $0 [ username ] [uid]"
exit 1
fi
if [ "$2" = "" ] ; then
echo " Usage: $0 [ username ] [uid]"
exit 1
fi
USER=$1
UID=$2
HOME=/home/chroot/${USER}
adduser --uid ${UID} --home ${HOME} --shell /bin/bash ${USER}
GID=`cat /etc/passwd | grep "^$USER:" | cut -d ":" -f 4`
echo " Задаем список бинарей, нужных для работы в chroot"
BINS="
/bin/bash \
/bin/cat \
/bin/chmod \
/bin/cp \
/bin/date \
/bin/df \
/bin/echo \
/bin/ln \
/bin/ls \
/bin/mkdir \
/bin/mv \
/bin/ps \
/bin/pwd \
/bin/rm \
/bin/rmdir \
/bin/sh \
/bin/grep \
/bin/gunzip \
/bin/gzip \
/bin/sed \
/bin/tar \
/bin/uname \
/usr/bin/awk \
/usr/bin/diff \
/usr/bin/du \
/usr/bin/find \
/usr/bin/less \
/usr/bin/sort \
/usr/bin/scp \
/usr/bin/ssh \
/usr/bin/tail \
/usr/bin/touch \
/usr/bin/vi \
/usr/bin/uptime \
"
echo " Создаем структуру каталогов chroot окружения"
mkdir -p $HOME/bin
mkdir -p $HOME/dev
mkdir -p $HOME/etc/ssh
mkdir -p $HOME/home/chroot/$USER/.ssh
mkdir -p $HOME/lib64
mkdir -p $HOME/lib/x86_64-linux-gnu
mkdir -p $HOME/libexec
mkdir -p $HOME/tmp
mkdir -p $HOME/usr/bin
mkdir -p $HOME/usr/local/bin
mkdir -p $HOME/usr/local/etc
mkdir -p $HOME/usr/local/share
echo " Копируем бинарники в chroot окружение"
for item in $BINS;
do
cp $item $HOME$item
done
echo " Определяем какие библиотеки необходимо скопировать chroot"
for item in $BINS;
do
ldd $item |awk '{print $3}'|grep "." |grep -v ^\( >> /tmp/libs
done
echo " Копируем библиотеки"
for item in `cat /tmp/libs|sort|uniq`;
do
cp $item $HOME/lib/
done
echo " Копируем оставшиеся необходимые файлы и библиотеки"
cp /lib64/* $HOME/lib64/
cp /lib/x86_64-linux-gnu/* $HOME/lib/x86_64-linux-gnu/
cp /etc/resolv.conf $HOME/etc/resolv.conf
cp /etc/ssh/ssh_config $HOME/etc/ssh/
cp $HOME/.ssh/* $HOME/home/chroot/$USER/.ssh/
echo " Создадим /etc/motd для пользователя"
echo "Welcome $USER" > $HOME/etc/motd
echo " Теперь /etc/profile для него же"
echo 'export TERMCAP=/etc/termcap' > $HOME/etc/profile
echo 'export PS1="$ "' >> $HOME/etc/profile
echo " /etc/group тоже нужен свой"
cat /etc/group | grep $GID > $HOME/etc/group
echo " Теперь внутри chroot создадим пользователя"
cat /etc/passwd|grep "^$USER:" > $HOME/etc/passwd
cat /etc/shadow|grep "^$USER:" > $HOME/etc/shadow
mknod -m 622 $HOME/dev/console c 5 1
mknod -m 666 $HOME/dev/null c 1 3
mknod -m 666 $HOME/dev/zero c 1 5
mknod -m 666 $HOME/dev/ptmx c 5 2
mknod -m 666 $HOME/dev/tty c 5 0
mknod -m 444 $HOME/dev/random c 1 8
mknod -m 444 $HOME/dev/urandom c 1 9
echo " Выставляем права"
chown root:root $HOME
chmod 755 $HOME
chmod 755 $HOME
chown -R root:root $HOME/bin
chown -R root:root $HOME/etc
chown -R root:root $HOME/home
chown -R $USER:$GID $HOME/home/chroot/$USER
chown -R root:root $HOME/lib
chown -R root:root $HOME/libexec
chown -R root:root $HOME/tmp
chown -R root:root $HOME/usr
chmod 666 $HOME/dev/*
chmod 777 $HOME/tmp
getfacl $HOME/dev/*
echo " Убираем за собой"
rm /tmp/libs
#EOF
В конфигурацию /etc/ssh/sshd_config добавить следующее:
UseDNS no
Match group chroot
ChrootDirectory /home/chroot/%u
X11Forwarding no
#AllowTcpForwarding no
#ForceCommand internal-sftp
#EOF
Не резольвить имена намного ускоряет подключение если ИП не резольвится.
Пособирал я это по просторам интернета
Из главного - дев устройства для того, что бы юзверь мог тыкаться по ssh контейнеры
Комментариев нет:
Отправить комментарий