Как ограничить доступ пользователя SSH к определенному каталогу с использованием Chrooted Jail

Есть несколько причин для ограничения сеанса пользователя SSH в определенном каталоге, особенно на веб-серверах, но самая очевидная – это безопасность системы. Для блокировки пользователей SSH в определенном каталоге мы можем использовать механизм chroot.

Изменение корневого каталога (chroot) в системах Unix-подобных, таких как Linux, является средством отделения определенных операций пользователя от остальной части системы Linux; изменяет видимый корневой каталог для в настоящее время запущенного процесса пользователя и его дочернего (родительского) процесса с новым корневым каталогом, называемым заключенной в chroot тюрьмой.

В этом руководстве мы покажем вам, как ограничить доступ пользователя SSH к заданному каталогу в Linux. Обратите внимание, что мы будем выполнять все команды от имени root, используйте команду sudo, если вы вошли на сервер как обычный пользователь.

1. Начните с создания chroot jail с помощью команды mkdir ниже:

1. Начните с создания chroot-тюрьмы с помощью команды mkdir ниже:

# mkdir -p /home/test

2. Затем определите необходимые файлы, согласно странице руководства sshd_config, опция ChrootDirectory указывает путь к каталогу, к которому осуществляется chroot после аутентификации. Каталог должен содержать необходимые файлы и каталоги для поддержки сессии пользователя.

Для интерактивной сессии это требует наличия по крайней мере оболочки, обычно sh, и базовых узлов /dev таких как null, zero, stdin, stdout, stderr и устройства tty:

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

3. Теперь создайте файлы /dev следующим образом с помощью команды mknod. В приведенной ниже команде флаг -m используется для указания бит прав доступа к файлу, c означает символьный файл, а два числа – это основные и вспомогательные номера, на которые указывают файлы.

# mkdir -p /home/test/dev/		
# cd /home/test/dev/
# mknod -m 666 null c 1 3
# mknod -m 666 tty c 5 0
# mknod -m 666 zero c 1 5
# mknod -m 666 random c 1 8
Create /dev and Required Files

4. Затем установите соответствующие разрешения на chroot-тюрьму. Обратите внимание, что chroot-тюрьма и ее подкаталоги и подфайлы должны быть принадлежать пользователю root и не должны быть доступны для записи для обычных пользователей или групп:

# chown root:root /home/test
# chmod 0755 /home/test
# ls -ld /home/test
Set Permissions on Directory

Шаг 2: Настройка интерактивной оболочки для SSH chroot-тюрьмы

5. Во-первых, создайте каталог bin и затем скопируйте файлы /bin/bash в каталог bin с помощью команды cp следующим образом:

# mkdir -p /home/test/bin
# cp -v /bin/bash /home/test/bin/
Copy Files to bin Directory

6. Теперь, определите bash, необходимый для общих libs, как показано ниже, и скопируйте их в каталог lib:

# ldd /bin/bash
# mkdir -p /home/test/lib64
# cp -v /lib64/{libtinfo.so.5,libdl.so.2,libc.so.6,ld-linux-x86-64.so.2} /home/test/lib64/
Copy Shared Library Files

Шаг 3: Создание и настройка пользователя SSH

7. Теперь создайте пользователя SSH с помощью команды useradd и установите безопасный пароль для пользователя:

# useradd tecmint
# passwd tecmint

8. Создайте каталог общих конфигураций chroot jail, /home/test/etc и скопируйте обновленные файлы учетных записей (/etc/passwd и /etc/group) в этот каталог следующим образом:

# mkdir /home/test/etc
# cp -vf /etc/{passwd,group} /home/test/etc/
Copy Password Files
Note: Each time you add more SSH users to the system, you will need to copy the updated account files into the /home/test/etc directory.

Шаг 4: Настройка SSH для использования chroot jail

9. Теперь откройте файл sshd_config.

# vi /etc/ssh/sshd_config

и добавьте/измените строки ниже в файле.

#define username to apply chroot jail to
Match User tecmint
#specify chroot jail
ChrootDirectory /home/test
Configure SSH Chroot Jail

Сохраните файл и выйдите, а затем перезапустите службы SSHD:

# systemctl restart sshd
OR
# service sshd restart

Шаг 5: Тестирование SSH с использованием chroot jail

10. На данном этапе проверьте, работает ли настроенная chroot-тюрьма так, как ожидается:

# ssh [email protected]
-bash-4.1$ ls
-bash-4.1$ date
-bash-4.1$ uname
Testing SSH User Chroot Jail

Из скриншота выше мы видим, что пользователь SSH заблокирован в chroot-тюре и не может выполнять какие-либо внешние команды (ls, date, uname и т.д.).

Пользователь может выполнять только bash и его встроенные команды, такие как (pwd, history, echo и т.д.), как показано ниже:

# ssh [email protected]
-bash-4.1$ pwd
-bash-4.1$ echo "Tecmint - Fastest Growing Linux Site"
-bash-4.1$ history
SSH Built-in Commands

Шаг 6. Создание домашней директории для пользователя SSH и добавление Linux-команд

11. На предыдущем шаге мы заметили, что пользователь заблокирован в корневой директории, мы можем создать домашнюю директорию для пользователя SSH следующим образом (сделайте это для всех будущих пользователей):

# mkdir -p /home/test/home/tecmint
# chown -R tecmint:tecmint /home/test/home/tecmint
# chmod -R 0700 /home/test/home/tecmint
Create SSH User Home Directory

12. Далее установите несколько команд пользователя, таких как ls, date и mkdir в директории bin:

# cp -v /bin/ls /home/test/bin/
# cp -v /bin/date /home/test/bin/
# cp -v /bin/mkdir /home/test/bin/
Add Commands to SSH User

13. Затем проверьте общие библиотеки для вышеуказанных команд и переместите их в директорию библиотек chroot jail:

# ldd /bin/ls
# cp -v /lib64/{libselinux.so.1,libcap.so.2,libacl.so.1,libc.so.6,libpcre.so.1,libdl.so.2,ld-linux-x86-64.so.2,libattr.so.1,libpthread.so.0} /home/test/lib64/
Copy Shared Libraries

Шаг 7. Тестирование SFTP с использованием Chroot Jail

14. Выполните окончательное тестирование с использованием sftp; проверьте, работают ли установленные вами команды.

Добавьте следующую строку в файл /etc/ssh/sshd_config:

#Enable sftp to chrooted jail 
ForceCommand internal-sftp

Сохраните файл и выйдите. Затем перезапустите службы SSHD:

# systemctl restart sshd
OR
# service sshd restart

15. Теперь протестируйте с использованием SSH, и вы получите следующую ошибку:

# ssh [email protected]
Test SSH Chroot Jail

Попробуйте использовать SFTP следующим образом:

# sftp [email protected]
Testing sFTP SSH User

Это все на данный момент! В этой статье мы показали вам, как ограничить пользователя SSH в заданном каталоге (chroot jail) в Linux. Используйте раздел комментариев ниже, чтобы высказать нам свое мнение об этом руководстве.

Source:
https://www.tecmint.com/restrict-ssh-user-to-directory-using-chrooted-jail/