- Вопрос или проблема
- Ответ или решение
- Предоставление SFTP-доступа к каталогам для нескольких пользователей: руководство
- Шаг 1: Настройка структуры каталогов
- Шаг 2: Настройка групп и прав доступа
- Шаг 3: Настройка Chroot для SFTP
- Шаг 4: Настройка прав на видимость каталогов
- Шаг 5: Учет и мониторинг активности
- Заключение
Вопрос или проблема
Некоторым из моих пользователей мне нужно предоставить доступ по 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: Учет и мониторинг активности
Важно отслеживать и контролировать действия пользователей. Для этого настроить логирование их активности:
-
Убедитесь, что у вас включено логирование для SFTP-сессий. Это можно сделать, добавив в конфигурацию SSH:
LogLevel VERBOSE
-
Проверьте логи, чтобы удостовериться, что действия пользователей фиксируются.
Заключение
Настройка SFTP-доступа для нескольких пользователей и каталогов с важными требованиями к безопасности может быть сложной задачей. Тем не менее, следуя представленным шагам, вы сможете обеспечить нужный уровень безопасности и контроля доступа, не нарушая функциональности. Важно помнить, что поддержание безопасности и удобства использования является непрерывным процессом, требующим регулярной проверки и настройки.