IPFS sen dor (pero isto non é exacto)

IPFS sen dor (pero isto non é exacto)

A pesar de que Habré xa estaba máis dun artigo sobre IPFS.

Aclararei de inmediato que non son un experto nesta área, pero mostrei interese por esta tecnoloxía máis dunha vez, pero tentar xogar con ela moitas veces causaba algo de dor. Hoxe empecei a experimentar de novo e conseguín algúns resultados que me gustaría compartir. En resumo, describirase o proceso de instalación de IPFS e algunhas características (todo se fixo en ubuntu, non o probei noutras plataformas).

Se perdeches o que é IPFS, está escrito con certo detalle aquí: habr.com/en/post/314768

Instalación

Para a pureza do experimento, suxiro instalalo inmediatamente nalgún servidor externo, xa que consideraremos algunhas trampas de traballar en modo local e remoto. Entón, se o desexa, non será demolido durante moito tempo, non hai moito.

Instala go

Documentación oficial
Consulta a versión actual en golang.org/dl

Nota: é mellor instalar IPFS en nome do usuario que se supón que o utilizará con máis frecuencia. O caso é que a continuación consideraremos a opción de montar vía FUSE e hai sutilezas.

cd ~
curl -O https://dl.google.com/go/go1.12.9.linux-amd64.tar.gz
tar xvf go1.12.9.linux-amd64.tar.gz
sudo chown -R root:root ./go
sudo mv go /usr/local
rm go1.12.9.linux-amd64.tar.gz

