GNUnet (Русский)

From ArchWiki

Перевод этой статьи или раздела не отражает оригинальное содержание.

Причина: Невычитанная копипаста из переводчика DeepL. (Discuss)

GNUnet - это основа для безопасной и анонимной одноранговой сети, которая не использует никаких централизованных или иным образом доверенных служб. В настоящее время фреймворк предлагает защищенный от цензуры файлообменник, обмен сообщениями, VPN, GNS (децентрализованная версия DNS) и многое другое.

См. также https://gnunet.org/en/use.html и Wikipedia:GNUnet.

Установка

GNUnet можно установить с помощью пакета gnunetAUR. Последняя экспериментальная версия доступна как gnunet-gitAUR.

Начало работы

Конфигурация GNUnet по умолчанию является многопользовательской. Это означает, что системные службы запускаются системным пользователем gnunet, а пользователям, входящим в группу gnunet, разрешено взаимодействовать с демоном - например, искать и загружать файлы.

Поэтому перед использованием GNUnet вы должны убедиться, что добавить своего пользователя в группу gnunet, чтобы получить необходимые разрешения.

Конфигурация

Конфигурация по умолчанию должна работать из коробки в большинстве случаев. Для изменения конфигурации системы обратитесь к /etc/gnunet.conf, а для изменения конфигурации текущего пользователя - к ~/.config/gnunet.conf.

Для более подробной информации смотрите Configuration Handbook в руководстве. Смотрите также #Запуск демона от имени текущего пользователя в многопользовательской установке.

Использование

Вхождение в сеть GNUnet

Start и, возможно, enable службы gnunet.

Проверка сети

Вы можете проверить текущее состояние сети, запустив команду gnunet-peerinfo от имени обычного пользователя.

$ gnunet-peerinfo

Чтобы узнать идентификатор вашего пэра, запустите команду:

$ gnunet-peerinfo -s

Чтобы получить список пиров, с которыми вы непосредственно связаны (они называются "соседями"), запустите команду:

$ gnunet-core

Поиск файла

Используйте gnunet-search для поиска файла по ключевым словам (они не обязательно связаны с именем файла). Например, для поиска файлов, которые были проиндексированы по ключевому слову "commons", запустите:

$ gnunet-search --timeout='10 s' 'commons'.

Без указания таймаута (10 секунд в примере выше) gnunet-search работает вечно, ожидая, пока пользователь нажмет CTRL-C.

Команда gnunet-search имеет опцию --printf для работы с печатным выводом, несколько похожую на опцию -printf утилиты find. Пожалуйста, введите man gnunet-search для получения более подробной информации.

Загрузка

Вывод gnunet-search по умолчанию представляет собой список команд gnunet-download, которые вы можете напрямую скопировать и запустить как обычный пользователь.

Например, используя вывод, сгенерированный gnunet-search 'commons',

$ gnunet-search 'commons'
#1:
gnunet-download -o "Liotard (2017)_ Fablab - a new space for commons based peer production.pdf" gnunet://fs/chk/C6369DRQ3S8RYK1FD5VDE666W2HVEJ5G5GJRX29BH6ZM08CBRWS7FY9326RBJ4G0N8V1RJ2N802KBYZT7RJT2EDK1J9JR2DXK5MTVM0.4SXJCK9NT5XGCZ0YAJ0ETXJJGY3P2SMNZ0Q94N775YEX9SXS2RW5FWRFK4GMBTP668Z3R8QZZ4WSHW1KG1AVQ5VFC1VF5T3WF57GT58.336423

#2:
gnunet-download -o "Rose, Carol (1986)_ The Comedy of the Commons_ Commerce, Custom, and inherently Public Property.pdf" gnunet://fs/chk/TQK3A2C279EJQ50B1TQWFNTPMGQZJJ4JXYTF2D88D03H038TB7SVVSRBT74FMYPNZ47YZSV096PVVZH0TQ3B8KBVBV2H8GN9VAASTJR.CQ7M7843MGPZCV8M26NKH6EB5MBGZAXRWCF39YS668WM6F22D214GSXNTJ4RYGE7XF68VPZM4C19XR48TT4J8WH8S2E00C96Q8K6790.1593230

