Как ограничить доступ пользователей SSH к определенным каталогам в Ubuntu 24.04 (руководство по SFTP Chroot)

Предоставление подрядчику доступа к загрузке нескольких файлов не должно автоматически давать ему доступ к терминальной сессии с обзором всего сервера. В Ubuntu 24.04 LTS OpenSSH может ограничить учетную запись для передачи файлов выбранным каталогом с помощью ChrootDirectoryправила и встроенного internal-sftpсервера. Важно отметить, что это ограничение касается только SFTP , а не является простым способом предоставления полностью функциональной, но изолированной оболочки Bash.

В этом руководстве объясняется, что именно защищают эти настройки, а затем пошагово описывается обратимая восьмиэтапная настройка для нескольких учетных записей, каждая со своим собственным каталогом. В командах используется пример учетной записи с именем contractorи пример хоста с именем server.example.com; замените их своими значениями. Это примеры конфигурации, а не заявленные результаты тестирования на реальном сервере.

Какой тип ограничений вам действительно необходим?

Три параметра часто путают. Права доступа в Linux определяют, какие файлы учетная запись может читать или изменять; изменение домашнего каталога учетной записи устанавливает начальное местоположение; chroot изменяет корневой каталог файловой системы, доступный процессу. Они не взаимозаменяемы.

ЦельПодходящая отправная точкаВажное ограничение
Загружайте и скачивайте файлы только в указанную папку.ChrootDirectoryсForceCommand internal-sftpНе предоставляет интерактивную оболочку Linux.
Разрешить использование командной оболочки, но контролировать чтение и запись.Владение правами доступа в Unix, группы, списки контроля доступа (ACL) и принцип наименьших привилегий.Обычный пользователь командной оболочки может по-прежнему перемещаться по другим доступным для чтения путям.
Обеспечьте изолированную среду командной строки.Тщательно настроенная среда chroot или контейнер/виртуальная машина с отдельными средствами контроля безопасности.Требуется значительно более тщательная проверка настроек и изоляции.

Распространенное заблуждение: установка /home/contractorдомашнего каталога в качестве основного ограничивает пользователя этим каталогом. Это не так. Обычный пользователь командной строки может перейти в любой доступный каталог в другом месте файловой системы. Если обмен файлами действительно необходим, выберите описанный ниже способ работы только с SFTP, а не пытайтесь скрыть каталоги с помощью командной строки.

Документация OpenSSH ChrootDirectory, Matchа также ForceCommandофициальное руководство по sshd_config в Ubuntu 24.04 .

Настройка изолированной среды для SFTP-доступа в восемь этапов.

Перед удаленным изменением настроек SSH оставьте открытой существующую сессию администратора и убедитесь, что у вас есть доступ к консоли или восстановлению. Используйте отдельную учетную запись без привилегий для передачи данных; не добавляйте свою учетную запись администратора в группу с ограниченным доступом.

1. Проверьте работоспособность OpenSSH и поддерживайте сеанс восстановления.

На сервере при необходимости установите OpenSSH, отметьте службу и сохраните основную конфигурацию. Официальная документация Ubuntu для серверов поддерживает указанные пути к службам и конфигурации.

sudo apt update
sudo apt install openssh-server
sudo systemctl status ssh
sudo cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.pre-sftp
В терминале Ubuntu отображается команда systemctl status ssh и подробная информация о службе SSH.
Отображение состояния службы SSH в терминале, полезное для проверки доступности OpenSSH перед изменением правил доступа.

Если вы можете управлять машиной только через SSH, не закрывайте текущую сессию во время редактирования или тестирования. Перед изменением демона ознакомьтесь с руководством по настройке сервера Ubuntu OpenSSH .

2. Создайте выделенного пользователя и группу доступа SFTP.

Группа полезна, когда ожидается наличие более чем одной учетной записи с ограниченным доступом. В этом примере каждому участнику предоставляется отдельная изолированная среда (jail) с использованием %uтокена, который OpenSSH преобразует в имя пользователя, подключающегося к системе. /uploadДомашний путь предназначен для размещения внутри будущей chroot-среды, поэтому не создавайте /uploadкаталог на уровне хоста.