Entón cómpre actualizar o ambiente (máis detalles aquí: golang.org/doc/code.html#GOPATH).

echo 'export GOPATH=$HOME/work' >> ~/.bashrc
echo 'export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin' >> ~/.bashrc
source ~/.bashrc

Comprobando que go está instalado

go version

Instalar IPFS

O método de instalación gustoume máis actualización de ipfs.

Instálao co comando

go get -v -u github.com/ipfs/ipfs-update

Despois diso, pode executar os seguintes comandos:

versións ipfs-update - para ver todas as versións dispoñibles para descargar.
versión ipfs-update - para ver a versión instalada actualmente (ata que teñamos instalado IPFS, non será ningunha).
Última instalación de ipfs-update - instalar a última versión de IPFS. En lugar da última, respectivamente, pode especificar calquera versión desexada da lista de dispoñibles.

Instalando ipfs

ipfs-update install latest

Comprobando

ipfs --version

Directamente coa instalación en termos xerais todo.

Iniciar IPFS

Inicialización

Primeiro cómpre realizar a inicialización.

ipfs init

Como resposta, recibirá algo como isto:

 ipfs init
initializing IPFS node at /home/USERNAME/.ipfs
generating 2048-bit RSA keypair...done
peer identity: QmeCWX1DD7HnXXXXXXXXXXXXXXXXXXXXXXXXxxx
to get started, enter:
	ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme

Pode executar o comando suxerido

ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme

Resultado

Hello and Welcome to IPFS!

██╗██████╗ ███████╗███████╗
██║██╔══██╗██╔════╝██╔════╝
██║██████╔╝█████╗  ███████╗
██║██╔═══╝ ██╔══╝  ╚════██║
██║██║     ██║     ███████║
╚═╝╚═╝     ╚═╝     ╚══════╝

If you're seeing this, you have successfully installed
IPFS and are now interfacing with the ipfs merkledag!

 -------------------------------------------------------
| Warning:                                              |
|   This is alpha software. Use at your own discretion! |
|   Much is missing or lacking polish. There are bugs.  |
|   Not yet secure. Read the security notes for more.   |
 -------------------------------------------------------

Check out some of the other files in this directory:

  ./about
  ./help
  ./quick-start     <-- usage examples
  ./readme          <-- this file
  ./security-notes

Aquí, na miña opinión, comeza o interesante. Os mozos na fase de instalación xa están empezando a utilizar as súas propias tecnoloxías. O hash proposto QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv non se xera especificamente para ti, senón que está cosido na versión. É dicir, antes do lanzamento, prepararon un texto de benvida, verteronno en IPFS e engadiron o enderezo ao instalador. Paréceme moi chulo. E este ficheiro (máis precisamente, todo o cartafol) agora pódese ver non só localmente, senón tamén na pasarela oficial ipfs.io/ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv. Ao mesmo tempo, pode estar seguro de que o contido do cartafol non cambiou de ningún xeito, porque se cambiase, o hash tamén cambiaría.

Por certo, neste caso, IPFS ten algunhas semellanzas co servidor de control de versións. Se realizas cambios nos ficheiros de orixe do cartafol e volves verter o cartafol en IPFS, recibirá un novo enderezo. Ao mesmo tempo, o cartafol antigo non irá a ningún sitio así e estará dispoñible no seu enderezo anterior.

Lanzamento directo

ipfs daemon

Deberías recibir unha resposta como esta:

ipfs daemon
Initializing daemon...
go-ipfs version: 0.4.22-
Repo version: 7
System version: amd64/linux
Golang version: go1.12.7
Swarm listening on /ip4/x.x.x.x/tcp/4001
Swarm listening on /ip4/127.0.0.1/tcp/4001
Swarm listening on /ip6/::1/tcp/4001
Swarm listening on /p2p-circuit
Swarm announcing /ip4/127.0.0.1/tcp/4001
Swarm announcing /ip6/::1/tcp/4001
API server listening on /ip4/127.0.0.1/tcp/5001
WebUI: http://127.0.0.1:5001/webui
Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080
Daemon is ready

Abrindo as portas a Internet

Presta atención a estas dúas liñas:

WebUI: http://127.0.0.1:5001/webui
Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080

Agora, se instalou IPFS localmente, accederá ás interfaces IPFS en enderezos locais e todo estará dispoñible para vostede (por exemplo, localhost:5001/webui/). Pero cando se instala nun servidor externo, por defecto, as pasarelas están pechadas a Internet. Pasarelas dúas:

  1. administrador webui (GitHub) no porto 5001.
  2. API externa no porto 8080 (só lectura).

Ata agora, os dous portos (5001 e 8080) pódense abrir para experimentos, pero nun servidor de combate, por suposto, o porto 5001 debería pecharse cun firewall. Tamén hai o porto 4001, que é necesario para que outros compañeiros te atopen. Debe deixarse ​​aberto a solicitudes externas.

Abre ~/.ipfs/config para editar e atopa nela estas liñas:

"Addresses": {
  "Swarm": [
    "/ip4/0.0.0.0/tcp/4001",
    "/ip6/::/tcp/4001"
  ],
  "Announce": [],
  "NoAnnounce": [],
  "API": "/ip4/127.0.0.1/tcp/5001",
  "Gateway": "/ip4/127.0.0.1/tcp/8080"
}

Cambia 127.0.0.1 á ip do teu servidor e garda o ficheiro, despois reinicia ipfs (detén o comando en execución con Ctrl+C e iníciao de novo).

Debería conseguir

...
WebUI: http://ip_вашего_сервера:5001/webui
Gateway (readonly) server listening on /ip4/ip_вашего_сервера/tcp/8080

Agora as interfaces externas deberían estar dispoñibles.

Comprobar

http://домен_или_ip_сервера:8080/ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme

O ficheiro Léame anterior debería abrirse.

http://домен_или_ip_сервера:5001/webui/

A interface web debería abrirse.

Se webui funciona para ti, a configuración IPFS pódese cambiar directamente nel, incluídas as estatísticas de visualización, pero a continuación considerarei as opcións de configuración directamente a través do ficheiro de configuración, que xeralmente non é fundamental. É mellor lembrar exactamente onde está a configuración e que facer con ela, se non, se a cara web non funciona, será máis difícil.

Configurar unha interface web para traballar co teu servidor

Aquí está a primeira trampa, que levou unhas tres horas.

Se instalou IPFS nun servidor externo, pero non instalou nin executou IPFS localmente, cando vaia a /webui na interface web, debería ver un erro de conexión:

IPFS sen dor (pero isto non é exacto)

O caso é que webui, na miña opinión, funciona de forma moi ambigua. En primeiro lugar, tenta conectarse á API do servidor onde está aberta a interface (en función do enderezo do navegador, por suposto). e se non funciona alí, tenta conectarse á pasarela local. E se tes IPFS en execución local, entón webui funcionará ben para ti, só traballarás con IPFS local, e non externo, aínda que abriches webui nun servidor externo. Despois cargas os ficheiros, pero por algún motivo non os ves así nun servidor externo...

E se non se está a executar localmente, aparece un erro de conexión. No noso caso, o erro probablemente se deba a CORS, que tamén se indica mediante webui, o que suxire engadir unha configuración.

ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["http://ip_вашего сервера:5001", "http://127.0.0.1:5001", "https://webui.ipfs.io"]'
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "GET", "POST"]'