#3:
gnunet-download -o "Hardin, Garett (1968)_ Tragedy of the Commons.pdf" gnunet://fs/chk/Y1FD7D123CEGWDW544YDEP15YA5E7ZD2XRSJBNP0847A5JXMMZEZ0XACGRG42BBBTGKZ0ZCBW0A9T6196Z5N26HA6SP1T8GDAT5H5SG.RN38G25DMYG3TBQJEGWDZT2B84N1JYYJZ8VRJ8HG2G1A4EFD4GH5TZXB0RXV7QEMZBSKWCCEF736FXNH6C5BYKG9DSTV99ETFGC93R0.1520328

...

вы можете запустить,

$ gnunet-download -o "Hardin, Garett (1968)_ Tragedy of the Commons.pdf" gnunet://fs/chk/Y1FD7D123CEGWDW544YDEP15YA5E7ZD2XRSJBNP0847A5JXMMZEZ0XACGRG42BBTGKZ0ZCBW0A9T6196Z5N26HA6SP1T8GDAT5H5SG. RN38G25DMYG3TBQJEGWDZT2B84N1JYYJZ8VRJ8HG2G1A4EFD4GH5TZXB0RXV7QEMZBSKWCCEF736FXNH6C5BYKG9DSTV99ETFGC93R0.1520328

которая загрузит Hardin, Garett (1968)_ Tragedy of the Commons.pdf в текущий каталог.

Монтирование удаленного каталога GNUnet без его загрузки

Был разработан модуль gnunet-fuseAUR для монтирования удаленных каталогов из сети GNUnet. С помощью gnunet-fuse каталоги, опубликованные в сети GNUnet, могут быть смонтированы как файловые системы только для чтения, и доступ к ним осуществляется с помощью обычных файловых операций. В отличие от рекурсивной загрузки каталога через gnunet-download, преимущество этого метода в том, что файлы загружаются по требованию. Будут загружены только те файлы (или каталоги), к которым вы обращаетесь. Для получения дополнительной информации установите модуль и введите man gnunet-fuse.

Выгрузка

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

Ключевые слова не являются строго обязательными, но они рекомендуются. Это связано с тем, что в GNUnet разрешен поиск не по имени файла, а по ключевым словам. Библиотека libextractor, которая является зависимой частью GNUnet, может автоматически извлекать ключевые слова из файла, но вы можете захотеть ввести свои собственные ключевые слова.

В следующем примере мы используем ключевые слова "commons" и "state" для публикации файла с именем ostrom.pdf.

$ gnunet-publish -k 'commons' -k 'state' ostrom.pdf

Теперь пользователи GNUnet могут найти этот файл с помощью команды gnunet-search.

$ gnunet-search 'commons'
.
#1:
gnunet-download -o "ostrom.pdf" gnunet://fs/chk/M57S...

Чтобы получить список всех файлов, которые в настоящее время опубликованы, запустите gnunet-fs -i. Если позже вы захотите прекратить совместное использование файла, вы можете использовать gnunet-unindex filename (в нашем примере gnunet-unindex 'ostrom.pdf').

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

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

Warning: Отмена публикации файла остановит только текущую машину от обмена файлом, но не удалит файл из сети GNUnet - что по замыслу невозможно - так как другие люди могли скачать файл и поделиться им самостоятельно. В любом случае gnunet-publish следует считать необратимым действием

Команда gnunet-publish предлагает опцию - -n или эквивалентно --noindex - для публикации файла без его индексирования. При ее использовании GNUnet выполнит полную вставку и сохранит весь файл в зашифрованном виде в базе данных GNUnet.

