В этой статье рассказывается как установить и настроить OpenSSH так, чтобы пользователи могли запускать свои программы в ограниченном окружении.
Такая настройка позволит предоставить доступ пользователям только к их файлам и запретит им видеть и изменять файлы системы или других пользователей.
Установка несложна и выполняется в несколько шагов:
1. Устанавливаем необходимые пакеты
cd /tmp
apt-get install libpam0g-dev openssl libcrypto++-dev libssl0.9.7 libssl-dev ssh build-essential bzip2
2. Качаем пропатченные исходники
wget http://chrootssh.sourceforge.net/download/openssh-4.5p1-chroot.tar.bz2
3. Разархивируем
tar xvfj openssh-4.5p1-chroot.tar.bz2
4. Собираем и устанавливаем
cd openssh-4.5p1-chroot
./configure --exec-prefix=/usr --sysconfdir=/etc/ssh --with-pam
make
make install
5. Создаем окружение для пользователей
mkdir -p /home/chroot/home/
cd /home/chroot
mkdir -p usr/lib/openssh
mkdir etc
mkdir etc/pam.d/
mkdir bin
mkdir lib
mkdir usr/bin
mkdir dev
mknod dev/null c 1 3
mknod dev/zero c 1 5
chmod 666 dev/null
chmod 666 dev/zero
6. Копируем программы, которые будут доступны пользователям
Для копирования можно использовать следующий скрипт:
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
APPS="/bin/sh /bin/bash /bin/cp /bin/ls /bin/mkdir /bin/mv /bin/pwd /bin/rm /bin/rmdir /usr/bin/id /usr/bin/ssh /bin/ping /usr/bin/dircolors /usr/bin/vi /usr/bin/sftp /usr/lib/openssh/sftp-server"
for prog in $APPS; do
mkdir -p ./`dirname $prog` > /dev/null 2>&1
cp $prog ./$prog
# obtain a list of related libraries
ldd $prog > /dev/null
if [ "$?" = 0 ] ; then
LIBS=`ldd $prog | awk '{ print $3 }'`
for l in $LIBS; do
mkdir -p ./`dirname $l` > /dev/null 2>&1
cp $l ./$l > /dev/null 2>&1
done
fi
done
7. Копируем еще несколько необходимых файлов
cp /lib/libnss_compat.so.2 /lib/libnsl.so.1 /lib/libnss_files.so.2 /lib/ld-linux.so.2 /lib/libcap.so.1 /lib/libnss_dns.so.2 lib
cp /etc/hosts etc/
cp /etc/resolv.conf etc/
cp /etc/pam.d/* etc/pam.d/
cp -r /lib/security lib/
cp -r /etc/security etc/
cp /etc/login.defs etc/
cp /usr/lib/libgssapi_krb5.so.2 usr/lib/
cp /usr/lib/libkrb5.so.3 usr/lib/
cp /usr/lib/libk5crypto.so.3 usr/lib/
cp /lib/libcom_err.so.2 lib/
cp /usr/lib/libkrb5support.so.0 usr/lib/
8. Создаем урезанную версию скрипта /usr/bin/groups
echo '#!/bin/bash' > usr/bin/groups
echo "id -Gn" >> usr/bin/groups
chmod 755 usr/bin/groups
Эта версия будет печатать только группы одного пользователя.
9. Создаем файл учетных записей
touch etc/passwd
10. Создаем файл групп
echo users:x:100: > etc/group
11. Перезапускаем sshd
/etc/init.d/ssh restart
12. Создаем учетную запись для пользователей
useradd -s /bin/bash -m -d /home/chroot/./home/testuser -c "testuser" -g users testuser
13. Устанавливаем пароль для нового пользователя
passwd testuser
14. Копируем учетную запись из /etc/passwd в /home/chroot/etc/passwd
grep /etc/passwd -e "^testuser" >> /home/chroot/etc/passwd
Если новый пользователь будет включен в другие группы, то группы нужно будет добавить в /home/chroot/etc/group.
grep /etc/group -e "^othergroup" >> /home/chroot/etc/group
15. Устанавливаем права доступа на файлы нового пользователя
find /home/chroot/home/testuser -type d -exec chmod 700 {} \;
find /home/chroot/home/testuser -type f -exec chmod 600 {} \;
Теперь вы может зарегистрироваться в системе от имени testuser.