Acabo de rexistrar un comodín

ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]'

As cabeceiras engadidas pódense atopar no mesmo ~/.ipfs/config. No meu caso é

  "API": {
    "HTTPHeaders": {
      "Access-Control-Allow-Origin": [
        "*"
      ]
    }
  },

Reiniciamos ipfs e vemos que webui se conectou correctamente (en todo caso, debería, se abriu as pasarelas para solicitudes de fóra, como se describe anteriormente).

Agora podes cargar cartafoles e ficheiros directamente a través da interface web, así como crear os teus propios cartafoles.

Montaxe do sistema de ficheiros FUSE

Aquí tes unha característica bastante interesante.

Ficheiros (así como cartafoles), podemos engadir non só a través da interface web, senón tamén directamente no terminal, por exemplo

ipfs add test -r
added QmfYuz2gegRZNkDUDVLNa5DXzKmxxxxxxxxxx test/test.txt
added QmbnzgRVAP4fL814h5mQttyqk1aURxxxxxxxxxxxx test

O último hash é o hash do cartafol raíz.

Usando este hash, podemos abrir un cartafol en calquera nodo ipfs (que pode atopar o noso nodo e obter o contido), podemos na interface web no porto 5001 ou 8080, ou podemos localmente a través de ipfs.

ipfs ls QmbnzgRVAP4fL814h5mQttyqk1aUxxxxxxxxxxxxx
QmfYuz2gegRZNkDUDVLNa5DXzKmKVxxxxxxxxxxxxxx 10 test.txt

Pero aínda pode abrilo como un cartafol normal.

Imos crear dous cartafoles na raíz e concederlles dereitos ao noso usuario.

sudo mkdir /ipfs /ipns
sudo chown USERNAME /ipfs /ipns

e reinicie ipfs coa bandeira --mount

ipfs daemon --mount

Podes crear cartafoles noutros lugares e especificar o camiño ata eles a través dos parámetros do daemon ipfs -mount -mount-ipfs /ipfs_path -mount-ipns /ipns_path

Agora ler desde este cartafol é algo inusual.

ls -la /ipfs
ls: reading directory '/ipfs': Operation not permitted
total 0

É dicir, non hai acceso directo á raíz deste cartafol. Pero podes obter o contido, coñecendo o hash.

ls -la /ipfs/QmbnzgRVAP4fL814h5mQttyqxxxxxxxxxxxxxxxxx
total 0
-r--r--r-- 1 root root 10 Aug 31 07:03 test.txt

cat /ipfs/QmbnzgRVAP4fL814h5mQttyqxxxxxxxxxxxxxxxxx/test.txt 
test
test

Ao mesmo tempo, mesmo o autocompletado funciona dentro do cartafol cando se especifica o camiño.