Эта опция была создана с целью избежать того, чтобы тот, кто имеет физический доступ к компьютеру, на котором работает GNUnet, узнал, какие файлы в настоящее время публикуются, в случае цензурированных файлов в странах с сильной цензурой. Файлы, опубликованные с опцией --noindex, будут отображаться как куски, загруженные из сети, и как таковые не могут быть неопубликованы/неиндексированы (они никогда не были проиндексированы в первую очередь); однако всегда можно указать низкий приоритет содержимого при публикации (--prio) и сказать GNUnet, что содержимое, которое будет опубликовано, может быть легко потеряно, когда база данных станет полной.

Для получения дополнительной информации, пожалуйста, прочитайте главу о совместном использовании файлов в справочнике. См. также https://gnunet.org/en/use.html#filesharing.

Изменение и удаление индексированных файлов

  • Когда вы изменяете файл, URI файла изменяется. Поэтому GNUnet считает, что это совершенно другой файл, и индексированный файл будет считаться отсутствующим. Поэтому сначала убедитесь, что исходный файл не проиндексирован (с помощью команды gnunet-unindex), измените файл, а затем проиндексируйте новый файл, чтобы сделать его доступным через сеть.
  • Если вы хотите удалить файл из файловой системы, то сначала нужно снять с него индексацию.
  • Если вы заранее знаете, что опубликованный файл, скорее всего, будет нуждаться в обновлении чаще или реже, смотрите #Публикация обновляемых файлов.

Загрузка + обмен

Файлообменная сеть GNUnet представляет собой DHT (см. Wikipedia:Distributed hash table). В качестве пиров в DHT пользователи хранят на своем диске фрагменты различных файлов, даже из файлов, которые они не скачивают или уже скачали. Какие файлы хранятся, зависит от метрики/алгоритма расстояния DHT.

Технически, если файл не был полностью скачан, хранятся только его части. Они хранятся в кэше (обычно в /var/lib/gnunet/.local/share/gnunet). Если DHT-запрос обращается к пиру для получения одной из кэшированных частей, пир предоставит ее. База данных, используемая для хранения блоков совместного использования файлов, поддерживается в ограниченном объеме (ниже настраиваемой квоты), и все кэшированные части могут истечь, чтобы освободить место для новых файлов.

Если кто-то поделится файлом в сети GNUnet, распределенные части этого файла останутся в кэше сети на некоторое время, и файл останется доступным, даже если тот, кто поделился им, уйдет в офлайн. Но если первоначальный издатель пропал, и никто больше не поделился файлом явно (с помощью gnunet-publish), файл в конце концов станет недоступным, поскольку кэш пиров истечет или пиры уйдут в оффлайн.

Единственный способ гарантировать, что файл сохраняется в сети GNUnet, - это повторно опубликовать его явно после загрузки (с помощью gnunet-publish) и позволить машине, которая публикует файл, регулярно посещать сеть.

