Модуль ядра для диска SSH/SCP

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

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

Мы подумали о том, чтобы разделить его на 2 составляющие:

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

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

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

Другой случай — связь между ядром и пользовательским пространством. Мы также нашли статью, в которой обсуждается это со многими возможностями, такими как сокеты UDP. или НЕТЛИНК.

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

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

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


person schiza    schedule 06.11.2011    source источник
comment
fuse.sourceforge.net/sshfs.html   -  person Mat    schedule 06.11.2011
comment
см. мое редактирование - это проект, который я должен сделать для университетского класса.   -  person schiza    schedule 06.11.2011
comment
Тогда модуль ядра CIFS VFS может стать хорошей отправной точкой: git.kernel.org/?p=linux/kernel/git/next/   -  person Nithin Philips    schedule 06.11.2011


Ответы (3)


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

person unbeli    schedule 06.11.2011
comment
но это проект, который я должен сделать - для одного из моих университетских курсов, так что... еще ничего не сделано ;) - person schiza; 06.11.2011
comment
тогда вы могли бы прочитать их документацию и узнать много нового об архитектуре FUSE. - person unbeli; 06.11.2011

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

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

Немного изучите, что делает FUSE, и упомяните об этом в проекте.

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

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

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

person Basile Starynkevitch    schedule 06.11.2011
comment
Я думаю, что код ядра может быть важен в этом проекте, но мы обсудим это с нашим учителем ;) спасибо! - person schiza; 06.11.2011
comment
Я предполагаю, что сложность проекта могла уменьшить интерес @shiza к программированию, так как его последний раз видели 6 июня 2014 в 13:26 ʘ‿ʘ. - person Piotr Dobrogost; 30.10.2017

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

person Basile Starynkevitch    schedule 06.11.2011
comment
см. мою правку, это проект, который я должен сделать для университетского класса. - person schiza; 06.11.2011