sudo groupadd sftpclients
sudo adduser --home /upload --no-create-home --shell /usr/sbin/nologin contractor
sudo usermod -aG sftpclients contractor
id contractor

В процессе adduserработы может потребоваться назначить пароль. В системах, где отключена аутентификация по паролю SSH, создайте и авторизуйте вместо этого открытый ключ; не включайте вход по паролю глобально только для примера. Оболочка nologin— это еще одна мера предосторожности, но именно принудительная internal-sftpкоманда делает эту конфигурацию доступной только для передачи данных. Проверьте эту комбинацию на своей собственной системе аутентификации.

В терминале Ubuntu отображается сообщение о создании учетной записи подрядчика с помощью команды adduser, при этом домашний путь указан для загрузки файлов.
Команда account-creation указывает ограниченную учетную запись и путь к домашней директории, которые станут доступны после применения chroot-окружения.

3. Создайте каталог chroot, принадлежащий пользователю root.

Именно здесь во многих руководствах допускаются ошибки. OpenSSH требует, чтобы каждый компонент пути chroot принадлежал пользователю root и был недоступен для записи другими пользователями или группами. Никогда не делайте саму учетную запись root в jail доступной для записи учетной записи SFTP.

sudo install -d -o root -g root -m 0755 /srv/sftp
sudo install -d -o root -g root -m 0755 /srv/sftp/contractor
namei -l /srv/sftp/contractor

Проверьте также существующие /компоненты /srv; приведенные выше команды не исправляют автоматически небезопасные родительские права доступа. Если какой-либо компонент доступен для записи группой или принадлежит пользователю, исправляйте права доступа и режим только после проверки того, зависят ли от него другие приложения.

В терминале Ubuntu отображаются принадлежащие root каталоги /srv/sftp и /srv/sftp/contractor с указанием прав доступа.
Каталог jail и его родительский каталог отображаются с правами root, что проверяется OpenSSH при запуске сессии.

4. Добавьте внутри закрытой среды подкаталог с правами записи.

Учетная запись может записывать данные в дочерний каталог, не имея возможности изменять корневой каталог chroot. Создайте каталог /srv/sftp/contractor/uploadдля фактических файлов учетной записи; внутри SFTP это будет выглядеть как /upload.

sudo install -d -o contractor -g contractor -m 0750 /srv/sftp/contractor/upload
sudo stat -c '%U:%G %a %n' /srv/sftp/contractor /srv/sftp/contractor/upload

Предполагаемые права доступа намеренно различаются: root:rootдля корневого каталога jail и contractor:contractorдля папки загрузки с возможностью записи. Избегайте использования chmod 777, что приведет к излишней уязвимости и будет отклонено, если применяется к корневому каталогу jail.

Терминал Ubuntu показывает отдельную папку для загрузки, принадлежащую подрядчику, внутри SFTP-сервера, принадлежащего пользователю root.
Подкаталог upload доступен для записи учетной записи с ограниченными правами, в то время как окружающая его среда jail остается в собственности root.

5. Добавьте правило Match в sshd_config

Откройте /etc/ssh/sshd_configи добавьте следующий блок в конец, после любых существующих директив и Matchблоков. Используйте текстовый редактор, например, sudoeditили sudo nano. Сначала проверьте существующие Matchправила: если несколько совпадающих блоков назначают одно и то же ключевое слово, OpenSSH использует первый подходящий экземпляр. Ubuntu также обрабатывает файлы в каталоге, /etc/ssh/sshd_config.d/начиная с ранней версии Include; правила там могут влиять на приоритет.

Match Group sftpclients
    ChrootDirectory /srv/sftp/%u
    ForceCommand internal-sftp -d /upload
    PermitTTY no
    DisableForwarding yes

Match GroupНацеливается на участников группы sftpclients. ChrootDirectoryРазмещает каждого пользователя под учетной записью /srv/sftp/USERNAME. ForceCommand internal-sftp -d /uploadЗапускает встроенную службу SFTP и запускается внутри каталога с правами записи. PermitTTY noПредотвращает выделение терминала, а DisableForwarding yesотключает функции переадресации SSH для соответствующих соединений.

