Debian / Ubuntu Linux: Ограничить в SSH сессии пользователя к определенному каталогу
Для установки веб-сервера, мне нужно предоставить пользователю доступ SSH, но я не доверяю пользователю. Как я могу ограничить сеанс пользователя в определенный каталог, например /home/httpd/$USERNAME? Как настроить SSH chroort ограничения на операционных системах Linux?
Вы можете установить корневую директорию например /home/httpd/foo используюя chroort, после авторизации. Все компоненты (файлы и папки) указанного пути должны принадлежать root b и не доступны для записи другим пользователям или группам. После изолирования (chroort), SSHD изменяет рабочий каталог на домашний каталог пользователя.
С описания man sshd_config
ChrootDirectory должена содержать необходимые файлы и директории для поддержки сеанса пользователя. Для интерактивного сеанса требуется, по меньшей мере оболочка, обычно sh(1), и основные /dev узлы, такие как null(4), zero(4), stdin(4), stdout(4), STDERR (4), arandom (4), и TTY (4) устройства. Для сессий передачи файлов с использованием SFTP «», никаких дополнительных настроек окружающей среды не требуется.
Вы можете предоставить доступ по SSH пользователя, которому вы не полностью доверяете.Вы можете ограничить то, что, что пользователь может увидеть или запустить только Ls. Ваш путь создания SSH CHROOT ограничен. Давайте посмотрим, как создать изолированный каталог для сервера OpenSSH на сервере Debain или Ubuntu Linux. Следующий урок протестирован на сервере Debian Linux v8.1:
1 |
# lsb_release -a |
1. Войти как пользователь root
Введите любую из следующих команд:
1 |
$ su - |
или
1 |
$ sudo -s |
2. Создать изолированный каталог
Я собираюсь установить /home/jails/ каталог, чтобы ограничить в SSH сессии пользователя к этой директории
1 2 |
# D=/home/jails # mkdir -p $D |
Из странице man SSHD вам нужно следующие файлы также:
1 |
# ls -l /dev/{null,zero,stdin,stdout,stderr,random,tty} |
Пример вывода команды:
1 2 3 4 5 6 7 |
crw-rw-rw- 1 root root 1, 3 Jun 11 03:11 /dev/null crw-rw-rw- 1 root root 1, 8 Jun 11 03:11 /dev/random lrwxrwxrwx 1 root root 15 Jun 11 03:11 /dev/stderr -> /proc/self/fd/2 lrwxrwxrwx 1 root root 15 Jun 11 03:11 /dev/stdin -> /proc/self/fd/0 lrwxrwxrwx 1 root root 15 Jun 11 03:11 /dev/stdout -> /proc/self/fd/1 crw-rw-rw- 1 root tty 5, 0 Jun 11 04:43 /dev/tty crw-rw-rw- 1 root root 1, 5 Jun 11 03:11 /dev/zero |
Чтобы создать требуется /dev узлы с помощью следующей команды mknod:
1 2 3 4 5 |
# mkdir -p $D/dev/ # mknod -m 666 $D/dev/null c 1 3 # mknod -m 666 $D/dev/tty c 5 0 # mknod -m 666 $D/dev/zero c 1 5 # mknod -m 666 $D/dev/random c 1 8 |
3. Установить права
Введите следующую команду, чтобы изолировать $D каталог, и все его компоненты, должны принадлежать пользователю root и не доступен для записи любого пользователя non-root или группы:
1 2 |
# chown root:root $D # chmod 0755 $D |
Проверьте это:
1 |
# ls -ld $D |
Пример вывода
1 |
drwxr-xr-x 2 root root 4096 Jun 11 03:14 /home/jails |
4. Установите оболочки Bash в $ D
Введите следующую команду, чтобы создать каталог bin по пути $D:
1 |
# mkdir -p $D/bin |
Скопируйте /bin/bash в $D/bin/ директорию:
1 |
# cp -v /bin/bash $D/bin |
Скопируйте необходимые библиотеки в $ D каталога. Синтаксис выглядит следующим образом выяснить, что копировать необходимо:
1 |
# ldd /bin/bash |
Пример вывода
1 2 3 4 5 6 |
linux-vdso.so.1 (0x00007ffdbb1bc000) libncurses.so.5 => /lib/x86_64-linux-gnu/libncurses.so.5 (0x00007f1349bc6000) libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f134999c000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f1349797000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f13493ee000) /lib64/ld-linux-x86-64.so.2 (0x00007f1349e0d000) |
Скопируйте все файлы, один за одним
1 2 3 4 |
# mkdir -p $D/lib/ # mkdir -p $D/lib64/ # mkdir -p $D/lib/x86_64-linux-gnu/ # cp -v /lib/x86_64-linux-gnu/{libncurses.so.5,libtinfo.so.5,libdl.so.2,libc.so.6} $D/lib/ |
Пример вывода команды
1 2 3 4 |
‘/lib/x86_64-linux-gnu/libncurses.so.5’ -> ‘/home/jails/lib/libncurses.so.5’ ‘/lib/x86_64-linux-gnu/libtinfo.so.5’ -> ‘/home/jails/lib/libtinfo.so.5’ ‘/lib/x86_64-linux-gnu/libdl.so.2’ -> ‘/home/jails/lib/libdl.so.2’ ‘/lib/x86_64-linux-gnu/libc.so.6’ -> ‘/home/jails/lib/libc.so.6’ |
Затем скопируйте /lib64/ld-linux-x86-64.so.2 в /lib64/ директорию:
1 |
# cp -v /lib64/ld-linux-x86-64.so.2 $D/lib64/ |
Пример:
1 |
‘/lib64/ld-linux-x86-64.so.2’ -> ‘/home/jails/lib64/ld-linux-x86-64.so.2’ |
Так же скопируйте /lib/x86_64-linux-gnu/libnss_files*
1 |
# cp -va /lib/x86_64-linux-gnu/libnss_files* $D/lib/x86_64-linux-gnu/ |
5. Добавить пользователя в системе
Вы так же должны скопировать /etc/passwd, и /etc/groupфайлы в $D/etc/ директорию:
# mkdir -p $D/etc/
Добавьте пользователей с именем tom и jerry:
# adduser tom
# adduser jerry
При добавлении, изменении или удалении пользователя, необходимо повторно копировать данные файлы.
6. Настройка SSHD
Отредактируйте файл /etc/ssh/sshd_config
1 |
# vi /etc/ssh/sshd_config |
Добавьте следующие строки:
1 2 3 4 5 |
## Apply the chrooted jail to the user called tom and jerry ## Match User tom,jerry ChrootDirectory /home/jails ## Allow sftp to chrooted jail ## ForceCommand internal-sftp |
7. Перезагрузите службу SSHD
Для Debian Linux version 8.x, введите:
1 |
# systemctl restart ssh.service |
Для Debian version 7.x and older, введите:
1 |
# /etc/init.d/ssh restart |
8. Тестируем
1 2 3 |
ssh user@sever ssh user@sever-ip-here ssh tom@localhost |
Вывод команды:
1 2 3 4 5 6 7 8 9 10 |
tom@localhost's password: Last login: Thu Jun 11 04:32:32 2015 from localhost Could not chdir to home directory /home/tom: No such file or directory -bash-4.3$ ls -bash: ls: command not found -bash-4.3$ date -bash: date: command not found -bash-4.3$ pwd / -bash-4.3$ |
9. Установите дополнительные команды
Теперь пользователь tom может входить в систему, но не может выполнять команды например ls, date и другие. Пользователь ограничен только /bin/bash. Если нужно использовать дополнительные команды, то их нужно установить в пользовательскую директорию.
1 2 3 4 5 |
# cd /root/ wget http://www.cyberciti.biz/files/lighttpd/l2chroot.txt # mv l2chroot.txt l2chroot # chmod +x l2chroot # vi l2chroot |
Найдите параметр BASE и измените его:
1 |
BASE="/home/jails" |
Саохраните и закройте файл. Установка /bin/ls в каталог $D/bin/:
1 2 3 4 |
# cp -v /bin/ls $D/bin/ # cp -v /bin/date $D/bin/ # /root/l2chroot /bin/ls # /root/l2chroot /bin/date |
Создайте $D/home/tom и $D/home/jerry каталоги:
1 2 3 4 5 |
# mkdir -p $D/home/{tom,jerry} # chown -R tom:tom $D/home/tom/ # chown -R jerry:jerry $D/home/jerry/ # chmod -R 0700 $D/home/tom/ # chmod -R 0700 $D/home/jerry/ |
Как добавить пользователей (DocumentRoot) для web-server в /home/jails/ директорию?
Say, /home/httpd/tom_web is DocumentRoot for tom user, then:
# mkdir $D/home/tom/web
# mount —bind /home/httpd/tom_web $D/home/tom/web
## update fstab file so that it can mount after server reboot ##
# echo «/home/httpd/tom_web/ $D/home/tom/web none bind» >> /etc/fstab
Укажите, /home/httpd/tom_web как DocumentRoot для пользователя tom, и потом:
1 2 3 4 |
# mkdir $D/home/tom/web # mount --bind /home/httpd/tom_web $D/home/tom/web ## update fstab file so that it can mount after server reboot ## # echo "/home/httpd/tom_web/ $D/home/tom/web none bind" >> /etc/fstab |