Модуль ядра для привода SSH / SCP - PullRequest
1 голос
/ 06 ноября 2011

У меня и моего коллеги есть проект по созданию драйвера, который обеспечит доступ к удаленному диску, как к локальному диску (используя SSH / SCP).Диск должен обычно рассматриваться как диск, и операции могут быть ограничены простыми файловыми операциями (копирование, перемещение, удаление), без вывода списка файлов и т. Д. Драйвер должен быть модулем ядра Linux (может быть, не полностью ...).

Нам удалось собрать некоторую информацию и идеи, и, может быть, кто-то мог бы проверить их или подтолкнуть нас в правильном направлении?

Мы думали о том, чтобы разделить его на 2 компонента:

  • модуль ядра, реализующий виртуальный диск,
  • демон пользовательского пространства, отвечающий за связь SSH / SCP,

, потому что мы не можем представить реализацию связи SSH в модуле ядра(ДА, это, вероятно, ВОЗМОЖНО, но ..).

Для связи по SSH / SCP мы думаем, что можем использовать libssh .Что касается реализации виртуальных дисков в модуле ядра, мы нашли учебник .

Другой случай - связь между ядром и пользовательским пространством.Мы также нашли статью , в которой обсуждается множество возможностей, таких как UDP-сокеты или NETLINK.

С этим решением мы можем забыть о любых вещах, связанных с SSH / SCP, в модуле ядра - это будетпрозрачен для ядра.

Хорошо ли наше мышление?Может быть, есть некоторые оговорки, которые мы не предвидели?Это правильный путь, или, может быть, есть лучший / более простой метод (но все же связанный с ядром linux, потому что это основное поле проекта;))?Какие идеи мы должны использовать?Полезные ссылки:)

РЕДАКТИРОВАТЬ : Это проект, который мы должны сделать для обучения в университете - так что не проблема найти уже реализованное решение, а сделать свое собственное ..

Ответы [ 3 ]

3 голосов
/ 06 ноября 2011

Возможно, вы захотите взглянуть на FUSE и особенно SSHFS . Это в основном то, что вы описываете, уже реализовано.

2 голосов
/ 06 ноября 2011

Тогда не делайте шифрование внутри ядра.

Обычная мудрость заключается в том, что код ядра должен быть довольно маленьким, и это еще более верно для студентов (поскольку код ядра трудно отлаживать, а ошибки внутри него приводят к сбою всей системы.).1004 * Изучите немного, что делает FUSE, и упомяните об этом в проекте.

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

Возможно, от вас требуется не код ядра, а только пользовательская часть (вы должны выяснить, что учителя ждут от вас).Затем вам просто нужно заново реализовать пример FUSE для SSHFS, и вы можете использовать механизм, уже предоставленный FUSE.

И не говорите о виртуальных дисках, говорите о файловой системе пользовательского пространства.

1 голос
/ 06 ноября 2011

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

...