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

Updated 2 years ago by Oleg

Существует множество причин для предоставления прав доступа пользователям только к определенным директориям, особенно для веб-серверов. Но основная – это обеспечение безопасности. Чтобы ограничить доступ пользователя к определенной директории можно использовать механизм chroot (change root).

 

chroot используется в Unix-системах для отделения определенных пользовательских операций от остальной системы Linux. При этом заменяется корневой каталог для текущего запущенного пользовательского процесса и его дочернего процесса на новый корневой каталог, называемый chrooted jail.

 

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

 

Шаг 1. Создайте ssh chroot jail.

 

1. Начните с создания chroot jail, используя команду 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}

 

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

 

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

# chown root:root /home/test

# chmod 0755 /home/test

# ls -ld /home/test

 

Шаг 2. Настройте интерактивную оболочку для SSH Chroot Jail

 

5. Сначала создайте каталог bin. Затем скопируйте файлы /bin/bash в каталог bin следующим образом:

# mkdir -p /home/test/bin

# cp -v /bin/bash /home/test/bin/

 

6. Теперь определите общие библиотеки, необходимые для bash, как показано ниже, и скопируйте их в каталог 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/

 

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

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

# useradd username

# passwd password

 

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

# mkdir /home/test/etc

# cp -vf /etc/{passwd,group} /home/test/etc/

 

Примечание. Каждый раз, когда вы добавляете новых пользователей SSH в систему, вам нужно будет копировать обновленные файлы учетной записи в каталог /home/test/etc.

 

Шаг 4. Настройте SSH для использования Chroot Jail

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

# vi /etc/ssh/sshd_config

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

#define username to apply chroot jail to

Match User username

#specify chroot jail

ChrootDirectory /home/test

 

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

# systemctl restart sshd

или

# service sshd restart

 

Шаг 5: Проверка SSH с Chroot Jail

10. На этом этапе проверьте, правильно ли работает настройка chroot jail:

# ssh [email protected]

-bash-4.1$ ls

-bash-4.1$ date

-bash-4.1$ username

 

Вы увидите, что пользователь SSH заблокирован в chrooted jail и не может запускать какие-либо внешние команды (ls, date, uname и т.д.).

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

 

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

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

# mkdir -p /home/test/home/username

# chown -R username:username /home/test/home/username

# chmod -R 0700 /home/test/home/username

 

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/

 

13. Проверьте общие библиотеки на наличие команд из предыдущего пункта и переместите их в каталог chrooted jail libraries:

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

 

Шаг 7. Проверка SFTP с помощью Chroot Jail

14. Сделайте окончательную проверку с помощью sftp. Проверьте, работают ли только что установленные вами команды.

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

#Enable sftp to chrooted jail

ForceCommand internal-sftp

 

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

# systemctl restart sshd

или

# service sshd restart

 

15. Теперь проверьте с помощью SSH:

# ssh [email protected]

В результате Вы получите сообщение об ошибке.

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

# sftp [email protected]

 

 Если у Вас остались вопросы - создайте тикет в техподдержку.


How did we do?


IS (opens in a new tab)

Powered by HelpDocs (opens in a new tab)