Rate this post

Для установки веб-сервера, мне нужно предоставить пользователю доступ SSH, но я не доверяю пользователю. Как я могу ограничить сеанс пользователя в определенный каталог, например /home/httpd/$USERNAME? Как настроить SSH chroort ограничения на операционных системах Linux?nnВы можете установить корневую директорию например /home/httpd/foo используюя chroort, после авторизации. Все компоненты (файлы и папки) указанного пути должны принадлежать root b и не доступны для записи другим пользователям или группам. После изолирования (chroort),  SSHD изменяет рабочий каталог на домашний каталог пользователя.nnС описания man sshd_confignnChrootDirectory должена содержать необходимые файлы и директории для поддержки сеанса пользователя. Для интерактивного сеанса требуется, по меньшей мере оболочка, обычно sh(1), и основные /dev узлы, такие как null(4), zero(4), stdin(4), stdout(4), STDERR (4), arandom (4), и TTY (4) устройства. Для сессий передачи файлов с использованием SFTP «», никаких дополнительных настроек окружающей среды не требуется.nnВы можете предоставить доступ по SSH пользователя, которому вы не полностью доверяете.Вы можете ограничить то, что, что пользователь может увидеть или запустить только Ls. Ваш путь создания SSH CHROOT ограничен. Давайте посмотрим, как создать изолированный каталог для сервера OpenSSH на сервере Debain или Ubuntu Linux. Следующий урок протестирован на сервере Debian Linux v8.1:n

# lsb_release -a

1. Войти как пользователь root

Введите любую из следующих команд:n

$ su -

илиn

$ sudo -s

2. Создать изолированный каталог

Я собираюсь установить /home/jails/ каталог, чтобы ограничить в SSH сессии пользователя к этой директорииn

# D=/home/jailsn# mkdir -p $D

Из странице man SSHD вам нужно следующие файлы также:n

# ls -l /dev/{null,zero,stdin,stdout,stderr,random,tty}

Пример вывода команды:n

crw-rw-rw- 1 root root 1, 3 Jun 11 03:11 /dev/nullncrw-rw-rw- 1 root root 1, 8 Jun 11 03:11 /dev/randomnlrwxrwxrwx 1 root root   15 Jun 11 03:11 /dev/stderr -> /proc/self/fd/2nlrwxrwxrwx 1 root root   15 Jun 11 03:11 /dev/stdin -> /proc/self/fd/0nlrwxrwxrwx 1 root root   15 Jun 11 03:11 /dev/stdout -> /proc/self/fd/1ncrw-rw-rw- 1 root tty  5, 0 Jun 11 04:43 /dev/ttyncrw-rw-rw- 1 root root 1, 5 Jun 11 03:11 /dev/zero

Чтобы создать требуется /dev узлы с помощью следующей команды mknod:n

# mkdir -p $D/dev/n# mknod -m 666 $D/dev/null c 1 3n# mknod -m 666 $D/dev/tty c 5 0n# mknod -m 666 $D/dev/zero c 1 5n# mknod -m 666 $D/dev/random c 1 8

3. Установить права

Введите следующую команду, чтобы изолировать $D каталог, и все его компоненты, должны принадлежать пользователю root и не доступен для записи любого пользователя non-root или группы:n

# chown root:root $Dn# chmod 0755 $D

Проверьте это:n

# ls -ld $D

Пример выводаn

drwxr-xr-x 2 root root 4096 Jun 11 03:14 /home/jails

4. Установите оболочки Bash в $ D

Введите следующую команду, чтобы создать каталог bin по пути $D:n

# mkdir -p $D/bin

Скопируйте /bin/bash в $D/bin/ директорию:n

# cp -v /bin/bash $D/bin

Скопируйте необходимые библиотеки в $ D каталога. Синтаксис выглядит следующим образом выяснить, что копировать необходимо:n

# ldd /bin/bash

Пример выводаn

linux-vdso.so.1 (0x00007ffdbb1bc000)n	libncurses.so.5 => /lib/x86_64-linux-gnu/libncurses.so.5 (0x00007f1349bc6000)n	libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f134999c000)n	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f1349797000)n	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f13493ee000)n	/lib64/ld-linux-x86-64.so.2 (0x00007f1349e0d000)

Скопируйте все файлы, один за однимn

# mkdir -p $D/lib/n# mkdir -p $D/lib64/n# mkdir -p $D/lib/x86_64-linux-gnu/n# cp -v /lib/x86_64-linux-gnu/{libncurses.so.5,libtinfo.so.5,libdl.so.2,libc.so.6} $D/lib/

