Разрешите доступ по SFTP к одной или нескольким директориям для нескольких пользователей.

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

Некоторым из моих пользователей мне нужно предоставить доступ по SFTP к одной или нескольким директориям. Несколько пользователей могут иметь доступ к одной и той же директории. Но к директориям, к которым у них нет разрешения, они не могут видеть ни имена директорий, ни просматривать их; Каков лучший (самый простой и безопасный) способ достижения моей цели и поддержания будущих изменений?

Я знаю, что есть такие способы: chroot, mount bind, ACL. Я пробовал это (и также играл с chown и chmod), но пользователи все равно могут видеть и просматривать другие директории через Filezilla.

Есть ли какая-либо помощь?

Моя конфигурация:

Все мои пользователи (user1, user2 ...) находятся в группе "group_sftp_external_users".
Debian 10

Структура моих директорий:

   /var/temp/all/dir_1
   /var/temp/all/dir_2
   /var/temp/all/dir_3
   /var/temp/all/dir_4
   /var/temp/all/dir_5

В “/etc/ssh/sshd_config”:

Match Group group_sftp_external_users
        ChrootDirectory /var/temp/all
        ForceCommand internal-sftp
        X11Forwarding no
        AllowTcpForwarding no
        AllowAgentForwarding no
        PermitTunnel no
        PubkeyAuthentication no
        PasswordAuthentication yes
        PermitEmptyPasswords no

Сначала имейте в виду, что такая настройка позволит этим пользователям передавать любые данные (включая ключи шифрования, государственные тайны, украденные кредитные карты…) между собой. Вы выступаете в роли открытого реле между этими пользователями, и вы можете стать юридически ответственным за помощь (если они решат сделать что-то, что не нравится вашему местному правительству). В минимальном объеме вам нужно вести учет их файловой активности и проверять эти журналы.

Далее, я настоятельно рекомендую использовать chroot, так как это ненадежные пользователи. https://www.the-art-of-web.com/system/sftp-logging-chroot/ отлично объясняет, как это сделать, но мои нужды не совсем совпадают с этим. Однако мои нужды в общем совпадают с тем, что вы описываете, поэтому я думаю, что мое решение может послужить хорошей отправной точкой.

Моя стратегия заключается в создании единственного chroot для всех пользователей sftp и использовании разрешений файлов, чтобы скрыть их домашние директории друг от друга. В частности, моя структура файлов выглядит так:

  • /sftp_files 755 root.root <- точка монтирования для диска с HPI

    • /chroot_sftp 755 root.root <- chroot для всех пользователей sftp. Необходимые разрешения sshd
      • /dev 755 root.root
        • /log 4766 root.root <- используется rsyslog
      • /home 710 root.sftp
        • /user1 700 user1.sftp

С такой настройкой пользователи в группе sftp помещаются в chroot к /sftp_files/chroot_sftp. Есть единственная запись в файле /etc/rsyslog.d/25-sftp.conf для файла /sftp_files/chroot/dev/log. Поскольку /sftp_files/chroot_sftp/home имеет необычные разрешения 710, пользователи не могут перечислять содержимое директории, но могут получить доступ к любому файлу, имя которого они знают, если разрешения на этот конкретный файл это допускают. Также я создаю этих пользователей sftp с sftp в качестве их единственной (и общей) группы.

Я также использую открытые ключи, поэтому обычный файл /home/user1/.ssh/authorized_keys существует. (Я использую /etc/skel с пустым файлом, чтобы создать файл с соответствующими разрешениями.) Это может быть помещено в /sftp_files/authorized_keys/user1 вместо этого, с authorized_keys как root.sftp 710, и user1 как user1.sftp 700. Однако это нарушает /etc/skel для файла authorized_keys.

Я НЕ тестировал то, что будет далее. Для ваших общих директорий, что бы я сделал, так это добавил бы несколько дополнительных элементов:

          • /shared_dirs <- ссылка на /shared_dirs, которая внутри chroot будет вести к …
      • /shared_dirs 750 root.sftp <- здесь. Содержимое видно всем, однако…
        • /sd_1 770 root.sg1 <- доступно только для участников группы sg1.

