Другие вопросы

Как ограничить доступ пользователей 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

  1. Сначала создайте каталог bin. Затем скопируйте файлы /bin/bash в каталог bin следующим образом:
    # mkdir -p /home/test/bin

    # cp -v /bin/bash /home/test/bin/
  2. Теперь определите общие библиотеки, необходимые для 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

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

    # passwd password
  2. Создайте каталог общих конфигураций 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

Теперь откройте файл 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

  1. Из предыдущего шага видно, что пользователь заблокирован в корневом каталоге. Вы можете создать домашний каталог для пользователя SSH следующим образом (сделайте это для всех будущих пользователей):
    # mkdir -p /home/test/home/username

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

    # chmod -R 0700 /home/test/home/username
  2. Затем установите несколько пользовательских команд, таких как 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/
  3. Проверьте общие библиотеки на наличие команд из предыдущего пункта и переместите их в каталог 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

  1. Сделайте окончательную проверку с помощью sftp. Проверьте, работают ли только что установленные вами команды.
    Добавьте следующую строку в файл /etc/ssh/sshd_config:
    #Enable sftp to chrooted jail

    ForceCommand internal-sftp
    Сохраните файл и выйдите. Затем перезапустите службы SSHD:
    # systemctl restart sshd

    или

    # service sshd restart
  2. Теперь проверьте с помощью SSH:
    # ssh username@192.168.0.10
    В результате Вы получите сообщение об ошибке.
    Также попробуйте использовать SFTP следующим образом:
    # sftp username@192.168.0.10

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