Сохраните уже предоставленную Ubuntu глобальную Subsystem sftpдирективу, если у вас нет других причин для её изменения; для принудительной внутренней команды SFTP замена этой глобальной строки не требуется. Не добавляйте дополнительную глобальную директиву Match Allпросто для завершения блока, не понимая, на что это повлияет.

Редактор GNU nano, демонстрирующий правило SFTP Match Group с настройками ChrootDirectory и ForceCommand.
Условный блок конфигурации OpenSSH объединяет ограничение доступа к каталогам и команду, работающую только по SFTP.

6. Перед перезагрузкой проверьте синтаксис и действующие настройки.

Успешное прохождение проверки не доказывает правильность разрешений для закрытой системы и не подтверждает соответствие целевой учетной записи политике. Обе проверки следует выполнять явно.

sudo /usr/sbin/sshd -t
sudo /usr/sbin/sshd -T -C user=contractor,host=localhost,addr=192.0.2.10 | grep -E '^(chrootdirectory|forcecommand|permittty|disableforwarding) '
namei -l /srv/sftp/contractor

Эффективная конфигурация должна определять предполагаемый путь chroot, принудительную команду SFTP, отключенное выделение TTY и ограничения пересылки. Пример адреса 192.0.2.10приведен только для документации; если у вас есть правила, зависящие от адреса Match, замените его реальным исходным адресом клиента. -T -CФорма описана в руководстве по sshd в Ubuntu 24.04 .

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

7. Перезагрузите SSH и сохраните права администратора.

После успешной проверки перезагрузите службу SSH, чтобы новые подключения использовали отредактированную политику. Поддерживайте текущее подключение администратора активным, открыв второй терминал, чтобы убедиться, что обычный доступ администратора по-прежнему работает.

sudo systemctl reload ssh
sudo systemctl status ssh --no-pager
В терминале Ubuntu отображаются команды управления службой SSH и статус активной службы SSH.
Окно управления службой SSH демонстрирует проверку работоспособности службы после изменения конфигурации.

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

8. Тестирование разрешило передачу данных и заблокировало доступ к командной оболочке.

С другого компьютера подключитесь как пользователь с ограниченными правами. Используйте фактическое имя хоста сервера и подходящий тестовый файл. Первый каталог SFTP должен быть /upload, а корневая директория chroot должна отображаться как , /а не как путь к хосту /srv/sftp/contractor.

sftp contractor@server.example.com
sftp> pwd
sftp> cd /
sftp> ls
sftp> cd /upload
sftp> put sample.txt
sftp> cd /etc
sftp> exit

Загрузка безобидного тестового файла должна быть разрешена /upload. Доступ к фактическому каталогу хоста /etcне должен быть возможен: chroot определяет другой корневой каталог и /etcбудет доступен только в том случае, если вы намеренно создали или открыли такой каталог внутри jail. Точный текст ошибки клиента не имеет значения.

SFTP-терминал отображает виртуальный корневой каталог, папку uploads и попытку навигации.
В командной строке SFTP показан просмотр файловой системы, ограниченной локальной файловой системой, а не файловой системой хоста.
ssh contractor@server.example.com

Для этой учетной записи нельзя открывать обычную интерактивную SSH-оболочку. Вместо этого соединение может закрыться или отобразить сообщение, связанное с протоколом; не полагайтесь на точную фразу. Если оболочка откроется, считайте конфигурацию небезопасной и пересмотрите членство в группах, Matchприоритет и эффективный sshd -T -Cвывод, прежде чем использовать учетную запись.

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

А что, если использовать открытые ключи SSH?

Аутентификация по открытому ключу работает с SFTP-средой, но размещение домашнего каталога пользователя на уровне хоста /uploadозначает, что путь по умолчанию ~/.ssh/authorized_keysможет не существовать за пределами среды. Практической альтернативой является разрешение SSH считывать файл ключа, управляемый root, перед запуском chroot. Добавьте это в тот же Match Group sftpclientsблок, если вы выбираете централизованное хранение ключей:

    AuthorizedKeysFile /etc/ssh/authorized_keys/%u

