Как ограничить доступ пользователей SSH к определенному каталогу?
Существует множество причин для предоставления прав доступа пользователям только к определенным директориям, особенно для веб-серверов. Но основная – это обеспечение безопасности. Чтобы ограничить доступ пользователя к определенной директории можно использовать механизм 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] |
Если у Вас остались вопросы - создайте тикет в техподдержку.