Ссылка /shared_dirs – это удобство, чтобы пользователям не пришлось запоминать имя директории, которую они не могут видеть. В качестве альтернативы, shared_dirs также могут иметь разрешения 710, и вы создаете ссылку для каждой общей директории, к которой пользователь должен иметь доступ.

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

Предоставление SFTP-доступа к каталогам для нескольких пользователей: руководство

В эпоху цифровых технологий, безопасность обработки данных становится одной из приоритетных задач для организаций. Чтобы оптимально организовать доступ к каталогам через SFTP (Secure File Transfer Protocol) для групп пользователей, необходимо учесть как удобство, так и безопасность. В данной статье мы рассмотрим, как предоставить SFTP-доступ к определенным каталогам пользователям, ограничивая при этом видимость других каталогов.

Шаг 1: Настройка структуры каталогов

Для начала, создадим четкую структуру каталогов. Согласно предоставленной информации, высказывая рекомендации для конфигурации, можно предложить следующее:

/var/temp/all/                        # Корневая директория
|-- dir_1                             # Доступ для user1
|-- dir_2                             # Доступ для user2
|-- dir_3                             # Общий доступ для определённых пользователей
|-- dir_4                             # Доступ для user1 и user2
|-- dir_5                             # Общий доступ для группы пользователей

Создадим группы пользователей для конкретных каталогов. Например, group_dir1, group_dir2 и т.д.

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

Для управления правами доступа используйте следующие команды:

# Создание группы для каждого доступа
sudo groupadd group_dir1
sudo groupadd group_dir2

# Добавление пользователей в соответствующие группы
sudo usermod -aG group_dir1 user1
sudo usermod -aG group_dir2 user2

# Установка прав для каталогов
sudo chown root:group_dir1 /var/temp/all/dir_1
sudo chown root:group_dir2 /var/temp/all/dir_2

# Настройка прав доступа
sudo chmod 770 /var/temp/all/dir_1
sudo chmod 770 /var/temp/all/dir_2

Таким образом, только пользователи в соответствующих группах смогут получить доступ к данным каталогам.

Шаг 3: Настройка Chroot для SFTP

Убедитесь, что настройка в файле /etc/ssh/sshd_config включает ChrootDirectory, позволяя изолировать пользователей в одном каталоге:

Match Group group_sftp_external_users
    ChrootDirectory /var/temp/all
    ForceCommand internal-sftp
    X11Forwarding no
    AllowTcpForwarding no
    AllowAgentForwarding no

Это гарантирует, что пользователи не смогут получить доступ к системе за пределами домашнего каталога.

Шаг 4: Настройка прав на видимость каталогов

Для обеспечения того, чтобы пользователи не могли видеть каталоги, к которым они не имеют доступа, используйте права доступа на уровне каталогов. Убедитесь, что родительская директория каталогов (в данном случае /var/temp/all/) имеет права 755:

sudo chmod 755 /var/temp/all

Каждая подкаталога может иметь права 770, что означает, что владельцы и члены группы могут читать, записывать и выполнять, в то время как остальные пользователи не имеют доступа.

Шаг 5: Учет и мониторинг активности

Важно отслеживать и контролировать действия пользователей. Для этого настроить логирование их активности:

  1. Убедитесь, что у вас включено логирование для SFTP-сессий. Это можно сделать, добавив в конфигурацию SSH:

    LogLevel VERBOSE
  2. Проверьте логи, чтобы удостовериться, что действия пользователей фиксируются.

Заключение

Настройка SFTP-доступа для нескольких пользователей и каталогов с важными требованиями к безопасности может быть сложной задачей. Тем не менее, следуя представленным шагам, вы сможете обеспечить нужный уровень безопасности и контроля доступа, не нарушая функциональности. Важно помнить, что поддержание безопасности и удобства использования является непрерывным процессом, требующим регулярной проверки и настройки.

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

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