Пример вывода командыn

‘/lib/x86_64-linux-gnu/libncurses.so.5’ -> ‘/home/jails/lib/libncurses.so.5’n‘/lib/x86_64-linux-gnu/libtinfo.so.5’ -> ‘/home/jails/lib/libtinfo.so.5’n‘/lib/x86_64-linux-gnu/libdl.so.2’ -> ‘/home/jails/lib/libdl.so.2’n‘/lib/x86_64-linux-gnu/libc.so.6’ -> ‘/home/jails/lib/libc.so.6’

Затем скопируйте /lib64/ld-linux-x86-64.so.2 в /lib64/ директорию:n

# cp -v /lib64/ld-linux-x86-64.so.2 $D/lib64/

Пример:n

‘/lib64/ld-linux-x86-64.so.2’ -> ‘/home/jails/lib64/ld-linux-x86-64.so.2’

Так же скопируйте /lib/x86_64-linux-gnu/libnss_files*n

# cp -va /lib/x86_64-linux-gnu/libnss_files* $D/lib/x86_64-linux-gnu/

5. Добавить пользователя в системе

Вы так же должны скопировать /etc/passwd, и /etc/groupфайлы в $D/etc/ директорию:n# mkdir -p $D/etc/nДобавьте пользователей с именем tom и jerry:n# adduser tomn# adduser jerrynПри добавлении, изменении или удалении пользователя, необходимо повторно копировать данные файлы.n

6. Настройка SSHD

Отредактируйте файл /etc/ssh/sshd_confign

# vi /etc/ssh/sshd_config

Добавьте следующие строки:n

##  Apply the chrooted jail to the user called tom and jerry ##nMatch User tom,jerrynChrootDirectory /home/jailsn## Allow sftp to chrooted jail ##nForceCommand internal-sftp

7. Перезагрузите службу SSHD

Для Debian Linux version 8.x, введите:n

# systemctl restart ssh.service

Для Debian version 7.x and older, введите:n

# /etc/init.d/ssh restart

8. Тестируем

 n

ssh user@severnssh user@sever-ip-herenssh tom@localhost

Вывод команды:n

tom@localhost's password:nLast login: Thu Jun 11 04:32:32 2015 from localhostnCould not chdir to home directory /home/tom: No such file or directoryn-bash-4.3$ lsn-bash: ls: command not foundn-bash-4.3$ daten-bash: date: command not foundn-bash-4.3$ pwdn/n-bash-4.3$

9. Установите дополнительные командыnТеперь пользователь tom может входить в систему, но не может выполнять команды например ls, date и другие. Пользователь ограничен только /bin/bash. Если нужно использовать дополнительные команды, то их нужно установить в пользовательскую директорию.n

# cd /root/nwget http://www.cyberciti.biz/files/lighttpd/l2chroot.txtn# mv l2chroot.txt l2chrootn# chmod +x l2chrootn# vi l2chroot

Найдите параметр BASE и измените его:n

BASE="/home/jails"

Саохраните и закройте файл. Установка /bin/ls в каталог $D/bin/:n

# cp -v /bin/ls $D/bin/n# cp -v /bin/date $D/bin/n# /root/l2chroot /bin/lsn# /root/l2chroot /bin/date

Создайте $D/home/tom и  $D/home/jerry каталоги:n

# mkdir -p $D/home/{tom,jerry}n# chown -R tom:tom $D/home/tom/n# chown -R jerry:jerry $D/home/jerry/n# chmod -R 0700 $D/home/tom/n# chmod -R 0700 $D/home/jerry/

Как добавить пользователей (DocumentRoot) для web-server в /home/jails/ директорию?nSay, /home/httpd/tom_web is DocumentRoot for tom user, then:n# mkdir $D/home/tom/webn# mount —bind /home/httpd/tom_web $D/home/tom/webn## update fstab file so that it can mount after server reboot ##n# echo «/home/httpd/tom_web/ $D/home/tom/web none bind» >> /etc/fstabnnУкажите, /home/httpd/tom_web как DocumentRoot для пользователя tom, и потом:n

# mkdir $D/home/tom/webn# mount --bind /home/httpd/tom_web $D/home/tom/webn## update fstab file so that it can mount after server reboot ##n# echo "/home/httpd/tom_web/ $D/home/tom/web none bind" >> /etc/fstab