Публикация файла после загрузки всегда будет генерировать тот же URI, по которому файл был загружен (gnunet://fs/chk/Y1FD... в примере ниже), независимо от ключевых слов, выбранных для повторной публикации:

$ gnunet-download -o 'Hardin, Garett (1968)_ Tragedy of the Commons.pdf' gnunet://fs/chk/Y1FD...
100% [============================================================]
Загрузка `Hardin, Garett (1968)_ Tragedy of the Commons.pdf' выполнена (160 b/s).
$ gnunet-publish -k 'tragedy' 'Hardin, Garett (1968)_ Tragedy of the Commons.pdf'
Публикация `/srv/filesharing/gnunet/Hardin, Garett (1968)_ Tragedy of the Commons.pdf' выполнена.
URI - `gnunet://fs/chk/Y1FD...

Общение с другими пользователями GNUnet

Для общения с пользователями GNUnet доступна утилита gnunet-messenger, для которой gnunet.service user unit должен быть start" (возможно, вместе с системным блоком gnunet.service - см. #Запуск демона от имени текущего пользователя в многопользовательской установке). Например, чтобы войти в комнату "miscellanea", используя "alice" в качестве псевдонима, запустите

$ gnunet-messenger -e alice -r miscellanea
* Добро пожаловать в мессенджер, 'alice'!
* Вы пытаетесь открыть комнату...
* Вы присоединились к комнате.
[EHDA8T] * 'anonymous' открыл комнату: 2ABN944E16FTWFMOKTMQ5JMPQ233YSPBKC47XR2DHSPQCQ8GYK80
[EHDA8T] * 'anonymous' переименован в 'alice'

VPN

GNUnet предоставляет VPN, которая может быть использована для совместного использования вашего интернет-соединения (да, это может быть опасно, как и запуск узла выхода Tor), или для предоставления доступа к службам на вашем хосте (это должно быть менее опасно, при условии, что эти службы безопасны).

Информацию о том, как настроить VPN с помощью GNUnet, см. на сайте https://gnunet.org/en/use.html#vpn.

Служба имен GNU (GNS)

Служба имен GNU (GNS) - это полностью децентрализованная альтернатива Domain Name System (DNS), которая не должна страдать теми же серьезными недостатками безопасности, что и последняя (см. Wikipedia:Domain Name System#Security issues).

Информацию о том, как использовать GNS, см. на сайтах https://gnunet.org/en/use.html#gns_cli и https://gnunet.org/en/use.html#gns_browser.

Экосистема приложений

GNUnet GTK

GNUnet GTK - это набор графических интерфейсов для фреймворка GNUnet. Он поставляет следующие GTK приложения:

  • gnunet-conversation-gtk
  • gnunet-fs-gtk
  • gnunet-namestore-gtk
  • gnunet-peerinfo-gtk
  • gnunet-setup
  • gnunet-statistics-gtk

Для установки GNUnet GTK загрузите пакет gnunet-gtkAUR.

Messenger GTK

В настоящее время разрабатывается несколько графических пользовательских интерфейсов для общения в сети GNUnet. Один из них - Messenger GTK (messenger-gtkAUR, или messenger-gtk-gitAUR для версии разработки), удобный для мобильных устройств GTK графический пользовательский интерфейс для общения с пользователями GNUnet. См. также Cadet GTK (cadet-gtkAUR), предыдущее приложение для чата, написанное теми же авторами.

Веб-интерфейс пользователя

Веб-интерфейс для GNUnet существует и доступен как gnunet-webui-gitAUR.

re:claimID

re:claimID - это децентрализованный сервис Identity Provider (IdP), построенный на базе системы имен GNU. Он позволяет пользователям безопасно обмениваться личной информацией с веб-сайтами, используя стандартизированные протоколы (OpenID Connect).

Для пользователей re:claimID предлагает расширение для Firefox и расширение для Chromium для управления идентификацией re:claimID в браузере (необходимо установить пакет gnunetAUR).

После установки расширения можно будет добавить новую личность в локальный экземпляр re:claimID и добавить к ней некоторые атрибуты, посетив сайт https://ui.reclaim/ (ссылка не будет работать без установленного расширения).

За дополнительной информацией обращайтесь к руководству.

GNU Taler

GNU Taler - это система микротранзакций и электронных платежей, построенная поверх GNUnet. В отличие от других распределенных платежных систем Taler основана не на блокчейне, а на слепых подписях.

Для получения дополнительной информации обратитесь к официальной документации. См. также пакеты syncAUR, taler-exchangeAUR, taler-mdbAUR, taler-merchantAUR и taler-twisterAUR.

GNU Anastasis

GNU Anastasis - это протокол и реализация, позволяющие пользователям надежно хранить основные секреты в открытом наборе провайдеров условного депонирования и восстанавливать эти секреты в случае потери их оригинальных копий. Anastasis доступен на AUR (anastasisAUR и anastasis-gtkAUR). За дополнительной информацией обращайтесь к сайтам https://www.gnu.org/software/anastasis/ и https://anastasis.lu/.

Устранение неполадок

GNUnet не удается опубликовать файлы

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

Простым решением является создание общего каталога, где права на запись имеют только пользователи, входящие в группу gnunet, и использование его для размещения файлов, которые будут опубликованы. Например, /srv/filesharing/gnunet может быть хорошим выбором:

# install -dm775 -g gnunet -o gnunet /srv/filesharing/gnunet

Каждый пользователь, входящий в группу gnunet, может затем создать ссылку на него в своем домашнем каталоге,

$ ln -s /srv/filesharing/gnunet ~/Publishing

которая может быть разыменована gnunet-publish:

$ (cd ~/Publishing && gnunet-publish -k commons ostrom.pdf) && gnunet-fs -i
/srv/filesharing/gnunet/ostrom.pdf

Низкая пропускная способность

Для совместного использования файлов рекомендуется увеличить ограничения пропускной способности GNUnet по сравнению с довольно низкими значениями по умолчанию. Приведенный ниже пример устанавливает ограничения WAN и LAN на unlimited.

$ gnunet-config -s ats -o WAN_QUOTA_IN -V unlimited
$ gnunet-config -s ats -o WAN_QUOTA_OUT -V unlimited
$ gnunet-config -s ats -o LAN_QUOTA_IN -V неограниченно
$ gnunet-config -s ats -o LAN_QUOTA_OUT -V unlimited

/var/lib/gnunet/ становится слишком большим

Кэш GNUnet ограничен и не может расти бесконечно. Однако квота, зарезервированная для него по умолчанию, не маленькая (в настоящее время 5 ГБ). Чтобы уменьшить это число, вы должны присвоить желаемое значение ключу QUOTA в секции datastore раздела /etc/gnunet.conf.

/etc/gnunet.conf
...

[datastore]
...
КВОТА = 2 ГБ
...

/var/lib/gnunet/ остается после деинсталляции

Каталог /var/lib/gnunet/ - это домашний каталог системного пользователя gnunet, который остается после деинсталляции GNUnet. Если вы уверены, что больше никогда не будете использовать GNUnet, запустите:

# userdel -r gnunet
# groupdel gnunetdns
Warning: Идентификатор и вся информация о сети, хранящаяся в совокупности у текущего пира, будет уничтожена - это не повлияет на файлы, явно загруженные по другим путям.

Сеть слишком статична

По умолчанию GNUnet загружает себя, используя файл hostlist, загруженный из интернета (обычный https) каждый раз, когда подключается к сети. Если вы хотите указать ему изучать и запоминать списки хостов, предоставленные другими пользователями, вам нужно добавить опцию -e к ключу OPTIONS в разделе hostlist в /etc/gnunet.conf. Также доступны дополнительные опции.

/etc/gnunet.conf
...

[hostlist]
...
# Опции:
# -p : предоставить список хостов в качестве серверов списка хостов.
# -b : загрузка с использованием настроенных серверов списка хостов
# -e : включить обучение рекламируемых хостлистов
# -a : рекламировать список хостов другим серверам
OPTIONS = -b -e -a -p
...

Советы и рекомендации

Запуск демона от имени текущего пользователя в многопользовательской установке

После свежей установки отсутствует файл конфигурации пользователя. В многопользовательской установке он используется практически только (при необходимости) для start и stop gnunet.service user unit во время работы системного демона, поэтому обычно достаточно создать минимальный конфигурационный файл, содержащий только:

~/.config/gnunet.conf
[arm]
START_SYSTEM_SERVICES = NO
START_USER_SERVICES = YES

Если не установить START_SYSTEM_SERVICES в NO, запуск демона от имени текущего пользователя при запущенном системном демоне приведет к дублированию процессов.

Более подробную информацию смотрите в Многопользовательская настройка, в руководстве.

Кнопка для включения и выключения GNUnet

Если вы используете GNOME, вы можете установить расширение оболочки Systemd Manager (gnome-shell-extension-systemd-managerAUR) и добавить в него GNUnet:

$ dconf write /org/gnome/shell/extensions/systemd-manager/systemd \
	''['\''{'name''':'GNUnet system service'','service'':'gnunet.service'','type''':'system'}'\'','\''{'name'':'GNUnet user service'','service'':'gnunet.service'','type''':'user'}'\'']'.

(После установки расширения вам может потребоваться перезапустить сессию).

Однопользовательская установка

Пир GNUnet может быть запущен и от текущего пользователя без запуска системной службы gnunet. Для однопользовательской установки убедитесь, что START_SYSTEM_SERVICES и START_USER_SERVICES установлены в YES в ~/.config/gnunet.conf:

~/.config/gnunet.conf
[arm]
START_SYSTEM_SERVICES = YES
START_USER_SERVICES = YES

Чтобы запустить пир от имени текущего пользователя, запустите gnunet.service user unit. Чтобы остановить пир, запущенный от имени текущего пользователя, stop блок пользователя gnunet.service.

За дополнительной информацией обращайтесь к главе об однопользовательской настройке в руководстве.

Публикация обновляемых файлов

Существует возможность публикации "обновляемых" файлов (т.е. файлов, для которых вы можете захотеть выпустить другую версию в будущем, рекламируя, что это тот же самый файл - только обновленный - а не другой). Чтобы выпустить обновляемый файл, необходимо создать "я" и использовать его для подписи файла. Это единственный способ гарантировать, что злонамеренная сторона не сможет поставлять поддельные обновления.

Для создания ego доступна утилита gnunet-identity, для которой gnunet.service user unit должна быть start" (возможно, вместе с системной единицей gnunet.service - см. #Запуск демона от имени текущего пользователя в многопользовательской установке). Например, чтобы создать эго с именем "caroline", запустите пользовательский блок gnunet и запустите:

$ gnunet-identity -C caroline
Примечание: Если позже вы решите стереть это эго, вы можете запустить gnunet-identity -D caroline.

Теперь, когда вы создали эго, вам нужно указать строку, которая идентифицирует текущий релиз файла (опция -t), и уже сейчас строку, которая будет идентифицировать вашу планируемую следующую версию (опция -N) - последнюю вам придется запомнить. Для обеих строк возможно любое содержание.

$ gnunet-publish -P caroline -t 'diary version 1' -N 'diary version 2' -k 'diary' until-2020/my_diary.md
Публикация `/srv/filesharing/gnunet/until-2020/my_diary.md' выполнена.
URI - `gnunet://fs/chk/AF26...'.

URI пространства имен - `gnunet://fs/sks/V3TK.../diary version 1'.

Когда обновление будет готово, вам придется использовать ту же строку, которую вы выбрали для него ранее ("дневник версии 2" в нашем примере), возможно, сопроводив ее другим именем для следующего обновления (если это применимо):

$ gnunet-publish -P caroline -t 'diary version 2' -N 'diary version 3' -k 'diary' until-2021/my_diary.md
Публикация `/srv/filesharing/gnunet/until-2021/my_diary.md' выполнена.
URI - `gnunet://fs/chk/5Y7V...'.

URI пространства имен - `gnunet://fs/sks/V3TK.../diary version 2'.

Если вы решили, что обновление будет последним, опустите опцию -N (не позволит никаких последующих обновлений).

Обратите внимание, что обновление с помощью GNUnet не сделает старое содержимое недоступным, GNUnet просто позволяет издателю указать пользователям на более свежие версии.

Запуск и остановка GNUnet без systemd

GNUnet поставляется с собственной системой управления демонами, Automatic Restart Manager (ограничен службами GNUnet).

Для запуска системных служб вручную без systemd запустите утилиту gnunet-arm от имени пользователя gnunet:

$ sudo -u gnunet gnunet-arm -c /etc/gnunet.conf -s

Чтобы завершить работу системных служб вручную без systemd, запустите:

$ sudo -u gnunet gnunet-arm -c /etc/gnunet.conf -e

Чтобы запустить пользовательские службы вручную без systemd, запустите утилиту gnunet-arm от имени текущего пользователя:

$ gnunet-arm -c ~/.config/gnunet.conf -s

Чтобы завершить пользовательские службы вручную без systemd, запустите:

$ gnunet-arm -c ~/.config/gnunet.conf -e