Затем создайте файл /etc/ssh/authorized_keys/contractor, содержащий авторизованный открытый ключ подрядчика, с правами владельца root и без прав на запись для группы или всего мира. Например, после безопасного копирования проверенного файла открытого ключа с именем contractor.pubв административный промежуточный каталог:

sudo install -d -o root -g root -m 0755 /etc/ssh/authorized_keys
sudo install -o root -g root -m 0644 contractor.pub /etc/ssh/authorized_keys/contractor
sudo /usr/sbin/sshd -t

Не копируйте закрытый ключ на сервер. Настройка пути к ключу, параметры аутентификации по умолчанию и проверки учетных записей зависят от существующей политики SSH; проверьте доступ по открытому ключу, прежде чем отключать уже работающий метод аутентификации.

Типичные ошибки и что они означают.

СимптомНаиболее вероятная причинаСледующая проверка
SFTP разрывается сразу после аутентификации.Компонент пути chroot доступен для записи или не принадлежит пользователю root; в противном случае, необходимый начальный каталог отсутствует.Запустите namei -l /srv/sftp/contractor, проверьте /uploadи просмотрите журналы службы.
Пользователь подключается, но не может загрузить файл.Дочерний каталог, доступный для записи, имеет неверного владельца или режим.Проверьте statвывод в подкаталоге upload; не меняйте права собственности пользователя на корневого пользователя jail.
Оболочка SSH по-прежнему открытаНесоответствие групп или ранее примененное правило SSHБеги id contractorиsshd -T -C
Вход с использованием открытого ключа отклонен.Файл авторизованных ключей находится не по указанному пути или проверка его прав доступа не пройдена.Проверьте AuthorizedKeysFileрасположение ключей, права доступа к файлам и журнал SSH.
Более старая версия клиента SCP не работает.Предполагается использование устаревшего протокола SCP, для которого требуется удалённая оболочка.Используйте SFTP или SCP-клиент, использующий SFTP, а неscp -O

Проверьте логи с помощью команды `scp` sudo journalctl -u ssh -n 80 --no-pager. Точная причина ошибки зависит от настроек PAM, конфигурации SSH, доступа к файловой системе и метода аутентификации. OpenSSH 9.0 и более поздние версии scpпо умолчанию используют SFTP для стандартной передачи данных, тогда как в устаревшем режиме требуется оболочка, как описано в руководстве по scp для Ubuntu 24.04 .

Можно ли ограничить интерактивную SSH-оболочку одной папкой?

Это невозможно при изменении домашнего каталога или в приведенном выше примере только с SFTP. OpenSSH ChrootDirectoryтакже можно использовать для сеансов командной оболочки, но в изолированной среде (jail) должна быть рабочая оболочка, ее общие библиотеки и необходимые узлы устройств, а также все зависимости команд. Безопасное создание такой среды требует больше, чем просто настройка одной строки в файле конфигурации sshd_config. Легко создать ненадежную или вводящую в заблуждение конфигурацию, особенно когда задействованы произвольные команды оболочки или монтирование.

Если пользователю действительно необходимы интерактивные команды, сначала точно укажите, какие именно команды и файлы ему требуются. Для небольшого набора команд используйте узкоспециализированные удаленные команды или выделенную конечную точку приложения. Для более широких независимых сред рассмотрите контейнер или виртуальную машину с явным монтированием файловой системы, контролем привилегий и сетевыми ограничениями. Использование chroot само по себе не заменяет полную изоляцию системы, и ни chroot, ни разрешения файлов Unix не защищают от привилегированного пользователя, который может изменять базовую систему.

Контрольный список мер безопасности перед предоставлением доступа

  • Учетная запись для перевода средств не является администраторской и принадлежит только необходимым группам.
  • Каждый компонент, ведущий к тюрьме, принадлежит пользователю root и не доступен для записи группе или всему миру.
  • Место для загрузки с возможностью записи находится внутри виртуальной машины, а не в корневом каталоге этой машины.
  • Предполагаемый пользователь соответствует параметрам ChrootDirectory, ForceCommand internal-sftp, и переадресация отключена в действующей конфигурации.
  • Реальная загрузка по SFTP проходит успешно, попытка доступа к файлам, доступным только на хосте, завершается неудачей, а обычный доступ к оболочке SSH блокируется.
  • Резервное копирование, хранение данных, квоты, мониторинг и аннулирование учетных записей управляются отдельно; в изолированной среде каталогов эти политики не применяются автоматически.

