Связаться по:
vkarabedyants Telegram Viber

Блог о системном администрировании серверов и сайтов

Установка, настройка программного обеспечения Linux, Windows операционных систем

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:

# lsb_release -a

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

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

$ su -

или

$ sudo -s

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

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

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

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

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

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

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:

# 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 или группы:

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

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

# ls -ld $D

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

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

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

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

# mkdir -p $D/bin

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

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

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

# ldd /bin/bash

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

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)

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

# 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/

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

‘/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/ директорию:

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

Пример:

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

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

# 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

# vi /etc/ssh/sshd_config

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

##  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, введите:

# systemctl restart ssh.service

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

# /etc/init.d/ssh restart

8. Тестируем

 

ssh [email protected]
ssh [email protected]
ssh [email protected]

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

[email protected]'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. Если нужно использовать дополнительные команды, то их нужно установить в пользовательскую директорию.

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

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

BASE="/home/jails"

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

# 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 каталоги:

# 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, и потом:

# 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

Оставить комментарий

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.