NoNaMe :: Устанновка ограниченного окружения для OpenSSH

В этой статье рассказывается как установить и настроить OpenSSH так, чтобы пользователи могли запускать свои программы в ограниченном окружении.
Такая настройка позволит предоставить доступ пользователям только к их файлам и запретит им видеть и изменять файлы системы или других пользователей.

----------------------<cut>----------------------

Установка несложна и выполняется в несколько шагов:

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 ./&#96dirname $prog&#96 > /dev/null 2>&1
cp $prog ./$prog

# obtain a list of related libraries
ldd $prog > /dev/null
if [ "$?" = 0 ] ; then
LIBS=&#96ldd $prog | awk '{ print $3 }'&#96
for l in $LIBS; do
mkdir -p ./&#96dirname $l&#96 > /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.

Источник: http://nnm.ru/blogs/unixman/ustannovka_ogranichennogo_okruzheniya_dlya_openssh/

Яндекс.Метрика Rambler's Top100

© 2000–2012 NoNaMe