Como dixen anteriormente, hai sutilezas con tal montaxe: por defecto, as carpetas FUSE montadas están dispoñibles só para o usuario actual (nin sequera root poderá ler desde tal cartafol, sen esquecer outros usuarios do sistema). Se queres que estes cartafoles sexan dispoñibles para outros usuarios, na configuración debes cambiar "FuseAllowOther": false por "FuseAllowOther": true. Pero iso non é todo. Se executas IPFS como root, todo está ben. E se en nome dun usuario normal (incluso sudo), entón obterás un erro

mount helper error: fusermount: option allow_other only allowed if 'user_allow_other' is set in /etc/fuse.conf

Neste caso, cómpre editar /etc/fuse.conf eliminando o comentario da liña #user_allow_other.

Despois diso, reinicie ipfs.

Problemas coñecidos con FUSE

O problema foi observado máis dunha vez que despois de reiniciar ipfs coa montaxe (e quizais noutros casos), os puntos de montaxe /ipfs e /ipns non están dispoñibles. Non hai acceso a eles, e ls -la /ipfs mostra ???? na lista de dereitos.

Atopo esta solución:

fusermount -z -u /ipfs
fusermount -z -u /ipns

A continuación, reinicie ipfs.

Engadindo un servizo

Por suposto, executar no terminal só é adecuado para probas iniciais. No modo de combate, o daemon debería iniciarse automaticamente ao iniciar o sistema.

En nome de sudo, cree o ficheiro /etc/systemd/system/ipfs.service e escriba nel:

[Unit]
Description=IPFS Daemon
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=simple
ExecStart=/home/USERNAME/work/bin/ipfs daemon --mount
User=USERNAME
Restart=always

[Install]
WantedBy=multi-user.target

USERNAME, por suposto, debe ser substituído polo seu usuario (e quizais o camiño completo ao programa ipfs sexa diferente para vostede (debe especificar o camiño completo)).

Activamos o servizo.

sudo systemctl enable ipfs.service

Comezamos o servizo.

sudo service ipfs start

Comprobación do estado do servizo.

sudo service ipfs status

Para a pureza do experimento, será posible reiniciar o servidor no futuro para comprobar que ipfs se inicia con éxito automaticamente.

Engadindo festas coñecidas por nós

Considere unha situación na que temos nodos IPFS instalados tanto nun servidor externo como localmente. Nun servidor externo, engadimos algún ficheiro e tentamos obtelo a través de IPFS localmente mediante CID. Que vai pasar? Por suposto, o servidor local probablemente non saiba nada do noso servidor externo e simplemente tentará atopar o ficheiro por CID "preguntándolle" a todos os pares IPFS dispoñibles (cos que xa conseguiu "familiarse"). Eses á súa vez preguntarán aos demais. E así sucesivamente, ata que se atope o ficheiro. En realidade, ocorre o mesmo cando tentamos conseguir o ficheiro a través da pasarela oficial ipfs.io. Se tes sorte, o ficheiro atoparase nuns segundos. E se non, non se atopará nin en poucos minutos, o que afecta moito á comodidade do traballo. Pero sabemos onde aparecerá este ficheiro por primeira vez. Entón, por que non lle dicimos inmediatamente ao noso servidor local "Buscar alí primeiro"? Ao parecer, isto pódese facer.

1. Imos ao servidor remoto e buscamos na configuración ~/.ipfs/config