Для получения более подробной технической информации обратитесь к справочнику по настройке OpenSSH в Ubuntu 24.04 и руководству по SFTP-серверу в Ubuntu . Эти инструкции предназначены для Ubuntu 24.04 LTS; сборки пакетов и существующие фрагменты кода SSH могут изменить фактическое поведение, поэтому окончательным решением является настройка и фактическое тестирование подключения на вашем собственном хосте.

Оставить комментарий

Устраните ошибки подписи APT, восстановив ключ репозитория.

Устраните ошибки подписи APT, восстановив ключ репозитория.

Устраните предупреждения APT в Ubuntu безопасным способом, определив источник ошибки, обновив его проверенный ключ и проверив результат без отключения защиты.

Как преобразовать трехфазное напряжение, ток, кВт, кВА и коэффициент мощности.

Как преобразовать трехфазное напряжение, ток, кВт, кВА и коэффициент мощности.

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

Ограничение использования ЦП и памяти командой с помощью cgroups в Ubuntu.

Ограничение использования ЦП и памяти командой с помощью cgroups в Ubuntu.

Запустите рабочую нагрузку в рамках systemd с параметрами CPUQuota и MemoryMax, а затем проверьте ограничения с помощью cgroup v2.

Шифрование DNS-сервера Pi-hole на Ubuntu Server 24.04

Шифрование DNS-сервера Pi-hole на Ubuntu Server 24.04

Настройте dnscrypt-proxy в качестве локального DoH-моста Pi-hole на Ubuntu 24.04, указав слушатель только для localhost, выбор резолвера и проверки перед переключением DNS.

Как заставить работать жесты тачпада в Ubuntu 24.04 на Wayland

Как заставить работать жесты тачпада в Ubuntu 24.04 на Wayland

Перед устранением неполадок в приложениях или оборудовании проверьте настройки тачпада Ubuntu, подтвердите наличие Wayland и протестируйте встроенные функции жестов GNOME.

Создайте зеркальный RAID 1 образ для Debian 12 с помощью mdadm.

Создайте зеркальный RAID 1 образ для Debian 12 с помощью mdadm.

Создайте и проверьте двухдисковый RAID 1-массив данных в Debian 12, отформатируйте его безопасным способом и настройте его для сборки и монтирования после перезагрузки.

Шифрование файла подкачки Debian 12 с помощью нового ключа при каждой загрузке.

Шифрование файла подкачки Debian 12 с помощью нового ключа при каждой загрузке.

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

Как ограничить доступ пользователей SSH к определенным каталогам в Ubuntu 24.04 (руководство по SFTP Chroot)

Как ограничить доступ пользователей SSH к определенным каталогам в Ubuntu 24.04 (руководство по SFTP Chroot)

Ограничьте доступ к SSH-аккаунтам Ubuntu 24.04 только для указанных SFTP-папок с помощью chroot, надлежащих разрешений, правил Match и безопасных тестов — без предоставления доступа к командной оболочке.

Безопасно снимите блокировку APT в Ubuntu и завершите обновление.

Безопасно снимите блокировку APT в Ubuntu и завершите обновление.

Определите, какой процесс владеет блокировкой интерфейса dpkg в Ubuntu, дождитесь завершения работы над пакетом и восстановите прерванные установки без удаления файлов блокировки.

Как настроить автоматическое создание снимков Btrfs на рабочем столе Ubuntu

Как настроить автоматическое создание снимков Btrfs на рабочем столе Ubuntu

Настройте запланированное создание снимков системы Btrfs в Ubuntu Desktop с помощью Timeshift, проверьте структуру подтомов Ubuntu, выберите периодичность хранения и разберитесь, что снимки защитить не могут.