Для установки веб-сервера, мне нужно предоставить пользователю доступ 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 jerry
nПри добавлении, изменении или удалении пользователя, необходимо повторно копировать данные файлы.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