как выполнить вход по sftp в конкретный каталог

Вопрос или проблема

  1. Я следую руководству по ссылке https://www.cybrosys.com/blog/how-to-setup-sftp-server-on-ubuntu-20-04

и я могу успешно войти в sftp, но после входа, папка по умолчанию – “/”, и я не могу создать папку в “/”.
Что я хочу, так это чтобы при входе пользователя в sftp, папка по умолчанию была домашним каталогом пользователя, например, “/home/sftp_user” и чтобы можно было создавать папки в “/home/sftp_user”

файл /etc/ssh/sshd_config выглядит следующим образом:

Subsystem       sftp    internal-sftp

Match group sftp
ChrootDirectory /home
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

права доступа в каталоге /home выглядят следующим образом:

drwxr-xr-x  4 root      root 4096 Nov 19 17:59 .
drwxr-xr-x 20 root      root 4096 Oct 30  2023 ..
drwxr-x--- 35 abc       abc  4096 Nov 20 18:28 abc
drwxrwxrwx  8 sftp_user sftp 4096 Nov 20 18:32 sftp_user

Если я изменю ChrootDirectory /home на %h, то при входе
sftp [email protected]

  • в руководстве https://www.cybrosys.com/blog/how-to-setup-sftp-server-on-ubuntu-20-04,
    подсистема такова

    Subsystem sftp /usr/lib/openssh/sftp-server

  • но я вижу много других руководств, где подсистема такая

    Subsystem       sftp    internal-sftp
    

    что мне использовать?

    Информация, которую вы искали в Google о chroot, касалась команды, а не настройки конфигурации в файле sshd_config. Она не относится к тем настройкам SFTP, которые вы пытаетесь использовать.

    Параметр файла sshd_config ChrootDirectory %h правильный.

    • Пользователь должен существовать в системе аутентификации (для вас это, вероятно, локальная аутентификация с использованием файлов /etc/passwd и /etc/shadow).
    • Поле домашнего каталога пользователя в записи /etc/passwd не должно быть пустым, и этот домашний каталог должен быть создан в файловой системе. Сам домашний каталог должен принадлежать пользователю и его основной группе (uid и gid в записи /etc/passwd), с правами 0711 или 0755. Мое предпочтение – 0711.
    • Родительские директории выше домашнего каталога пользователя SFTP обычно принадлежат root, gid root, с правами 0755.
    • Директория .ssh в домашнем каталоге пользователя имеет того же владельца/группу, что и домашний каталог, с правами 0700. Файлы в директории .ssh должны иметь права 0600. Некоторые файлы могут иметь чуть более открытые права 0644 или 0640, но другие файлы не должны быть доступны для чтения никем, кроме владельца. Для меня использование прав 0600 для всех файлов работает и легче запомнить.

    С этими настройками ваш пользователь SFTP не сможет перейти в каталог вне домашнего каталога, но сможет читать и писать файлы в домашнем каталоге. (также может создавать и удалять подкаталоги в домашнем каталоге). Это означает, что пользователь может перезаписывать или удалять/создавать свой собственный файл authorized_keys в папке по умолчанию (~/.ssh/authorized_keys).

    Мои тесты показывают, что пользователь SFTP может даже удалить свой собственный домашний каталог. Если они это сделают, они останутся в затруднительном положении – не смогут создать свой домашний каталог снова (нет прав на запись в родительском каталоге), и их следующая попытка входа завершится неудачей из-за отсутствия домашнего каталога.

    Если вы не хотите, чтобы пользователь манипулировал своим файлом authorized_keys, вы можете использовать параметр AuthorizedKeysFile /path/to/authorizedkeys/%u, чтобы поместить файл где-то вне домашнего каталога пользователя, где они не могут к нему дотянуться. Если вы это сделаете, сам файл должен принадлежать пользователю SFTP и их основной группе, с правами 0600, и должен находиться в каталоге с правами 0711 или 0755 (предпочтительно 0711), но этот каталог может принадлежать root, группе root. Родительские директории этого каталога должны принадлежать root, группе root с правами 0755.

    Путь в приведенном выше примере /path/to/authorizedkeys/%u является лишь примером. %u для имени файла означает, что оно совпадает с именем пользователя, что помогает поддерживать порядок ключей для нескольких пользователей SFTP.

    Существует несколько дополнительных шагов конфигурации, если вы хотите, чтобы некоторые пользователи могли выполнять только SFTP, а другие пользователи могли выполнять интерактивные входы (например, системные администраторы). Я не включил эти шаги в этот ответ, но могу, если хотите.

    Ответ или решение

    Для того чтобы организовать вход через SFTP в конкретную директорию, потребуется внести несколько изменений в конфигурацию сервера SSH и убедиться в правильных настройках прав доступа. Давайте пошагово рассмотрим процесс настройки.

    Шаг 1: Корректировка конфигурации SSH

    1. Изменение sshd_config:
      Откройте файл /etc/ssh/sshd_config с помощью текстового редактора, например, nano или vi:

      sudo nano /etc/ssh/sshd_config

      Убедитесь, что вы указали верные параметры:

      Subsystem sftp internal-sftp
      
      Match User sftp_user
         ChrootDirectory /home/sftp_user
         ForceCommand internal-sftp
         AllowTcpForwarding no
         X11Forwarding no

      В этом примере sftp_user — это имя пользователя SFTP, для которого будет изменен корень файловой системы.

    2. Изменение пути ChrootDirectory:
      Обратите внимание, что ChrootDirectory должен указывать на директорию, которая принадлежит пользователю root и не имеет разрешений на запись для других пользователей.

    Шаг 2: Настройка прав доступа

    1. Права доступа к директории пользователя:
      Создайте домашнюю директорию для вашего SFTP пользователя и измените на неё права:

      sudo mkdir /home/sftp_user
      sudo chown root:root /home/sftp_user
      sudo chmod 755 /home/sftp_user

      Обратите внимание, что эта директория должна принадлежать root, и разрешения должны быть 755.

    2. Создание подкаталогов:
      Теперь создайте подкаталог внутри домашней директории, который будет принадлежать вашему пользователю:

      sudo mkdir /home/sftp_user/files
      sudo chown sftp_user:sftp /home/sftp_user/files

      Теперь ваш пользователь может записывать файлы и создавать директории в /home/sftp_user/files.

    Шаг 3: Проверка конфигурации

    После внесения изменений не забудьте перезапустить SSH-сервис, чтобы применить новые настройки:

    sudo systemctl restart sshd

    Теперь, когда пользователь sftp_user выполняет вход через SFTP, он должен попадать в директорию /home/sftp_user, и у него будут все необходимые права для создания каталогов и файлов внутри подкаталога.

    Заключение

    Правильная настройка SFTP-сервера обеспечивает безопасность и удобство. Обязательно протестируйте настройки, создав несколько файлов и подкаталогов внутри /home/sftp_user/files, чтобы убедиться, что всё работает исправно.

    Если у вас возникли вопросы или необходима помощь на следующем этапе, не стесняйтесь обращаться за поддержкой.

    Оцените материал
    Добавить комментарий

    Капча загружается...