КСМБД
Оригинальный автор(ы) | Намджэ Чон |
---|---|
Разработчик(и) | Намджэ Чон, Сергей Сеножацкий, Хён Чоль Ли |
Репозиторий | github |
Написано в | С |
Операционная система | Линукс |
Тип | Сетевая файловая система |
Лицензия | лицензия GPLv2 |
KSMBD — это встроенный сервер с открытым исходным кодом в ядро CIFS / SMB- , созданный Намджэ Чоном для ядра Linux . Первоначально цель состоит в том, чтобы обеспечить улучшенную производительность файлового ввода-вывода, но более крупная цель состоит в том, чтобы иметь некоторые новые функции, которые гораздо проще разрабатывать и поддерживать внутри ядра и полностью раскрывать уровни. Направления можно отнести к разделам, в которых Samba перемещается на несколько модулей внутри ядра, чтобы иметь такие функции, как удаленный прямой доступ к памяти (RDMA), для работы с реальным приростом производительности.
Функции
[ редактировать ]Реализовано
[ редактировать ]- Протоколы SMB1(CIFS), SMB2/3 для базового обмена файлами
- Сложные запросы
- оплок/аренда
- Большой MTU (Мультикредитный)
- НТЛМ / НТЛМв2
- Автосогласование
- HMAC-SHA256 Подписание
- Безопасные переговоры
- Обновление подписи
- Целостность предварительной аутентификации (SMB 3.1.1, Windows 10)
- Шифрование SMB (CCM, GCM)
- Прямой SMB (RDMA)
- WinACL (дескриптор безопасности)
- Керберос
- Аренда каталога
- Многоканальный
- Прочная ручка и v2.
Планируется
[ редактировать ]- Стойкие ручки
- Поддержка кластеров
- SCSI через SMB3
Архитектура
[ редактировать ]Подмножество операций, связанных с производительностью, принадлежит пространству ядра, а другое подмножество принадлежит операциям, которые на самом деле не связаны с производительностью в пространстве пользователя. Таким образом, управление DCE/RPC , которое исторически приводило к множеству проблем с переполнением буфера и опасным ошибкам безопасности, а также управление Winreg и учетными записями пользователей, реализовано в пользовательском пространстве как ksmbd.mountd. Файловые операции, связанные с производительностью (открытие/чтение/запись/закрытие и т. д.), выполняются в пространстве ядра (ksmbd). Это также позволяет упростить интеграцию с интерфейсом VFS для всех файловых операций.
ksmbd (демон ядра)
[ редактировать ]Когда демон сервера запускается, он запускает поток форкера (ksmbd/0) во время инициализации и открывает выделенный порт 445 для прослушивания запросов SMB. Всякий раз, когда новые клиенты отправляют запросы, поток-форкер принимает клиентское соединение и создает новый поток для выделенного канала связи между клиентом и сервером. Он позволяет параллельно обрабатывать запросы (команды) SMB от клиентов, а также позволяет новым клиентам устанавливать новые соединения. Каждый экземпляр имеет имя ksmbd/1~n, обозначающее подключенных клиентов. В зависимости от типов запросов SMB каждый новый поток может решить передать команды в пространство пользователя (ksmbd.mountd). В настоящее время команды DCE/RPC предназначены для обработки через пространство пользователя.
Для дальнейшего использования ядра Linux было выбрано обрабатывать команды как рабочие элементы по умолчанию, которые будут выполняться в обработчиках потоков kworker по умолчанию. Это позволяет мультиплексировать обработчики, поскольку ядро заботится об инициировании дополнительных рабочих потоков, если нагрузка увеличивается, и наоборот, если нагрузка уменьшается, оно уничтожает дополнительные рабочие потоки. Таким образом, после установления соединения с клиентом выделенная задача ksmbd полностью берет на себя ответственность за получение и анализ команд SMB. Каждая из полученных команд от нескольких клиентов обрабатывается параллельно. После получения каждой команды для каждой команды подготавливается отдельный рабочий элемент ядра, который далее ставится в очередь для обработки потоками kworker по умолчанию внутри ядра. Таким образом, каждый рабочий элемент SMB ставится в очередь у kworkers. Это позволяет оптимально управлять преимуществами распределения нагрузки с помощью ядра по умолчанию и оптимизирует производительность клиента за счет параллельной обработки клиентских команд.
ksmbd.mountd (демон пользовательского пространства)
[ редактировать ]ksmbd.mountd — это процесс пользовательского пространства, который передает учетную запись пользователя и пароль, зарегистрированные с помощью ksmbd.adduser (часть утилит для пользовательского пространства). Кроме того, это позволяет передавать параметры информации, проанализированные из smb.conf, на уровень экспорта smb в ядре. Что касается исполнительной части, у него есть демон, который постоянно работает и подключается к интерфейсу ядра через сокет netlink и ожидает запросов (dcerpc и winreg). Он обрабатывает вызовы RPC (минимум несколько десятков), которые наиболее важны для файлового сервера, из NetShareEnum и NetServerGetInfo, а также различные вызовы, связанные с DFS, которые должен реализовать сервер. Полный ответ DCE/RPC готовится из пользовательского пространства и передается в соответствующий поток ядра для клиента.
См. также
[ редактировать ]Ссылки
[ редактировать ]- https://github.com/cifsd-team/ksmbd/blob/master/README.md
- Руководство пользователя: https://github.com/namjaejeon/Documents/blob/master/CIFSD_User_Guide_v1.0.pdf.