Существует множество причин для предоставления прав доступа пользователям только к определенным директориям, особенно для веб-серверов. Но основная – это обеспечение безопасности. Чтобы ограничить доступ пользователя к определенной директории можно использовать механизм chroot (change root).
chroot используется в Unix-системах для отделения определенных пользовательских операций от остальной системы Linux. При этом заменяется корневой каталог для текущего запущенного пользовательского процесса и его дочернего процесса на новый корневой каталог, называемый chrooted jail.
В этой статье будет рассказано о том, как ограничить доступ пользователя SSH к заданному каталогу в Linux. Все команды запускаются от имени пользователя root. Используйте команду sudo, если Вы вошли на сервер как обычный пользователь.
Шаг 1. Создайте SSH chroot jail
- Начните с создания chroot jail, используя команду mkdir:
# mkdir -p /home/test
- Затем определите необходимые файлы в соответствии с sshd_config. Параметр ChrootDirectory указывает путь к каталогу, в который выполняется перенаправление chroot после аутентификации. Каталог должен содержать необходимые файлы и каталоги для поддержки сеанса пользователя.
Для интерактивного сеанса требуется, как минимум, оболочка, общие sh и базовые узлы /dev, такие как устройства null, zero, stdin, stdout, stderr и tty:# ls -l /dev/{null,zero,stdin,stdout,stderr,random,tty}
- Теперь создайте файлы /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 - После этого установите соответствующее разрешение для chroot jail. Обратите внимание, что chroot jail, его подкаталоги и подфайлы должны принадлежать пользователю root и не содержать права записи для любого обычного пользователя или группы:
# chown root:root /home/test
# chmod 0755 /home/test
# ls -ld /home/test
Шаг 2. Настройте интерактивную оболочку для SSH Chroot Jail
- Сначала создайте каталог bin. Затем скопируйте файлы /bin/bash в каталог bin следующим образом:
# mkdir -p /home/test/bin
# cp -v /bin/bash /home/test/bin/ - Теперь определите общие библиотеки, необходимые для 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
- Теперь создайте пользователя SSH с помощью команды useradd и установите безопасный пароль для пользователя:
# useradd username
# passwd password - Создайте каталог общих конфигураций chroot jail /home/test/etc и скопируйте обновленные файлы учетных записей (/etc/passwd и /etc/group) в этот каталог следующим образом:
# mkdir /home/test/etc
Примечание. Каждый раз, когда вы добавляете новых пользователей SSH в систему, вам нужно будет копировать обновленные файлы учетной записи в каталог /home/test/etc.
# cp -vf /etc/{passwd,group} /home/test/etc/
Шаг 4. Настройте SSH для использования Chroot Jail
Теперь откройте файл 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
На этом этапе проверьте, правильно ли работает настройка chroot jail:
# ssh username@192.168.0.10
-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
- Из предыдущего шага видно, что пользователь заблокирован в корневом каталоге. Вы можете создать домашний каталог для пользователя SSH следующим образом (сделайте это для всех будущих пользователей):
# mkdir -p /home/test/home/username
# chown -R username:username /home/test/home/username
# chmod -R 0700 /home/test/home/username - Затем установите несколько пользовательских команд, таких как 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/ - Проверьте общие библиотеки на наличие команд из предыдущего пункта и переместите их в каталог 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
- Сделайте окончательную проверку с помощью sftp. Проверьте, работают ли только что установленные вами команды.
Добавьте следующую строку в файл /etc/ssh/sshd_config:#Enable sftp to chrooted jail
Сохраните файл и выйдите. Затем перезапустите службы SSHD:
ForceCommand internal-sftp# systemctl restart sshd
или
# service sshd restart
- Теперь проверьте с помощью SSH:
# ssh username@192.168.0.10
В результате Вы получите сообщение об ошибке.
Также попробуйте использовать SFTP следующим образом:# sftp username@192.168.0.10
Если у Вас остались вопросы - создайте тикет в техподдержку.