"Identity": {
    "PeerID": "QmeCWX1DD7HnPSuMHZSh6tFuxxxxxxxxxxxxxxxx",

2. Execute o estado de ipfs do servizo sudo e busque entradas de Swarm nel, por exemplo:

Swarm announcing /ip4/ip_вашего_сервера/tcp/4001

3. Engadimos a partir deste o enderezo xeral do formulario "/ip4/ip_your_server/tcp/4001/ipfs/$PeerID".

4. Por motivos de fiabilidade, tentaremos engadir este enderezo aos compañeiros a través da nosa webui local.

IPFS sen dor (pero isto non é exacto)

5. Se todo está ben, abra a configuración local ~ / .ipfs / config, busque "Bootstrap" nel: [...
e engade primeiro o enderezo recibido á matriz.

Reinicie IPFS.

Agora imos engadir o ficheiro ao servidor externo e tentar solicitalo no local. Debería voar rápido.

Pero esta funcionalidade aínda non é estable. Polo que entendo, aínda que especifiquemos o enderezo dun par en Bootstrap, ipfs cambia a lista de conexións activas cos pares durante a operación. En todo caso, a discusión e desexos sobre a posibilidade de concretar festas permanentes está en marcha aquí e parece que suposto engadir algunha funcionalidade a [protexido por correo electrónico]+

A lista de compañeiros actuais pódese ver tanto na webui como no terminal.

ipfs swarm peers

E aquí e alí podes engadir a túa festa manualmente.

ipfs swarm connect "/ip4/ip_вашего_сервера/tcp/4001/ipfs/$PeerID"

Ata que se mellore esta funcionalidade, podes escribir unha ferramenta para comprobar a conexión co peer desexado e, se non, engadir unha conexión.

Razoamento

Entre os que xa están familiarizados co IPFS, hai tanto argumentos a favor como en contra. Basicamente, onte discusión e pediume que volvese a buscar en IPFS. E no que respecta á discusión mencionada anteriormente: non podo dicir que me opoña firmemente a calquera argumento dos que falaron (só non estou de acordo co feito de que un programador e medio use IPFS). En xeral, ambos teñen razón á súa maneira (especialmente comentario sobre cheques fai pensar). Pero se descartamos a valoración moral e legal, quen fará unha valoración técnica desta tecnoloxía? Persoalmente, teño unha especie de sensación interior de que "isto hai que facelo de forma inequívoca, ten certas perspectivas". Pero por que exactamente, non hai unha formulación clara. Como, se observas as ferramentas centralizadas existentes, en moitos aspectos están moi por diante (estabilidade, velocidade, manexabilidade, etc.). Non obstante, teño un pensamento que parece ter sentido e que dificilmente se pode implementar sen estes sistemas descentralizados. Por suposto, estou a balancear demasiado, pero formularíao así: hai que cambiar o principio de difusión da información en Internet.

Déixame explicar. Se o pensas ben, agora temos información distribuída segundo o principio "Espero que aquel a quen llo entreguei a protexa e non a perda nin a reciba aqueles a quen non estaba destinada". Como exemplo, é fácil considerar varios servizos de correo, almacenamentos na nube, etc. E con que acabamos? No hub de Habré Seguridade da información está en primeira liña e case todos os días recibimos noticias sobre outra filtración global. En principio, todas as cousas máis interesantes están listadas en <ironía> marabillosa artigo Xa case remata o verán. Case non quedan datos sen filtrar. É dicir, os principais xigantes de Internet son cada vez máis grandes, acumulan cada vez máis información e tales filtracións son unha especie de explosións atómicas de información. Isto nunca ocorreu antes, e aquí está de novo. Ao mesmo tempo, aínda que moitos entenden que hai riscos, seguirán confiando os seus datos a empresas alleas. En primeiro lugar, non hai moita alternativa e, en segundo lugar, prometen que remendaron todos os buratos e que isto nunca volverá pasar.

Que opción vexo? Paréceme que inicialmente os datos deberían distribuírse abertamente. Pero a apertura neste caso non significa que todo deba ser fácil de ler. Falo da apertura de almacenamento e distribución, pero non da apertura total na lectura. Supoño que esa información debería ser distribuída con chaves públicas. Despois de todo, o principio das claves públicas/privadas xa é antigo, case como Internet. Se a información non é confidencial e está destinada a un círculo amplo, entón está disposta inmediatamente cunha clave pública (pero aínda en forma cifrada, calquera pode descifrala coa clave dispoñible). E se non, entón está disposta sen unha chave pública, e a chave en si transfírese a quen debería ter acceso a esta información. Ao mesmo tempo, quen debería lelo só debería ter unha chave, e onde obter esta información, realmente non debería dispararse: só sácaa da rede (este é o novo principio de distribución por contido, non por contido). enderezo).

Así, para un ataque masivo, os atacantes terán que obter un gran número de claves privadas, e é improbable que isto se faga nun só lugar. Esta tarefa, segundo a vexo, é máis difícil que piratear un servizo en particular.

E aquí péchase outro problema: a confirmación da autoría. Agora en Internet podes atopar moitas citas escritas polos nosos amigos. Pero onde está a garantía de que foron eles os que as escribiron? Agora ben, se cada rexistro estivese acompañado dunha sinatura dixital, sería moito máis sinxelo. E non importa onde estea esta información, o principal é a sinatura, que, por suposto, é difícil de falsificar.

E aquí está o interesante: IPFS xa leva ferramentas de cifrado (despois de todo, está construído na tecnoloxía blockchain). A clave privada especifícase inmediatamente na configuración.

  "Identity": {
    "PeerID": "QmeCWX1DD7HnPSuMHZSh6tFuMxxxxxxxxxxxxxx",
    "PrivKey": "CAASqAkwggSkAgEAAoIBAQClZedVmj8JkPvT92sGrNIQmofVF3ne8xSWZIGqkm+t9IHNN+/NDI51jA0MRzpBviM3o/c/Nuz30wo95vWToNyWzJlyAISXnUHxnVhvpeJAbaeggQRcFxO9ujO9DH61aqgN1m+JoEplHjtc4KS5
pUEDqamve+xAJO8BWt/LgeRKA70JN4hlsRSghRqNFFwjeuBkT1kB6tZsG3YmvAXJ0o2uye+y+7LMS7jKpwJNJBiFAa/Kuyu3W6PrdOe7SqrXfjOLHQ0uX1oYfcqFIKQsBNj/Fb+GJMiciJUZaAjgHoaZrrf2b/Eii3z0i+QIVG7OypXT3Z9JUS60
KKLfjtJ0nVLjAgMBAAECggEAZqSR5sbdffNSxN2TtsXDa3hq+WwjPp/908M10QQleH/3mcKv98FmGz65zjfZyHjV5C7GPp24e6elgHr3RhGbM55vT5dQscJu7SGng0of2bnzQCEw8nGD18dZWmYJsE4rUsMT3wXxhUU4s8/Zijgq27oLyxKNr9T7
2gxqPCI06VTfMiCL1wBBUP1wHdFmD/YLJwOjV/sVzbsl9HxqzgzlDtfMn/bJodcURFI1sf1e6WO+MyTc3.................

Non son un especialista en seguridade e non sei exactamente como usalo correctamente, pero paréceme que estas chaves úsanse a nivel de intercambio entre nodos IPFS. E tamén js-ipfs e proxectos de exemplo como órbita-dbsobre o que traballa órbita.chat. É dicir, teoricamente, cada dispositivo (móbil e non só) pode equiparse facilmente coas súas propias máquinas de cifrado-descifrado. Neste caso, só queda que todos se encarguen de gardar as súas claves privadas, e cada un será responsable da súa propia seguridade e non será refén doutro factor humano nalgún xigante súper popular de Internet.

Só os usuarios rexistrados poden participar na enquisa. Rexístrate, por favor.

Xa escoitaches falar de IPFS antes?

  • Nunca oín falar de IPFS, pero paréceme interesante

  • Non escoitei e non quero escoitar

  • Escoitado pero non interesado

  • Oín, pero non entendín, pero agora parece interesante

  • Estiven usando IPFS activamente durante moito tempo.

Votaron 69 usuarios. 13 usuarios abstivéronse.

Fonte: www.habr.com

Engadir un comentario