design
This commit is contained in:
parent
78e9d62c65
commit
2de27751d6
3 changed files with 131 additions and 0 deletions
|
@ -0,0 +1,38 @@
|
||||||
|
[[!comment format=mdwn
|
||||||
|
username="joey"
|
||||||
|
subject="""comment 10"""
|
||||||
|
date="2025-07-07T17:29:16Z"
|
||||||
|
content="""
|
||||||
|
I had suggested using the remote's configuration to determine the socket
|
||||||
|
that remotedaemon listens on.
|
||||||
|
|
||||||
|
> Eg, a remote with uuid U could use .git/annex/p2p/U as its socket file.
|
||||||
|
|
||||||
|
But it may be that only incoming connections are wanted to be served,
|
||||||
|
without having any remotes configured that use a P2P network. (And there
|
||||||
|
could be multiple remotes that use the same P2P network.)
|
||||||
|
|
||||||
|
Instead, I think that remotedaemon should use socket files in the form
|
||||||
|
`.git/annex/p2p/$address`, for each P2P address that loadP2PAddresses
|
||||||
|
returns (except tor ones).
|
||||||
|
|
||||||
|
There could be a `git-annex p2p --enable` command, which is passed
|
||||||
|
the P2P address to enable. Eg:
|
||||||
|
|
||||||
|
git-annex p2p --enable p2p-annex::yggstack+somepubkey.pk.ygg
|
||||||
|
|
||||||
|
That is similar to `git-annex enable-tor` in that it would run
|
||||||
|
`storeP2PAddress`. And so configure remotedaemon to listen on the socket
|
||||||
|
file for that address.
|
||||||
|
|
||||||
|
It could also generate an AuthToken and output a version of the address
|
||||||
|
with the AuthToken included, similar to `git-annex p2p --gen-addresses`.
|
||||||
|
|
||||||
|
That would let its output be communicated to the remote users, who can feed
|
||||||
|
it into `git-annex p2p --link`. For that matter, I think that `git-annex
|
||||||
|
p2p --pair` would also work.
|
||||||
|
|
||||||
|
The address passed to `git-annex p2p --enable` could be anything,
|
||||||
|
but using a p2p-annex::foo address makes a `git-annex-p2p-foo` command be
|
||||||
|
used when connecting to the address.
|
||||||
|
"""]]
|
|
@ -0,0 +1,69 @@
|
||||||
|
[[!comment format=mdwn
|
||||||
|
username="joey"
|
||||||
|
subject="""AuthTokens"""
|
||||||
|
date="2025-07-07T14:54:36Z"
|
||||||
|
content="""
|
||||||
|
I wrote:
|
||||||
|
|
||||||
|
> If the P2P protocol's AUTH is provided with an AuthToken, there would
|
||||||
|
> need to be an interface to record the one to use for a given p2p
|
||||||
|
> connection.
|
||||||
|
|
||||||
|
But, as implemented `git-annex remotedaemon` will accept
|
||||||
|
any of the authtokens in its list for any p2p connection. So if there are
|
||||||
|
2 onion services for the same repository for some reason, there will be 2
|
||||||
|
authtokens, but either can be used with either.
|
||||||
|
|
||||||
|
If there are 2 P2P connections and you decide to stop listening to one of
|
||||||
|
them, it does mean that authtoken needs to be removed from the list,
|
||||||
|
otherwise someone could still use it with the other P2P connection. If we
|
||||||
|
think about 2 different P2P protocols, one might turn out to be insecure,
|
||||||
|
so you stop using it. But then if the insecurity allowed someone else to
|
||||||
|
observe the authtoken that was used with it, and you didn't remove it from
|
||||||
|
the list, they could use that to connect via the other P2P service.
|
||||||
|
|
||||||
|
And the user does not know about authtokens, they're an implementation
|
||||||
|
detail currently. So expecting the user to remove them from the list isn't
|
||||||
|
really sufficient.
|
||||||
|
|
||||||
|
So it seems better for each P2P address to have its own unique authtoken,
|
||||||
|
that is not accepted for any other address. Or at least each P2P address
|
||||||
|
that needs an authtoken; perhaps some don't. (I don't think it's a problem
|
||||||
|
that for tor each hidden service accepts all listed authtokens though.)
|
||||||
|
|
||||||
|
@matrrs wrote:
|
||||||
|
|
||||||
|
> A configuration option annex.start-p2psocket=true would instruct
|
||||||
|
> remotedaemon to listen on .git/annex/p2psocket (I think a hardcoded
|
||||||
|
> location is fine, as there only really needs to be one such socket even
|
||||||
|
> with multiple networks
|
||||||
|
|
||||||
|
That single socket wouldn't work if each P2P address has its own unique
|
||||||
|
authtoken. Because remotedaemon would have no way to know what P2P address
|
||||||
|
that socket was connected with.
|
||||||
|
|
||||||
|
It also could be that some P2P protocol is 100% certain not to need an
|
||||||
|
authtoken for security. That would need a separate socket where
|
||||||
|
remotedaemon does not require AUTH with a valid authtoken. Or, setting up
|
||||||
|
a P2P connection for such a network would need to exchange authtokens, even
|
||||||
|
though there is no security benefit in doing so.
|
||||||
|
|
||||||
|
I don't know if I would want to make the determination of whether or not
|
||||||
|
some P2P protocol needs an authtoken or not. It may be that the security
|
||||||
|
situation of a P2P protocol evolves over time.
|
||||||
|
Consider the case of tor, where it used to be fairly trivially possible to
|
||||||
|
enumerate onion addresses. See for example
|
||||||
|
[this paper](https://pure.port.ac.uk/ws/files/11523722/paper.pdf).
|
||||||
|
(Which is why I made tor use AuthTokens in the first place IIRC.)
|
||||||
|
Apparently changes were later made to tor to prevent that. I don't know
|
||||||
|
how secure it is considered to be in this area now though.
|
||||||
|
|
||||||
|
If `git-annex p2p` is used to set up the P2P connection, it handles
|
||||||
|
generating the authtokens and exchanging them, fairly transparently to the
|
||||||
|
user. So maybe it would be simplest to always require authtokens.
|
||||||
|
|
||||||
|
There is another reason for the authtoken: The socket file may be
|
||||||
|
accessible by other users of the system. This is the case with the tor
|
||||||
|
socket, since tor runs as another user, and so the socket file is made
|
||||||
|
world writable.
|
||||||
|
"""]]
|
|
@ -0,0 +1,24 @@
|
||||||
|
[[!comment format=mdwn
|
||||||
|
username="joey"
|
||||||
|
subject="""comment 9"""
|
||||||
|
date="2025-07-07T16:00:45Z"
|
||||||
|
content="""
|
||||||
|
> A configuration option annex.expose-p2p-via=foo that could be supplied
|
||||||
|
> zero, one, or multiple times, and each of these configurations would
|
||||||
|
> instruct remotedaemon to start the external program
|
||||||
|
> git-annex-p2ptransport-foo after the p2p socket is ready
|
||||||
|
|
||||||
|
Hmm, I don't know if it would generally make sense for remotedaemon to
|
||||||
|
start up external programs that run P2P networks. That might be something
|
||||||
|
that runs system-wide, like tor (often) does. Or the user might expect to
|
||||||
|
run it themselves and only have git-annex use it when it's running.
|
||||||
|
|
||||||
|
It seems to me that in your yggstack example, there's no real need
|
||||||
|
for remotedaemon to be responsible for running
|
||||||
|
`git-annex-p2ptransport-yggstack`. You could run that yourself first.
|
||||||
|
Then the remotedaemon can create the socket file and listen to it.
|
||||||
|
|
||||||
|
If a tcp connection comes in before the socket file exists, socat handles
|
||||||
|
it by closing that connection, and keeps listening for further
|
||||||
|
connections.
|
||||||
|
"""]]
|
Loading…
Add table
Add a link
Reference in a new issue